var vldString = "<span id='##validated##' style='color:red;font-weight:normal;font-family:tahoma, verdana, arial;font-size:11px;'>*</span>";
var vldPageInValid = true;
var vldEnableHighLight = false;

function InitializeValidationFormat() {
	var allObj = document.getElementsByTagName("input");
	var isRequired, isEmail, isMoney, isNumeric, allCaps;	
	
	for(i=0;i<allObj.length;i++) {
		
		if((typeof(allObj[i].value)=="string")&&((allObj[i].type=="text")||(allObj[i].type=="password"))) {
			isRequired=false;
			isEmail=false;
			isMoney=false;
			isNumeric=false;
			allCaps=false;
			
			if(allObj[i].attributes["isRequired"]) {
				if(allObj[i].attributes["isRequired"].value=="true") {
					isRequired=true;
				}
			}
			
			if(allObj[i].attributes["capitalized"]) {
				if(allObj[i].attributes["capitalized"].value=="true") {
					allCaps=true;
				}
			}
			
			if(allObj[i].attributes["DataFormat"]) {
				var DataFormat = allObj[i].attributes["DataFormat"].value.toLowerCase();
				switch(DataFormat){
					case "email":
						isEmail=true;
						break;
					case "money":
						isMoney=true;
						break;
					case "number":
						isNumeric=true;
						break;					
				}
			}
			
			allObj[i].validator1=isRequired;
			allObj[i].validator2=isEmail;
			allObj[i].validator3=isMoney;
			allObj[i].validator4=isNumeric;
			allObj[i].validator5=allCaps;
			
			if(isMoney) {
				allObj[i].style.textAlign="right";
			}
			
			if(allObj[i].onfocus) allObj[i].prevOnFocus = allObj[i].onfocus;
			allObj[i].onfocus = function() {
				this.select();
				if(this.prevOnFocus) this.prevOnFocus();
			}	
			
			if(allObj[i].onkeypress) allObj[i].prevOnKeypress = allObj[i].onkeypress;
			allObj[i].onkeypress = function(e) {				
				if(this.validator3) return AcceptMoney(e);				
				if(this.validator4) return NumericOnly(e);				
				if(this.prevOnKeypress) this.prevOnKeypress(e);
			}
			
			if(allObj[i].onkeyup) allObj[i].prevOnKeyup = allObj[i].onkeyup;
			allObj[i].onkeyup = function() {
				if(this.validator3) FormatToMoney(this);				
				if(this.validator5) AllCaps(this);	
				if(this.prevOnKeyup) this.prevOnKeyup();
			}
	
			if(allObj[i].onblur) allObj[i].prevOnBlur = allObj[i].onblur;
			
			allObj[i].onblur = function() {				
				TrimField(this);
				if(this.validator1) vldPageInValid = IsRequired(this);				
				if(this.validator2) vldPageInValid = IsEmailValid(this);
				if(!vldPageInValid)
					if(this.validator3) CheckMoneyFormat(this);
				if(!vldPageInValid)
					if(this.validator4) vldPageInValid = IsNumericRequired(this);
				
				if(this.prevOnBlur) {
					this.prevOnBlur();
				}				
			}
			
			allObj[i].origBackgroundStyle=allObj[i].style.background;
			allObj[i].origBackgroundColorStyle=allObj[i].style.backgroundColor;			
		}
				
	}
}

function AllCaps(obj) {
	var text =  obj.value;
	obj.value = text.toUpperCase();
}

function IsNumericRequired(obj) {
	var text = Trim(obj.value);
	var number = /^[0-9]*$/
	if(number.test(text)) {		
		return true;
	}
	AttachAsterisk(obj)
	return false;
}

function NumericOnly(e) {
	var keycode;
	if (window.event) { keycode = window.event.keyCode; e = event; }
	else if (e)  keycode = e.which; 
	if(((keycode>47)&&(keycode<58))||(keycode==8)){
		e.returnValue = true;
		return true;
	}
	else {
		e.returnValue = false;
		return false;
	}
}

function TrimField(obj) {
	obj.value=Trim(obj.value);
}

function IsRequired(obj) {
	var text = obj.value;	
	if(text=="") {
		AttachAsterisk(obj)
		return true;
	}
	else {
		RemoveAsterisk(obj);
		return false;
	}
}

function IsEmailValid(obj) {	
	var text = obj.value;	
	if(text!="") {
		var validate = /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
		if(!validate.test(text)) {			
			AttachAsterisk(obj);			
			return false;
		}
		else { 		
			RemoveAsterisk(obj);
			return true;
		}
	}
	else { 		
		RemoveAsterisk(obj);
		return true;
	}
}

function AttachAsterisk(obj) {	
	var putAsterisk = false;
	if(obj.nextSibling) {
		if(typeof(obj.nextSibling.innerHTML) == "undefined") {
			putAsterisk = true;
		}
		else {
			if(obj.nextSibling.innerHTML.toLowerCase().indexOf("##validated##")==-1) {
				putAsterisk = true;
			}
		}		
	}
	else {
		putAsterisk = true;		
	}
	if(putAsterisk) {
		if(vldEnableHighLight) obj.style.background="#FFFFCC";
		var val_lbl = CreateLabel();
		val_lbl.innerHTML = vldString;
		obj.parentNode.insertBefore(val_lbl, obj.nextSibling);
	}
}

function RemoveAsterisk(obj) {	
	if(vldEnableHighLight) {
		if(obj.origBackgroundStyle) obj.style.background = obj.origBackgroundStyle;
		if(obj.origBackgroundColorStyle) obj.style.backgroundColor = obj.origBackgroundColorStyle;
	}	
	if(obj.nextSibling) {
		if(typeof(obj.nextSibling.innerHTML) != "undefined") {
			if(obj.nextSibling.innerHTML.toLowerCase().indexOf("##validated##")>5) {
				obj.nextSibling.innerHTML="";
			}
		}		
	}
}

function AcceptMoney(e) {
	var keycode;
	if (window.event)  keycode = window.event.keyCode; 
	else if (e)  keycode = e.which; 
	if(((keycode>47)&&(keycode<58))||(keycode==46)){
		event.returnValue = true;
		return true;
	}
	else {
		event.returnValue = false;
		return false;
	}
}

function CheckMoneyFormat(obj) {
	var origText = obj.value;
	var text = obj.value.replace(/,/g, "");
	text = text.replace(/\./g, "");
	var number = /^[0-9]*$/
		
	if((!number.test(text))||(parseInt(text)==0)) {
		obj.value = "";
	}
	
	if(origText.indexOf("0")==0) {	
		obj.value=origText.substring(1, origText.length);		
		origText=obj.value;
	}
	
	if(origText.indexOf(",")==0) {
		obj.value=origText.substring(1, origText.length);
		origText=obj.value;
	}	
		
	if(origText.indexOf(".")==origText.length-1) {
		obj.value=origText.substring(0, origText.indexOf("."));
	}
	
}

function FormatToMoney(obj) {
	var value = obj.value;	
	if(value.indexOf(".")==value.length-1) return;
	var numPart = value.split(".");
	var origNo = numPart[0];
	var decNo = "";
	if(numPart.length>1) {
		decNo = numPart[numPart.length-1];
		if(decNo.length>1) {
			obj.value=origNo+"."+decNo.substring(0,2);
			return;
		}
	}	
	var wholeNo = origNo.replace(/,/g, "");
	wholeNo = wholeNo.replace(/\./g, "");
	var arrNo = wholeNo.split("");
	if(arrNo.length > 3) {
		var transformed="";		
		for(i=0;i<arrNo.length;i++) {			
			if(i==(arrNo.length-3)) {
				transformed += ",";
			}			
			else if((i==(arrNo.length-6))&&(origNo.length!=7)) {					
				transformed += ",";
			}
			
			else if((i==(arrNo.length-9))&&(origNo.length!=11)) {					
				transformed += ",";
			}
			
			else if((i==(arrNo.length-12))&&(origNo.length!=15)) {					
				transformed += ",";
			}
			
			else if((i==(arrNo.length-15))&&(origNo.length!=19)) {					
				transformed += ",";
			}
			
			else if((i==(arrNo.length-18))&&(origNo.length!=23)) {					
				transformed += ",";
			}
			
			else if((i==(arrNo.length-21))&&(origNo.length!=27)) {					
				transformed += ",";
			}
			
			else if((i==(arrNo.length-24))&&(origNo.length!=31)) {					
				transformed += ",";
			}			
			transformed += arrNo[i];
		}
		if(decNo!="") {
			decNo = "." + decNo;
		}
		obj.value=transformed+decNo;
	}
}

var val_onload = window.onload;

window.onload = function() {	
	InitializeValidationFormat();
	for(i=0;i<document.forms.length;i++) {
		document.forms[i].prevOnSubmit = document.forms[i].onsubmit;
		document.forms[i].onsubmit = function() {
			var retVal = SubmitForm(this);			
			if(this.prevOnSubmit) retVal1 = this.prevOnSubmit();			
			if(typeof(retVal1)=="boolean") {
				if(!retVal1) return false;
			}						
			return retVal;
		}
	}
	if(val_onload) val_onload();
}

function SubmitForm(obj) {
	return ValidateForm(obj);
}

function ValidateForm(obj) {
	var allObj = obj.getElementsByTagName("input");
	var isRequired, isEmail, isMoney, isNumeric, isCompareFailed;	
	
	vldPageInValid = false;
	var isInvalid1 = false;
	var isInvalid2 = false;
	var isInvalid3 = false;
	var isInvalid4 = false;
	
	var beenFocus = true;
	for(i=0;i<allObj.length;i++) {
		
		if((typeof(allObj[i].value)=="string")&&((allObj[i].type=="text")||(allObj[i].type=="password"))) {
			
			isRequired=false;
			isEmail=false;
			isMoney=false;
			isNumeric=false;
			isCompareFailed = false;
			
			//alert(allObj[i].name + "==" + allObj[i].attributes["isRequired"])
			
			if(allObj[i].attributes["isRequired"]) {
				if(allObj[i].attributes["isRequired"].value=="true") {
					isRequired=true;
				}
				else {
					RemoveAsterisk(allObj[i]);
				}
			}
			
			if(allObj[i].attributes["DataFormat"]) {
				var DataFormat = allObj[i].attributes["DataFormat"].value.toLowerCase();
				switch(DataFormat){
					case "email":
						isEmail=true;
						break;
					case "money":
						isMoney=true;
						break;
					case "number":
						isNumeric=true;
						break;
					default:
						RemoveAsterisk(allObj[i]);
						break;
				}
			}
			
			if(allObj[i].attributes["mustEqualTo"]) {
				var ctrl_n = allObj[i].attributes["mustEqualTo"].value;
				if(GetObj(ctrl_n)) {
					if(allObj[i].value!=GetObj(ctrl_n).value) {
						isCompareFailed=true;
						AttachAsterisk(allObj[i]);
					}
					//else RemoveAsterisk(allObj[i]);
				}
			}
			
			allObj[i].value = Trim(allObj[i].value);
			
			if(isRequired) {
				if(IsRequired(allObj[i])) {
					isInvalid1 = true;	
				}	
			}
			
			if(isEmail) {
				if(!IsEmailValid(allObj[i])) {
					isInvalid2 = true;
				}
			}		
			
			if(isNumeric) {
				if(!IsNumericRequired(allObj[i])) {
					isInvalid3 = true;
				}
			}
			
			if(isCompareFailed) {
				isInvalid4=true;
			}
			
			if(beenFocus) {
				if((isInvalid1)||(isInvalid2)||(isInvalid3)){
					if(allObj[i].focus) {
						allObj[i].focus();
						beenFocus=false;
					}
				}
			}					
				
		}				
	}
	
	var msg = "Validation Summary:" + "\n\n";
	var retVal = true;
	if(isInvalid1) {
		retVal = false;
		vldPageInValid = true;
		msg += "        - There are empty fields that are required.\n";
	}
	if(isInvalid2) {
		retVal = false;
		vldPageInValid = true;
		msg += "        - Verify invalid email format.\n";
	}
	if(isInvalid3) {
		retVal = false;
		vldPageInValid = true;
		msg += "        - There are fields that only requires numeric.\n";
	}	
	if(isInvalid4) {
		retVal = false;
		vldPageInValid = true;
		msg += "        - There are fields that should be equal.\n";
	}
	msg += "\n\n\n                                                   (* required/invalid) ";
	if(!retVal) {
		alert(msg);
	}
	return retVal;
}
