//*********************************
//* Validation JavaScript Library *
//*********************************
var g_bIE = (document.all)?true:false;
var g_bNS = (document.layers)?true:false;

function setFocus(){
	for(var j=0;j<document.forms.length;j++){
		var form=document.forms[j];
		for(var i=0;i<form.elements.length;i++){
			var e=form.elements[i];
			if(e.type=="text"){e.select();e.focus();return;}
		}
	}
}

function trim(sInput){
	sInput=sInput.replace(/^\s+/,"");
	sInput=sInput.replace(/\s+$/,"");
	sInput=sInput.replace(/\"/g,"'");
	return sInput;
}

function trimForm(form){
	for(var i=0;i<form.elements.length;i++){
		var e=form.elements[i];
		if(e.type=="text"){e.value=trim(e.value);}
	}
}

function isEmpty(sInput){
	if(sInput==null||sInput==""){return true;}
	return false;
}

function isEmail(sInput){
	var iEmail1=sInput.indexOf("@");
	var iEmail2=sInput.lastIndexOf("@");
	if(iEmail1==-1){return false;}
	if(iEmail1!=iEmail2){return false;}
	if(sInput.search(" ")!=-1){return false;}
	var sTail=sInput.substring(iEmail1+1);
	if(sTail.search(/\./)==-1){return false;}
	return true;
}

//valid: alpha-numeric or underscore
//invalid standard: " / \ [ ] : ; | = , + * ? < >
function isValidCode(sInput){
	if(sInput.search("NEW")!=-1){return false;}
	if(sInput.search("EXPIRED")!=-1){return false;}
	if(sInput.search(/\W/)!=-1){return false;}
	return true;
}

function showInvalidCodeMessage(sField){
	var sMsg="Please enter a valid code";
	if(sField){sMsg+=" for "+sField+".\n\n";}
	else{sMsg+=".\n\n";}
	sMsg+="HINT: A valid code uses alpha-numeric or underscore\n";
	sMsg+="character and contains no spaces or any reserved\n";
	sMsg+="words such as NEW, EXPIRED etc.";
	alert(sMsg);
}

function isPosInt(vInput){
	var sInput=vInput.toString();
	for(var i=0;i<sInput.length;i++){
		var cInput=sInput.charAt(i);
		if(cInput<"0"||cInput>"9"){return false;}
	}
	return true;
}

function isInt(vInput){
	var sInput=vInput.toString();
	for(var i=0;i<sInput.length;i++){
		var cInput=sInput.charAt(i);
		if(i==0&&cInput=="-"){continue;}
		if(cInput<"0"||cInput>"9"){return false;}
	}
	return true;
}

function isNum(vInput){
	if(isNaN(parseFloat(vInput))){return false;}
	return true;
}

function isPosNum(vInput){
	if(isNum(vInput)){
		if(parseFloat(vInput)>=0){return true;}
	}
	return false;
}

//validate positive percentage (0-100%)
function isPercent(sInput){
	var cPercent=sInput.charAt(sInput.length-1);
	var sNum=sInput.substring(0,sInput.length-1);
	if(cPercent=="%"&&isPosNum(sNum)){if(parseInt(sNum)<=100){return true;}}
	return false;
}

//validate positive US$(>$1)
function isMoney(sInput){
	var cMoney=sInput.charAt(0);
	var sNum=sInput.substring(1);
	if(cMoney=="$"&&isPosNum(sNum)&&parseFloat(sNum)>1){return true;}
	return false;
}

function convPercent(sInput){
	var sNum=sInput.substring(0,sInput.length-1);
	return formatNum((parseFloat(sNum)/100)+"",2);
}

function convMoney(sInput){
	return formatNum(sInput.substring(1),2);
}

function formatNum(sInput,iDecimal){
	var iMultiple=Math.pow(10,iDecimal);
	sInput=Math.round(parseFloat(sInput)*iMultiple)+"";
	while(sInput.length<=iDecimal){sInput="0"+sInput;}
	return sInput.substring(0,sInput.length-iDecimal)+"."+sInput.substring(sInput.length-iDecimal);
}

function convPhone(sInput){
	sInput=sInput.replace(/\W/g,"");
	return sInput;
}

function convURL(sInput){
	if(sInput.search(/^http/i)==-1&&sInput.search(/^file/i)==-1&&sInput.search(/^mms/i)==-1){
		sInput="http://"+sInput;
	}
	return sInput;
}

var g_Day, g_Month, g_Year;

function isDate(sInput,vMin,vMax,sType){
	var mm,dd,yyyy;
	if(sInput.length==0){return false;}
	//convert date format
	while(sInput.indexOf("-")!=-1){
		sInput=sInput.replace("-","/");
	}
	var sDelim1=sInput.indexOf("/");
	var sDelim2=sInput.lastIndexOf("/");
	if(sDelim1!=-1 && sDelim1==sDelim2){return false;}
	//get date parts
	if(sDelim1!=-1){
		mm=parseInt(sInput.substring(0,sDelim1),10);
		dd=parseInt(sInput.substring(sDelim1+1,sDelim2),10);
		yyyy=parseInt(sInput.substring(sDelim2+1,sInput.length),10);
	}
	else if(sInput.length==6||sInput.length==8){
		mm=parseInt(sInput.substring(0,2),10);
		dd=parseInt(sInput.substring(2,4),10);
		yyyy=parseInt(sInput.substring(4,sInput.length),10);
	}
	if(isNaN(mm)||isNaN(dd)||isNaN(yyyy)){return false;}
	//check date parts
	if(mm<1||mm>12){return false;}
	if(dd<1||dd>31){return false;}
	if(yyyy<100){
		//if year is 2-digit, allow for 1930-2029
		if(yyyy>=30){yyyy+=1900;}
		else{yyyy+=2000;}
	}
	if(mm==2){
		if(yyyy%4>0&&dd>28){return false;}
		else if(dd>29){return false;}
	}
	else if((mm==4||mm==6||mm==9||mm==11)&&dd>30){return false;}
	//check	date range
	if(sType){
		var dtMin, dtMax, dtInput;
		dtMin=calcDate(vMin,sType);
		dtMax=calcDate(vMax,sType);
		dtInput=new Date(yyyy,mm-1,dd);
		if(dtInput.getTime()<dtMin.getTime()||dtInput.getTime()>dtMax.getTime()){return false;}
	}
	
	g_Day = dd;
	g_Month = mm;
	g_Year = yyyy;
	return true;
}

function calcDate(vDiff,sType){
	var dt;
	var today=new Date();
	switch (sType){
		case "y":
			dt=new Date(today.getFullYear()+vDiff,today.getMonth(),today.getDate());
			break;
		case "m":
			dt=new Date(today.getFullYear(),today.getMonth()+vDiff,today.getDate());
			break;
		case "d":
			dt=new Date(today.getFullYear(),today.getMonth(),today.getDate()+vDiff);
			break;
		default:
			dt=vDiff;
	}
	return dt;
}

function showInvalidDateMessage(vMin,vMax,sType){
	var dtMin, dtMax, sMin, sMax;
	dtMin=calcDate(vMin,sType);
	dtMax=calcDate(vMax,sType);
	sMin = (dtMin.getMonth()+1)+"/"+dtMin.getDate()+"/"+dtMin.getFullYear();
	sMax = (dtMax.getMonth()+1)+"/"+dtMax.getDate()+"/"+dtMax.getFullYear();
	
	var sMsg="Please enter a valid date with an acceptable\nformat.\n\n";
	sMsg+="HINT: A possible range for this date entry\n";
	sMsg+="is between "+sMin+" and "+sMax+". You\n";
	sMsg+="can enter dates in the following formats: \n";
	sMsg+="mmddyyyy, mm/dd/yyyy, or mm-dd-yyyy.";
	alert(sMsg);
}

function FilterDigit(evt){
	//allow digits only
	var iKey=g_bIE?evt.keyCode:evt.which;
	if(iKey>=48&&iKey<=57){return true;}
	return false;
}

function FilterPhone(evt){
	//allow <space>,_,-,(),0-9 only
	var iKey=g_bIE?evt.keyCode:evt.which;
	if(iKey==32||iKey==40||iKey==41||iKey==45||(iKey>=48&&iKey<=57)){return true;}
	return false;
}

function FilterANS(evt){
	//allow alphanumerics,<space> only
	var iKey=g_bIE?evt.keyCode:evt.which;
	if(iKey==32||(iKey>=48&&iKey<=57)||(iKey>=65&&iKey<=90)||(iKey>=97&&iKey<=122)){return true;}
	return false;
}

function FilterRate(evt){
	//allow digits,.,$,% only
	var iKey=g_bIE?evt.keyCode:evt.which;
	if((iKey>=48&&iKey<=57)||iKey==36||iKey==37||iKey==46){return true;}
	return false;
}
