// QuatroValidation 1.0 beta
exclamation = "img/exclamation.png";
tick = "img/tick.png";

function kapcheck() {
var kapnum=$('kapval').value;
				
				var url="parts/checkkap.php?sid="+Math.random();
				new Ajax.Request(url, {   
					method: 'get',
					onSuccess: function(transport) 
					{
						kapflag=transport.responseText;
					} 
				}
				);

}


function check_emailexists(emailval,filename) {

				if($('new_emailOk')){
				var url="parts/"+filename+".php?email="+emailval+"&sid="+Math.random();
				new Ajax.Request(url, {   
					method: 'get',
					onSuccess: function(transport) 
					{
						emailch=transport.responseText;
						if(emailch=='ok'){
							
							$('err_email').style.display='none';
							emailflag=1;
							
						}
						if(emailch=='err'){
							
							$('err_email').style.display='block';
							emailflag=0;
							
						}
						
					
						
} });
				}else{
					$('err_email').style.display='none';
					emailflag=0;
				}

}


function QuatroValidation(element)
{
	
	this.element = element;
	this.validations=[];
    this.add = add;
    this.checkValidation = checkValidation;
}
function add(type,options){
	this.validations.push({'type':type,params:options||{}});
	//alert(this.validations[0]['params']['minimum']);
}
function checkLength(element,minlength){
	if ($(element).value.length >= minlength) {
		return true;
	}
	else {
		return false;
	}
}


function checkCreditCard (cardnumber, cardname) {
     
	
	
var ccErrorNo = 0;

  var cards = new Array();

  
  
  cards [0] = {name: "Visa", 
               length: "13,16", 
               prefixes: "4",
               checkdigit: true};
  cards [1] = {name: "MasterCard", 
               length: "16", 
               prefixes: "51,52,53,54,55",
               checkdigit: true};
  cards [2] = {name: "DinersClub", 
               length: "14,16", 
               prefixes: "36,54,55",
               checkdigit: true};
  cards [3] = {name: "CarteBlanche", 
               length: "14", 
               prefixes: "300,301,302,303,304,305",
               checkdigit: true};
  cards [4] = {name: "AmEx", 
               length: "15", 
               prefixes: "34,37",
               checkdigit: true};
  cards [5] = {name: "Discover", 
               length: "16", 
               prefixes: "6011,622,64,65",
               checkdigit: true};
  cards [6] = {name: "JCB", 
               length: "16", 
               prefixes: "35",
               checkdigit: true};
  cards [7] = {name: "enRoute", 
               length: "15", 
               prefixes: "2014,2149",
               checkdigit: true};
  cards [8] = {name: "Solo", 
               length: "16,18,19", 
               prefixes: "6334, 6767",
               checkdigit: true};
  cards [9] = {name: "Switch", 
               length: "16,18,19", 
               prefixes: "4903,4905,4911,4936,564182,633110,6333,6759",
               checkdigit: true};
  cards [10] = {name: "Maestro", 
               length: "12,13,14,15,16,18,19", 
               prefixes: "5018,5020,5038,6304,6759,6761",
               checkdigit: true};
  cards [11] = {name: "VisaElectron", 
               length: "16", 
               prefixes: "417500,4917,4913,4508,4844",
               checkdigit: true};
               
  // Establish card type
  var cardType = -1;
  for (var i=0; i<cards.length; i++) {

    // See if it is this card (ignoring the case of the string)
    if (cardname.toLowerCase () == cards[i].name.toLowerCase()) {
      cardType = i;
      break;
    }
  }
  
  // If card type not found, report an error
  if (cardType == -1) {
     ccErrorNo = 0;
     return false; 
  }
   
  // Ensure that the user has provided a credit card number
  if (cardnumber.length == 0)  {
     ccErrorNo = 1;
     return false; 
  }
    
  // Now remove any spaces from the credit card number
  cardnumber = cardnumber.replace (/\s/g, "");
  
  // Check that the number is numeric
  var cardNo = cardnumber
  var cardexp = /^[0-9]{13,19}$/;
  if (!cardexp.exec(cardNo))  {
     ccErrorNo = 2;
     return false; 
  }
       
  // Now check the modulus 10 check digit - if required
  if (cards[cardType].checkdigit) {
    var checksum = 0;                                  // running checksum total
    var mychar = "";                                   // next char to process
    var j = 1;                                         // takes value of 1 or 2
  
    // Process each digit one by one starting at the right
    var calc;
    for (i = cardNo.length - 1; i >= 0; i--) {
    
      // Extract the next digit and multiply by 1 or 2 on alternative digits.
      calc = Number(cardNo.charAt(i)) * j;
    
      // If the result is in two digits add 1 to the checksum total
      if (calc > 9) {
        checksum = checksum + 1;
        calc = calc - 10;
      }
    
      // Add the units element to the checksum total
      checksum = checksum + calc;
    
      // Switch the value of j
      if (j ==1) {j = 2} else {j = 1};
    } 
  
    // All done - if checksum is divisible by 10, it is a valid modulus 10.
    // If not, report an error.
    if (checksum % 10 != 0)  {
     ccErrorNo = 3;
     return false; 
    }
  }  

  // The following are the card-specific checks we undertake.
  var LengthValid = false;
  var PrefixValid = false; 
  var undefined; 

  // We use these for holding the valid lengths and prefixes of a card type
  var prefix = new Array ();
  var lengths = new Array ();
    
  // Load an array with the valid prefixes for this card
  prefix = cards[cardType].prefixes.split(",");
      
  // Now see if any of them match what we have in the card number
  for (i=0; i<prefix.length; i++) {
    var exp = new RegExp ("^" + prefix[i]);
    if (exp.test (cardNo)) PrefixValid = true;
  }
      
  // If it isn't a valid prefix there's no point at looking at the length
  if (!PrefixValid) {
     ccErrorNo = 3;
     return false; 
  }
    
  // See if the length is valid for this card
  lengths = cards[cardType].length.split(",");
  for (j=0; j<lengths.length; j++) {
    if (cardNo.length == lengths[j]) LengthValid = true;
  }
  
  // See if all is OK by seeing if the length was valid. We only check the 
  // length if all else was hunky dory.
  if (!LengthValid) {
     ccErrorNo = 4;
     return false; 
  };   
  
  // The credit card is in the required format.
  return true;
}

function checkcard1(element,minlength){
	
	

	ct=document.getElementById('contact_CardType').value
	cnum=$(element).value
	
	var cardsnamerep = new Array();
	
	cardsnamerep['VI']='Visa';
	cardsnamerep['MC']='MasterCard';
	cardsnamerep['AM']='AmEx';
	
	return checkCreditCard(cnum,cardsnamerep[ct]);
	
	
	
	
	
	
	/*if(ct=='MC'){
		cnum2fd=cnum.substr(0,2);
		if((cnum2fd==55 ||cnum2fd==51)&& cnum.length==16 ){return true;}else{return false;}
		
	}
	if(ct=='VI'){
		
		cnum2fd=cnum.substr(0,1);
		if(cnum2fd==4 && (cnum.length==16||cnum.length==13) ){return true;}else{return false;}
		
	}
	if(ct=='AM'){
		
		cnum2fd=cnum.substr(0,2);
		if((cnum2fd==34 ||cnum2fd==37)&& cnum.length==15 ){return true;}else{return false;}
	
	}*/
	
	/*if(ct==''){
		
		return false;
	
	}*/
}


function checkNumbers(idOfCheck){
	var anum=/(^\d+$)|(^\d+\.\d+$)/
	if (anum.test($(idOfCheck).value)){
		return true;
	}
	else{
		return false;
	}
}
function checkEmail(idOfCheck){
	var txt = document.getElementById(idOfCheck).value;
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,5})+$/.test(txt))
	{
		return true;
	}
	else{
		return false;
	}
}
function checkMetaPattern(element){
	
var metap1 = new RegExp("([a-zA-Z]{1,}[0-9]{1,})", "g");
var metap2 = new RegExp("([0-9]{1,}[a-zA-Z]{1,})", "g");

	var txt = $(element).value;
	if (metap1.test(txt)|| metap2.test(txt))
	{
		return true;
	}
	else{
		return false;
	}
}
function checkLetterAndNumbers(element){
	myStr = $(element).value;
	if(/^[a-zA-Z�?-ת0-9 ]+$/.test(myStr))
		return true;
	else
		return false;
}
function checkphone(element){
	myStr = $(element).value;
	if(/^[0-9- ]+$/.test(myStr))
		return true;
	else
		return false;
}
function checkEqual(element,other){
	if($(element).value==$(other).value)
		return true;
	else
		return false;
}
function checkStr(element,str){
 	var pattern=eval(str);
	myStr = $(element).value;
	if(pattern.test(myStr)){
	
	  if(document.getElementById('currency2')){
	  	
	  	if(document.getElementById('currency2').checked==true){
	  		
	  		if( document.getElementById('contact_sum').value<500){
	  		
	  		return false;
	  		}else{
	  		return true;
	  		}
	  	}else{
	  		return true;
	  	}
	  		
	  		
	  	}else{
	  		return true;
	  	}
	
	}else{
		return false;
	}
}





function checkValidation(){

	if($(this.element)!="" && $(this.element)!=null){
		//$('explanationtext').innerHTML=checkObject[checkwhat]['text'];
		flag=checkLength(this.element,this.validations[0]['params']['minlength']);
		
		
		
		
		if(flag==true){

			switch (this.validations[0]['type']){
				case "anything":
				
				if(document.getElementById('ccexpm') && document.getElementById('ccexpy')){
				if(document.getElementById('ccexpm').value!='' && document.getElementById('ccexpy').value!=''){
					var Today = new Date();
					Mnum= parseInt(Today.getMonth())+1;
					Ynum= parseInt(Today.getYear());

					if(document.getElementById('ccexpm').value < Mnum && document.getElementById('ccexpy').value==Ynum )document.getElementById('ccexpm').value=Mnum;
				
				   }
				   }
					flag=true;
				
					break;
					
				case "numbers":
					flag=checkNumbers(this.element);
					break;
				case "email":
					flag=checkEmail(this.element);

								/*if(flag==true){
									loadOk(this.element);
								}else{
									loadError(this.element);
								}*/
					break;
				case "letterAndNum":
					flag=checkLetterAndNumbers(this.element);
					break;
				case "phone":
					flag=checkphone(this.element);
					break;
				case "checkcard1":
					flag=checkcard1(this.element);
					break;

				case "patternpass":
					
					flag=checkMetaPattern(this.element);
					
					break;
				case "equalPassword":
					flag=checkEqual(this.element,this.validations[0]['params']['equalPassword']);
					
					if(flag==true){
						loadOk(this.element);
					}
					break;
				case "equalEmail":
					flag=checkEmail(this.element);
					if(flag==true){
						
						flag=checkEqual(this.element,this.validations[0]['params']['equalEmail']);
						if(flag==true){
							loadOk(this.validations[0]['params']['equalEmail']);
						}
					}
					break;
				case "password":
					flags=checkEqual(this.element,this.validations[0]['params']['equalPassword']);
					
					if(flags==true )
						loadOk(this.validations[0]['params']['equalPassword']);
					else
						loadError(this.validations[0]['params']['equalPassword']);
					break;
				case "pattern":
					//alert(this.validations[0]['params']['pattern']);
					flag=checkStr(this.element,this.validations[0]['params']['pattern']);
					break;
			}
		}
		else{
			flag=false;
		}
	}
	else
		flag=false;
		
	if(flag==false){
		loadError(this.element);
		if(document.getElementById(this.element+'_err')){
		document.getElementById(this.element+'_err').style.display='';
		}
	}
	else{
		
		loadOk(this.element);
		if(document.getElementById(this.element+'_err')){
		document.getElementById(this.element+'_err').style.display='none';
		}
	}//return flag;
}
