/**
 * Form javascript
 * @package WeblogischSysteem
 * @subpackage Scripts
 */

/**
 * WeblogischSysteem wsForm object
 *
 * File:		wsforms.js <br>
 * Type:		Javascript object <br>
 * Name:		wsForm <br>
 * Date:		2007/10/05 <br>
 * Purpose:	Encapsulating all client side form functionallity
 * @author Renze van der Kamp <admin@weblogisch.com>
 * @version 0.1
 * @uses wsToolbox
 */
var wsForm = new function () {
	this.combobox_time; //timeout to show combobox dropbox
	this.combobox_focus = false; //focus on combobox dropbox

	this.upload_last_id = 0;
	this.upload_number_of_fields = 0;
	this.upload_max_fields = 0;
	this.upload_wrapper_id = null;
	this.upload_name = null;
	this.upload_label = null;
	this.upload_size = null;

	/**
	 * selectAll()
	 *
	 * (de)Select all checkbox within a DOM node
	 * @param obj Object Calling checkbox on the page
	 * @param wrapper string Id of the node that wraps the (de)selectable checkboxes
	 */
	this.selectAll = function (obj,wrapper) {
		var element = wsToolbox.getElementById(wrapper);
		var checkBoxes = element.getElementsByTagName('input');
		for (i = 0; i < checkBoxes.length; i++) {
			if(checkBoxes[i].type == 'checkbox'){
				if (obj.checked == true) {
					checkBoxes[i].checked = true; // this checks all the boxes
				} else {
					checkBoxes[i].checked = false; // this unchecks all the boxes
				}
			}
		}
	}

	/**
	 * toggleDescriptions()
	 *
	 * Toggle the display of form field descriptions (nodes width the "description" class)
	 * @param obj Object Calling checkbox on the page
	 * @param wrapper string Id of the node (form) that wraps the descriptions
	 */
	this.toggleDescriptions = function (obj,wrapper) {
		var node = wsToolbox.getElementById(wrapper);
		var descriptions = wsToolbox.getElementsByClass('description',node);
		if(obj.checked){
			var displaystyle = 'block';
			wsToolbox.createCookie('ws_form_descriptions','display',365);
		} else {
			var displaystyle = 'none';
			wsToolbox.createCookie('ws_form_descriptions','hide',365);
		}
		for (i = 0; i < descriptions.length; i++) {
			descriptions[i].style.display = displaystyle;
		}
	}
	/**
	 * enableToggleDescriptions()
	 *
	 * Display the toggle descriptions checkbox
	 */
	this.enableToggleDescriptions = function () {
		var checkboxes = wsToolbox.getElementsByClass('ws_toggle_descriptions',document);
		for (i = 0; i < checkboxes.length; i++) {
			checkboxes[i].style.display = 'block';
		}

		wsForm.hideDescriptions();
	}
	/**
	 * hideDescriptions
	 *
	 * Hide form descriptions if hide descriptions cookie is set.
	 * Preloaded as DOMContentLoaded function if wsOnload
	 * is initialized
	 * @see wsOnloadConstructor
	 */
	this.hideDescriptions = function()
	{
		if (wsToolbox.readCookie('ws_form_descriptions') == 'hide') {
			var forms = document.getElementsByTagName('form');
			for (var i=0;i<forms.length;i++) {
				var divs = forms[i].getElementsByTagName('div');
				for (var j=0;j<divs.length;j++) {
					if (divs[j].className == 'description')
						divs[j].style.display = 'none';
				}
				var labels = wsToolbox.getElementsByClass('ws_toggle_descriptions',forms[i]);
				for (var j=0; j<labels.length;j++) {
					inputs = labels[j].getElementsByTagName('input');
					for (var t=0; t<inputs.length;t++) {
						if (inputs[t].type = 'checkbox') {
							inputs[t].checked = false;
						}
					}
				}
			}
		}
	}
	/**
	 * Javascript for ws_combobox tag
	 */
	/* Show selections */
	this.expandCombobox = function(obj,show)
	{
		clearTimeout(this.combobox_time);
		if (typeof obj == 'string') {
			obj = wsToolbox.getElementById(obj);
		}

		if (typeof obj != 'object') {
			return;
		}

		var dropbox = wsToolbox.getElementById(obj.id+'_select');
		if (typeof dropbox == 'object') {
			if(show){
				if (obj.offsetParent.style.position == '') {
					obj.offsetParent.style.position = 'relative';
				}
				if (dropbox.style.top == '' && dropbox.style.top =='') {
					dropbox.style.position = 'absolute';
					dropbox.style.top = obj.offsetTop+obj.offsetHeight+"px";
					dropbox.style.left = obj.offsetLeft+"px";
					dropbox.style.width = obj.offsetWidth+"px";
				}
				dropbox.style.display = 'block';
				this.combobox_time = setTimeout('wsForm.expandCombobox(\''+obj.id+'\',false)',5000);
			} else {
				if (this.combobox_focus == false) {
					dropbox.style.display = 'none';
					clearTimeout(this.combobox_time);
				}
			}
		}
	}
	/* set combobox focus variable */
	this.setComboboxFocus = function(focus)
	{
		if (focus) {
			this.combobox_focus = true;
		} else {
			this.combobox_focus = false;
		}
	}

	/* set value to selected option */
	this.setComboboxValue = function(obj,id)
	{
		var textbox = wsToolbox.getElementById(id);
		var dropbox = wsToolbox.getElementById(id+"_select");
		if (typeof textbox == 'object')  {
			textbox.value = dropbox.options[dropbox.selectedIndex].value;
			textbox.focus()
			this.setComboboxFocus(false);
			this.expandCombobox(id,false);
		}
	}

	/* set value to selected option */
	this.setRating = function(obj,id,value,good,bad)
	{
		stars = obj.parentNode.getElementsByTagName('img');
		for (i = 0; i < stars.length; i++) {
			if (i < value) {
				stars[i].src = good;
			} else {
				stars[i].src = bad;
			}
		}
		var radio = wsToolbox.getElementById("ws_ratingradios_"+id+"_"+value);
		if (typeof radio == 'object')  {
			radio.checked = true;
		}
	}

	/**
	 * addUpload()
	 *
	 * add an file field for use with uploading to the wrapper
	 */
	this.addUpload = function() {
		var wrapper = wsToolbox.getElementById(this.upload_wrapper_id);

		var id = parseInt(this.upload_last_id)+1;
		this.upload_last_id = id;
		if (this.upload_number_of_fields < this.upload_max_fields) {
			this.upload_number_of_fields++;

			var node = document.createElement('label');
			node.className = 'file';
			node.id = 'ws_upload_'+id;

			html = '<span>'+this.upload_label+'</span>';
			html += '<input name="'+this.upload_name+'[]" type="file" size="'+this.upload_size+'">';
			html += ' <a href="#" class="icon_verwijderen ws_remove_upload" onclick="wsForm.removeUpload(\''+node.id+'\'); return false;">verwijderen</a>';

			node.innerHTML = html;
			wrapper.appendChild(node);
		}

		if (this.upload_number_of_fields == this.upload_max_fields) {
			wrapper.parentNode.removeChild(wsToolbox.getElementById(this.upload_wrapper_id+'_add'));
		}
	}
	/**
	 * removeUpload()
	 *
	 * remove an file field for use with uploading to the wrapper
	 */
	this.removeUpload = function(id) {
		var wrapper = wsToolbox.getElementById(this.upload_wrapper_id);

		if(typeof wrapper == 'object') {
			wrapper.removeChild(wsToolbox.getElementById(id));
			this.upload_number_of_fields--;
		}
		var button = wsToolbox.getElementById(this.upload_wrapper_id+'_add');
		if (button === null) {
			var node = document.createElement('div');
			node.id = this.upload_wrapper_id+'_add';
			node.innerHTML = '<a href="#" class="icon_aanmaken ws_add_upload" onclick="wsForm.addUpload(); return false;">nog een '+this.upload_label.toLowerCase()+' toevoegen</a>';
			/*wrapper.parentNode.insertBefore(node,wrapper.nextSibling);*/
			wrapper.parentNode.appendChild(node);
		}
	}
	/**
	 * addInputbox()
	 *
	 * add an file field for use with uploading to the wrapper
	 */
	this.addInputbox = function() {
		var wrapper = wsToolbox.getElementById(this.inputbox_wrapper_id);

		var id = parseInt(this.inputbox_last_id)+1;
		this.inputbox_last_id = id;
		if (this.inputbox_number_of_fields < this.inputbox_max_fields) {
			this.inputbox_number_of_fields++;

			var node = document.createElement('label');
			node.className = 'text toevoegen';
			node.id = 'ws_inputbox_'+id.toString();

			html = '<span>'+this.inputbox_label+'</span>';
			html += '<input name="'+this.inputbox_name+'[]" type="text">';
			html += ' <a href="#" class="icon_verwijderen ws_remove_inputbox" onclick="wsForm.removeInputbox(\''+node.id.toString()+'\'); return false;">verwijderen</a>';

			node.innerHTML = html;
			wrapper.appendChild(node);

			node.focus();

		}

		if (this.inputbox_number_of_fields == this.inputbox_max_fields) {
			wrapper.parentNode.removeChild(wsToolbox.getElementById(this.inputbox_wrapper_id+'_add'));
		}
	}
	/**
	 * removeInputbox()
	 *
	 * remove an file field for use with uploading to the wrapper
	 */
	this.removeInputbox = function(id) {
		var wrapper = wsToolbox.getElementById(this.inputbox_wrapper_id);

		if(typeof wrapper == 'object') {
			wrapper.removeChild(wsToolbox.getElementById(id));
			this.inputbox_number_of_fields--;
		}
		var button = wsToolbox.getElementById(this.inputbox_wrapper_id+'_add');
		if (button === null) {
			var node = document.createElement('div');
			node.id = this.inputbox_wrapper_id+'_add';
			node.innerHTML = '<a href="#" class="icon_aanmaken ws_add_inputbox" onclick="wsForm.addInputbox(); return false;">nog een '+this.inputbox_label.toLowerCase()+' toevoegen</a>';
			/*wrapper.parentNode.insertBefore(node,wrapper.nextSibling);*/
			wrapper.parentNode.appendChild(node);
		}
	}
	/**
	 * patience()
	 *
	 * Display a "even geduld aub" message block instead of the form
	 */
	this.patience = function(form) {
		wsToolbox.getElementById('ws_'+form+'_content').style.display = 'none';
		wsToolbox.getElementById('ws_'+form+'_patience').style.display = 'block';
	}

	/**
	 * setDateTImeToToday()
	 *
	 * Set datetime field to current date
	 * @param target string Id of target field
	 */
	this.setDateTimeToToday = function(target) {
		var date = new Date();
		var day = wsToolbox.getElementById(target+'-day');
		var month = wsToolbox.getElementById(target+'-month');
		var year = wsToolbox.getElementById(target+'-year');

		if(typeof day == 'object' &&  typeof month == 'object'  && typeof year == 'object') {
			day.value = date.getDate();
			month.value = date.getMonth()+1;
			year.value = date.getFullYear();
		}
	}
	/**
	 * setDateTImeToTomorrow()
	 *
	 * Set datetime field to current date
	 * @param target string Id of target field
	 */
	this.setDateTimeToTomorrow = function(target) {
		var date = new Date();

		date.setDate(date.getDate()+1);
		var day = wsToolbox.getElementById(target+'-day');
		var month = wsToolbox.getElementById(target+'-month');
		var year = wsToolbox.getElementById(target+'-year');

		if(typeof day == 'object' &&  typeof month == 'object'  && typeof year == 'object') {
			day.value = date.getDate();
			month.value = date.getMonth()+1;
			year.value = date.getFullYear();
		}
	}
	/**
	 * trimNumber()
	 *
	 * Clear field if filled with whitespace of equal to zero
	 * @param target string Id of target field
	 */
	this.trimNumber = function(target) {
		if (typeof target == 'object') {
			target.value = String(target.value);
			target.value = target.value.replace(/^[^0-9]+|[^0-9]+$/g,"");
		}
	}
	/**
	 * padNumber()
	 *
	 * Pad number with leading zero's
	 * @param target string Id of target field
	 */
	this.padNumber = function(target,length) {
		this.trimNumber(target);
		var value = String(target.value);
		var value_length = value.length;
		for (value.length; value.length < length; value = '0'+value);
		target.value = value;
	}

}

if (typeof wsOnload == 'object' && typeof wsToolbox == 'object') {
	wsOnload.addDOMLoadEvent(wsForm.enableToggleDescriptions);
}

