//INITS
var validationFailed = false;
var validationKey = null;
var validatedItems = null;

function validate(formObj){
	// RESETS
	validationFailed = false;
	validationKey = Math.round(Math.random*100+1);
	validatedItems = new Array();
	
	var divs = formObj.getElementsByTagName('div');
	var divcount = divs.length;
	
	for(var i = 0; i < divcount; i++){
		var oid = (divs[i].id) ? String(divs[i].id) : '';
		if((oid.indexOf('_')!==false) && divs[i].className && (divs[i].className.indexOf('validation')!==false)){
			var oid_parts = oid.split('_');
			var isvalidation = (oid_parts[(oid_parts.length-1)]);
			if(isvalidation == 'validation'){
				var iid = oid.replace('_validation', '');
				var input = window.document.getElementById(iid);
				var type = window.document.getElementById(iid+'_type').innerHTML;
				var param = window.document.getElementById(iid+'_param').innerHTML;
				var msg = window.document.getElementById(iid+'_msg').innerHTML;
				
				validation(input, type, param);
			}
		}
	}	
	return (validationFailed) ? false : true;
}

function validation(input, type, param){
	switch(type){
		case 'minlen':
			if(input.value.length < param){
				assignValidationError(input);
			} else {
				removeValidationError(input);
			}
		break;
		case 'email':
			var regex = /^([a-zA-Z0-9_.-])+@((([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})|localhost)+$/;
			if(!regex.test(input.value)) {
				assignValidationError(input);
			} else {
				removeValidationError(input);
			}
		break;
		case 'samevalues':
			var input2 = window.document.getElementById(param);
			if(input.value.toLowerCase() != input2.value.toLowerCase()) {
				assignValidationError(input);
				assignValidationError(input2);
			} else {
				removeValidationError(input);
				removeValidationError(input2);
			}
		break;
		case 'checkboxes':
			var isContainer = false;
			if(typeof(input.type)!='undefined'){
				if(input.type == 'checkbox') isContainer = true;
			}
			var checkedcount = 0;
			if(!isContainer){
				var container = input;
				var inputs = container.getElementsByTagName('input');
				var inputlen = inputs.length;
				for(var i = 0; i < inputlen; i++){
					if(inputs[i].checked == true){
						checkedcount++;
					}
				}
			} else {
				if(input.checked == true) checkedcount++;
			}
			if(checkedcount < param){
				assignValidationError(input);
			} else {
				removeValidationError(input);
			}
		break;
		case 'mindropval':
			var inputvalue = input.options[input.selectedIndex].value;
			if(inputvalue == ''){
				assignValidationError(input);
			} else if((!isNaN(parseInt(param))) && (inputvalue < param)) {
				assignValidationError(input);
			} else {
				removeValidationError(input);
			}
		break;
	}
	return (validationFailed) ? false : true;
}

function assignValidationError(input){
	if(validationFailed==false) input.focus();
	var iid = input.id;
	var vid = iid+'_validation';
	var validationObj = window.document.getElementById(vid);
	if(validationObj) validationObj.style.display = 'block';
	validationFailed = true;
	validatedItems[validationKey+'-'+input.id] = true;
}

function removeValidationError(input){
	if(validatedItems[validationKey+'-'+input.id] == true) return false;
	var iid = input.id;
	var vid = iid+'_validation';
	var validationObj = window.document.getElementById(vid);
	validationObj.style.display = 'none';
}

function inputCounter(total, obj){
	var val = obj.value;
	var len = val.length;
	if(len <= total){
		var objName = obj.name;
		var lenCalcId = objName+'_lenCalc';
		var lenCalc = window.document.getElementById(lenCalcId);
		if(lenCalc){
			var countMax = parseInt(lenCalc.title);
			var countLeft = (countMax - len);
			var isS = (countLeft != 1) ? 's' : '';
			var ihtml = countLeft+' character'+isS+' remaining';
			lenCalc.innerHTML = ihtml;
		}
		return true;
	}
	obj.value = obj.value.substring(0, total); // TEXTAREA SUPPORT
	return false;
}
