// Data validation

dataValidationForms = new Array();
dataValidationParams = new Array();

function j_validation_init () {
	var i, obj, e, id , l = dataValidationForms.length;
	for ( i=0; i<l; i++ ) {
		id = dataValidationForms[i];
		if ( obj = j_common_getElement(id) ) {
			eval ("var j_validation_init_"+i+" = function () { return j_validation_check('"+id+"') };");	
			eval ("obj.onsubmit = j_validation_init_"+i+";");
		}
	}
}

function j_validation_check (formID) {

	if ( ! dataValidationParams[formID] ) {
		return true;
	}
	
	var  formObj = document.forms[formID];
	if ( ! formObj ) {
		return true;
	}	
	
	var i, val, t, t2, obj, msg='', l = dataValidationParams[formID].length;
	
	for ( i=0; i<l; i++ ) {
		obj = j_common_getElement('tagID_class_validation_encoding');
		obj.innerHTML = dataValidationParams[formID][i][9];
		dataValidationParams[formID][i][9] = obj.innerHTML;
	}
	
	for ( i=0; i<l; i++ ) {
		
		val = j_validation_getValue(formObj, dataValidationParams[formID][i][0]);
		
		if (val=='' || val== false) {
			if ( dataValidationParams[formID][i][1]) {
				msg = j_validation_setError (msg , dataValidationParams[formID][i][9], LANG_CLASS_VALIDATION_FIELD_IS_REQIURED, dataValidationParams[formID][i][10] );
			}
			
			continue;
		}
		

		t = true;
		
		switch ( dataValidationParams[formID][i][2] ) {
			case 'alphaeng'	: t = j_validation_check_alphaeng (val);	break;
			case 'alphanum'	: t = j_validation_check_alphanum (val);	break;
			case 'numeric'	: t = j_validation_check_numeric  (val);	break;
			case 'email'	: t = j_validation_check_email    (val);	break;
		}
		
		if ( t!== true ) {
			msg = j_validation_setError (msg , dataValidationParams[formID][i][9], t, dataValidationParams[formID][i][10] );
			continue;
		}
		
		dataValidationParams[formID][i][6] = parseInt (Math.abs(dataValidationParams[formID][i][6]));
		
		if ( dataValidationParams[formID][i][6] ) {
			if ( val.length !== dataValidationParams[formID][i][6] ) {
				t = LANG_CLASS_VALIDATION_INVALID_FIX.replace ("[VAL]" , dataValidationParams[formID][i][6]);
				msg = j_validation_setError (msg , dataValidationParams[formID][i][9], t, dataValidationParams[formID][i][10] );
				continue;
			}
		} else {
			
			dataValidationParams[formID][i][4] = parseInt (Math.abs(dataValidationParams[formID][i][4]));
			dataValidationParams[formID][i][5] = parseInt (Math.abs(dataValidationParams[formID][i][5]));
			
			if ( dataValidationParams[formID][i][5] && (dataValidationParams[formID][i][5]<dataValidationParams[formID][i][4]) ) {
				t = dataValidationParams[formID][i][4];
				dataValidationParams[formID][i][4] = dataValidationParams[formID][i][5];
				dataValidationParams[formID][i][5] = t;
			}
			
			if ( dataValidationParams[formID][i][4] && (val.length < dataValidationParams[formID][i][4]) ) {
				t = LANG_CLASS_VALIDATION_INVALID_MIN.replace ("[VAL]" , dataValidationParams[formID][i][4]);
				msg = j_validation_setError (msg , dataValidationParams[formID][i][9], t, dataValidationParams[formID][i][10] );
				continue;
			}
			
			if ( dataValidationParams[formID][i][5] && (val.length > dataValidationParams[formID][i][5]) ) {
				t = LANG_CLASS_VALIDATION_INVALID_MAX.replace ("[VAL]" , dataValidationParams[formID][i][5]);
				msg = j_validation_setError (msg , dataValidationParams[formID][i][9], t, dataValidationParams[formID][i][10] );
				continue;
			}
			
			t = dataValidationParams[formID][i][7];
			t2 = dataValidationParams[formID][i][8];
			
			switch ( dataValidationParams[formID][i][3] ) {
				
				case 'int'		: val = parseInt (val);
								  t = parseInt (t);
								  t2 = parseInt (t2);
								  break;
				case 'float'	: val = parseFloat (val);
								  t = parseFloat (t);
								  t2 = parseFloat (t2);
								  break;
			}
			
			if ( dataValidationParams[formID][i][7] !== '' ) {
				if ( val < t ) {
					t = LANG_CLASS_VALIDATION_INVALID_INT_LEFT.replace ("[VAL]" , t );
					msg = j_validation_setError (msg , dataValidationParams[formID][i][9], t, dataValidationParams[formID][i][10] );
					continue;
				}
			}
			
			if ( dataValidationParams[formID][i][8] !== '' ) {
				if ( val > t2 ) {
					t = LANG_CLASS_VALIDATION_INVALID_INT_RIGHT.replace ("[VAL]" , t2 );
					msg = j_validation_setError (msg , dataValidationParams[formID][i][9], t, dataValidationParams[formID][i][10] );
					continue;
				}
			}
		}
	}
	if ( msg ) {
		alert (LANG_CLASS_VALIDATION_MESSAGE_HEADER+"\n\n"+msg);
		return false;
	}
	return true;
}

function j_validation_setError (msg , needleName, strMsg, usrMsg ) {
	
	if ( msg ) {
		msg += "\n";
	}
	
	var m = strMsg;
	if ( usrMsg ) {
		m = usrMsg;
	}
	m = m.replace ("[NAME]" , needleName);
	msg += "- "+ m;
	return msg;
}

function j_validation_getValue (formObj, tagID) {
	eval ( "var obj = formObj."+tagID+";");
	if ( ! obj ) {
		return false;
	}
	
	if ( obj.multiple && obj.length) {
		var i, l = obj.length;
		for ( i=0; i < l; i++ ) {
			if ( obj.options[i].selected ) {
				return obj.options[i].value;
			}
		}		
			
	} else if ( obj[0] && (obj[0].type == "radio" ) ) {
		var i, l = obj.length;
		for ( i=0; i<l; i++ ) {
			if ( obj[i].checked ) {
				return (obj[i].value)
			}	
		}
		return false;
	} else {
		
		if ( obj.type && (obj.type == "checkbox" ) ) {
			if ( obj.checked ) {
				return obj.value;
			} else {
				return false;
			}
		} else {
			return obj.value;
		}		
	}
}

function j_validation_check_alphaeng (val) {
	var r = /[^a-z]/i;
	if ( r.test(val) ) {
		return LANG_CLASS_VALIDATION_INVALID_ALPHAENG;
	} else {
		return true;
	}
}

function j_validation_check_alphanum (val) {
	var r = /[^a-z\d]/i;
	if ( r.test(val) ) {
		return LANG_CLASS_VALIDATION_INVALID_ALNUMENG;
	} else {
		return true;
	}
}

function j_validation_check_numeric (val) {
	var r = /[^\d]/i;
	if ( r.test(val) ) {
		return LANG_CLASS_VALIDATION_INVALID_NUMERIC;
	} else {
		return true;
	}
}

function j_validation_check_email (val) {
	
	var r  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;	
	if ( r.test(val) ) {
		return true;
	} else {
		return LANG_CLASS_VALIDATION_INVALID_EMAIL;
	}	
}
