<!--
// ---------------------------
// 4DBK javascript librairies
// CHECK VALUES TOOLS
// (c) 4D NET Center SA - 2000-2005
// A.L & M.I - version 1.02
// ---------------------------

// ------------------------------------------------------------------------------
// check if the field is empty
// error=CheckEmpty(form.Name,form.Name.value,"Enter a name.");
// ------------------------------------------------------------------------------
function CheckEmpty(field,text,msg)
{	var error=false;
	if (text=='') { error=true; }
	if (error) { alert(msg); field.focus(); field.select(); }
	return error;
}

// ------------------------------------------------------------------------------
// check if a menu item has been selected
// error=CheckEmptyMenu(form.Menu,"Select a menu item.");
// ------------------------------------------------------------------------------
function CheckEmptyMenuItem(field,msg)
{	var error=false;
	if (field.selectedIndex==0) { error=true; }
   	if (error) { alert(msg); field.focus();}
	return error;
}

// ------------------------------------------------------------------------------
// check if a checkbox is unchecked
// error=CheckEmptyCheckbox(form.Checkbox,"Check that box !");
// ------------------------------------------------------------------------------
function CheckEmptyCheckbox(field,msg)
{	var error=false;
	if (field.checked==0) { error=true; }
   	if (error) { alert(msg); field.focus();}
	return error;
}

// ------------------------------------------------------------------------------
// check if an email address seems to be in a correct format
// error=CheckBadEMail(form.Email,"This email address is not valid.");
// ------------------------------------------------------------------------------
function CheckBadEMail(field,msg)
{    var error=true;
    var pos,posdot,str,end;
    if (field.value.indexOf("@")>=2)
    {    posdot=0;
        pos=0;
        str=field.value;
        pos=str.indexOf(".");
        while(pos>0)
        {    posdot+=pos;
            posdot+=1;
            str=str.substring(pos+1,str.length);
            pos=str.indexOf(".");
        }
        end=str;
       
        if(end!="")
            if(posdot>=4)
                if(end.length>=1)
                    error=false;
    }
    if (error) { alert(msg); field.focus(); field.select(); }
    return error;
} 

// ------------------------------------------------------------------------------
// check if a field does not contain any of characters found in a set
// error=CheckNotInSet(form.Number,"-0123456789.,","This is not a number.");
// ------------------------------------------------------------------------------
function CheckNotInSet(field,set,msg)
{	var error=false;
	var text;
	for (var i=0;i<field.value.length;i++)
	{	text=field.value.substring(i,i+1);
		if (set.indexOf(text)=="-1")  error=true;
	}
	if (error) { alert(msg); field.focus(); field.select(); }
	return error;
}

// ------------------------------------------------------------------------------
// check if some characters found in a field are in a set
//	error=CheckInSet(form.Name,"\:/&éàç","Some characters are not valid.");
// ------------------------------------------------------------------------------
function CheckInSet(field,set,msg)
{	var error=false;
	var text;
	for (var i=0;i<field.value.length;i++)
	{	text=field.value.substring(i,i+1);
		if (set.indexOf(text)!="-1")  error=true;
	}
	if (error) { alert(msg); field.focus(); field.select(); }
	return error;
}
// ------------------------------------------------------------------------------
// check if a string is found in a field
//	error=CheckStringDoesExist(form.Name,"root","You url is not valid.");
// ------------------------------------------------------------------------------
function CheckStringDoesExist(field,set,msg)
{	var error=false;
	if (field.value.indexOf(set)!=-1)  error=true;
	if (error) { alert(msg); field.focus(); field.select(); }
	return error;
}
// ------------------------------------------------------------------------------
// check if a string is not found in a field
//	error=CheckStringDoesNotExist(form.Name,"XUY","Your key is not valid.");
// ------------------------------------------------------------------------------
function CheckStringDoesNotExist(field,set,msg)
{	var error=false;
	if (field.value.indexOf(set)==-1)  error=true;
	if (error) { alert(msg); field.focus(); field.select(); }
	return error;
}
// ------------------------------------------------------------------------------
// check the max length of a field
// error=CheckMaxLength(form.Name,20,"This name is too long.");
// ------------------------------------------------------------------------------
function CheckMaxLength(field,length,msg)
{	var error=false;
	if (field.value.length > length)  error=true;
	if (error) { alert(msg); field.focus(); field.select(); }
	return error;
}

// ------------------------------------------------------------------------------
// check the min length of a field
// error=CheckMinLength(form.Name,20,"This name is too short.");
// ------------------------------------------------------------------------------
function CheckMinLength(field,length,msg)
{	var error=false;
	if (field.value.length < length) error=true;
	if (error) { alert(msg); field.focus(); field.select(); }
	return error;
}

// ------------------------------------------------------------------------------
// check if both password fields are the same
// error=CheckTwoSameFields(form.Password,form.Password2,"The two passwords are not the same.");
// MI 28.07.2005
// ------------------------------------------------------------------------------
function CheckTwoSameFields(field1,field2,msg)
{	var error=false;
	if (field1.value != field2.value) error=true;
	if (error) { alert(msg); field.focus(); field.select(); }
	return error;
}

// ------------------------------------------------------------------------------
// check the date format
// error=CheckBadDate(form.Date,"This is not a date.");
// ------------------------------------------------------------------------------
function CheckBadDate(field,msg)
{	var error=false;
	var set="0123456789/"
	for (var i=0;i<field.value.length;i++)
	{	if(set.indexOf(""+field.value.substring(i,i+1))=="-1") error=true;
	}
	if (field.value.length != 8) error=true
	b=field.value.substring(0,2) // day
	c=field.value.substring(2,3)// '/'
	d=field.value.substring(3,5) // month
	e=field.value.substring(5,6)// '/'
	f=field.value.substring(6,8) // year
	if(b<1 || b>31) error=true
	if(c != '/') error=true
	if(d<1 || d>12) error=true
	if(e != '/') error=true
	if(f<0 || f>99) error=true
	if(b==4 || b==6 || b==9 || b==11)
	{	if (d==31) error=true	}
	if (b==2)
	{	var g=parseInt(f/4)
		if (isNaN(g))
		{	error=true	}
		if (d>29) error=true
		if (d==29 && ((f/4)!=parseInt(f/4))) error=true
	}
	if (error)
	{	alert(msg); field.focus(); field.select(); }
	return error;
}

// ------------------------------------------------------------------------------
// check the format of credit card number
// errorstr=CheckCard(form.CardNumber.value,form.CardDate.value);
// if (errorstr!="")
//      switch(errorstr)
//		{	case "DATEXP" : alert("Your card has expired..."); error=true; break;
//			case "BADNUM" : alert("This number is not valid..."); error=true; break;
//			case "UNKCAR" : alert("This card's type is not valid..."); error=true; break;
//			case "INVLEN" : alert("Key's length of this card is not valid..."); error=true; break;
//			case "INVKEY" : alert("Key of this card is not valid..."); error=true; break;
//			default : alert("Your card is a "+errorstr);
//		} 
// ------------------------------------------------------------------------------
function CheckCard(cardnumber,carddate)
{	var error=false;
	var errorstr="";
	var cardsprefix=new Array(22);
	var cardsnames=new Array(22);
	var cardsmasks=new Array(22);
	var cardname="";
	var cardidx=0;
	var cardlength=cardnumber.length;

	cardsprefix[0]="4";
	cardsprefix[1]="51";
	cardsprefix[2]="52";
	cardsprefix[3]="53";
	cardsprefix[4]="54";
	cardsprefix[5]="55";
	cardsprefix[6]="37";
	cardsprefix[7]="34";
	cardsprefix[8]="6011";
	cardsprefix[9]="56";
	cardsprefix[10]="3";
	cardsprefix[11]="1800";
	cardsprefix[12]="2131";
	cardsprefix[13]="2014";
	cardsprefix[14]="2149"
	cardsprefix[15]="300";
	cardsprefix[16]="301";
	cardsprefix[17]="302";
	cardsprefix[18]="303";
	cardsprefix[19]="304";
	cardsprefix[20]="305";
	cardsprefix[21]="36";
	cardsprefix[22]="38";
	
	cardsnames[0]="VISA";
	cardsnames[1]="MasterCard";
	cardsnames[2]="MasterCard";
	cardsnames[3]="MasterCard";
	cardsnames[4]="MasterCard";
	cardsnames[5]="MasterCard";
	cardsnames[6]="American Express";
	cardsnames[7]="American Express";
	cardsnames[8]="Discover";
	cardsnames[9]="BankCard"
	cardsnames[10]="JCB";
	cardsnames[11]="JCB";
	cardsnames[12]="JCB";
	cardsnames[13]="enRoute";
	cardsnames[14]="enRoute";
	cardsnames[15]="Diners Club/Carte Blanche";
	cardsnames[16]="Diners Club/Carte Blanche";
	cardsnames[17]="Diners Club/Carte Blanche";
	cardsnames[18]="Diners Club/Carte Blanche";
	cardsnames[19]="Diners Club/Carte Blanche";
	cardsnames[20]="Diners Club/Carte Blanche";
	cardsnames[21]="Diners Club/Carte Blanche";
	cardsnames[22]="Diners Club/Carte Blanche";

	cardsmasks[0]=10;	// (((13-12) << 1) | ((16-12) << 1))
	cardsmasks[1]=8;	// (16-12) << 1
	cardsmasks[2]=8;
	cardsmasks[3]=8;
	cardsmasks[4]=8;
	cardsmasks[5]=8;
	cardsmasks[6]=6;	// (15-12) << 1
	cardsmasks[7]=6;
	cardsmasks[8]=8;	// (16-12) << 1
	cardsmasks[9]=8;	// (16-12) << 1
	cardsmasks[10]=6;	// (15-12) << 1
	cardsmasks[11]=6;
	cardsmasks[12]=6;
	cardsmasks[13]=6;	// (15-12) << 1
	cardsmasks[14]=6;
	cardsmasks[15]=4;	// (14-12) << 1
	cardsmasks[16]=4;
	cardsmasks[17]=4;
	cardsmasks[18]=4;
	cardsmasks[19]=4;
	cardsmasks[20]=4;
	cardsmasks[21]=4;
	cardsmasks[22]=4;
	
	var result=true;
	var badnumber=false;
	
	cardnumber=cardnumber.replace(/ /gi,"");
	cardnumber=cardnumber.replace(/-/gi,"");
	cardnumber=cardnumber.replace(/\//gi,"");
	
	if(!error)
	{	var month=Number(carddate.substring(0,2));
		var year=Number(carddate.substring(3,5));
	//	alert(month+"-"+year);
		year=((year<80) ? 2000+year : 1900+year);
		var expiresdate=new Date(year,month,1);
		today=new Date();
	//	alert("Exp: "+expiresdate.toGMTString());
	
		var deltayears=expiresdate.getFullYear()-today.getFullYear();
		var deltamonthes=expiresdate.getMonth()-today.getMonth();
	//	alert(deltamonthes+" "+deltayears);
		if(expiresdate<today) { error=true; errorstr="DATEXP"; }
		
	//	if(deltayears<0) { error=true; errorstr="DATEXP"; }
	//	else
	//		if(deltayears>=0)
	//			if(deltamonthes<=0) { error=true; errorstr="DATEXP"; }
	}
	
	if(!error)
	{	for (var i=0;(i<cardlength) && (!error);i++)
		{	thecode=cardnumber.charCodeAt(i);
			if((thecode<48) || (thecode>57))
			{ error=true; errorstr="BADNUM"; }
		} 
	}
	
	if(!error)
	{	var digits4=cardnumber.substring(0,4);
		var digits3=cardnumber.substring(0,3);
		var digits2=cardnumber.substring(0,2);
		var digits1=cardnumber.substring(0,1);
		var found=false;
		for (var i=0;(i<cardsprefix.length) && (!found);i++)
			if(cardsprefix[i]==digits4) { cardidx=i; cardname=cardsnames[i]; found=true; }
		for (var i=0;(i<cardsprefix.length) && (!found);i++)
			if(cardsprefix[i]==digits3) { cardidx=i; cardname=cardsnames[i]; found=true; }
		for (var i=0;(i<cardsprefix.length) && (!found);i++)
			if(cardsprefix[i]==digits2) { cardidx=i; cardname=cardsnames[i]; found=true; }
		for (var i=0;(i<cardsprefix.length) && (!found);i++)
			if(cardsprefix[i]==digits1) { cardidx=i; cardname=cardsnames[i]; found=true; }

		if(!found)
			{ error=true; errorstr="UNKCAR"; }
	}
	
	if(!error)
	{	if (cardlength < 29)
		{	var checksum=((cardlength-12) << 1)// & cardsmasks[cardidx];
			if ((cardlength < 12) || (checksum==0)) { error=true; errorstr="INVLEN"; }
			else
			{	if (cardname!="enRoute")
				{	checksum=0;
					var nu=0;
					var cnt=cardlength;
					var flag=false;
					while(cnt>0)
					{	nu=Number(cardnumber.substring(cnt-1,cnt));
						if (flag)
						{	nu*=2;
							nu=((nu>9) ? nu-=9 : nu);
						}
						checksum+=nu;
						flag=!flag;
						cnt--;
					}
					if((checksum % 10)!=0) { error=true; errorstr="INVKEY"; }
				}
			}
		  
		}
		else { error=true; errorstr="INVLEN"; }
	}
	
	if(errorstr=="") errorstr=cardname;
	return(errorstr);
}
	
// -->