		function UniCheck_VCPrepare(Text)
		{
			if(!Text.length) return("");

			var I,J;
			for(I=0;I<Text.length;I++)
				if(Text.charAt(I)!=" ")
					for(J=Text.length;J>0;J--)
				    	if(Text.charAt(J-1)!=" ")
							return(Text.substring(I,J));
			return("");
		}

		function UniCheck_IFDTPrepare(Text)
		{
			if(!Text.length) return("");

			var Temp="";
			for(var I=0;I<Text.length;I++)
				if(Text.charAt(I)!=" ") Temp+=Text.charAt(I);

			return(Temp);
		}
	function UniCheck_spacesub(Text)
		{
			if(!Text.length) return("");

			var Temp="";
			for(var I=0;I<Text.length;I++)
				if(Text.charAt(I)!=" ") {Temp+=Text.charAt(I)}
else{Temp+='%20'};

			return(Temp);
		}

		function UniCheck_CheckOnMask(Text,Mask)
		{
			if(!Text.length) return(true);

			var N=0;
			for(var I=0;I<Text.length;I++)
				if(Mask.indexOf(Text.charAt(I))!=-1) N++;

			if(N==Text.length) return(true); else return(false);
		}

		function UniCheck_ReplaceOnMask(Text,MaskIn,MaskOut)
		{
			if(!Text.length) return("");

			var Temp="",_Temp;
			for(var I=0;I<Text.length;I++)
			{
				_Temp=MaskIn.indexOf(Text.charAt(I));
				if(_Temp==-1)
					Temp+=Text.charAt(I);
				else
					Temp+=MaskOut.charAt(_Temp);
			}

			return(Temp);
		}

		function UniCheck_MinusTest(Text)
		{
			if(!Text.length) return(true);

			var I=Text.indexOf("-");

			if(I==-1) return(true);
			else
			{
				var J=Text.lastIndexOf("-");
				if(I==0 && J==0) return(true); else return(false);
			}
		}

		function UniCheck_PointTest(Text)
		{
			if(!Text.length) return(true);

			var I=Text.indexOf(".");

			if(I==-1) return(true);
			else
			{
				var J=Text.lastIndexOf(".");
				if(I==J) return(true); else return(false);
			}
		}

		function UniCheck_ZapFirstZero(Text)
		{
			if(!Text.length) return("");

			var I,Mask="123456789.";
			for(I=0;I<Text.length;I++)
				if(Mask.indexOf(Text.charAt(I))!=-1) break;

			if(I==Text.length)
				return("0");
			else if(Text.charAt(I)!="." && Text.charAt(0)!="-")
				return(Text.substring(I,Text.length));
			else if(Text.charAt(I)!="." && Text.charAt(0)=="-")
				return("-"+Text.substring(I,Text.length));
			else if(Text.charAt(I)=="." && Text.charAt(0)!="-")
				return("0"+Text.substring(I,Text.length));
			else if(Text.charAt(I)=="." && Text.charAt(0)=="-")
				return("-0"+Text.substring(I,Text.length));
		}

		function UniCheck_CheckOnDate(Text, Style)
		{

			if(!Text.length) return(true);

			var Temp,I,A,B,C;
			if(Text.indexOf("/")==Text.lastIndexOf("/")) return(false);

			Temp=Text.substring(0,Text.lastIndexOf("/"));
			if(Temp.indexOf("/")!=Temp.lastIndexOf("/")) return(false);

			Temp="";
		        for(I=0;I<Text.length;I++)
				if(Text.charAt(I)!="/") Temp+=Text.charAt(I); else {I++; break;}
			B=parseInt(UniCheck_ZapFirstZero(Temp));

			Temp="";
			for(;I<Text.length;I++)
				if(Text.charAt(I)!="/") Temp+=Text.charAt(I); else {I++; break;}
			A=parseInt(UniCheck_ZapFirstZero(Temp));

			Temp="";
			for(;I<Text.length;I++) Temp+=Text.charAt(I);
			C=parseInt(UniCheck_ZapFirstZero(Temp));

			var dd, mm;
/*
alert("A = " + A + "\n" + 
	  "B = " + B + "\n" + 
	  "C = " + C + "\n")			
*/	  
			if (Style == 4 || Style == 104) {
				dd = B;
				mm = A;
			} else {
				dd = A;
				mm = B;
			}


			if(C<0 || C>99) return(false);

			if(mm<1 || mm>12) return(false);

			if(mm==2) {if(dd<1 || dd>(28+(C%4?0:1))) return(false);}
			else if(mm==4 || mm==6 || mm==9 || mm==11) {if(dd<1 || dd>30) return(false);}
			else {if(dd<1 || dd>31) return(false);}

			return(true);
		}

		function UniCheck_CheckOnTime(Text)
		{
			if(!Text.length) return(true);
			
			var Temp,I,A,B,C;
			if(Text.indexOf(":")==Text.lastIndexOf(":")) return(false);

			Temp=Text.substring(0,Text.lastIndexOf(":"));
			if(Temp.indexOf(":")!=Temp.lastIndexOf(":")) return(false);

			Temp="";
		        for(I=0;I<Text.length;I++)
				if(Text.charAt(I)!=":") Temp+=Text.charAt(I); else {I++; break;}
			B=parseInt(UniCheck_ZapFirstZero(Temp));

			Temp="";
			for(;I<Text.length;I++)
				if(Text.charAt(I)!=":") Temp+=Text.charAt(I); else {I++; break;}
			A=parseInt(UniCheck_ZapFirstZero(Temp));

			Temp="";
			for(;I<Text.length;I++) Temp+=Text.charAt(I);
			C=parseInt(UniCheck_ZapFirstZero(Temp));

			var hh = B, mm = A,	ss = C;
/*
			alert("A = " + A + "\n" + 
				  "B = " + B + "\n" + 
				  "C = " + C + "\n")			
*/

			if(ss<0 || ss>59) return(false);

			if(mm<0 || mm>59) return(false);

			if(hh<0 || hh>23) return(false);

			return(true);
		}

		function UniCheck_CheckOnLongDate(Text, Style)
		{

			if(!Text.length) return(true);

			var Temp,I,A,B,C;
			if(Text.indexOf("/")==Text.lastIndexOf("/")) return(false);

			Temp=Text.substring(0,Text.lastIndexOf("/"));
			if(Temp.indexOf("/")!=Temp.lastIndexOf("/")) return(false);

			Temp="";
		        for(I=0;I<Text.length;I++)
				if(Text.charAt(I)!="/") Temp+=Text.charAt(I); else {I++; break;}
			B=parseInt(UniCheck_ZapFirstZero(Temp));

			Temp="";
			for(;I<Text.length;I++)
				if(Text.charAt(I)!="/") Temp+=Text.charAt(I); else {I++; break;}
			A=parseInt(UniCheck_ZapFirstZero(Temp));

			Temp="";
			for(;I<Text.length;I++) Temp+=Text.charAt(I);
			C=parseInt(UniCheck_ZapFirstZero(Temp));
			
			var dd, mm;

			if (Style == 4 || Style == 104) {
				dd = B;
				mm = A;
			} else {
				dd = A;
				mm = B;
			}
			
			if(C<1000 || C>9999) return(false);
			if(mm<1 || mm>12) return(false);

			if(mm==2) {if(dd<1 || dd>(28+(C%4?0:1))) return(false);}
			else if(mm==4 || mm==6 || mm==9 || mm==11) {if(dd<1 || dd>30) return(false);}
			else {if(dd<1 || dd>31) return(false);}

			return(true);
		}

		function UniCheck_DatePrepare(Text, Style)
		{
			if(!Text.length) return("");

			var Temp,I,A,B,C;

			Temp="";
		        for(I=0;I<Text.length;I++)
				if(Text.charAt(I)!="/") Temp+=Text.charAt(I); else {I++; break;}
			A=String(UniCheck_ZapFirstZero(Temp));

			Temp="";
			for(;I<Text.length;I++)
				if(Text.charAt(I)!="/") Temp+=Text.charAt(I); else {I++; break;}
			B=String(UniCheck_ZapFirstZero(Temp));

			Temp="";
			for(;I<Text.length;I++) Temp+=Text.charAt(I);
			C=String(UniCheck_ZapFirstZero(Temp));

			if(A.length==1) A="0"+A;
			if(B.length==1) B="0"+B;
			if(C.length==1) C="0"+C;

			var ddmm;
			if (Style == 4 || Style == 104)
				ddmm = A+"/"+B+"/"
			else
				ddmm = B+"/"+A+"/"
			
			return(ddmm+C);
		}

		function UniCheck_TimePrepare(Text)
		{
			if(!Text.length) return("");

			var Temp,I,A,B,C;

			Temp="";
		        for(I=0;I<Text.length;I++)
				if(Text.charAt(I)!=":") Temp+=Text.charAt(I); else {I++; break;}
			A=String(UniCheck_ZapFirstZero(Temp));

			Temp="";
			for(;I<Text.length;I++)
				if(Text.charAt(I)!=":") Temp+=Text.charAt(I); else {I++; break;}
			B=String(UniCheck_ZapFirstZero(Temp));

			Temp="";
			for(;I<Text.length;I++) Temp+=Text.charAt(I);
			C=String(UniCheck_ZapFirstZero(Temp));

			if(A.length==1) A="0"+A;
			if(B.length==1) B="0"+B;
			if(C.length==1) C="0"+C;

			return(A+":"+B+":"+C);
		}
/* ###
		function UniCheck_CheckOnDate(Text)
		{
			if(!Text.length) return(true);

			var Temp,I,A,B,C;
			if(Text.indexOf(".")==Text.lastIndexOf(".")) return(false);

			Temp=Text.substring(0,Text.lastIndexOf("."));
			if(Temp.indexOf(".")!=Temp.lastIndexOf(".")) return(false);

			Temp="";
		        for(I=0;I<Text.length;I++)
				if(Text.charAt(I)!=".") Temp+=Text.charAt(I); else {I++; break;}
			A=parseInt(UniCheck_ZapFirstZero(Temp));

			Temp="";
			for(;I<Text.length;I++)
				if(Text.charAt(I)!=".") Temp+=Text.charAt(I); else {I++; break;}
			B=parseInt(UniCheck_ZapFirstZero(Temp));

			Temp="";
			for(;I<Text.length;I++) Temp+=Text.charAt(I);
			C=parseInt(UniCheck_ZapFirstZero(Temp));

			if(C<0 || C>99) return(false);
			if(B<1 || B>12) return(false);

			if(B==2) {if(A<1 || A>(28+(C%4?0:1))) return(false);}
			else if(B==4 || B==6 || B==9 || B==11) {if(A<1 || A>30) return(false);}
			else {if(A<1 || A>31) return(false);}

			return(true);
		}

		function UniCheck_DatePrepare(Text)
		{
			if(!Text.length) return("");

			var Temp,I,A,B,C;

			Temp="";
		        for(I=0;I<Text.length;I++)
				if(Text.charAt(I)!=".") Temp+=Text.charAt(I); else {I++; break;}
			A=String(UniCheck_ZapFirstZero(Temp));

			Temp="";
			for(;I<Text.length;I++)
				if(Text.charAt(I)!=".") Temp+=Text.charAt(I); else {I++; break;}
			B=String(UniCheck_ZapFirstZero(Temp));

			Temp="";
			for(;I<Text.length;I++) Temp+=Text.charAt(I);
			C=String(UniCheck_ZapFirstZero(Temp));

			if(A.length==1) A="0"+A;
			if(B.length==1) B="0"+B;
			if(C.length==1) C="0"+C;

			return(A+"."+B+"."+C);
		}
### */
		function UniCheck(Object,Type,Test,Default,Style)
		{
			if(Test==null) Test=false;

			if(Type=="int")
			{
				Object.value=UniCheck_IFDTPrepare(Object.value);

				if(!UniCheck_CheckOnMask(Object.value,"-0123456789")) return(false);
				if(!UniCheck_MinusTest(Object.value)) return(false);

				Object.value=UniCheck_ZapFirstZero(Object.value);

				if(Test && Object.value=="") return(false);

				if(!Test && Object.value=="")
					if(Default==null) Object.value="0"; else Object.value=Default;

				return(true);
			}
			else

			if(Type=="float")
			{
				Object.value=UniCheck_IFDTPrepare(Object.value);

				if(!UniCheck_CheckOnMask(Object.value,"-0123456789.,")) return(false);
				if(!UniCheck_MinusTest(Object.value)) return(false);

				Object.value=UniCheck_ReplaceOnMask(Object.value,",",".");
				if(!UniCheck_PointTest(Object.value)) return(false);
				Object.value=UniCheck_ZapFirstZero(Object.value);

				if(Test && Object.value=="") return(false);

				if(!Test && Object.value=="")
					if(Default==null) Object.value="0"; else Object.value=Default;

				return(true);
			}
			else

			if(Type=="varchar")
			{
				Object.value=UniCheck_VCPrepare(Object.value);
//				Object.value=UniCheck_ReplaceOnMask(Object.value,"'",'"');

//				Object.value=UniCheck_ReplaceOnMask(Object.value,'"',"`");
//				Object.value=UniCheck_ReplaceOnMask(Object.value,"'",'`');

				if(Test && Object.value=="") return(false);

				if(!Test && Object.value=="")
					if(Default==null) Object.value=""; else Object.value=Default;

				return(true);
			}
			else

			if(Type=="email")
			{
				Object.value=UniCheck_VCPrepare(Object.value);
				Object.value=UniCheck_ReplaceOnMask(Object.value,'"',"`");
				Object.value=UniCheck_ReplaceOnMask(Object.value,"'",'`');

				if(Object.value==""){if(Test) return(false)}
				else {
					return(emailCheck(Object.value));
/*				if(Object.value.indexOf("@")<=0 ||
					Object.value.indexOf(".")<=Object.value.indexOf("@")+1 ||
					Object.value.indexOf(".")==Object.value.length-1
				  ) return(false);
*/				
				}
				if(!Test && Object.value=="")
					if(Default==null) Object.value=""; else Object.value=Default;

				return(true);
			}
			else

			if(Type=="datetime")
			{
				Object.value=UniCheck_IFDTPrepare(Object.value);

				if(!UniCheck_CheckOnMask(Object.value,"0123456789/.,")) return(false);
				Object.value=UniCheck_ReplaceOnMask(Object.value,".,","//");
/* ###
				if(!UniCheck_CheckOnMask(Object.value,"0123456789./")) return(false);
				Object.value=UniCheck_ReplaceOnMask(Object.value,"/",".");
### */
				if(!UniCheck_CheckOnDate(Object.value, Style)) return(false);

				if(Test && Object.value=="") return(false);

				if(!Test && Object.value=="")
					if(Default==null)
					{
						var Temp=new Date();
						
						Object.value=(Temp.getMonth()+1)+"/"+Temp.getDate()+"/"+Temp.getYear();

						delete Temp;
/* ###
						var Temp=new Date();
						Object.value=Temp.getDate()+"."+(Temp.getMonth()+1)+"."+Temp.getYear();
						delete Temp;
### */
					}
					else
						Object.value=Default;

				Object.value=UniCheck_DatePrepare(Object.value, Style);
				return(true);
			}
			if(Type=="longdate")
			{
				Object.value=UniCheck_IFDTPrepare(Object.value);

				if(!UniCheck_CheckOnMask(Object.value,"0123456789/.")) return(false);
				Object.value=UniCheck_ReplaceOnMask(Object.value,".","/");

				if(!UniCheck_CheckOnLongDate(Object.value, Style)) return(false);

				if(Test && Object.value=="") return(false);

				if(!Test && Object.value=="")
					if(Default==null){
						var Temp=new Date(), ddmm;

						// Object.value=(Temp.getMonth()+1)+"/"+Temp.getDate()+"/"+Temp.getYear();
						
						if (Style == 4 || Style == 104)
							ddmm = Temp.getDate()+"/"+(Temp.getMonth()+1)+"/"
						else
							ddmm = (Temp.getMonth()+1)+"/"+Temp.getDate()+"/"
						
						Object.value=(ddmm+Temp.getYear());
						
						alert(Object.value)
						
						delete Temp;
					}else
						Object.value=Default;
	
				Object.value=UniCheck_DatePrepare(Object.value, Style);
				return(true);
			}

			if(Type=="time")
			{
				Object.value=UniCheck_IFDTPrepare(Object.value);

				if(!UniCheck_CheckOnMask(Object.value,"0123456789:")) return(false);
				
				if (Object.value.length == 1) {
					Object.value = "0" + Object.value + ":00:00"
				}

				if (Object.value.length == 2) {
					Object.value = Object.value + ":00:00"
				}

				if (Object.value.length == 3) {
					Object.value = Object.value + "00:00"
				}

				if (Object.value.length == 4) {
					Object.value = Object.value.substr(0,3) + "0" + Object.value.substr(3,1) +  ":00"
				}

				if (Object.value.length == 5) {
					Object.value = Object.value + ":00"
				}

				if (Object.value.length == 6) {
					Object.value = Object.value + "00"
				}

				if (Object.value.length == 7) {
					Object.value = Object.value.substr(0,6) + "0" + Object.value.substr(6,1)
				}

				if(!UniCheck_CheckOnTime(Object.value)) return(false);

				if(Test && Object.value=="") return(false);

				if(!Test && Object.value=="")
					if(Default==null)
					{
						var Temp=new Date();

						Object.value=(Temp.getHours())+":"+Temp.getMinutes()+"/"+Temp.getSeconds();

						delete Temp;
					}
					else
						Object.value=Default;

				Object.value=UniCheck_TimePrepare(Object.value);
				return(true);
			}


/* BEGIN: Kilrathi inserts this for credit cards verification */

/*
 * This is a Javascript Credit Card Validation using the LUHN-10 Alorithm.
 * This script was written based on information obtained from
 * http://www.beachnet.com/~hstiles/cardtype.html
 * There, you'll find a detailed description of the algorithm.
 *
 */
			if(Type=="cashcard") {
				var checkOK = "0123456789";
				var checkStr = Object.value; // theForm.CCNUM.value;
				var CrValid = true;
				var checksum=0;
				var ddigit=0;
				var kdig = 0;

				if(checkStr.length < 13) {
					alert ('Your credit card number was missing, incomplete, or invalid. Please check your number and enter it again.');
					return false;
				}

				for (i = checkStr.length-1; i >= 0; i--)  {
					kdig++;
					ch = checkStr.charAt(i);
					if((kdig % 2) != 0)
						checksum=checksum+parseInt(ch)
					else {
						ddigit=parseInt(ch)*2;
						if(ddigit >= 10)
							checksum=checksum+1+(ddigit-10)
						else
							checksum=checksum+ddigit;
						}
					for(j = 0; j < checkOK.length; j++)
						if(ch == checkOK.charAt(j))
							break;
						if(j == checkOK.length) {
							alert('Your credit card number was missing, incomplete, or invalid. Please check your number and enter it again. Please enter only digits. No dashes.');
							return(false);
						}
				}

				if((checksum % 10) != 0) {
					alert('Your credit card number was missing, incomplete, or invalid. Please check your number and enter it again.');
					Object.focus();
					return false;
				} else
					return true;
			}
		}

/* END: Kilrathi inserts this for credit cards verification */

		function _CreateCheckMap()
		{
			this.Object=null;
			this.Type=null; this.Test=null; this.Default=null; this.Error=null;
			return(this);
		}

		function CreateCheckMap(N)
		{
			this.N=N;
			for(var I=0;I<N;I++) this[I]=new _CreateCheckMap();
			return(this);
		}

		function CheckMap(Map,I,Object,Type,Test,Default)
		{
			var Temp=Map[I];

			Temp.Object=Object;
			Temp.Type=Type; Temp.Test=Test; Temp.Default=Default;

			Temp.Error="Error in the field: "+Object.name;
		}

		function CheckMapError(Map,I,Error) {Map[I].Error=Error;}
/*
		function CheckForm(Map)
		{
			var Temp;
			for(var I=0;I<Map.N;I++)
			{
				Temp=Map[I];
				if(!UniCheck(Temp.Object,Temp.Type,Temp.Test,Temp.Default))
				{
					alert(Temp.Error);
					Temp.Object.focus();
					return(false);
				}
			}
			return(true);
		}
*/
		function UniCheck_OmitIllegal(Text,Legal)
		{
			if(!Text.length) return("");

			var Temp="",_Temp;
			for(var I=0;I<Text.length;I++)
			{
				_Temp=Legal.indexOf(Text.charAt(I));
				if(_Temp>-1)
					Temp+=Text.charAt(I);
			}

			return(Temp);
		}

		function UniCheck_ReplaceOnMask_Exp(Text,MaskIn,MaskOut)
		{
			if(!Text.length) return("");

			var Temp="",_Temp;
			for(var I=0;I<Text.length;I++)
			{
				_Temp=MaskIn.indexOf(Text.charAt(I));
				if(_Temp==-1)
					Temp+=Text.charAt(I);
				else
					Temp+=MaskOut;
			}

			return(Temp);
		}

function emailCheck(emailStr) {
var emailPat=/^(.+)@(.+)$/
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
var validChars="\[^\\s" + specialChars + "\]"
var firstChars=validChars
var quotedUser="(\"[^\"]*\")"
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
var atom="(" + firstChars + validChars + "*" + ")"
var word="(" + atom + "|" + quotedUser + ")"
// The following pattern describes the structure of the user
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

var countryPat = /^[a-zA-Z]+$/ // new RegExp([a-Z]+)
// var countryPat = /^[:word:]+$/ // new RegExp([a-Z]+)

var matchArray=emailStr.match(emailPat)
if (matchArray==null) {
	// alert("The e-mail address you entered doesn't look right. We only accept e-mail addresses that contain an at-sign (@) with a dot (.) somewhere to the right of the @, and no spaces or commas anywhere.")
	return false
}
var user=matchArray[1]
var domain=matchArray[2]

// See if "user" is valid 
if (user.match(userPat)==null) {
    // user is not valid
    // alert("The username you entered doesn't look right.")
    return false
}
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
    // this is an IP address
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
	        // alert("Destination IP address is invalid!")
		return false
	    }
    }
    return true
}

// Domain is symbolic name
var domainArray=domain.match(domainPat)

if (domainArray==null) {
	// alert("The domain name you entered doesn't look right.")
    return false
}
var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length

// alert("domArr[domArr.length-1].length = " + domArr[domArr.length-1].length + "\n" + "len = " + len)

if ( domArr[domArr.length-1].length<2 || 
     domArr[domArr.length-1].length>3 || !isNaN(domArr[domArr.length-1]) ) {

   // the address must end in a two letter or three letter word.
   // alert("The address must end in a three-letter domain, or two letter country.")
   return false
}


if (domArr[domArr.length-1].length==2 && len<2) {
   var errStr="This address ends in two characters, which is a country"
   errStr+=" code.  Country codes must be preceded by "
   errStr+="a hostname and category (like com, co, pub, pu, etc.)"
   // alert(errStr)
   return false
}


if (domArr[domArr.length-1].length==3 && len<2) {
   var errStr="This address is missing a hostname!"
   // alert(errStr)
   return false
}

var matchArray=domArr[domArr.length-1].match(countryPat)

if (matchArray==null) {
	return false
}

// If we've gotten this far, everything's valid!
return true;
}
