//proto
Array.prototype.in_array = function(p_val) {
    for(var i = 0, l = this.length; i < l; i++) {
        if(this[i] == p_val) {
            rowid = i;
            return true;
        }
    }
    return false;
}

//validation jQuery : caractères alphanum uniquement
	jQuery.validator.addMethod("caracters", function(value, element) { 
       var exp = /^\w+$/;
        return exp.test(value); 
    }, "Caractères alpha-numériques uniquement.");
    
    //validation jQuery : numeric seulement
    jQuery.validator.addMethod("numeric", function(value, element) { 
       var exp=new RegExp("^[0-9]*$","g");
       return exp.test(value); 
    }, "Caractères numériques uniquement.");
    
    //validation jQuery : date au format jj/mm/aaaa
    jQuery.validator.addMethod("valid_date", function(value, element) { 
       //var  reg=new  RegExp("[/]+", "g");
       //var  tableau=value.split(reg);
       //var test=new Date(tableau[2], eval(tableau[1]-1), tableau[0]);
       //if (test.getDate() == tableau[0] && test.getMonth()+1 == tableau[1] && test.getFullYear() == tableau[2])
       //	return true;
       //else
       //	return false;
        //return exp.test(value); 
        // put your own logic here, this is just a (crappy) example 
        return value.match(/^\d\d?\/\d\d?\/\d\d\d\d$/);
    }, "Ce n'est pas une date valide, entrez une date jj/mm/aaaa.");
    
    //validation jQuery : code postal en fonction du pays
    jQuery.validator.addMethod("postcode", function(value, element) {
    	$form = $(element).parents('form');
    	$country = $('select[name=country]', $form);
    	$country_id = parseInt($country.val());
    	
    	switch ($country_id){
    		
    		//France
    		case 73 :
    			//5 num OU corse
    			if (!value.match(/^2[a-b][0-9]{3}$/i) && !value.match(/^[0-9]{5}$/))
    				return false;
    			else
    				return true;
    			break;
    			    		
    		//Autriche | Belgique | Bulgarie | Suisse | Hongrie | Luxembourg | Lettonie | Slovénie | Danemark | Norvège | Chypre
    		case 14 : case  21 :  case 33 : case 204 : case 97 : case 124 : case 117 : case 190 : case 57 : case 160 : case 55 : 
    			//4 numeric
    			return value.match(/^[0-9]{1,4}$/);
    			break;
    		
    		//République tchèque | Estonie | Grèce | Suède | Allemagne | Espagne | Finlande | Italie | Lituanie | Pologne | Slovaquie | Turquie 
    		case 56 : case  67 :  case 84 : case 203 : case 81 : case 195 : case 72 : case 105 : case 123 : case 170 :  case 189 : case 215 :
    			//5 numeric
    			return value.match(/^[0-9]{1,5}$/);
    			break;
    	    
    	    //Russie | Roumanie | Andore
    		case 176 : case  175 :  case 5 :
    			//6 numeric
    			return value.match(/^\d{3,6}$/);
    			break;
    	   
    	   // Pays-Bas
    	   case 150 :
    	   		//4 num 2 alpha
    	   		return value.match(/^\d{4}[a-z]{0,2}$/i);
    	   		break;
    	   		
    	   //Portugal
    	   case 171 :
    	   		//4-7 numeric
    			return value.match(/^\d{4,7}$/);
    			break;
    	   
    	   //Irlande
    	    case 103 :
    	    	//alphanuméric planifié
    	    	return true;
    	    	break;
    	    	
    	    // Malte
    	    case 132 : 
    	    	return value.match(/^[a-z]{3}\d{4}$/i);
    	    	break;
    	   
    	   //Royaume-Uni
    	   case 222:
    	   		// wiki : (A)A(9)9 9AA || (A)A9A 9AA
    	   		return (value.match(/^[a-z]{1,2}\d{1,2}\s{0,1}\d{1}[a-z]{2}$/i) || value.match(/^[a-z]{1,2}\d{1}[a-z]{1}\s{0,1}\d{1}[a-z]{2}$/i));
    	   		break; 	
    	   //
    	   default:
		   		return false;
		}
		return false;	
	});
	
	
	//validation jQuery : code postal en fonction du pays
    jQuery.validator.addMethod("domtom", function(value, element) {
    	$form = $(element).parents('form');
    	$country = $('select[name=country]', $form);
    	$country_id = parseInt($country.val());
    	if ($country_id ==73 && parseInt(value)>=96000){
    		if (parseInt(value)!=98000){
    			return false;
			}	
		}
		return true;	
	});
	
	//validation jQuery : code postal en fonction du pays
    jQuery.validator.addMethod("ue", function(value, element) {
    	//cf general.php
    	$ue = [81,14,21,33,55,57,195,67,72,73,84,97,103,105,117,123,124,132,150,170,171,56,175,222,189,190,203];    	
    	return $ue.in_array(value);	
	});
    
    //validation jQuery : un telephone sur 2 rempli
    
    //validation jQuery : verification numero de CB
    jQuery.validator.addMethod("luhn", function(value, element) {
    	var ncard = value;
    	if(!isNaN(ncard) && ncard.length == 16)
		{
			var intResultLuhn = 0;
			for(i=0;i<16;i+=2)
			{
				intRang1 = Number(ncard.charAt(i)) * 2;
				if(intRang1>9){
					intRang1 = intRang1 -9;
				}
				intResultLuhn = intResultLuhn + intRang1;
			}
	        for(i=1;i<16;i+=2){
				intRang2 = Number(ncard.charAt(i));
				intResultLuhn = intResultLuhn + intRang2;
			}
			if(intResultLuhn%10 == 0) {
				return true; 
				//msg += "Votre numero de carte est invalide.<br/>";
			}
			//si commence par 3 alors american express non accepter
		}	
		return false;    	
	}, "Numéro de carte invalide.");
