var digits = "0123456789";
var whitespace = " \t\n\r";
var decimalPointDelimiter = "."
var digitsInPin = 4
var digitsInPuk = 8
var digitsInPTzipCode1 = 4
var digitsInPTzipCode2 = 3
var digitsInTaxNumber = 9
var digitsInPhone = 9
var maxDigitsInAccount = 9
var minDigitsInPwd = 4
var maxDigitsInPwd = 10
var mobilePrefixes= new Array("91", "92", "93", "96");
var phonePrefixes = new Array("2", "91", "92", "93", "96");
var landlinePhonePrefixes = new Array("2");
var iEmail = "Este campo deve ser um endereço de email válido (exemplo: nome@vodafone.pt)"
var iDay = "O dia deve ser um número entre 1 e 31."
var iMonth = "O mês deve ser um número entre 1 e 12"
var iYear = "O ano deve ser um número de 4 dígitos"
var iBirthYear = "O ano deve ser um número de 4 dígitos maior ou igual a 1900."
var iBirthDateGreateThanToday = "A data de nascimento não pode ser superior à actual."
var iDateSmallerThanTodaySuffix = " não pode ser inferior à actual.";
var iDateGreaterThanTodayPrefix = "A ";
var iDateGreaterThanTodaySuffix = " não pode ser superior à actual.";
var iDatePrefix = "O dia, mês e ano da "
var iDateSuffix = " não representam uma data válida"
var iDateGTPrefix = "A data "
var iDateGTSuffix = " deve ser superior à data actual."
var iPin = "O PIN deverá ser preenchido com 4 dígitos"
var iPuk = "O PUK deverá ser preenchido com 8 dígitos"
var iPTzipCode1 = "O primeiro campo do código postal deverá ser preenchido com 4 dígitos."
var iPTzipCode2 = "O segundo campo do código postal deverá ser preenchido com 3 dígitos."
var iPTzipCodeZeros = "Código postal inválido!"
var iTaxNumber = "Número Fiscal inválido."
var iPhone = "O telefone deverá ser um número de 9 dígitos e começar por 2, 91, 92, 93 ou 96"
var iTelecelMobile = "Número de telemóvel inválido."
var iTelecelAccount = "O número de conta deverá ser preenchido com um máximo de 9 dígitos."
var iPwd = "A password deverá conter 4 a 10 caracteres válidos (números, os caracteres subscrito e ponto final e letras não acentuadas)."
var iConfirmPwd = "A confirmação não é igual à nova password."
var defaultEmptyOK = false
// decimal point character differs by language and culture
var decimalPointDelimiter = ".";
var commaDelimiter = ",";
var iBINumber = "Número de BI inválido.";

function makeArray(n) {
   for (var i = 1; i <= n; i++) {
      this[i] = 0
   } 
   return this
}
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 isEmpty(s) {   
	return ((s == null) || (s.length == 0))
}
function isWhitespace (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 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 charInString (c, s)
{
	for (i = 0; i < s.length; i++) {
		if (s.charAt(i) == c) return true;
    	}
    	return false
}
function stripInitialWhitespace (s)
{
	var i = 0;
	while ((i < s.length) && charInString (s.charAt(i), whitespace))
       		i++;
	return s.substring (i, s.length);
}
function stripFinalWhitespace (s)
{   
	var i = (s.length) -1;
	while (i>0 && charInString (s.charAt(i), whitespace))
		i--;
	return s.substring(0,i+1);
}
function stripLeftZeros (s)
{   
	var i = 0;
	while ((i < (s.length -1) ) && charInString (s.charAt(i), '0'))
   		i++;
	return s.substring (i, s.length);
}
function trimStr (s)
{   
	return stripFinalWhitespace (stripInitialWhitespace(s));
}
function trimFields(theForm)
{
	for(var i = 0; i < theForm.elements.length; ++i) {
		if (theForm.elements[i].type == "text") 
		{
			theForm.elements[i].value=trimStr(theForm.elements[i].value);
		}
	}
}
function isLetter (c)
{
	return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
}
function isDigit (c)
{
	return ((c >= "0") && (c <= "9"))
}
function isLetterOrDigit (c)
{
	return (isLetter(c) || isDigit(c))
}
function isInteger (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 (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)
{
    var secondArg = defaultEmptyOK;
    if (isPositiveInteger.arguments.length > 1)
        secondArg = isPositiveInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) > 0) ) );
}
function isNonnegativeInteger (s)
{
    var secondArg = defaultEmptyOK;
    if (isNonnegativeInteger.arguments.length > 1)
        secondArg = isNonnegativeInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) >= 0) ) );
}
function isNegativeInteger (s)
{
    var secondArg = defaultEmptyOK;
    if (isNegativeInteger.arguments.length > 1)
        secondArg = isNegativeInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) < 0) ) );
}
function isNonpositiveInteger (s)
{
    var secondArg = defaultEmptyOK;
    if (isNonpositiveInteger.arguments.length > 1)
        secondArg = isNonpositiveInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) <= 0) ) );
}
function isAlphanumeric (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 isEmail (s)
{   
	if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
    if (isWhitespace(s)) return false;

	var emailpat = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
	if (s.match(emailpat))
		return true;
	else
		return false;
}
function isYear (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 == 4);
}
function isIntegerInRange (s, a, b)
{
    if (isEmpty(s)) 
       if (isIntegerInRange.arguments.length == 1) return defaultEmptyOK;
       else return (isIntegerInRange.arguments[1] == true);
    if (!isInteger(s, false)) return false;
    var num = parseInt (s);
    return ((num >= a) && (num <= b));
}
function isMonth (s)
{
    if (isEmpty(s)) 
       if (isMonth.arguments.length == 1) return defaultEmptyOK;
       else return (isMonth.arguments[1] == true);
    if (s.charAt(0) == '0' && s.length>1)
    	s=s.substring(1,s.length);
    return isIntegerInRange (s, 1, 12);
}
function isDay (s)
{
    if (isEmpty(s)) 
       if (isDay.arguments.length == 1) return defaultEmptyOK;
       else return (isDay.arguments[1] == true);   
    if (s.charAt(0) == '0' && s.length>1)
    	s=s.substring(1,s.length);
    return isIntegerInRange (s, 1, 31);
}
function daysInFebruary (year)
{
    return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}
function isDate(year, month, day, testIfValidNumbers)
{
	if (testIfValidNumbers &&  (! (isYear(year, false) && isMonth(month, false) && isDay(day, false))) ) {
		return false;
	}
	var intYear = parseInt(year);
	var intMonth = parseInt(month);
	var intDay = parseInt(day);
	if (intDay > daysInMonth[intMonth]) return false; 
	if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;
	return true;
}
function isBefore(year1, month1, day1, year2, month2, day2) {
	return ( year1 < year2 || (year1 == year2 && month1 < month2) || (year1 == year2 && month1 == month2 && day1 < day2) );
}
function isPin(pin) 
{
	return ( isInteger(pin) && (pin.length == digitsInPin) ) ;
}
function isPuk(puk) 
{
	return ( isInteger(puk) && (puk.length == digitsInPuk) );
}
function isPTzipCode1(zipcode1)
{			
	return ( isInteger(zipcode1) && (zipcode1.length == digitsInPTzipCode1) );
}

function isPTzipCode2(zipcode2) {
	isPTzipCode2(zipcode2, true);
}

function isPTzipCode2(zipcode2, emptyOK)
{			
	return ( (isEmpty(zipcode2) && emptyOK) || ( isInteger(zipcode2) && (zipcode2.length == digitsInPTzipCode2)) );
}

function isTaxNumber(taxNumber, dontVerifyCheckSum) {	
	if (isInteger(taxNumber)) {
		if (taxNumber.length == 11)
			taxNumber = taxNumber.substring(2, taxNumber.length);
		else if (taxNumber.length!=9)
			return false;

		if (taxNumber == 000000000 || taxNumber == 123456789)
			return false;

		if (dontVerifyCheckSum) {
			return true;
		}
		else {
			return checkSumValidation(taxNumber, taxNumber.substring(8,9));
		} // end if (dontVerifyCheckSum)...
	}
	else
		return false;
} // end isTaxNumber()...


function isBINumber(biNumber, checkDigit) {	
   
	if (isInteger(biNumber)) {
		
		if (biNumber.length == 7)
			biNumber = "0" + biNumber;
		
		if (biNumber.length != 8 || biNumber == 000000000 || biNumber == 123456789)
			return false;
		
		return checkSumValidation(biNumber, checkDigit);
	}
	else
		return false;
} // end isBINumber()...

//validates a sequence checksum...
function checkSumValidation(sequenceToValid, checkDigit) {
	
	//validate checksum		
	var checkSum=0, strDigit;
	for (var i=0; i<8; i++) {
		strDigit = sequenceToValid.substring(i,i+1);
		if (strDigit!=null && strDigit!="") {
			checkSum = checkSum + (parseInt(strDigit)* (9-i) );
		}
	} // end for ...
	checkSum = 11 - (checkSum%11);
	
	if(checkSum > 9)
		checkSum = 0;
	
	if ( (checkSum.toString()).substring(0, 1) == checkDigit )
		return true;
	else
		return false;
} // end checkSumValidation()...

function isPhone(phone) 
{
	var enc=false;
	for (var i=0;(enc==false && i<phonePrefixes.length);++i)
	{
		if ( phone.substring(0,phonePrefixes[i].length) == phonePrefixes[i])
			enc=true;
	}
	return ( enc && isInteger(phone) && (phone.length==digitsInPhone) );
}
function isLandlinePhone(phone) 
{
	var enc=false;
	for (var i=0;(enc==false && i<landlinePhonePrefixes.length);++i)
	{
		if ( phone.substring(0,landlinePhonePrefixes[i].length) == landlinePhonePrefixes[i])
			enc=true;
	}
	return ( enc && isInteger(phone) && (phone.length==digitsInPhone) );
}
function isTelecelMobile(phone) 
{
	var enc=false;
	for (var i=0;(enc==false && i<mobilePrefixes.length);++i) {
		if ( phone.substring(0,mobilePrefixes[i].length) == mobilePrefixes[i])
			enc=true;
	}
	return ( enc && isInteger(phone) && (phone.length==digitsInPhone) );
}
function isTelecelAccount(account) 
{
	return (isInteger(account) && account.length <= maxDigitsInAccount);
}
function isPwd(pwd) 
{
	if ( (pwd.length >= minDigitsInPwd && pwd.length <= maxDigitsInPwd) ) {
		var validChars=true;
		for (var i = 0; (validChars && i<pwd.length); i ++) {
			var c = pwd.charAt(i);
			validChars = (isLetterOrDigit (c) || c =='_' || c == '.');
		}
		return validChars;
	}
	return false; 
}
function isValidImei(imei) {
	imei = trimStr(imei);
	if (imei.length != 0) {
		if (imei.length != 15 || !isInteger(imei)) {
			alert("O Imei deve ser um numérico com 15 digitos");
			return false;
		}
	}
	else {
		alert("O campo Imei é obrigatório");
		return false;
	}
	return true;
}
function warnInvalid (theField, s) {
    theField.focus();
    theField.select();
    alert(s);
    return false;
}
function warnInvalidWithOutSelect(theField, s) {
	theField.focus();
	alert(s);
	return false;
}
function checkString (theField, s, emptyOK)
{
    if (checkString.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) 
			return false;
    else return true;
}

function checkEmail (theField, emptyOK)
{   if (checkEmail.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else if (!isEmail(theField.value, false)) 
       return warnInvalid (theField, iEmail);
    else return true;
}
function checkYear (theField, emptyOK)
{   if (checkYear.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isYear(theField.value, false)) 
       return warnInvalid (theField, iYear);
    else return true;
}
function checkMonth (theField, emptyOK)
{   if (checkMonth.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isMonth(theField.value, false)) 
       return warnInvalid (theField, iMonth);
    else return true;
}
function checkDay (theField, emptyOK)
{   if (checkDay.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isDay(theField.value, false)) 
       return warnInvalid (theField, iDay);
    else return true;
}
function checkDate (yearField, monthField, dayField, labelString, OKtoOmitDay)
{
    
    if (checkDate.arguments.length == 4) OKtoOmitDay = false;
    if (!isYear(yearField.value)) return warnInvalid (yearField, iYear);
    if (!isMonth(monthField.value)) return warnInvalid (monthField, iMonth);
    if ( (OKtoOmitDay == true) && isEmpty(dayField.value) ) return true;
    else if (!isDay(dayField.value)) 
       return warnInvalid (dayField, iDay);
    if (isDate (yearField.value, monthField.value, dayField.value, true))
       return true;
    alert (iDatePrefix + labelString + iDateSuffix)
    return false
}

function compareWithCurrDate(currDate, yearVal, monthVal, dayVal, OKtoOmitDay) 
{
	//get inserted month and year
 	var bMonth = parseInt(stripLeftZeros(monthVal));
	var bYear = parseInt(yearVal);
	
	//get current month and year
 	var currMonth = parseInt(stripLeftZeros(currDate.substring(3,5)));
	var currYear = parseInt(currDate.substring(6,10));
	
	//compare dates
   if (bYear>currYear)
   	return 1;
   else if (bYear==currYear)
   {
   	if(bMonth>currMonth)
    		return 1;
    	else if (bMonth==currMonth)
    	{	
    		if(OKtoOmitDay == true)
    			return 0;
    		else
    		{
    			//get inserted day
    			var bDay = parseInt(stripLeftZeros(dayVal));
				
    			//get current day
 				var currDay=parseInt(stripLeftZeros(currDate.substring(0,2)));
    		
 				if(bDay>currDay)
 					return 1;
 				else if (bDay==currDay)
 					return 0;
 				else
 					return -1;
    		}
    	} //end bMonth==currMonth
    	else
    		return -1;	
   } //end bYear==currYear
   else
   	return -1;
}
function isSmallerOrEqualCurrDate(currDate, yearField, monthField, dayField, labelString, OKtoOmitDay) 
{	
	if (isSmallerOrEqualCurrDate.arguments.length == 5) 
   	OKtoOmitDay = false;
   	
	if (isDate(yearField.value, monthField.value, dayField.value, true)) 
	{
		if(compareWithCurrDate(currDate, yearField.value, monthField.value, dayField.value, OKtoOmitDay)<=0)
			return true;
		return warnInvalidWithOutSelect(dayField, iDateGreaterThanTodayPrefix + labelString + iDateGreaterThanTodaySuffix);
	}
	else {
		return warnInvalidWithOutSelect(dayField,iDatePrefix + labelString + iDateSuffix);
	}
}
function isGreaterOrEqualThanCurrDate(currDate, yearField, monthField, dayField, labelString, OKtoOmitDay) 
{	
	if (isGreaterOrEqualThanCurrDate.arguments.length == 5) 
   	OKtoOmitDay = false;
   	
	if (isDate(yearField.value, monthField.value, dayField.value, true)) 
	{
		if(compareWithCurrDate(currDate, yearField.value, monthField.value, dayField.value, OKtoOmitDay)>=0)
			return true;
		return warnInvalidWithOutSelect(dayField, iDateGreaterThanTodayPrefix + labelString + iDateSmallerThanTodaySuffix);
	}
	else {
		return warnInvalidWithOutSelect(dayField,iDatePrefix + labelString + iDateSuffix);
	}
}
function isGreaterThanCurrDate(currDate, yearVal, monthVal, dayVal, checkTime, hoursVal, minutesVal, secondsVal) 
{   
	if (isDate(yearVal, monthVal, dayVal, true)) 
	{
		var ret = compareWithCurrDate(currDate, yearVal, monthVal, dayVal, false);
		if (ret>0)
			return true;
		else if (ret==0 && checkTime==true)
		{
			var bHours = parseInt(stripLeftZeros(hoursVal));
    		var bMins = parseInt(stripLeftZeros(minutesVal));
			var bSecs = parseInt(stripLeftZeros(secondsVal));
			var currHours = parseInt(stripLeftZeros(currDate.substring(11,13))) + 1;
			var currMins =  parseInt(stripLeftZeros(currDate.substring(14,16)));
			var currSecs =  parseInt(stripLeftZeros(currDate.substring(17,19)));
			
			if (bHours>currHours || (bHours==currHours && bMins>currMins) || (bHours==currHours && bMins==currMins && bSecs>currSecs))
			{
				return true;
			}
		}
		else
			return false;
	}
	return false;
}
function checkBirthDate (currDate, yearField, monthField, dayField, labelString, OKtoOmitDay)
{   
	if (checkBirthDate.arguments.length == 5) OKtoOmitDay = false;
	if (checkDate (yearField, monthField, dayField, labelString, OKtoOmitDay)) {
		var bYear = parseInt(yearField.value);
		if (bYear<1900)
			return warnInvalid (yearField, iBirthYear);
		if (compareWithCurrDate(currDate, yearField.value, monthField.value, dayField.value, OKtoOmitDay)>0)
				return warnInvalid (dayField, iBirthDateGreateThanToday);
		else
			return true;
	}
	return false;
}
function getRadioButtonValue (radio)
{   for (var i = 0; i < radio.length; i++) {
	if (radio[i].checked) { break }
    }
    return radio[i].value
}
function checkPin(theField, emptyOK) 
{
	if (checkPin.arguments.length == 1) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if (!isPin(theField.value))
		 return warnInvalid (theField, iPin);
	else return true;
}		
function checkPuk(theField, emptyOK) 
{
	if (checkPuk.arguments.length == 1) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if (!isPuk(theField.value))
		 return warnInvalid (theField, iPuk);
	else return true;
}
function checkPTzipCode(zipField1, zipField2, emptyOK) {
   if (checkPTzipCode.arguments.length == 2) emptyOK = defaultEmptyOK;
	if ( (emptyOK == true) && (isEmpty(zipField1.value)) && (isEmpty(zipField2.value)) ) 
		return true; 
	var zip1 = zipField1.value;
	if (zip1 == "0000")
		return warnInvalid (zipField1, iPTzipCodeZeros);
	if (!isPTzipCode1(zip1)) return  warnInvalid (zipField1, iPTzipCode1);
	if (!isPTzipCode2(zipField2.value, emptyOK)) return  warnInvalid (zipField2, iPTzipCode2);
	return true;	
}
function checkTaxNumber(theField, emptyOK) 
{
	if (checkTaxNumber.arguments.length == 1) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if (theField.value == 000000000 || theField.value == 123456789 || !isTaxNumber(theField.value))
		 return warnInvalid(theField, iTaxNumber);
	else return true;
}
// ****************************************
//
// checkBINumber, checks if the given field
// is a valid Bilhete de Identidade number
//
// ****************************************

function checkBINumber(theField, checkDigitField, emptyOK)
{
	if (checkBINumber.arguments.length == 2) emptyOK = defaultEmptyOK;

	if (isEmpty(theField.value)) { 
		if (emptyOK == true)
			return true;
		else
			return warnInvalid(theField, iBINumberEmpty);
	}
	
	if (!isBINumber(theField.value, checkDigitField.value))
		 return warnInvalid(theField, iBINumber);
	else return true;
} // end checkBINumber()...
function checkPhone(theField, emptyOK) 
{
	if (checkPhone.arguments.length == 1) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if (!isPhone(theField.value))
		 return warnInvalid (theField, iPhone);
	else return true;
}
function checkTelecelMobile(theField, emptyOK) 
{
	if (checkTelecelMobile.arguments.length == 1) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	var fieldValue=theField.value;
	if (!isTelecelMobile(theField.value))
		 return warnInvalid (theField, iTelecelMobile);
	else return true;
}
function checkTelecelAccount(theField, emptyOK) 
{
	if (checkTelecelAccount.arguments.length == 1) emptyOK = defaultEmptyOK;
	
	//strip left zeros
	var fieldValue = stripLeftZeros(theField.value);
	
	if (isEmpty(fieldValue)) {
		if (emptyOK == true) return true;
		else
			return warnInvalid (theField, iTelecelAccount);
	}
	
	theField.value = fieldValue;
	if (!isTelecelAccount(fieldValue))
		 return warnInvalid (theField, iTelecelAccount);
	else {
	    if (fieldValue.length < 9) theField.value = parseInt(fieldValue) + 300000000
	    return true;
	}
}
function checkPwd(theField, emptyOK) 
{
	if (checkPwd.arguments.length == 1) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	var fieldValue=theField.value;
	if (!isPwd(theField.value))
			 return warnInvalid (theField, iPwd);
	else return true;
}
function checkConfirmPwd(theFieldPwd, theFieldConfirmPwd) 
{	
	var pwd=theFieldPwd.value;
	var confirmPwd=theFieldConfirmPwd.value;
	if (pwd == confirmPwd)
		return true;
	else
		return warnInvalid (theFieldConfirmPwd, iConfirmPwd);
}
function isFax(phone) {
	var enc=false;
	for (var i=0;(enc==false && i<phonePrefixes.length);++i) {
		if ( phone.substring(0,phonePrefixes[i].length) == phonePrefixes[i])
			enc=true;
	}
	return ( enc && isInteger(phone) && (phone.length>=9 && phone.length <= 12) );
}

//Celfocus - Instalação a partir de 20/06/2006 - Remover ´versões anteriores
// JScript File
var STR_THOUSANDS_SEPARATOR = " ";
var STR_DECIMAL_SEPARATOR = ".";
var INT_DECIMAL_PLACES = 2;
var global_valfield;

function setFocusDelayed()
{
  global_valfield.focus();
}

function setfocus(valfield)
{	
  // save valfield in global variable so value retained when routine exits
  global_valfield = valfield;
  setTimeout( 'setFocusDelayed()', 50 );
}

function RemoveRightSpaces(strItemValue)
{
    strItemValue = strItemValue.toString();
    if (strItemValue =="")
        return strItemValue;
    var intLastPos = strItemValue.length;
    while (intLastPos >= 0)
    {
        var strChar = strItemValue.substring(intLastPos, intLastPos-1);
        if (strChar ==" ")
        {
            strItemValue = strItemValue.substring(0, intLastPos-1);
            intLastPos = strItemValue.length;
        }
        else
            break;
    }
    return strItemValue;
}

function RemoveLeftSpaces(strItemValue)
{
    strItemValue = strItemValue.toString();
    while (strItemValue !="")
    {
        if (strItemValue.charAt(0) ==' ')
            strItemValue = strItemValue.substring(1, strItemValue.length);
        else
            break;
    }
    return strItemValue;
}

function RemoveSpaces(strItemValue)
{
    if (strItemValue +"" =="") 
        return"";
    if ((strItemValue = RemoveLeftSpaces(strItemValue)) !="")
        return RemoveRightSpaces(strItemValue);
    else
        return"";
}


function StringConcat(lngNumber, strCharacter)
{
    var strReturn = new String("");
    for (var lngCount=0;lngCount < lngNumber;lngCount++)
    strReturn = strReturn + strCharacter.toString();
    return strReturn;
}

function ParseNumberToArray(objValue, blnRemoveThousandsSeparator)
{
	
		if ((blnRemoveThousandsSeparator == true) && (STR_THOUSANDS_SEPARATOR !=""))
		{
		    while (objValue.toString().indexOf(STR_THOUSANDS_SEPARATOR) != -1)
			    objValue = objValue.toString().replace(STR_THOUSANDS_SEPARATOR,'');
		}
		
		var regNumberExp =/^[+,-]?(\d*)[.,\,](\d+)$|^[+,-]?(\d+)$/;
		var arrayResult = regNumberExp.exec(objValue);

		if (!arrayResult)
		{
		return"NaN";
		}
		else
		{
		    var arrayNumber = new Array(2);
		    if (objValue.toString().charAt(0) =="-")
		        arrayNumber[0] ="-";
		    else
		        arrayNumber[0] ="";

			//JG 20070701 - Firefox mete null quando não encontra parte da expressão regular, IE mete string vazia.
		    if ((arrayResult.length == 3) ||
		    ((arrayResult.length == 4) && (arrayResult[2] !="") && (arrayResult[2] !=null)  ))
		    {
			    if (arrayResult[1]=="")
			        arrayNumber[1] = 0;
                else
			        arrayNumber[1] = arrayResult[1];
			    arrayNumber[2] = arrayResult[2];
		    }
	    	else
		    {
			    if (arrayResult.length == 4)
			        arrayNumber[1] = arrayResult[3];
                else
			        arrayNumber[1] = arrayResult[1];
			    arrayNumber[2] ="";
		    }
		    return arrayNumber;
	    }
}


function fmtValueGetPrintable(objValue)
{

		if (objValue == "")
		return"";
		
		objValue = RemoveSpaces(objValue);
		if (parseFloat(objValue) == 0)
			return (("0" + STR_DECIMAL_SEPARATOR + StringConcat(INT_DECIMAL_PLACES,"0")).toString());
		var arrayNumber = ParseNumberToArray(objValue, false);

		if (arrayNumber =="NaN")
			return"NaN";
		else
		{
		
			var strDecimalPart = new String("");

	        strDecimalPart = (INT_DECIMAL_PLACES > 0) ? (STR_DECIMAL_SEPARATOR + (arrayNumber[2] + StringConcat(INT_DECIMAL_PLACES,"0")).substr(0, INT_DECIMAL_PLACES)) :"";

			return (arrayNumber[0] + getPrintableIntNumberWithThousandsSeparator(parseFloat(arrayNumber[1]).toString()) + strDecimalPart.toString());
		}
}

function getPrintableIntNumberWithThousandsSeparator(objValue)
{

		var strValue = objValue.toString();
		var strFormatedNumber ="";

		while (strValue.length > 3)
		{
			strFormatedNumber = STR_THOUSANDS_SEPARATOR + strValue.substr(strValue.length-3,3) + strFormatedNumber;
			strValue = strValue.substr(0, strValue.length-3);

		}
		strFormatedNumber = strValue + strFormatedNumber;
		return strFormatedNumber;
	return objValue;
}

function ValidateDecimal(objField, objFieldLabel, flgRequired, flgValidateOnly, flgSendFocus, objFormChange, objMinValue, objMaxValue)
{
    var objFieldValue;
    //rB
    var flgOK = true;
    var objValue;
    var strPrintable;    
   
    var objDisplayedMinValue, objDisplayedMaxValue;
    
    var strFieldValue = (objField.value);
    
    var strFieldLabel = objFieldLabel;
    var strErrorMsg ="'" + strFieldLabel +"' inválido. Esperado um valor numérico com '.' como separador de casas decimais.";
   
   
    
    if (!(objFormChange==null))
		objFormChange.value=true;
   
    if (objField.value == "")
    {
    	if (flgRequired)
    	{
    	    if (flgSendFocus && !objField.disabled) //PFP 20050222 - Também valida se o objecto está disabled
                setfocus(objField);
            return [false, "Por favor preencha o campo '" + strFieldLabel +"'."];
    	}
    	else
    	return [true, ''];
    
    }
    
    //RB 
    objValue = RemoveSpaces(objField.value);
	var arrayNumber = ParseNumberToArray(objValue, true);
	if (arrayNumber =="NaN")
	{
        flgOK = false;
	    objValue = "";
	    strPrintable = "";
	}
	else
	{
	    if (arrayNumber[2] =="")
	        objValue = parseFloat(arrayNumber[0] + parseFloat(arrayNumber[1]).toString());
	    else
	        objValue = parseFloat(arrayNumber[0] + parseFloat(arrayNumber[1].toString() +"." + arrayNumber[2].toString()));
    	
	    strPrintable = fmtValueGetPrintable(objValue);
	 }
	 
	 if(strPrintable == "")
	    strPrintable = "0" + "." + "00";
  
        var fo = flgOK;
        if (!fo)
        {
            if (flgSendFocus && !objField.disabled) //PFP 20050222 - Também valida se o objecto está disabled
                  setfocus(objField);
            return [false, strErrorMsg];
        }
    
        if (!(flgValidateOnly))
    	objField.value = strPrintable;
    	objFieldValue = objValue;

    	if(objMinValue != null)
    		objDisplayedMinValue = fmtValueGetPrintable(objMinValue);
    	
    	if(objMaxValue != null)
    		objDisplayedMaxValue = fmtValueGetPrintable(objMaxValue);
    
    if (!(objMinValue==null))
    {
    
    	if (objFieldValue < objMinValue)
    	{
    	    if (flgSendFocus && !objField.disabled) //PFP 20050222 - Também valida se o objecto está disabled
                  setfocus(objField);
            if(objDisplayedMinValue != "")
				return [false, "O campo '" + strFieldLabel +"' não pode ser menor que " + objDisplayedMinValue];
			else
				return [false, "O campo '" + strFieldLabel +"' não pode ser menor que " + objMinValue];
    	}
    }
    if (!(objMaxValue==null))
    {
    
    	if (objFieldValue > objMaxValue)
    	{
    	    if (flgSendFocus && !objField.disabled) //PFP 20050222 - Também valida se o objecto está disabled
                  setfocus(objField);
            return [false, "O campo '" + strFieldLabel +"' não pode ser maior que " + objDisplayedMaxValue];
    	}   
    }return [true, ''];

}

function ToObject(input) 
{
	return typeof input == 'object' ?  input : eval(input); 
}

function IsNull(input, replacement) 
{
	return input == null ? null : replacement; 
}


function ValidateStringField(theField, s, emptyOK, focus)
{
	var flgOK = checkString (document.getElementById(theField), s, emptyOK);
	if(!flgOK)
		{
			if(focus && !document.getElementById(theField).disabled)
				setfocus(document.getElementById(theField));
			alert("O campo '" + s + "' deverá ser preenchido.");
		}
	return flgOK;
}

function ValidateIntegerField(theField, s, emptyOK, focus)
{
	var flgOK;
	if(document.getElementById(theField).value == "")
	{
		if(!emptyOK)
		{
			alert("O campo '" + s + "' deverá ser preenchido.");
			if(focus && !document.getElementById(theField).disabled)
				setfocus(document.getElementById(theField));
			return false;			
		}
	}
	else
	{
		flgOK = isPositiveInteger(document.getElementById(theField).value);
		if(!flgOK)
		{
			alert("O campo '" + s + "' não é um número válido.");
			if(focus && !document.getElementById(theField).disabled)
				setfocus(document.getElementById(theField));
		}
		else
			return true;
	}
	
	return flgOK; 
}

function ValidatePhoneField(theField, s, emptyOK, focus)
{
	var flgOK = checkTelecelMobile(document.getElementById(theField), emptyOK);
	if(!flgOK)
	{
		if(focus && !document.getElementById(theField).disabled)
			setfocus(document.getElementById(theField));
	}
	else
		return true;
	return flgOK; 
}


String.prototype.startsWith = function(s) { return this.indexOf(s)==0; }

function endsWith(str, s){

	var reg = new RegExp(s + "$");
	return reg.test(str);
}

function FormatPlafond(plafond)
{

	var strReplace = plafond.value;
	var intIndexOfMatch = strReplace.indexOf( STR_THOUSANDS_SEPARATOR );
	
	while (intIndexOfMatch != -1){
		// Relace out the current instance.
		strReplace= strReplace.replace( STR_THOUSANDS_SEPARATOR, '' )
		// Get the index of any next matching substring.
		intIndexOfMatch = strReplace.indexOf( STR_THOUSANDS_SEPARATOR );
	}



	return strReplace.replace(STR_DECIMAL_SEPARATOR,',');
}

function filterNonNumericCharacters(obj)
{
	obj.value = String(obj.value).replace(/([^0-9])/g, '');
}
 
function isIDAdsl(IDAdsl) 
{
	var enc=false;

	if ( IDAdsl.substring(0,1) == '1')
		enc=true;
	
	return ( enc && isInteger(IDAdsl) && (IDAdsl.length==digitsInPhone) );
}

