/**
 * @package: System Classes
 * @subpackage: Data validation
 * @version: v.1.1.2, $Id: 2009-09-25 11:47:28
 * @author: Mezahir Efendiyev <cengmezo@sirajans.com>
 * @see: http://www.sirajans.com/kiwi
 */

kiwi_validationForms = new Array();
kiwi_validationParms = new Array();

function j_validation_init () {
	var i, obj, e, id , l = kiwi_validationForms.length;
	for ( i=0; i<l; i++ ) {
		id = kiwi_validationForms[i];
		if ( obj = j_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 ( ! kiwi_validationParms[formID] ) {
		return true;
	}

	var  formObj = document.forms[formID];
	if ( ! formObj ) {
		return true;
	}

	var i, val, t, t2, msg='', l = kiwi_validationParms[formID].length, dv = j_getElement('kiwiTag_draftDiv');

	for ( i=0; i<l; i++ ) {

		val = j_validation_getValue(formObj, kiwi_validationParms[formID][i][0]);

		if ( val == undefined ) {
			continue;
		}

		if(dv){
			dv.innerHTML = kiwi_validationParms[formID][i][9];
			kiwi_validationParms[formID][i][9] = dv.innerHTML;
		}

		if (val=='' || val== false) {

			if ( kiwi_validationParms[formID][i][1] ) {
				msg = j_validation_setError (msg , kiwi_validationParms[formID][i][9], LANG_CLASS_VALIDATION_FIELD_IS_REQIURED, kiwi_validationParms[formID][i][10] );
			}

			continue;
		}

		t = true;

		switch ( kiwi_validationParms[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 , kiwi_validationParms[formID][i][9], t, kiwi_validationParms[formID][i][10] );
			continue;
		}

		kiwi_validationParms[formID][i][6] = parseInt (Math.abs(kiwi_validationParms[formID][i][6]));

		if ( kiwi_validationParms[formID][i][6] ) {
			if ( val.length !== kiwi_validationParms[formID][i][6] ) {
				t = LANG_CLASS_VALIDATION_INVALID_FIX.replace ("[VAL]" , kiwi_validationParms[formID][i][6]);
				msg = j_validation_setError (msg , kiwi_validationParms[formID][i][9], t, kiwi_validationParms[formID][i][10] );
				continue;
			}
		} else {

			kiwi_validationParms[formID][i][4] = parseInt (Math.abs(kiwi_validationParms[formID][i][4]));
			kiwi_validationParms[formID][i][5] = parseInt (Math.abs(kiwi_validationParms[formID][i][5]));

			if ( kiwi_validationParms[formID][i][5] && (kiwi_validationParms[formID][i][5]<kiwi_validationParms[formID][i][4]) ) {
				t = kiwi_validationParms[formID][i][4];
				kiwi_validationParms[formID][i][4] = kiwi_validationParms[formID][i][5];
				kiwi_validationParms[formID][i][5] = t;
			}

			if ( kiwi_validationParms[formID][i][4] && (val.length < kiwi_validationParms[formID][i][4]) ) {
				t = LANG_CLASS_VALIDATION_INVALID_MIN.replace ("[VAL]" , kiwi_validationParms[formID][i][4]);
				msg = j_validation_setError (msg , kiwi_validationParms[formID][i][9], t, kiwi_validationParms[formID][i][10] );
				continue;
			}

			if ( kiwi_validationParms[formID][i][5] && (val.length > kiwi_validationParms[formID][i][5]) ) {
				t = LANG_CLASS_VALIDATION_INVALID_MAX.replace ("[VAL]" , kiwi_validationParms[formID][i][5]);
				msg = j_validation_setError (msg , kiwi_validationParms[formID][i][9], t, kiwi_validationParms[formID][i][10] );
				continue;
			}

			t = kiwi_validationParms[formID][i][7];
			t2 = kiwi_validationParms[formID][i][8];

			switch ( kiwi_validationParms[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 ( kiwi_validationParms[formID][i][7] !== '' ) {
				if ( val < t ) {
					t = LANG_CLASS_VALIDATION_INVALID_INT_LEFT.replace ("[VAL]" , t );
					msg = j_validation_setError (msg , kiwi_validationParms[formID][i][9], t, kiwi_validationParms[formID][i][10] );
					continue;
				}
			}

			if ( kiwi_validationParms[formID][i][8] !== '' ) {
				if ( val > t2 ) {
					t = LANG_CLASS_VALIDATION_INVALID_INT_RIGHT.replace ("[VAL]" , t2 );
					msg = j_validation_setError (msg , kiwi_validationParms[formID][i][9], t, kiwi_validationParms[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[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;
	}
}