var defaultEmptyOK = false
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnñopqrstuvwxyzçáéíóúïü"
var uppercaseLetters = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZÇÁÉÍÓÚÏÜ"
var whitespace = " \t\n\r";
var decimalPointDelimiter = ","
var phoneNumberDelimiters = "()- ";
var DateDelimiters = "/-"
var validUSPhoneChars = digits + phoneNumberDelimiters;
var validWorldPhoneChars = digits + phoneNumberDelimiters + "+";
var SSNDelimiters = "- ";
var validSSNChars = digits + SSNDelimiters;
var digitsInSocialSecurityNumber = 9;
var digitsInUSPhoneNumber = 10;
var ZIPCodeDelimiters = "-";
var ZIPCodeDelimeter = "-"
var validZIPCodeChars = digits + ZIPCodeDelimiters
var digitsInZIPCode1 = 5
var digitsInZIPCode2 = 9
var USStateCodeDelimiter = "|";
var USStateCodes = "AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY|AE|AA|AE|AE|AP"
var creditCardDelimiters = " "
function makeArray(n) {
for (var i = 1; i <= n; i++) {
this[i] = 0
}
return this
}
function charInString (c, s)
{   for (i = 0; i < s.length; i++)
{   if (s.charAt(i) == c) return true;
}
return false
}
var daysInMonth = makeArray(12);
daysInMonth[1] = 31;
daysInMonth[2] = 29;
daysInMonth[3] = 31;
daysInMonth[4] = 30;
daysInMonth[5] = 31;
daysInMonth[6] = 30;
daysInMonth[7] = 31;
daysInMonth[8] = 31;
daysInMonth[9] = 30;
daysInMonth[10] = 31;
daysInMonth[11] = 30;
daysInMonth[12] = 31;
function isField (s)
{
var DotPos = s.indexOf(".");
if (DotPos > -1)
{
var sFormName = s.substring(0, DotPos);
var sFieldName = s.substring(DotPos+1, s.length);
var iFrm = -1;
for (var i=0 ; i<document.forms.length ; i++)
{
if (document.forms[i].name.toLowerCase() == sFormName.toLowerCase()) { iFrm = i; break;}
}
if (iFrm == -1) return false;
for (i=0 ; i < document.forms[iFrm].elements.length ; i++)
{
if (document.forms[iFrm].elements[i].name.toLowerCase() == sFieldName.toLowerCase()) return true;
}
return false;
}
else
{
for (i=0 ; i<document.forms.length ; i++)
{
for (j=0 ; j<document.forms[i].elements.length ; j++)
{
if (document.forms[i].elements[j].name.toLowerCase() == s.toLowerCase()) return true;
}
}
return false;
}
}
function GetField (s)
{
var DotPos = s.indexOf(".");
if (DotPos > -1)
{
var sFormName = s.substring(0, DotPos);
var sFieldName = s.substring(DotPos+1, s.length);
var iFrm = -1;
for (var i=0 ; i<document.forms.length ; i++)
{
if (document.forms[i].name.toLowerCase() == sFormName.toLowerCase()) { iFrm = i; break;}
}
if (iFrm == -1) return null;
for (i=0 ; i < document.forms[iFrm].elements.length ; i++)
{
if (document.forms[iFrm].elements[i].name.toLowerCase() == sFieldName.toLowerCase()) return document.forms[iFrm].elements[document.forms[iFrm].elements[i].name];
}
return null;
}
else
{
for (i=0 ; i<document.forms.length ; i++)
{
for (j=0 ; j<document.forms[i].elements.length ; j++)
{
if (document.forms[i].elements[j].name.toLowerCase() == s.toLowerCase()) return document.forms[i].elements[document.forms[i].elements[j].name];
}
}
return null;
}
}
function FieldType(s)
{
var fld = GetField(s);
if (!fld) return "";
var IsArr = !!(fld[0]);
var sType = "";
if (IsArr)
{
var IsList = fld.options ? true : false;
if (IsList)
sType = fld.type;
else
sType = fld[0].type;
}
else
{
sType = fld.type;
}
return sType;
}
function ValueOf (s)
{
var res = "";
var fld = GetField(s);
if (!fld) return "";
var IsArr = !!(fld[0]);
if (IsArr)
{
var IsList = fld.options ? true : false;
if (IsList)
{
res = (fld.selectedIndex >= 0) ? fld.options[fld.selectedIndex].value : "";
}
else
{
var sType = FieldType(s);
if (sType == "radio" || sType == "checkbox")
{
for (var i=0; i<fld.length ; i++)
{
if (fld[i].checked){ res = fld[i].value; break;}
}
}
else
{
for (i=0; i<fld.length ; i++)
{
if (fld[i].value != ""){ res = fld[i].value; break;}
}
}
}
}
else
{
var sType = FieldType(s);
if (sType == "radio" || sType == "checkbox")
{
if (fld.checked) res = fld.value;
}
else
{
res = fld.value;
}
}
return res;
}
function isEmpty(s)
{
if (isField(s)) s = ValueOf(s);
return ((s == null) || (s.length == 0))
}
function isWhitespace (s)
{
//if (isField(s)) s = ValueOf(s);
var i;
//if (isEmpty(s)) return true;
for (i = 0; i < s.length; i++)
{
var c = s.charAt(i);
if (whitespace.indexOf(c) == -1) return false;
}
return true;
}
function isValidFormat (s, f)
{
if (isField(s)) s = ValueOf(s);
if (isEmpty(s))
{
if (isValidFormat.arguments.length == 1) return defaultEmptyOK;
else return (isValidFormat.arguments[1] == true);
}
if (s == "" || f == "") return false;
var re = new RegExp(f);
var res = re.test(s);
if (res)
return true;
else
return false;
}
function isLetter (c)
{
if (isField(c)) c = ValueOf(c);
return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
}
function isDigit(c) {
    if (isField(c)) c = ValueOf(c);
    var plant = /^\d+$/gi;
    if (plant.test(c)) {
        return true;
    } else {
        return false;
    }
}
function isArray(oVar)
{
if (!!oVar[0])
{
return true;
}
else
{
return false;
}
}
function isLetterOrDigit (c)
{
if (isField(c)) c = ValueOf(c);
return (isLetter(c) || isDigit(c))
}
function isInteger (s)
{
if (isField(s)) s = ValueOf(s);
var i;
if (isEmpty(s))
if (isInteger.arguments.length == 1) return defaultEmptyOK;
else return (isInteger.arguments[1] == true);
for (i = 0; i < s.length; i++)
{
var c = s.charAt(i);
if (!isDigit(c)) return false;
}
return true;
}
function isSignedInteger (s)
{
if (isField(s)) s = ValueOf(s);
if (isEmpty(s))
if (isSignedInteger.arguments.length == 1) return defaultEmptyOK;
else return (isSignedInteger.arguments[1] == true);
else {
var startPos = 0;
var secondArg = defaultEmptyOK;
if (isSignedInteger.arguments.length > 1)
secondArg = isSignedInteger.arguments[1];
if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
startPos = 1;
return (isInteger(s.substring(startPos, s.length), secondArg))
}
}
function isPositiveInteger (s)
{
if (isField(s)) s = ValueOf(s);
var secondArg = defaultEmptyOK;
if (isPositiveInteger.arguments.length > 1)
secondArg = isPositiveInteger.arguments[1];
return (isSignedInteger(s, secondArg)
&& ( (isEmpty(s) && secondArg)  || (parseInt(s,10) > 0) ) );
}
function isNonnegativeInteger (s)
{
if (isField(s)) s = ValueOf(s);
var secondArg = defaultEmptyOK;
if (isNonnegativeInteger.arguments.length > 1)
secondArg = isNonnegativeInteger.arguments[1];
return (isSignedInteger(s, secondArg)
&& ( (isEmpty(s) && secondArg)  || (parseInt(s,10) >= 0) ) );
}
function isNegativeInteger (s)
{
if (isField(s)) s = ValueOf(s);
var secondArg = defaultEmptyOK;
if (isNegativeInteger.arguments.length > 1)
secondArg = isNegativeInteger.arguments[1];
return (isSignedInteger(s, secondArg)
&& ( (isEmpty(s) && secondArg)  || (parseInt(s,10) < 0) ) );
}
function isNonpositiveInteger (s)
{
if (isField(s)) s = ValueOf(s);
var secondArg = defaultEmptyOK;
if (isNonpositiveInteger.arguments.length > 1)
secondArg = isNonpositiveInteger.arguments[1];
return (isSignedInteger(s, secondArg)
&& ( (isEmpty(s) && secondArg)  || (parseInt(s,10) <= 0) ) );
}
function isFloat (s)
{
if (isField(s)) s = ValueOf(s);
var i;
var seenDecimalPoint = false;
if (isEmpty(s))
if (isFloat.arguments.length == 1) return defaultEmptyOK;
else return (isFloat.arguments[1] == true);
if (s == decimalPointDelimiter) return false;
for (i = 0; i < s.length; i++)
{
var c = s.charAt(i);
if ((c == decimalPointDelimiter) && !seenDecimalPoint) seenDecimalPoint = true;
else if (!isDigit(c)) return false;
}
return true;
}
function isSignedFloat (s)
{
if (isField(s)) s = ValueOf(s);
if (isEmpty(s))
if (isSignedFloat.arguments.length == 1) return defaultEmptyOK;
else return (isSignedFloat.arguments[1] == true);
else {
var startPos = 0;
var secondArg = defaultEmptyOK;
if (isSignedFloat.arguments.length > 1)
secondArg = isSignedFloat.arguments[1];
if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
startPos = 1;
return (isFloat(s.substring(startPos, s.length), secondArg))
}
}
function isAlphabetic (s)
{
if (isField(s)) s = ValueOf(s);
var i;
if (isEmpty(s))
if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
else return (isAlphabetic.arguments[1] == true);
for (i = 0; i < s.length; i++)
{
var c = s.charAt(i);
if (!isLetter(c))
return false;
}
return true;
}
function isAlphanumeric (s)
{
if (isField(s)) s = ValueOf(s);
var i;
if (isEmpty(s))
if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
else return (isAlphanumeric.arguments[1] == true);
for (i = 0; i < s.length; i++)
{
var c = s.charAt(i);
if (! (isLetter(c) || isDigit(c) ) )
return false;
}
return true;
}
function isSSN (s)
{
if (isField(s)) s = ValueOf(s);
if (isEmpty(s))
if (isSSN.arguments.length == 1) return defaultEmptyOK;
else return (isSSN.arguments[1] == true);
return (isInteger(s) && s.length == digitsInSocialSecurityNumber)
}
function isUSPhoneNumber (s)
{
if (isField(s)) s = ValueOf(s);
if (isEmpty(s))
if (isUSPhoneNumber.arguments.length == 1) return defaultEmptyOK;
else return (isUSPhoneNumber.arguments[1] == true);
return (isInteger(s) && s.length == digitsInUSPhoneNumber)
}
function isInternationalPhoneNumber (s)
{
if (isField(s)) s = ValueOf(s);
if (isEmpty(s))
if (isInternationalPhoneNumber.arguments.length == 1) return defaultEmptyOK;
else return (isInternationalPhoneNumber.arguments[1] == true);
return (isPositiveInteger(s))
}
function isZIPCode (s)
{
if (isField(s)) s = ValueOf(s);
if (isEmpty(s))
if (isZIPCode.arguments.length == 1) return defaultEmptyOK;
else return (isZIPCode.arguments[1] == true);
return (isInteger(s) &&
((s.length == digitsInZIPCode1) ||
(s.length == digitsInZIPCode2)))
}
function isStateCode(s)
{
if (isField(s)) s = ValueOf(s);
if (isEmpty(s))
if (isStateCode.arguments.length == 1) return defaultEmptyOK;
else return (isStateCode.arguments[1] == true);
return ( (USStateCodes.indexOf(s) != -1) &&
(s.indexOf(USStateCodeDelimiter) == -1) )
}
function isEmail (s)
{
if (isField(s)) s = ValueOf(s);
if (isEmpty(s))
if (isEmail.arguments.length == 1) return defaultEmptyOK;
else return (isEmail.arguments[1] == true);
if (isWhitespace(s)) return false;
var i = 1;
var sLength = s.length;
while ((i < sLength) && (s.charAt(i) != "@"))
{ i++
}
if ((i >= sLength) || (s.charAt(i) != "@")) return false;
else i += 2;
while ((i < sLength) && (s.charAt(i) != "."))
{ i++
}
if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
else return true;
}
function isYear (s)
{
if (isField(s)) s = ValueOf(s);
if (isEmpty(s))
if (isYear.arguments.length == 1) return defaultEmptyOK;
else return (isYear.arguments[1] == true);
if (!isNonnegativeInteger(s)) return false;
return ((s.length == 2) || (s.length == 4));
}
function isNumberInRange (s, a, b)
{
if (isField(s)) s = ValueOf(s);
if (isEmpty(s))
if (isNumberInRange.arguments.length == 1) return defaultEmptyOK;
else return (isNumberInRange.arguments[1] == true);
var num = parseFloat (s);
return ((num >= a) && (num <= b));
}
function isMonth (s)
{
if (isField(s)) s = ValueOf(s);
if (isEmpty(s))
if (isMonth.arguments.length == 1) return defaultEmptyOK;
else return (isMonth.arguments[1] == true);
return isNumberInRange (s, 1, 12);
}
function isDay (s)
{
if (isField(s)) s = ValueOf(s);
if (isEmpty(s))
if (isDay.arguments.length == 1) return defaultEmptyOK;
else return (isDay.arguments[1] == true);
return isNumberInRange (s, 1, 31);
}
function isLeapYear(s)
{
if (((s % 4)==0) && ((s % 100)!=0) || ((s % 400)==0)) {
return (true);
}
else {
return (false);
}
}
function getDaysInMonth(month,year)  {
var days;
if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)  days=31;
else if (month==4 || month==6 || month==9 || month==11) days=30;
else if (month==2)  {
	  if (isLeapYear(year))
{
days=29;
}
else
{
days=28;
}
}
return (days);
}
function daysInFebruary (year)
{
return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}
function IsCorrectDayofMonth(day, month, year)
{
var intYear = parseInt(year,10);
var intMonth = parseInt(month,10);
var intDay = parseInt(day,10);
if (intDay > getDaysInMonth(month, year)) return false;
return true;
}
function isDate (s)
{
if (isField(s)) s = ValueOf(s);
if (isEmpty(s))
if (isDate.arguments.length == 1) return defaultEmptyOK;
else return (isDate.arguments[1] == true);
var Pos1 = 0;
var Pos2 = 0;
while ( isDigit(s.charAt(Pos1)) && Pos1 < s.length)
{
Pos1++;
}
var delim = s.charAt(Pos1);
if (DateDelimiters.indexOf(delim) == -1) return false;
Pos2 = s.indexOf(delim, Pos1+1);
var sPart1 = s.slice(0,Pos1);
var sPart2 = s.slice(Pos1+1, Pos2)
var sPart3 = s.slice(Pos2+1)

if ((isPositiveInteger(sPart1) && isPositiveInteger(sPart2) && isPositiveInteger(sPart3)))
{
if (sPart1.length > 2 || sPart2.length > 2 || sPart3.length != 4) return false;
if (IsCorrectDayofMonth(sPart1, sPart2, sPart3) || IsCorrectDayofMonth(sPart2, sPart1, sPart3)) return true;
return false;
}
else
{
return false;
}
}
function isDateInRange (d, sMin, sMax)
{
if (isField(d)) d = ValueOf(d);
if (isEmpty(d))
if (isNumberInRange.arguments.length == 1) return defaultEmptyOK;
else return (isNumberInRange.arguments[1] == true);
if (!(isDate(d) && isDate(sMin) && isDate(sMax))) return false;
var Fecha = new Date(d);
var Fecha1 = new Date(sMin);
var Fecha2 = new Date(sMax);
if (Fecha > Fecha1 && Fecha < Fecha2)
{
return true;
}
else
{
return false;
}
}
function stripCharsInBag (s, bag)
{   var i;
var returnString = "";
for (i = 0; i < s.length; i++)
{
var c = s.charAt(i);
if (bag.indexOf(c) == -1) returnString += c;
}
return returnString;
}
function stripCharsNotInBag (s, bag)
{   var i;
var returnString = "";
for (i = 0; i < s.length; i++)
{
var c = s.charAt(i);
if (bag.indexOf(c) != -1) returnString += c;
}
return returnString;
}
function stripWhitespace (s)
{   return stripCharsInBag (s, whitespace)
}
function stripInitialWhitespace (s)
{   var i = 0;
while ((i < s.length) && charInString (s.charAt(i), whitespace))
i++;
return s.substring (i, s.length);
}
function reformat (s)
{   var arg;
var sPos = 0;
var resultString = "";
for (var i = 1; i < reformat.arguments.length; i++) {
arg = reformat.arguments[i];
if (i % 2 == 1) resultString += arg;
else {
resultString += s.substring(sPos, sPos + arg);
sPos += arg;
}
}
return resultString;
}
function reformatZIPCode (ZIPString)
{   if (ZIPString.length == 5) return ZIPString;
else return (reformat (ZIPString, "", 5, "-", 4));
}
function reformatUSPhone (USPhone)
{   return (reformat (USPhone, "(", 3, ") ", 3, "-", 4))
}
function reformatSSN (SSN)
{   return (reformat (SSN, "", 3, "-", 2, "-", 4))
}


function isCreditCard(st)
{
if (isField(st)) st = ValueOf(st);
if (st.length > 19)
return (false);
sum = 0; mul = 1; l = st.length;
for (i = 0; i < l; i++) {
digit = st.substring(l-i-1,l-i);
tproduct = parseInt(digit ,10)*mul;
if (tproduct >= 10)
sum += (tproduct % 10) + 1;
else
sum += tproduct;
if (mul == 1)
mul++;
else
mul--;
}
if ((sum % 10) == 0)
return (true);
else
return (false);
}

function isVisa(cc)
{
if (isField(cc)) cc = ValueOf(cc);
if (((cc.length == 16) || (cc.length == 13)) &&
(cc.substring(0,1) == 4))
return isCreditCard(cc);
return false;
}

function isMasterCard(cc)
{
if (isField(cc)) cc = ValueOf(cc);
firstdig = cc.substring(0,1);
seconddig = cc.substring(1,2);
if ((cc.length == 16) && (firstdig == 5) &&
((seconddig >= 1) && (seconddig <= 5)))
return isCreditCard(cc);
return false;
}

function isAmericanExpress(cc)
{
if (isField(cc)) cc = ValueOf(cc);
firstdig = cc.substring(0,1);
seconddig = cc.substring(1,2);
if ((cc.length == 15) && (firstdig == 3) &&
((seconddig == 4) || (seconddig == 7)))
return isCreditCard(cc);
return false;
}

function isDinersClub(cc)
{
if (isField(cc)) cc = ValueOf(cc);
firstdig = cc.substring(0,1);
seconddig = cc.substring(1,2);
if ((cc.length == 14) && (firstdig == 3) &&
((seconddig == 0) || (seconddig == 6) || (seconddig == 8)))
return isCreditCard(cc);
return false;
}

function isCarteBlanche(cc)
{
return isDinersClub(cc);
}

function isDiscover(cc)
{
if (isField(cc)) cc = ValueOf(cc);
first4digs = cc.substring(0,4);
if ((cc.length == 16) && (first4digs == "6011"))
return isCreditCard(cc);
return false;
}

function isEnRoute(cc)
{
if (isField(cc)) cc = ValueOf(cc);
first4digs = cc.substring(0,4);
if ((cc.length == 15) &&
((first4digs == "2014") ||
(first4digs == "2149")))
return isCreditCard(cc);
return false;
}

function isJCB(cc)
{
if (isField(cc)) cc = ValueOf(cc);
first4digs = cc.substring(0,4);
if ((cc.length == 16) &&
((first4digs == "3088") ||
(first4digs == "3096") ||
(first4digs == "3112") ||
(first4digs == "3158") ||
(first4digs == "3337") ||
(first4digs == "3528")))
return isCreditCard(cc);
return false;
}

function isAnyCard(cc)
{
if (isField(cc)) cc = ValueOf(cc);
if (!isCreditCard(cc))
return false;
if (!isMasterCard(cc) && !isVisa(cc) && !isAmericanExpress(cc) && !isDinersClub(cc) &&
!isDiscover(cc) && !isEnRoute(cc) && !isJCB(cc)) {
return false;
}
return true;
}

function isCardMatch (cardType, cardNumber)
{
if (isField(cardType)) cardType = ValueOf(cardType);
if (isField(cardNumber)) cardNumber = ValueOf(cardNumber);
cardType = cardType.toUpperCase();
var doesMatch = true;
if ((cardType == "VISA") && (!isVisa(cardNumber)))
doesMatch = false;
if ((cardType == "MASTERCARD") && (!isMasterCard(cardNumber)))
doesMatch = false;
if ( ( (cardType == "AMERICANEXPRESS") || (cardType == "AMEX") )
&& (!isAmericanExpress(cardNumber))) doesMatch = false;
if ((cardType == "DISCOVER") && (!isDiscover(cardNumber)))
doesMatch = false;
if ((cardType == "JCB") && (!isJCB(cardNumber)))
doesMatch = false;
if ((cardType == "DINERS") && (!isDinersClub(cardNumber)))
doesMatch = false;
if ((cardType == "CARTEBLANCHE") && (!isCarteBlanche(cardNumber)))
doesMatch = false;
if ((cardType == "ENROUTE") && (!isEnRoute(cardNumber)))
doesMatch = false;
return doesMatch;
}
var vbCr = "\r";
var vbLf = "\n";
var vbCrLf = vbCr+vbLf;
var vbTab = "\t";
function Left(s, n){
if(n>s.length)
n=s.length;
return s.substring(0, n);
}
function Right(s, n){
var t=s.length;
if(n>t)
n=t;
return s.substring(t-n, t);
}
function Mid(s, n, c){
var numargs=Mid.arguments.length;
if(numargs<3)
c=s.length-n+1;
if(c<1)
c=s.length-n+1;
if(n+c >s.length)
c=s.length-n+1;
if(n>s.length)
return "";
return s.substring(n-1,n+c-1);
}
function LTrim(s){
var i=0;
var j=0;
for(i=0; i<=s.length-1; i++)
if(s.substring(i,i+1) != ' '){
j=i;
break;
}
return s.substring(j, s.length);
}
function RTrim(s){
var j=0;
for(var i=s.length-1; i>-1; i--)
if(s.substring(i,i+1) != ' '){
j=i;
break;
}
return s.substring(0, j+1);
}
function Trim(s){
return LTrim(RTrim(s));
}
function InStr(n, s1, s2){
var numargs=InStr.arguments.length;
if(numargs<3)
return n.indexOf(s1)+1;
else
return s1.indexOf(s2, n)+1;
}
function InStrReverse(n, s1, s2){
var numargs=InStrReverse.arguments.length;
if(numargs<3)
return n.lastIndexOf(s1)+1;
else
return s1.lastIndexOf(s2, n)+1;
}
function Space(n){
var t="";
for(var i=1; i<=n; i++)
t=t+" ";
return t;
}
function jString(n, c){
var t="";
for(var i=1; i<=n; i++)
t=t+c;
return t;
}
function UCase(s){
return s.toUpperCase();
}
function LCase(s){
return s.toLowerCase();
}
function Len(s){
return s.length;
}
function StrReverse(s){
var i=s.length;
var t="";
while(i>-1){
t=t+ s.substring(i,i+1);
i--;
}
return t;
}
