// JavaScript Document
var DIA_FORMS_REQUIRED_INPUTS = new Array();
var DIA_FORMS_INPUT_VERIFIERS = new Array();
var DIA_FORMS_COLOR_N = '#FF6C70';
var DIA_FORMS_COLOR_P = '#333333';
//--------------------------------------------------//
// SIMPLE FUNCTIONS
//--------------------------------------------------//
function dia_getInputValue(obj)
{
	try
	{
		switch (obj.type)
		{
			case 'select-one':
				return obj.options[obj.selectedIndex].value;
			case 'checkbox':
				return (obj.checked) ? obj.value : null;
			default:
				return obj.value;
		}		
	}
	catch(e)
	{
		alert(e);
	}
}
//--------------------------------------------------//
// inputDisabler FUNCTIONS
//--------------------------------------------------//
function dia_setInputDisablerTarget(oid_disabler, oid_input)
{
	try {
		var obj_disabler = dia_getElementById(oid_disabler);
	
		var fun_disabler_old = '';
		var fun_disabler = 'try{dia_getElementById(\''+oid_input+'\').disabled = (dia_getElementById(\''+oid_disabler+'\').checked == false);}catch(e){}\n';
			
		if (typeof obj_disabler.onchange == 'function')
		{
			fun_disabler_old = obj_disabler.onchange.toString();
			fun_disabler_old = fun_disabler_old.substring(fun_disabler_old.indexOf("{")+1,fun_disabler_old.lastIndexOf("}") );
		}
	
		obj_disabler.onchange = new Function('event',fun_disabler + fun_disabler_old);

	} catch(e) {
		alert(e);
	}
}
//--------------------------------------------------//
function dia_setInputDisablerParent(oid_disabler)
{
	try {
		if (oid_disabler.lastIndexOf('properties') > 0)
		{
			var oid_parentDisabler = oid_disabler.substring(0,oid_disabler.lastIndexOf('properties'))+'disabler';
			var obj_parentDisabler = dia_getElementById(oid_parentDisabler);
			var fun_parentDisabler_old = '';
			var fun_parentDisabler = 'try{dia_getElementById(\''+oid_disabler+'\').checked = dia_getElementById(\''+oid_parentDisabler+'\').checked;}catch(e){}\n';
				fun_parentDisabler+= 'dia_fireEvent(dia_getElementById(\''+oid_disabler+'\'),\'change\');\n';
				
			if (typeof obj_parentDisabler.onchange == 'function')
			{
				fun_parentDisabler_old = obj_parentDisabler.onchange.toString();
				fun_parentDisabler_old = fun_parentDisabler_old.substring(fun_parentDisabler_old.indexOf("{")+1,fun_parentDisabler_old.lastIndexOf("}") );
			}
			
			obj_parentDisabler.onchange = new Function('event',fun_parentDisabler_old + fun_parentDisabler);
		}
	} catch(e) {
		alert(e);
	}
}
//--------------------------------------------------//
function dia_isKeyCodeAllowed(key)
{
	//ARROWS || backspace || tab || (delete|dot) || F5 || End || Home
	return (key >= 37 && key <= 40 || key == 8 || key == 9 || key == 46 || key == 116 || key == 35 || key == 36);
}
//--------------------------------------------------//
// VALUE VERIFIERS
//--------------------------------------------------//
function dia_Verifier_Integer(id,val)
{
	return (val != '' && val.replace(/^\d*$/,'') == '');
}
//--------------------------------------------------//
function dia_Verifier_Decimal(id,val)
{
	return (val != '' && val.replace(/^\d*(\d\.\d)?\d*$/,'') == '');
}
//--------------------------------------------------//
function dia_Verifier_Date(id,val)
{
	return (val != '' && isDate(val,'yyyy-MM-dd'));
}
//--------------------------------------------------//
function dia_Verifier_Password(id,val)
{
	return (dia_getElementById(id+'_retype').value == val);
}
//--------------------------------------------------//
function dia_Verifier_Email(id,val)
{
	return (val != '' && val.replace(/^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$/,'') == '');
}
//--------------------------------------------------//
// dia_validateInput
// 	* checks if field value is valid
//	* checks if required field is not empty
// 	* sets field label style
//--------------------------------------------------//
function dia_validateInput(ID)
{
	var obj = dia_getElementById(ID);
	var returnValue = true;
	var value = dia_getInputValue(obj);
	
	if (obj.disabled != true)
	{
		if (dia_isDefined(DIA_FORMS_INPUT_VERIFIERS[obj.id]))
		{
			eval('returnValue = '+DIA_FORMS_INPUT_VERIFIERS[obj.id]+'(\''+ID+'\',\''+value+'\');');
		}
		if (dia_isDefined(DIA_FORMS_REQUIRED_INPUTS[obj.id]) && DIA_FORMS_REQUIRED_INPUTS[obj.id] == true)
		{
			returnValue = returnValue && (value !== null && value != '');
		}
	}
	
	if (dia_isDefined(dia_getElementById(ID+'_label')))
	{
		dia_getElementById(ID+'_label').style.color = (returnValue) ? DIA_FORMS_COLOR_P : DIA_FORMS_COLOR_N;
	}
	
	return returnValue;
}
//--------------------------------------------------//
// dia_ApplyFormInputEventListener
//--------------------------------------------------//
function dia_validateForm(e)
{
	if (!e) e = window.event;
	var obj = dia_getEventTarget(e);
		obj = (obj.tagName.toLowerCase() == 'form') ? obj : obj.form;
	var returnValue = true;
	
	dia_getElementById(obj.id+'_submit').disabled = returnValue;
	
	for (var i = 0; i < obj.elements.length; i++)
	{
		if (dia_isDefined(obj.elements[i].id))
		{
			returnValue = dia_validateInput(obj.elements[i].id) && returnValue;
		}
	}
	
	dia_getElementById(obj.id+'_submit').disabled = returnValue;
	
	return dia_setEventReturnValue(e,returnValue);
}
//--------------------------------------------------//
// dia_ApplyFormInputEventListener
//--------------------------------------------------//
function dia_ApplyFormInputEventListener(inputID, inputTYPE, required)
{
	var inputOBJ = dia_getElementById(inputID);

	DIA_FORMS_REQUIRED_INPUTS[inputID] = required;

	switch (inputTYPE)
	{
		case 'integer':
			DIA_FORMS_INPUT_VERIFIERS[inputID] = 'dia_Verifier_Integer';
			inputOBJ.onkeypress = dia_FEH_Integer;
			inputOBJ.onkeyup = dia_FEH_Default;
			inputOBJ.onchange = dia_FEH_Default;
			break;
		case 'decimal':
			DIA_FORMS_INPUT_VERIFIERS[inputID] = 'dia_Verifier_Decimal';
			inputOBJ.onkeypress = dia_FEH_Decimal;
			inputOBJ.onkeyup = dia_FEH_Default;
			inputOBJ.onchange = dia_FEH_Default;
			break;
		case 'date':
			DIA_FORMS_INPUT_VERIFIERS[inputID] = 'dia_Verifier_Date';
			inputOBJ.onkeypress = dia_FEH_Date;
			inputOBJ.onkeyup = dia_FEH_Default;
			inputOBJ.onchange = dia_FEH_Default;
			break;
		case 'email':
			DIA_FORMS_INPUT_VERIFIERS[inputID] = 'dia_Verifier_Email';
			inputOBJ.onkeyup = dia_FEH_Default;
			inputOBJ.onchange = dia_FEH_Default;
			break;
		case 'password':
			DIA_FORMS_INPUT_VERIFIERS[inputID] = 'dia_Verifier_Password';
			break;
		default:
			break;
	}

	if (typeof inputOBJ.form.onsubmit == "function")
	{
		var frmstr = inputOBJ.form.onsubmit.toString();
			frmstr = frmstr.substring( frmstr.indexOf("{")+1 , frmstr.lastIndexOf("}") );
		if (frmstr.indexOf('return dia_validateForm(event);') == -1)
		{
			inputOBJ.form.onsubmit = new Function('event',frmstr+'return dia_validateForm(event);');
		}
	}
	else
	{
		inputOBJ.form.onsubmit = new Function('event','return dia_validateForm(event);');
	}
	
}
//--------------------------------------------------//
// FORM EVENT HANDLERS
//--------------------------------------------------//
function dia_FEH_Default(e)
{
	if (!e) e = window.event;
	var obj = dia_getEventTarget(e);
	var returnValue = true;
	
	if (e.type == 'keyup' || e.type == 'change')
	{
		dia_validateInput(obj.id);
	}
}
//--------------------------------------------------//
function dia_FEH_Integer(e)
{
	if (!e) e = window.event;
	var obj = dia_getEventTarget(e);
	var returnValue = true;
		
	if (e.type == 'keypress')
	{
		var key = (e.keyCode) ? e.keyCode : e.which;
		
		if (dia_isKeyCodeAllowed(key))
			returnValue = true;
		else if (key >=48 && key <= 57) //digits
			returnValue = true;
		else
			returnValue = false;
	}
	
	return dia_setEventReturnValue(e,returnValue);
}
//--------------------------------------------------//
function dia_FEH_Decimal(e)
{
	if (!e) e = window.event;
	var obj = dia_getEventTarget(e);
	var returnValue = true;
		
	if (e.type == 'keypress')
	{
		var key = (e.keyCode) ? e.keyCode : e.which;
		
		if (dia_isKeyCodeAllowed(key))
			returnValue = true;
		else if (key >=48 && key <= 57) //digits
			returnValue = true;
		else
			returnValue = false;
	}		
	
	return dia_setEventReturnValue(e,returnValue);
}
//--------------------------------------------------//
function dia_FEH_Date(e)
{
	if (!e) e = window.event;
	var obj = dia_getEventTarget(e);
	var returnValue = true;
	
	if (e.type == 'keypress')
	{
		var key = (e.keyCode) ? e.keyCode : e.which;

		if (dia_isKeyCodeAllowed(key))
			returnValue = true;
		else if (key >=48 && key <= 57 || key == 45)
			returnValue = true;
		else
			returnValue = false;
	}
	
	return dia_setEventReturnValue(e,returnValue);
}
//--------------------------------------------------//
// VALUE SELECTOR EVENT HANDLER
//--------------------------------------------------//
function dia_valueSelectorEventHandler(e)
{
	if (!e) e = window.event;
	var obj = dia_getEventTarget(e);
	var returnValue = true;
		
	if (e.type == 'change')
	{
		var oid_prefix = obj.id.substring(0,obj.id.lastIndexOf('selector'));

		dia_getElementById(oid_prefix+'id_class').value = obj.options[obj.selectedIndex].value.split('_')[0];
		dia_getElementById(oid_prefix+'id_object').value = obj.options[obj.selectedIndex].value.split('_')[1];
		dia_getElementById(oid_prefix+'disabler').checked = (obj.options[obj.selectedIndex].value.split('_')[1] == -1);
		dia_fireEvent(dia_getElementById(oid_prefix+'disabler'),'change');
		dia_getElementById(oid_prefix+'disabler').checked = true;
		dia_getElementById(oid_prefix+'id_class').disabled = false;
		dia_getElementById(oid_prefix+'id_object').disabled = false;
		dia_getElementById(oid_prefix+'selector').disabled = false;
	}
}