/*
 * Validation data types and formats 
 */
// utility & generic
var _VALIDATION_ISLOADED = true;
var _VALIDATION_SPECIALCHARS = "\"\\`\\'\\~\\^\\$\\@\\#\\&\\|\\!\\_\\;\\:\\,\\.\\?\\<\\>\\(\\)\\[\\]\\{\\}\\+\\*\\-\\/\\\\%\\=";
var _VALIDATION_SPECIALCHARS_WITHOUT_HYPHEN = "\"\\`\\'\\~\\^\\$\\@\\#\\&\\|\\!\\_\\;\\:\\.\\?\\<\\>\\(\\)\\[\\]\\{\\}\\+\\*\\/\\\\%\\=";
var _VALIDATION_ALPHANUMERIC_WITH_HYPHEN = "^" + _VALIDATION_SPECIALCHARS_WITHOUT_HYPHEN + "";
var _VALIDATION_NUMERIC = "0-9";
var _VALIDATION_HEXA = /[^a-f0-9]/i;
var _VALIDATION_ALPHA = "^0-9" + _VALIDATION_SPECIALCHARS + "";
var _VALIDATION_ALPHANUMERIC = "^" + _VALIDATION_SPECIALCHARS + "";
var _VALIDATION_BLANKCHARS = "\\s";
var _VALIDATION_ALPHANUMERIC_WITHOUT_BLANKCHARS = _VALIDATION_ALPHANUMERIC + _VALIDATION_BLANKCHARS;

// data types
var _VALIDATION_ADDRESS = new RegExp("^([" + _VALIDATION_ALPHANUMERIC + "]|[\\#\\,\\-\\.\\' ])*$");
var _VALIDATION_MONEY = new RegExp("^[" + _VALIDATION_NUMERIC + "\\$\\,]*\\.?[" + _VALIDATION_NUMERIC + "]*$");
var _VALIDATION_CITY = new RegExp("^([" + _VALIDATION_ALPHA + "]|[\\- \\.\\'])*$");
var _VALIDATION_ODOMETER = new RegExp("^[" + _VALIDATION_NUMERIC + "\\,]*$");
var _VALIDATION_LATLONG = new RegExp("^[" + _VALIDATION_NUMERIC + "\\.\\-]*$");
var _VALIDATION_CREDITCARDNUMBER = new RegExp("^[" + _VALIDATION_NUMERIC + "\\- ]*$");
var _VALIDATION_ASSETNAME = new RegExp("^((.*(\\/|\\\\))?([^" + _VALIDATION_SPECIALCHARS + " ]|[\\.\\_]){1,80})?$");
var _VALIDATION_LIBRARYNAME = new RegExp("^([^" + _VALIDATION_SPECIALCHARS + "]|[ \\-\\_])*$");

// data formats
var _VALIDATION_DATE_ORDER = ["d","m","y"];
var _VALIDATION_DATE_MAP = {"01":"31", "02":"28", "03":"31", "04":"30", "05":"31", "06":"30", "07":"31", "08":"31", "09":"30", "10":"31", "11":"30", "12":"31"}
var _VALIDATION_DATE_DL = "\/";
var _VALIDATION_DATE_THIRTYONEDAYS = "((0[1-9])|([12][0-9])|(3[01]))";
var _VALIDATION_DATE_THIRTYDAYS = "((0[1-9])|([12][0-9])|(30))";
var _VALIDATION_DATE_TWENTYEIGHTDAYS = "((0[1-9])|(1[0-9])|(2[0-8]))";
var _VALIDATION_DATE_TWENTYNINEDAYS = "((0[1-9])|(1[0-9])|(2[0-9]))";
var _VALIDATION_DATE_THIRTYONEDAYMONTHS = "((0[13578])|(1[02]))";
var _VALIDATION_DATE_THIRTYDAYMONTHS = "((0[469])|(11))";
var _VALIDATION_DATE_FEBRUARY = "(02)";
var _VALIDATION_DATE_ALLYEARS = "(((19)|(20))[0-9]{2})";
var _VALIDATION_DATE_LEAPYEARS = "(((19)|(20))(([02468][048])|([13579][26])))";
var _VALIDATION_DATE_NOTLEAPYEARS = "(((19)|(20))(([02468][^048])|([13579][^26])))";
var _VALIDATION_DATE = new RegExp("^((((" + _VALIDATION_DATE_THIRTYONEDAYS + _VALIDATION_DATE_DL + _VALIDATION_DATE_THIRTYONEDAYMONTHS + ")|(" + _VALIDATION_DATE_THIRTYDAYS + _VALIDATION_DATE_DL + _VALIDATION_DATE_THIRTYDAYMONTHS + "))" + _VALIDATION_DATE_DL + _VALIDATION_DATE_ALLYEARS + ")|((" + _VALIDATION_DATE_TWENTYEIGHTDAYS + _VALIDATION_DATE_DL + _VALIDATION_DATE_FEBRUARY + _VALIDATION_DATE_DL + _VALIDATION_DATE_NOTLEAPYEARS + ")|(" + _VALIDATION_DATE_TWENTYNINEDAYS + _VALIDATION_DATE_DL + _VALIDATION_DATE_FEBRUARY + _VALIDATION_DATE_DL + _VALIDATION_DATE_LEAPYEARS + ")))?$");

var _VALIDATION_EMAIL = /^[a-z0-9!#$%&\'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;
var _VALIDATION_PROTOCOL = new RegExp("^((?:[" + _VALIDATION_ALPHA + "]+:\\/?\\/?)|#)(.*)$", "i");
var _VALIDATION_URL = new RegExp("^(([" + _VALIDATION_ALPHA + "]+:\\/?\\/?)?([^\":]+))?$", "i");
var _VALIDATION_PHONEFAX = new RegExp("^(\\(?[A-Z" + _VALIDATION_NUMERIC + "]{3}\\)?[\\. -]?[A-Z" + _VALIDATION_NUMERIC + "]{3}[\\. -]?[A-Z" + _VALIDATION_NUMERIC + "]{4})?$");
var _VALIDATION_NUMERIC_PHONEFAX = new RegExp("^(\\(?[" + _VALIDATION_NUMERIC + "]{3}\\)?[\\. -]?[" + _VALIDATION_NUMERIC + "]{3}[\\. -]?[" + _VALIDATION_NUMERIC + "]{4})?$");
var _VALIDATION_ZIP = new RegExp("^([A-Z][" + _VALIDATION_NUMERIC + "][A-Z][- ]?[" + _VALIDATION_NUMERIC + "][A-Z][" + _VALIDATION_NUMERIC + "])?$", "i");
var _VALIDATION_SSN = new RegExp("^([" + _VALIDATION_NUMERIC + "]{3} [" + _VALIDATION_NUMERIC + "]{3} [" + _VALIDATION_NUMERIC + "]{3})?$");
var _VALIDATION_NAME = "^0-9\"\\`\\~\\^\\$\\@\\#\\&\\|\\!\\_\\;\\:\\,\\.\\?\\<\\>\\(\\)\\[\\]\\{\\}\\+\\*\\-\\/\\\\%\\=";
var _VALIDATION_ZIP_LENGTH = 7;

// validation format errors
var _VALIDATION_FORMATERROR_ADDRESS = "XXX NO VALUE XXX";
var _VALIDATION_FORMATERROR_CITY = "XXX NO VALUE XXX";
var _VALIDATION_FORMATERROR_EMAIL = "XXX NO VALUE XXX";
var _VALIDATION_FORMATERROR_NUMERIC_PHONEFAX = "XXX NO VALUE XXX";
var _VALIDATION_FORMATERROR_ZIP = "XXX NO VALUE XXX";
var _VALIDATION_FORMATERROR_ODOMETER = "XXX NO VALUE XXX";
var _VALIDATION_FORMATERROR_YEAR = "XXX NO VALUE XXX";
var _VALIDATION_FORMATERROR_MONEY = "XXX NO VALUE XXX";
var _VALIDATION_FORMATERROR_SSN = "XXX NO VALUE XXX";
var _VALIDATION_FORMATERROR_DATE = "XXX NO VALUE XXX";

/* IMPORTANT: all special characters MUST be referenced as: unescape("%XX"); where XX is the character's hex reference. */
/* OR: use HTML entities; they're more portable :) */
var ALL_LOCATIONS = "Tous les emplacements";
var ALL_MAKES = "Toutes les marques";
var ALL_MODELS = "Tous les mod" + unescape("%E8") + "les";
var ALL_TRIMS = "Toutes les garnitures";
var ALL_TYPES = "Tous les types";
var ANY = "Tous";
var BROWSE_INVENTORY = "XXX NO VALUE XXX";
var BOOKMARK_ERROR_MSG = "Presse <Ctrl>+D pour ajouter aux favoris";
var CERTIFIED = "Certifi" + unescape("%E9");
var CONFIRM_FORM_RESET = "XXX NO VALUE XXX";
var CONTACT_US = "XXX NO VALUE XXX";
var DGP_MILES = "XXX NO VALUE XXX";
var EMAIL_A_FRIEND_VERSION_TOOLTIP = "Envoyer " + unescape("%E0") + " un ami" ;
var EMAILAFRIEND_IS_UNAVAILABLE = "Envoyer "+ unescape("%E0") +" un ami n'est pas disponible";
var ENTER_ZIP = "Entrez le Code Postal";
var ERRORMESSAGE_BAD_REQUEST = "Une demande de directions n'a pas pu &ecirc;tre compl&eacute;t&eacute;e avec succ&egrave;s.";
var ERRORMESSAGE_CAPTCHA_VERIFICATION = "XXX NO VALUE XXX";
var ERRORMESSAGE_DOWNPAYMENTTOOLARGE = "Le D" + unescape("%E9") + "p" + unescape("%F4") + "t est plus " + unescape("%E9") + "lev" + unescape("%E9") + " que le Prix d'achat";
var ERRORMESSAGE_EMAIL_FORM = "Notre syst" + unescape("%E9") + "me n'a pas pu traiter votre request.Please v" + unescape("%E9") + "rifier que toutes les adresses de courriel sont inscrits correctement et essayez" + unescape("%E0") + "nouveau. Si le probl" + unescape("%E9") + "me persiste, s'il vous pla"+ unescape("%EE") + "t essayer de nouveau" + unescape("%E0") + "une date ult" + unescape("%E9") + "rieure.";
var ERRORMESSAGE_ENTER_REQUIRED_DATA = "Veuillez entrer des informations valides dans les champs obligatoires accentu" + unescape("%E9") + "s, puis envoyez votre requ" + unescape("%EA") + "te de nouveau.";
var ERRORMESSAGE_ENTER_REQUIRED_DATA_BACK_GMCL = "\nSi vous avez d" + unescape("%E9") + "j" + unescape("%E0") +"entr" + unescape("%E9") + "les informations, n'oubliez pas de v" + unescape("%E9") + "rifier votre orthographe.";
var ERRORMESSAGE_ENTER_REQUIRED_DATA_EMAIL_GMCL = "Information semble"+ unescape("%E9") + "tre mal orthographi" + unescape("%E9") + "ou inexactes.\nS'il vous pla"+ unescape("%EE") + "t entrer les informations dans les domaines suivants:";
var ERRORMESSAGE_ENTER_REQUIRED_DATA_FRONT_GMCL = "Renseignements semble faire d" + unescape("%E9") + "faut.\nS'il vous pla" + unescape("%EE") + "t entrer les informations dans les domaines suivants:";
var ERRORMESSAGE_ENTER_VALID_DATA = "Les informations saisies dans les champs accentu" + unescape("%E9") + "s ne sont pas valides. Veuillez entrer des informations valides, puis envoyez votre requ" + unescape("%EA") + "te de nouveau.";
var ERRORMESSAGE_GET_DIRECTIONS = "Veuillez renseigner les champs affich" + unescape("%E9") +"s en surbrillance ci-dessous."
var ERRORMESSAGE_INVALID_KEY = "La cl&eacute; donn&eacute;e est soit invalide ou ne correspond pas au domaine pour lequel elle a &eacute;t&eacute; donn&eacute;e.";
var ERRORMESSAGE_LOCATION_NOT_FOUND = "L'emplacement g&eacute;ographique correspondant n'a pu &ecirc;tre trouv&eacute; pour l'une des adresses indiqu&eacute;es. Cela pourrait &ecirc;tre d&ucirc; au fait que l'adresse est relativement nouvelle, ou elle pourrait &ecirc;tre incorrecte.";
var ERRORMESSAGE_NOT_PROCESSED = " La demande de g&eacute;ocodage ou de directions n'a pas pu &ecirc;tre trait&eacute;e avec succ&egrave;s, La raison exacte de l'&eacute;chec n'est pas connue.";
var ERRORMESSAGE_NO_NEAREST_DEALER = "Il n'y a aucun concessionnaire situ&eacute; dans ce code postal + la distance selectionn&eacute;e. Voi&ccedil;i les concessionnaires les plus proches ";
var ERRORMESSAGE_PARAMETER_MISSING = "Le param&egrave;tre HTTP q est absent ou n'a pas de valeur. Pour les demandes de g&eacute;ocodage, cela signifie qu'une adresse vide a &eacute;t&eacute; sp&eacute;cifi&eacute;e. Pour les demandes des directions, cela signifie qu'aucune demande n'a &eacute;t&eacute; sp&eacute;cifi&eacute;e.";
var ERRORMESSAGE_UNAVAILABLE_ADDRESS = "Le g&eacute;ocodage de l'adresse donn&eacute;e ou l'itin&eacute;raire pour la requ&ecirc;te directives donn&eacute;es ne peuvent &ecirc;tre renvoy&eacute;s pour des raisons l&eacute;gales ou contractuelles.";
var ERRORMESSAGE_UNKNOWN_DIRECTIONS = "GDirections l'objet n'a pas pu calculer les directions, entre les points mentionn&eacute;s dans la requ&ecirc;te. Ceci est habituellement parce qu'il n'y a pas d'itin&eacute;raire disponible entre les deux points, ou parce que nous ne disposons pas de donn&eacute;es pour le routage dans cette r&eacute;gion.";
var ERRORMESSAGE_UNKNOWN_ERROR = "Une erreur inconnue s'est produite.";
var ERROR_CODE = "Le code d'erreur";
var FACEBOOK_TOOLTIP = "Partager la page sur Facebook";
var FAVORITES_TOOLTIP = "Enregistrer comme favori";
var FLASH_UPDATE_MESSAGE = "XXX NO VALUE XXX";
var GET_A_QUOTE = "XXX NO VALUE XXX";
var GET_DIRECTIONS = "Obtenir les Directions";
var INVALID_FROM_ADDRESS = "S'il vous pla&icirc;t, entrez une adresse De valide";
var INVALID_ZIP_CODE = " n'est un code postal valide. S'il vous pla&icirc;t, entrez un code postal valide";
var INVENTORY = "XXX NO VALUE XXX";
var LEADFORM_FIELDSET_HIDEOPTIONAL = "XXX NO VALUE XXX";
var LEADFORM_FIELDSET_SHOWOPTIONAL = "XXX NO VALUE XXX";
var MILES = " kilom" + unescape("%E8") + "tres";
var NEW = "Neuf";
var NO_INVENTORY_AVAILABLE = "Rupture de stock";
var NON_CERTIFIED = "Non Certifi" + unescape("%E9");
var PREOWNED = "D'occasion";
var PRINTER_FRIENDLY_VERSION_TOOLTIP = "Imprimer la page";
var SALES = "XXX NO VALUE XXX";
var SCHEDULE_SERVICE = "XXX NO VALUE XXX";
var SELECT_ONE = "S" + unescape("%E9") + "lectionnez un(e)";
var SERVICE = "XXX NO VALUE XXX";
var SHOW_LOCATION = "XXX NO VALUE XXX";
var UP_TO = "Jusqu'" + unescape("%E0") + " ";
var USED = "D'occasion";
var VIEW = "XXX NO VALUE XXX";
var WEBSITE = "XXX NO VALUE XXX";
var SELECTED = "S&eacute;lectionn&eacute;";
var TWITTER_TOOLTIP = "Partager la page sur Twitter";
var EDIT_IN_PLACE_TOOLTIP = "Double Click to Edit this label";

// Constants for LSLP
var LINK_HOME = "XXX NO VALUE XXX";
var LINK_INVENTORY = "XXX NO VALUE XXX";
var LINK_SPECIALS = "XXX NO VALUE XXX";
var LINK_SERVICE = "XXX NO VALUE XXX";
var SEE_DETAILS = "voyez les d"+unescape("%E9")+"tails ";
var MOUSE_OFF_TO_HIDE_DETAILS= unescape("%E9")+"loignez la souris pour fermer les d"+unescape("%E9")+"tails ";
var READ_MORE = "Lisez moins";
var READ_LESS = "Lisez plus";

//Localization content for Video
var VIDEO_CONTENT_NOT_AVAILABLE = "XXX NO VALUE XXX";
/* 
* Chris-T: Adding two new methods, getType() and setType() for CIR.
*/
var i18nLabels = {
	getLocation : function() { return (i18nLabels["location"] || ALL_LOCATIONS); },
	getMake : function() { return (i18nLabels["make"] || ALL_MAKES); },
	getModel : function() { return (i18nLabels["model"] || ALL_MODELS); },
	getSearchType : function() { return (i18nLabels["searchType"] || ALL_TYPES); },
	getType : function() { return (i18nLabels["searchType"] || ALL_TYPES); },
	getTrim : function() { return (i18nLabels["trim"] || ALL_TRIMS); },
	setLocation : function(locationLabel) { i18nLabels["location"] = locationLabel; },
	setMake : function(makeLabel) { i18nLabels["make"] = makeLabel; },
	setModel : function(modelLabel) { i18nLabels["model"] = modelLabel; },
	setSearchType : function(searchTypeLabel) { i18nLabels["searchType"] = searchTypeLabel; },
	setType : function(searchTypeLabel) { i18nLabels["searchType"] = searchTypeLabel; },
	setTrim : function(trimLabel) { i18nLabels["trim"] = trimLabel; }
};

var payCalc = {
	getFormattedPrice : function(price, decimalPlaces) {
		if (arguments.length == 1) var decimalPlaces = 0;
		var formattedPrice = "$" + getFormattedNumber(price, decimalPlaces);
		return formattedPrice;
	}
};

function getFormattedNumber(num, decimalPlaces) {
	if (arguments.length == 1) var decimalPlaces = 0;
	numPieces = new String(num).split(".");
	var wholeNum = numPieces[0];
	var formattedNum = "";
	var place = -1;
	for (var i=wholeNum.length-1; i>=0; i--) {
		if ((++place % 3 == 0) && (place > 0)) formattedNum = "," + formattedNum;
		formattedNum = wholeNum.charAt(i) + formattedNum;
	}
	if (decimalPlaces > 0) {
		var fraction = (numPieces.length > 1) ? numPieces[1] : "";
		if (fraction.length < decimalPlaces) {
			for (var j=fraction.length; j<=decimalPlaces; j++) fraction = fraction + "0";
		}
		truncatedFraction = fraction.substring(0, decimalPlaces);
		formattedNum += "." + truncatedFraction;
	}
	return formattedNum;
}

/** DEPRECATED **/
var ERROR_SELECTMAKEMODEL = "Veuillez choisir une marque et un mod" + unescape("%E8") + "le de v" + unescape("%E9") + "hicule.";
var FORM_PREOWNED = "Occasion";
var FORM_CERTIFIED = "Certifi" + unescape("%E9");

function showmilesWithComma(strregexp,domEle) {
	var strregexp=strregexp.toString();
	var objRegExp  = new RegExp('(-?[0-9]+)([0-9]{3})');
	 while(objRegExp.test(strregexp)) 
	 {
       	strregexp = strregexp.replace(objRegExp, '$1 $2');
     }
	jQuery(domEle).val(strregexp);		
}

