window.onload = function() {
	object.attachFormHandlers();
}


object = {
	setObject: function(objectName,actionName)
	{
		object.objectName 	= objectName;
		object.actionName 	= actionName;
		object.thisURL 		= 'check_validation.cfm';
		object.thisFORM 	= 'FORM_' + actionName + '_' + objectName;
	},
	
	attachFormHandlers: function()
	{
		//Get fields to validate
		object.form 			= document.getElementById(object.thisFORM);
		object.fieldsToValidate = new Array();
		for(var i=0; i<object.form.elements.length; i++) {
			field 	= object.form.elements[i];
			if (field.id.indexOf('_required_') > -1) object.fieldsToValidate.push(field);		
			if (field.id.indexOf('_optional_') > -1) object.fieldsToValidate.push(field);		
		}
		for(var i=0; i<object.fieldsToValidate.length; i++) {
			object.fieldsToValidate[i].onchange = function() {return object.validateField(this);}			
			object.fieldsToValidate[i].onblur = function() {return object.validateField(this);}			
		}
		//Attach validate function to the form
		//object.form.onsubmit = function(){return object.validate();} //attach validate() to the form
		
		if (object.load_dumpItems) {			
			object.form.onsubmit = function() {				
				document.getElementById('submit').disabled = true;
				object.dumpItems();
				return true;
			}
		}
		
	},
	
	
	validateField: function(input) {
		doCheck = true;
		//Field value
		value = input.value;
		//Get rules
		rules = input.id.split('_');
		//Is it required ?
		required = rules[2];
		//What type of info ?
		typeCheck = rules[3];
		//Feedback node
		if (typeCheck == 'date') {
			if (rules[1] == 'time') { // check only once the date
				feedback = 'ERROR_day';
				Vyear 	= document.getElementById('FIELD_year_required_date').value;
				Vmonth 	= document.getElementById('FIELD_month_required_date').value;
				Vday 	= document.getElementById('FIELD_day_required_date').value;
				Vtime 	= document.getElementById('FIELD_time_required_date').value;
				if (Vyear == '') 	Vyear = '-';
				if (Vmonth == '') 	Vmonth = '-';
				if (Vday == '') 	Vday = '-';
				if (Vtime == '') 	Vtime = ':';
				value 	= Vyear + ';' + Vmonth + ';' + Vday + ';' + Vtime;
			} else 
				doCheck = false;
		} else {
			if (typeCheck == 'date1') {
					doCheck = false;
			} else {
				feedback = 'ERROR_' + rules[1];
			} 
		} 
		if (doCheck) {
			//Clear feedback node
			document.getElementById(feedback).innerHTML = "";
			
			params = "value=" + value + "&required=" + required + "&typeCheck=" + typeCheck;
			req = new Ajax.Request(
				object.thisURL + '?validation=ajax',
				{
					method: 'post',
					parameters: params,
					onSuccess: function(response) {
						document.getElementById(feedback).innerHTML = response.responseText;
					}
				}
			);
		}
	},
	
	validate: function() {
		/*for(var i=0; i<object.fieldsToValidate.length; i++) {
			if (i > 0) params += '&';
			params += 	fieldsToValidate[i].id + '=' + fieldsToValidate[i].value;
		}
		req = new Ajax.Request(
			object.thisURL + '?validation=server&js=enabled',
			{
				method: 'post',
				parameters: params,
				onSuccess: function(response) {
					document.getElementById(feedback).innerHTML = response.responseText;
				}
			}
		);*/
	},
	
	setListItems: function(realFieldName,allFieldName,selFieldName)
	{
		object.list = new Array();
		object.list.realFieldName 	= realFieldName;
		object.list.allFieldName 	= allFieldName;
		object.list.selFieldName 	= selFieldName;
		object.load_dumpItems = true;
	},
	
	checkItemExist: function(selectName,valueToFound) {
		items_check 	= document.getElementById(selectName);
		found = false;
		for (var i = 0; i < items_check.options.length; i++) {
			if (items_check[i].value == valueToFound)  found = true;
		}
		return found;
	},
	
	addItem: function() {
		items 			= document.getElementById(object.list.allFieldName);
		items_selected 	= document.getElementById(object.list.selFieldName);
		// get index of selected options
		var selIndex = new Array();
		for (var i = 0; i < items.options.length; i++) {
			if (items.options[i].selected) selIndex[selIndex.length] = i;
		}
		
		// add items
		for (var i = 0; i < selIndex.length; i++) {
			if (!object.checkItemExist(object.list.selFieldName,items.options[selIndex[i]].value)) {
				var thisItem 		= document.createElement("option");
				thisItem.value 		= items.options[selIndex[i]].value;
				thisItem.text 		= items.options[selIndex[i]].text;
				thisItem.ondblclick = object.removeItem;
				try {
					//standard, doesn't work in IE
					items_selected.add(thisItem,null);
				}
				catch(ex) {
					//IE way
					items_selected.add(thisItem);
				}
			}
		}
		
		// remove elements from the original list
		for (var i = 0; i < selIndex.length; i++) {
			items.remove(selIndex[i]);
		}
	},
	
	removeItem: function() {
		items 			= document.getElementById(object.list.allFieldName);
		items_selected 	= document.getElementById(object.list.selFieldName);
		
		// get index of selected options
		var selIndex = new Array();
		for (var i = 0; i < items_selected.options.length; i++) {
			if (items_selected.options[i].selected) selIndex[selIndex.length] = i;
		}
		
		// insert item
		for (var i = 0; i < selIndex.length; i++) {
			if (!object.checkItemExist(object.list.allFieldName,items_selected.options[selIndex[i]].value)) {
				var thisItem 		= document.createElement("option");
				thisItem.value 		= items_selected.options[selIndex[i]].value;
				thisItem.text 		= items_selected.options[selIndex[i]].text;
				thisItem.ondblclick = object.addItem;
				try {
					//standard, doesn't work in IE
					items.add(thisItem,null);
				}
				catch(ex) {
					//IE way
					items.add(thisItem);
				}
			}
		}
		
		// remove elements from the original list
		for (var i = 0; i < selIndex.length; i++) {
			items_selected.remove(selIndex[i]);
		}
	},

	dumpItems: function() {
		items_selected 	= document.getElementById(object.list.selFieldName);
		items_real 		= document.getElementById(object.list.realFieldName);
		items_real.value = "";
		for(var i=0; i<items_selected.options.length; i++) {
			items_real.value += items_selected.options[i].value + ',';
		}
		items_real.value = items_real.value.substr(0,items_real.value.length-1);
		return true;
	}
	

}