function format_currency(a)
{
	if (isNaN(parseFloat(a)))
		return "";
	var p = Math.floor(a*100.0+0.5);
	var pp = (p < 0 ? -p : p);
	var c = pp % 100;
	var d = (pp-c) / 100;
	return (p < 0 ? "-" : "" ) + d + "." + (c < 10 ? "0" : "") + c;
}

function getDateString(date,format)
{
	if(format=='mmddyy'){
		return (date.getMonth()+1)+"/"+date.getDate()+"/"+getFullYear(date);
	}
	else if(format=='ddmmyy')
	{
			return date.getDate()+"/"+(date.getMonth()+1)+"/"+getFullYear(date);
	}
}

function format_rate(a,p)
{
	if (isNaN(parseFloat(a)))
	return "";
	var s=(a<0);
	if (s) a=-a;
	var d=Math.floor(a);
	var c=Math.floor((a-d)*(p?10:100)+0.5);
	if (a == d+c/(p?10:100))
	{
		if (c==(p?10:100)) {d++;c=0;}
		var cs=p?c.toString():((c < 10)?"0"+c.toString():c.toString());
		return (s?"-":"")+d.toString()+"."+cs+(p?"%":"");
	}
	else
		return (s?"-":"")+a+(p?"%":"");
}

function getFullYear(d)
{
	if (navigator.appName == "Netscape")
	{
		if (d.getFullYear=="undefined")
		return d.getYear();
	}
	return d.getFullYear();
}

function getmmyydatestring(d)
{
	return ((d.getMonth()+1) < 10 ? "0" : "") + (d.getMonth()+1) + "/" + nlGetFullYear(d);
}


function validate_field(field, type, autoplace)
{
	if (field.value == null || field.value.length == 0)
	{
		window.isvalid = true;
		return true;
	}
	var validflag = true;
	if (type == "currency")
	{
		var val = field.value.replace(/\$/g,"");
		val = val.replace(/,/g,"");
		if (val.charAt(0) == '=')
		{
			val = eval(val.substr(1));
			autoplace = false;
		}

		else if (val.substr(1).search(/[\+\-\*\/]/g) != -1)
		{
			if (new String("abcdefghijklmnopqrstuvwxyz").indexOf(val.toLowerCase().substr(0,0)) != -1)
			{
				value = "error";
			}
			else
			{
				val = eval(val);
				autoplace = false;
			}
		}
		numval = parseFloat(val);
		if (isNaN(numval) || Math.abs(numval)>1.0e+10)
		{
			alert("Invalid currency value. Values must be numbers up to 9,999,999,999.99");
			validflag = false;
		}
		else
		{
			if (autoplace && val.indexOf(".") == -1) numval/=100;
			field.value=format_currency(numval.toString());
			validflag = true;
		}
	}
	else if (type == "date")
	{
		var month;
		var day;
		var year;

		if (field.value.indexOf("/") == -1 && field.value.indexOf(".") == -1 && field.value.indexOf("-") == -1)
		{
			var l = field.value.length;
			month = parseInt(field.value.substr(0,2-l%2),10);
			day = parseInt(field.value.substr(2-l%2,2),10);
			year = parseInt(field.value.substr(4-l%2),10);
		}
		else
		{
			var comps;
			if (field.value.indexOf("/") != -1 ){
				comps = field.value.split("/");
			}else if(field.value.indexOf(".") != -1 ){
				comps = field.value.split(".");
			}else if( field.value.indexOf("-") != -1 ){
				comps = field.value.split("-");
			}


			month = parseInt(comps[0],10);
			day = parseInt(comps[1],10);
			year = parseInt(comps[2],10);

		}
		if (month >= 1 && month <= 12 && day >= 1 && day <=31 && ((year >= 0 && year < 100) || (year > 1900 && year <2100)))
		{
			if (year < 50)
			year += 2000;
			else if (year < 100)
			year += 1900;
			if(year <= 1900 ){
				alert(" The Year Must Be Greater then 1900");
				validflag = false;
			}else{
				field.value = getDateString(new Date(year, month-1, day),'mmddyy');
				validflag = true;
			}
		}
		else
		{
			alert("Invalid date value must be  MM/DD/YY or MM/DD/YYYY");
			validflag = false;
		}
	}
	else if (type == "mmyydate")
	{
		var month;
		var day = 0;
		var year;

		if (field.value.indexOf("/") == -1)
		{
			var l = field.value.length;
			month = parseInt(field.value.substr(0,2-l%2),10);
			year = parseInt(field.value.substr(2-l%2),10);
		}
		else
		{
			var comps = field.value.split("/");
			month = parseInt(comps[0],10);
			if (comps[2] != null)
			{
				day  = parseInt(comps[1],10);
				year = parseInt(comps[2],10);
			}
			else
				year = parseInt(comps[1],10);
		}
		if (month >= 1 && month <= 12 && ((year >= 0 && year < 100) || (year > 1900 && year <2100)))
		{
			if (year < 50)
				year += 2000;
			else if (year < 100)
				year += 1900;
			if (day == 0 || day > 31)
			{
				if (month == 2)
				{
					if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
						day = 29;
					else
						day = 28;
			 	}
				else if (month == 4 || month == 6 || month == 9 || month == 11)
					day = 30;
				else
					day = 31;
			}
			Field.value = getmmyydatestring(new Date(year, month-1, day));
			validflag = true;
		}
		else
		{
			alert("Invalid date value (must be MMYY, MMYYYY, MM/DD/YY, MM/DD/YYYY)");
			validflag = false;
		}
	}
	else if (type == "rate")
	{
		var numval;
		var minclip=-10000000;
		var maxclip=10000000;

		var val = field.value;
		val = val.replace(/,/g,"");
		var pctidx = val.lastIndexOf("%");
		if (pctidx!=-1)
		val = val.substr(0,pctidx);

		numval = parseFloat(val);
		if (isNaN(numval) || numval >= maxclip || numval <= minclip)
		{
			alert("Invalid number or percentage");
			validflag = false;
		}
		else
		{
			field.value = format_rate(numval,pctidx!=-1);
			validflag = true;
		}
	}
	/*
	else if (type == "longitude")
	{
		var val = field.value;
		var re = new RegExp("([0-9]+)");
		if(!  (re.exec(val)!=null && RegExp.$1==val ))
		{
			alert("Invalid number");
			validflag = false;
		}
		else{
			validflag = true;
		}

	}*/
	else if (type == "integer" || type == "posinteger" || type == "float" || type == "posfloat")
	{
		var numval;
		var minclip=-Math.pow(2,32);
		var maxclip=Math.pow(2,64);
		var val = field.value;
		val = val.replace(/,/g,"");

		if (type == "integer")
			numval = parseInt(val,10);
		else if (type == "posinteger")
		{
			numval = parseInt(val,10);
			minclip=0;
		}
		else if (type == "posfloat")
		{
			numval = parseFloat(val);
			minclip=0;
		}
		else
			numval = parseFloat(val);
		if (isNaN(numval) || numval >= maxclip || numval <= minclip)
		{
			if (type=="posinteger" || type=="posfloat")
				alert("Invalid number (must be positive and less than 1.845E19)");
			else if (type=="integer" || type=="float")
				alert("Illegal number: " + numval);
			else
				alert("Invalid number (must be greater than -4.29B");
			validflag = false;
		}
		else
		{
			field.value = numval;
			validflag = true;
		}
	}
	else if (type == "address")
	{
		var err = '';
		if (field.value.length>999)
		{
			err = "Address too long (truncated at 1000 characters)";
			newval = field.value.substr(0,999);
		}
		if (err != '')
		{
			alert(err);
			field.value = newval;
		}
	}
	else if (type == "visiblepassword")
	{
		if (checkpassword(field, field))
			validflag = true;
		else
			validflag = false;
	}
	else if (type == "email")
	{
		if (checkemail(field, true, true))
			validflag = true;
		else
		validflag = false;
	}
	if (!validflag)
	{
		field.focus();
		field.select();
	}
	window.isvalid = validflag;
	return validflag;
}

function checkemail(fld1,emptyok,alrt)
{

	fld1.value = trim(fld1.value);
	return checkemail2(fld1,fld1,emptyok,alrt);
}

function checkemail2(fld1,fld2,emptyok,alrt)
{
		var s_email = fld1.value;

		if (s_email != fld2.value)
		{
			alert('E-mail addresses must match');
			return false;
		}
		if (emptyok && s_email.length==0)
		{
			return true;
		}

	/* 	shortest possible email is a@a.aa ; can't start with @; only one @ allowed ;
	should be min of 4 chars after @, 2 for '.', min of 3 chars before first '.', etc.....
	*/
	if ((s_email.length < 6) ||
		(s_email.indexOf('@',0) < 1) ||
		(s_email.lastIndexOf('@') != s_email.indexOf('@',0)) ||
		(s_email.lastIndexOf('@') > (s_email.length - 5)) ||
		(s_email.lastIndexOf('.') > (s_email.length - 3)) ||
		(s_email.lastIndexOf('.') < (s_email.length - 4)) ||
		(s_email.indexOf('..',0) > -1) ||
		(s_email.indexOf('@.',0) > -1) ||
		(s_email.indexOf('.@',0) > -1) ||
		(s_email.indexOf(',',0) > -1))
	{
		if (alrt)
		{
			alert('Please enter a valid e-mail address.');
			return false;
		}
	}
	return true;
}
function onlydigitsandchars(str)
{
	var re = new RegExp("([A-Za-z0-9]+)");
	return (re.exec(str)!=null && RegExp.$1==str);
}

function checkpassword(fld1,fld2)
{
	var val = fld1.value;
	msg = "";

	if (!onlydigitsandchars(val))
	{
		msg += "Passwords must contain only letters and digits.\n";
	}
	if (fld1.value != fld2.value)
	{
		msg += "Passwords don't match.\n";
	}
	if (val.length < 6)
	{
		msg += "Passwords must be at least 6 characters long.\n";
	}
	reA = new RegExp("[A-Za-z]");

	reD = new RegExp("[0-9]");

	if (msg.length > 0) {
		alert(msg);
		return false;
	} else {
		return true;
	}
}


function  toTitleCase(field)
{
	var cd= field.value;
	var len=cd.length;
	if(len==0)
	{
		return;
	}
	var str="";
    var	count=0;
	for(i=0;i<len;i++)
	{
		var p=cd.charAt(i);
		if((p>=0 && p<=9)||(p>='a' && p<='z')||(p>='A' && p<='Z')||p=='_'||p=='&'||p=='.'||p==' '||p=='-'||p==':'||p==';'||p=='?'||p=='('||p==')'||p=='%'||p=='$'||p=='!'||p==' '||p=='~'||p=='='||p=='/'||p==','||p=='^'||p=='+'||p=='#'||p=='<'||p=='>')
		{
			if(p== ' ') count++;
			else count=0;
			if(!(str=="" && p==' ') && count<2)
				str=str+p;
		}
	}

	var ar1=new Array();
	ar1=str.split(" ");
	for(i=0;i<ar1.length;i++)
	{
		var st=ar1[i].charAt(0);
		var st1=ar1[i].substring(1,ar1[i].length);
		ar1[i]=st+st1;
	}
	str=ar1.join(" ");
	field.value = str;
}

function  toLoginCase(field)
{
	var cd= field.value;
	var len=cd.length;
	if(len==0)
	{
		return;
	}
	var str="";
    var	count=0;
	for(i=0;i<len;i++)
	{
		var p=cd.charAt(i);
		if((p>=0 && p<=9)||(p>='a' && p<='z')||(p>='A' && p<='Z')||p=='_'||p=='-')
		{
			if(p== ' ') count++;
			else count=0;
			if(!(str=="" && p==' ') && count<2)
				str=str+p;
		}
	}

	var ar1=new Array();
	ar1=str.split(" ");
	for(i=0;i<ar1.length;i++)
	{
		var st=ar1[i].charAt(0);
		var st1=ar1[i].substring(1,ar1[i].length);
		ar1[i]=st+st1;
	}
	str=ar1.join('');
	field.value = str;
}

function  toDigits(field)
{
	var cd= field.value;

	//cd = cd.replace(' ','')
	var len=cd.length;
	if(len==0)
	{
		return;
	}

	var str="";
    var	count=0;
	for(i=0;i<len;i++)
	{
		var p=cd.charAt(i);
		if( (p>=0 && p<=9) && p!=' ')
		{
			str=str+p;
		}

	}

	field.value = str;
}

function emailCase(field)
{
	var cd= field.value;
	var len=cd.length;
	if(len==0)
	{
		return;
	}
	var str="";
    var	count=0;
	for(i=0;i<len;i++)
	{
		var p=cd.charAt(i);
		if((p>=0 && p<=9)||(p>='a' && p<='z')||(p>='A' && p<='Z')||p=='_'||p=='@'||p=='.'||p==' '||p=='-')
		{
			if(p== ' ') count++;
			else count=0;
			if(!(str=="" && p==' ') && count<2)
				str=str+p;
		}
	}

	var ar1=new Array();
	ar1=str.split(" ");
	for(i=0;i<ar1.length;i++)
	{
		var st=ar1[i].charAt(0);
		var st1=ar1[i].substring(1,ar1[i].length);
		ar1[i]=st+st1;
	}
	str=ar1.join(" ");
	field.value = str;
}

function trim(str)
{

	var trimmedString = new String(str);

	if ((0 < str.length) && ((str.charCodeAt(0) <= 32) || (str.charCodeAt(str.length-1) <= 32)))
	{
		
		var startSlice = 0;
		var endSlice   = -1;


		for (var i = 0; i < str.length-1; i++)
		{
			if (str.charCodeAt(i) > 32)
			{
				startSlice = i;
				break;
			}
		}
		
		for (var i = str.length-1; startSlice <= i; i--)
		{
			if (str.charCodeAt(i) > 32)
			{
				endSlice = i;
				break;
			}
		}
		
		trimmedString = str.slice(startSlice, endSlice+1);
	}
	return trimmedString;
}

function setcombo(combo,val)
{
	for(var i=0;i<combo.options.length;++i){
		if(combo.options[i].value==val){
			combo.options[i].selected=true;
			return;
		}
	}
}


function CompareDate(field1,field2,datfor){

	var fyear = field1.value;
	var bBook = field2.value;

	var finYear = new Array();
	var begYear = new Array();

	finYear[0]= fyear.substring(0,fyear.indexOf("/",0));
	finYear[1]= fyear.substring( (fyear.indexOf("/",0)+1), fyear.lastIndexOf("/") );
	finYear[2]= fyear.substring( (fyear.lastIndexOf("/")+1) ,fyear.length);

	begYear[0]= bBook.substring(0,bBook.indexOf("/",0));
	begYear[1]= bBook.substring( (bBook.indexOf("/",0)+1), bBook.lastIndexOf("/") );
	begYear[2]= bBook.substring( (bBook.lastIndexOf("/")+1) ,bBook.length);

	if(datfor=='ddmmyy'){
		if(eval(finYear[2]) <= eval(begYear[2]) ){
			if(eval(finYear[2]) == eval(begYear[2]) ){
				if(eval(finYear[1]) == eval(begYear[1])){
					if(eval(finYear[0]) <=eval(begYear[0])){
						return true;
					}else{
						return false;
					}
				}else{
					if(eval(finYear[1]) < eval(begYear[1])){
						return true;
					}else{
						return false;
					}
				}
			}else{
				return true;
			}
		}else{
			return false;
		}
 	}else if(datfor=='mmddyy'){
		if(eval(finYear[2]) <= eval(begYear[2]) ){
			if(eval(finYear[2]) == eval(begYear[2]) ){
				if(eval(finYear[0]) == eval(begYear[0])){
					if(eval(finYear[1]) <= eval(begYear[1])){
						return true;
					}else{
						return false;
					}
				}else{
					if(eval(finYear[0]) < eval(begYear[0])){
						return true;
					}else{
						return false;
					}
				}
			}else{

				return true;
			}
		}else{
			return false;
		}
 	}
 }
 