// extend the current rules with new groovy ones

$.validator.addMethod("phone", function(value)
{
	/**
	 * DHTML phone number validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
	 */
	if (value == '')
		return true;
	
	var digits = "0123456789";
	
	var phoneNumberDelimiters = "()- "; // non-digit characters which are allowed in phone numbers
	var validWorldPhoneChars = phoneNumberDelimiters + "+";  // characters which are allowed in international phone numbers (a leading + is OK)
	var minDigitsInIPhoneNumber = 10; // Minimum no of digits in an international phone no.
	
	
	if (!checkInternationalPhone(value))
		return false;
	
	return true;
}, 'Numarul de telefon nu este corect');



$.validator.addMethod("zipcode", function(value)
{
	if (value == '')
		return true;
	
	if (!isInteger(value) || value.length < 4 || value.length > 8)
		return false;
	
	return true;
});



$.validator.addMethod("cnp", function(value)
{
	if (value == '')
		return true;
	
	if (!isInteger(value) || value.length != 13)
		return false;
	
	cnp = value;
	var control = cnp.charAt(0) * 2 + cnp.charAt(1) * 7 + cnp.charAt(2) * 9 + cnp.charAt(3) * 1 + cnp.charAt(4) * 4 + 
				cnp.charAt(5) * 6 + cnp.charAt(6) * 3 + cnp.charAt(7) * 5 + cnp.charAt(8) * 8 + cnp.charAt(9) * 2 + 
				cnp.charAt(10) * 7 + cnp.charAt(11) * 9;
	
	var ver = control % 11;
	
	//if (!(ver < 10 && ver == cnp[12]) && !(ver == 10 && cnp[12] == 1)) {
	if ((ver >= 10 || ver != cnp.charAt(12)) && (ver != 10 || cnp.charAt(12) != 1))
		return false;
	
	return true;
});


// SUPPORT FUNCTIONS

function isInteger(s)
{   
	var i;
	for (i = 0; i < s.length; i++) {   
		// Check that current character is number.
		var c = s.charAt(i);
		if (((c < "0") || (c > "9"))) return false;
	}
	
	// All characters are numbers.
	return true;
}


function stripCharsInBag(s, bag)
{   
	var i;
	var returnString = "";
	// Search through string's characters one by one.
	// If character is not in bag, append to returnString.
	for (i = 0; i < s.length; i++) {   
		// Check that current character isn't whitespace.
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}
	
	return returnString;
}


function checkInternationalPhone(strPhone)
{
	// Declaring required variables
	var digits = "0123456789";
	// non-digit characters which are allowed in phone numbers
	var phoneNumberDelimiters = "()- ";
	// characters which are allowed in international phone numbers
	// (a leading + is OK)
	var validWorldPhoneChars = phoneNumberDelimiters + "+";
	// Minimum no of digits in an international phone no.
	var minDigitsInIPhoneNumber = 10;
	
	s = stripCharsInBag(strPhone, validWorldPhoneChars);
	return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}
