
var email_reg_exp = /^([a-z0-9._-]+)@([a-z0-9.-]+)\.([a-z]{2,4})$/i;
var num_reg_exp = /HOWL/;
var required_fields = new Array();
var submit_btn_id = 'submit.jpg'; // default guess
var submit_btn_img = false; // default guess
var _form_name;
var yes_symbol = "";
var no_symbol = "&times;";
var use_images = false;

// MAIN FUNCTION
function checkValidation(obj, type, other_nm){
	var b = true;
	switch(type){
		case "blank":
			b = obj.value != "";
			break;
		case "num":
			var strin = obj.value;
			b = strin.match(/^[\d\s]+$/);
			break;
		case "email":
			b = email_reg_exp.test(obj.value) && obj.value != "";
			if($('conf_email')){onKeyUp($('conf_email'),'email,conf');}
			break;
		case "email,conf":
			b = email_reg_exp.test(obj.value) && obj.value != "" && obj.value == $('email').value;
			break;
		case "chk":
			b = obj.checked;
			break;
		case "sel":
			var selected = obj.getSelected()
			b = (selected[0] && selected[0].value != "");
			if(other_nm){
				if(selected[0].value == other_nm){
					if($('other_'+obj.name).value == ""){
						b = false;
					}
					$('other_div_'+obj.name).setStyle('display','inline');
				}else{
					$('other_div_'+obj.name).setStyle('display','none');
				}
			}
			break;
	}
	return b;
}
// onload functions
function hideSelectionOtherFields(nm_arr){
	for(var i = 0; i<nm_arr.length; i++){
		var info_arr = nm_arr[i].split(";");
		var nm = info_arr[0];
		var other = info_arr[1];
		if($(nm)){
			if($(nm).getSelected()[0].value == other){
				$('other_div_'+nm).setStyle('display','inline');
			}else{
				$('other_div_'+nm).setStyle('display','none');
			}
		}
	}
}

function autoValidate(fields,form_name){
	if($(form_name)){
		var f_arr = fields.split("|");
		for(var i = 0; i<f_arr.length; i++){
			var att_arr = f_arr[i].split(";");
			if(att_arr[1]=="BUTTON"){
				submit_btn_img = (att_arr[2] == "IMG");
				submit_btn_id = att_arr[0];
			}else{
				required_fields[att_arr[0]] = "invalid";
				if(att_arr.length == 2){
					onAuto($(att_arr[0]), att_arr[1]);
				}else{
					onAuto($(att_arr[0]), att_arr[1], att_arr[2]);
				}
			}
		}
		enableButton(allFieldsValid(), submit_btn_id,submit_btn_img);
		_form_name = form_name;
		/*$(form_name).addEvent('submit', function(e) {
			if(!allFieldsValid()){
				e.stop();
			}
		});*/
	}
}
// event functions
function onKeyUp(obj, type, other_nm){
	var b = checkValidation(obj, type, other_nm)
	setIndicator(obj,b)
}
function onBlur(obj, type, other_nm){
	var b = checkValidation(obj, type, other_nm)
	setIndicator(obj,b)
}
function onAuto(obj, type, other_nm){
	if(obj){
		var b = checkValidation(obj, type, other_nm)
		setIndicator(obj,b,true)
	}
}
// processing functions
function enableButton(enable, nm,img){
	if(img){
		if(!disBtnExists(nm)){makeDisBtn($(nm));}
		if(enable){
			$(nm).setStyle('display','inline');
			$(nm+"_dis").setStyle('display','none');
			$("hint_submit").setStyle('display','none');
		}else{
			$(nm).setStyle('display','none');
			$(nm+"_dis").setStyle('display','inline');
			$("hint_submit").setStyle('display','inline');
		}
	}else{/*
		if(enable){
			$('submit').removeProperty('disabled')
		}else{
			$('submit').setProperty('disabled','disabled')
		}*/
	}
}
function onlyAllowNumbers(obj){
	if(!num_reg_exp.test(obj.value)){
		var cursor = obj.selectionStart;
		obj.value = obj.value.substr(0,obj.selectionStart - 1) + obj.value.substr(obj.selectionStart, obj.value.length);
		obj.selectionStart = cursor - 1;
		obj.selectionEnd = cursor - 1;
	}
}
function formate(obj,rex_str){
	var rex_arr = rex_str.split("/");
	var rex = new RegExp(rex_arr[1],rex_arr[2])
	if(!rex.test(obj.value)){
		var cursor = obj.selectionStart;
		obj.value = obj.value.substr(0,doGetCaretPosition(obj) - 1) + obj.value.substr(doGetCaretPosition(obj), obj.value.length);
		obj.selectionStart = cursor - 1;
		obj.selectionEnd = cursor - 1;
	}
	setIndicator(obj,rex.test(obj.value))
}
function removeHint(obj){
	if($(obj).hasClass("with_hint")){
		$(obj).value = "";
		$(obj).toggleClass("with_hint")
	}
}
function doGetCaretPosition (ctrl) {
	var CaretPos = 0;
	// IE Support
	if (document.selection) {
		ctrl.focus ();
		var Sel = document.selection.createRange();
		var SelLength = document.selection.createRange().text.length;
		Sel.moveStart ('character', -ctrl.value.length);
		CaretPos = Sel.text.length - SelLength;
	}else if (ctrl.selectionStart || ctrl.selectionStart == '0')// Firefox support
		CaretPos = ctrl.selectionStart;
	
	return (CaretPos);

}
function allFieldsValid(){
	var valid = true;
	for(var i in required_fields){
		if(required_fields[i] == "invalid"){valid = false;}
	}
	return valid;
}
function setIndicator(obj,valid,auto){
	required_fields[obj.name] = (valid)?"valid":"invalid";
	if(valid && $(obj.name+"_li").hasClass("err") || !valid && !$(obj.name+"_li").hasClass("err")){
		$(obj.name+"_li").toggleClass("err");
	}
	if(!auto){
		if(valid && $(obj.name+"_label").hasClass("err") || !valid && !$(obj.name+"_label").hasClass("err")){
			$(obj.name+"_label").toggleClass("err");
		}
	}else{
		if($(obj.name+"_label").hasClass("err")){
			$(obj.name+"_label").toggleClass("err");
		}
	}
	enableButton(allFieldsValid(), submit_btn_id,submit_btn_img);
}
function disBtnExists(n){
	if(n.lastIndexOf(".") > -1){
		n = n.slice(0,n.lastIndexOf("."));
	}
	var ex = $(n+'_dis');
	return ex;
}
function valAll(){
	var arr = $(_form_name).elements;
	//$('first_name').value = arr;
	var i;
	for(i = 0; i<arr.length;i++){
		arr[i].focus();
	}
	
}
function makeDisBtn(obj){ // replace input type button with image and add a disabled button
		var alt = obj.alt;
		var p = obj.getParent();
		var img_dis =  new Element('img');
	//	var img =  new Element('img');
		var nm = obj.src.slice(0,obj.src.lastIndexOf("."));
		if(nm.lastIndexOf("_hover") > -1){ nm = nm.slice(0,nm.lastIndexOf("_hover"));}
		var ext = obj.src.slice(obj.src.lastIndexOf("."),obj.src.length);
		img_dis.setProperties({
						  alt:alt, 
						  id:obj.name+'_dis',
						  src:nm+"_disabled"+ext
						  });
	//	img_dis.setStyle('cursor','pointer');
		img_dis.addEvent("click",valAll,true);
		//img.setProperties({
	//					  alt:alt, 
	//					  id:obj.name,
	//					  src:nm+ext
	//					  });
		var s = obj.getStyles('margin','padding');
		img_dis.setStyles({margin:s.margin,padding:s.padding});
	//	img.setStyles({margin:s.margin,padding:s.padding,'cursor':'pointer'});
		p.appendChild(img_dis);
	//	p.appendChild(img);
		//obj.dispose();
}
