/*
 * 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 = ["m","d","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_THIRTYONEDAYMONTHS + _VALIDATION_DATE_DL + _VALIDATION_DATE_THIRTYONEDAYS + ")|(" + _VALIDATION_DATE_THIRTYDAYMONTHS + _VALIDATION_DATE_DL + _VALIDATION_DATE_THIRTYDAYS + "))" + _VALIDATION_DATE_DL + _VALIDATION_DATE_ALLYEARS + ")|(" + _VALIDATION_DATE_FEBRUARY + _VALIDATION_DATE_DL + "((" + _VALIDATION_DATE_TWENTYEIGHTDAYS + _VALIDATION_DATE_DL + _VALIDATION_DATE_NOTLEAPYEARS + ")|(" + _VALIDATION_DATE_TWENTYNINEDAYS + _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("^([" + _VALIDATION_NUMERIC + "]{5}((-| )[" + _VALIDATION_NUMERIC + "]{4})?)?$");
var _VALIDATION_SSN = new RegExp("^([" + _VALIDATION_NUMERIC + "]{3}-[" + _VALIDATION_NUMERIC + "]{2}-[" + _VALIDATION_NUMERIC + "]{4})?$");
var _VALIDATION_NAME = "^0-9\"\\`\\~\\^\\$\\@\\#\\&\\|\\!\\_\\;\\:\\,\\.\\?\\<\\>\\(\\)\\[\\]\\{\\}\\+\\*\\-\\/\\\\%\\=";
var _VALIDATION_ZIP_LENGTH = 5;

// 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 = "Todas las ubicaciones";
var ALL_MAKES = "Todas las marcas";
var ALL_MODELS = "Todos los modelos";
var ALL_TRIMS = "Todas las opciones de ornamentaci" + unescape("%F3") + "n";
var ALL_TYPES = "Todos los tipos";
var ANY = "Cualquiera";
var BROWSE_INVENTORY = "XXX NO VALUE XXX";
var BOOKMARK_ERROR_MSG = "Prensa <Ctrl>+D para marcar";
var CERTIFIED = "Certificado";
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 = "Enviar a un amigo" ;
var EMAILAFRIEND_IS_UNAVAILABLE = "Enviar a un amigo no est" +  unescape("%E1") +" disponible";
var ENTER_ZIP = "Introduzca el c&oacute;digo postal";
var ERRORMESSAGE_BAD_REQUEST = " Unas direcciones no puede ser analizar correctamente.";
var ERRORMESSAGE_CAPTCHA_VERIFICATION = "XXX NO VALUE XXX";
var ERRORMESSAGE_DOWNPAYMENTTOOLARGE = "Entrada incorrecta. Revise la informaci" + unescape("%F3") + "n ingresada y vuelva a intentarlo.";
var ERRORMESSAGE_EMAIL_FORM = "XXX NO VALUE XXX";
var ERRORMESSAGE_ENTER_REQUIRED_DATA = "Ingrese un valor en todos los campos obligatorios.";
var ERRORMESSAGE_ENTER_REQUIRED_DATA_BACK_GMCL = "XXX NO VALUE XXX";
var ERRORMESSAGE_ENTER_REQUIRED_DATA_EMAIL_GMCL = "XXX NO VALUE XXX";
var ERRORMESSAGE_ENTER_REQUIRED_DATA_FRONT_GMCL = "XXX NO VALUE XXX";
var ERRORMESSAGE_ENTER_VALID_DATA = "La informaci&oacute;n ingresada no es v&aacute;lida para los destacados campos. Ingrese informaci&oacute;n v&aacute;lida y vuelva a presentar su solicitud.";
var ERRORMESSAGE_GET_DIRECTIONS = "Complete los campos que aparecen resaltados abajo."
var ERRORMESSAGE_INVALID_KEY = "La clave dada es v&aacute;lido o no coincide con el dominio para el que fue dado.";
var ERRORMESSAGE_LOCATION_NOT_FOUND = "La ubicaci&oacute;n geogr&aacute;fica correspondiente, no podr&iacute;a ser encontrada por una de las direcciones especificadas. Esto puede ser debido al hecho de que la direcci&oacute;n es relativamente nueva, o puede ser incorrecta.";
var ERRORMESSAGE_NOT_PROCESSED = "La geocodificaci&oacute;n de direcciones o solicitud no pudo ser procesada, sin embargo, no es conocida.";
var ERRORMESSAGE_NO_NEAREST_DEALER = "No hay distribuidores en el c&oacute;digo postal + distancia que ha seleccionado. &Eacute;stos son los m&aacute;s cercanos los distribuidores";
var ERRORMESSAGE_PARAMETER_MISSING = "El par&aacute;metro HTTP faltaba o no ten&iacute;a valor. Para las solicitudes de geocoder, esto significa que un discurso vac&iacute;o se ha especificado como entrada. Para las solicitudes de direcciones, esto significa que la consulta no se ha especificado en la entrada.";
var ERRORMESSAGE_UNAVAILABLE_ADDRESS = "La codificaci&oacute;n geogr&aacute;fica para la direcci&oacute;n indicada, o la ruta para la consulta dado instrucciones no pueden ser devueltos por razones legales o contractuales.";
var ERRORMESSAGE_UNKNOWN_DIRECTIONS = "La GDirections objeto no pod&iacute;a calcular direcciones entre los puntos mencionados en la consulta. Esto es normalmente porque no hay una ruta disponible entre los dos puntos, o porque no tenemos datos para el encaminamiento en esa regi&oacute;n.";
var ERRORMESSAGE_UNKNOWN_ERROR = "Ocurri&oacute; un error desconocido.";
var ERROR_CODE = "C&oacute;digo de error";
var FACEBOOK_TOOLTIP = "Compartir p&aacute;gina en Facebook";
var FAVORITES_TOOLTIP = "Marcar como favorito";
var FLASH_UPDATE_MESSAGE = "XXX NO VALUE XXX";
var GET_A_QUOTE = "XXX NO VALUE XXX";
var GET_DIRECTIONS = "Obtenga direcci&oacute;nes";
var INVALID_FROM_ADDRESS = "Por favor introduce una direcci&oacute;n de su";
var INVALID_ZIP_CODE = "es un c&oacute;digo postal inv&aacute;lido. Por favor, admite un c&oacute;digo postal v&aacute;lido";
var INVENTORY = "XXX NO VALUE XXX";
var LEADFORM_FIELDSET_HIDEOPTIONAL = "XXX NO VALUE XXX";
var LEADFORM_FIELDSET_SHOWOPTIONAL = "XXX NO VALUE XXX";
var MILES = " millas";
var NEW = "Nuevo";
var NO_INVENTORY_AVAILABLE = "No hay inventario disponible";
var NON_CERTIFIED = "No certificado";
var PREOWNED = "Usado";
var PRINTER_FRIENDLY_VERSION_TOOLTIP = "Imprimir p&aacute;gina";
var SALES = "XXX NO VALUE XXX";
var SCHEDULE_SERVICE = "XXX NO VALUE XXX";
var SELECT_ONE = "Seleccione uno";
var SERVICE = "XXX NO VALUE XXX";
var SHOW_LOCATION = "XXX NO VALUE XXX";
var UP_TO = "Hasta ";
var USED = "Usado";
var VIEW = "XXX NO VALUE XXX";
var WEBSITE = "XXX NO VALUE XXX";
var SELECTED = "Seleccionado";
var TWITTER_TOOLTIP = "Compartir p&aacute;gina en 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 = "vea los detalles";
var MOUSE_OFF_TO_HIDE_DETAILS= "mouse fuera para ver los detalles";
var READ_MORE = "Leer m&aacute;s";
var READ_LESS = "Leer menos";

//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 = "Seleccione una marca y modelo de veh&iacute;culo.";
var FORM_PREOWNED = "Usado";
var FORM_CERTIFIED = "Certificado";

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);		
}

