
SAPO.namespace('Utility');SAPO.Utility.Validator={_countryCodes:['AO','CV','MZ','PT'],_internacionalPT:351,_indicativosPT:{21:'lisboa',22:'porto',231:'mealhada',232:'viseu',233:'figueira da foz',234:'aveiro',235:'arganil',236:'pombal',238:'seia',239:'coimbra',241:'abrantes',242:'ponte de sôr',243:'santarém',244:'leiria',245:'portalegre',249:'torres novas',251:'valença',252:'vila nova de famalicão',253:'braga',254:'peso da régua',255:'penafiel',256:'são joão da madeira',258:'viana do castelo',259:'vila real',261:'torres vedras',262:'caldas da raínha',263:'vila franca de xira',265:'setúbal',266:'évora',268:'estremoz',269:'santiago do cacém',271:'guarda',272:'castelo branco',273:'bragança',274:'proença-a-nova',275:'covilhã',276:'chaves',277:'idanha-a-nova',278:'mirandela',279:'moncorvo',281:'tavira',282:'portimão',283:'odemira',284:'beja',285:'moura',286:'castro verde',289:'faro',291:'funchal, porto santo',292:'corvo, faial, flores, horta, pico',295:'angra do heroísmo, graciosa, são jorge, terceira',296:'ponta delgada, são miguel, santa maria',91:'rede móvel 91 (Vodafone / Yorn)',93:'rede móvel 93 (Optimus)',96:'rede móvel 96 (TMN)',92:'rede móvel 92 (TODOS)',707:'número único',760:'número único',800:'número grátis',808:'chamada local',30:'voip'},_internacionalCV:238,_indicativosCV:{2:'fixo',91:'móvel 91',95:'móvel 95',97:'móvel 97',98:'móvel 98',99:'móvel 99'},_internacionalAO:244,_indicativosAO:{2:'fixo',91:'móvel 91',92:'móvel 92'},_internacionalMZ:258,_indicativosMZ:{2:'fixo',82:'móvel 82',84:'móvel 84'},_internacionalTL:670,_indicativosTL:{3:'fixo',7:'móvel 7'},_isLeapYear:function(year){var yearRegExp=/^\d{4}$/;if(yearRegExp.test(year)){return((year%4)?false:((year%100)?true:((year%400)?false:true)));}
return false;},_dateParsers:{'yyyy-mm-dd':{day:5,month:3,year:1,sep:'-',parser:/^(\d{4})(\-)(\d{1,2})(\-)(\d{1,2})$/},'yyyy/mm/dd':{day:5,month:3,year:1,sep:'/',parser:/^(\d{4})(\/)(\d{1,2})(\/)(\d{1,2})$/},'yy-mm-dd':{day:5,month:3,year:1,sep:'-',parser:/^(\d{2})(\-)(\d{1,2})(\-)(\d{1,2})$/},'yy/mm/dd':{day:5,month:3,year:1,sep:'/',parser:/^(\d{2})(\/)(\d{1,2})(\/)(\d{1,2})$/},'dd-mm-yyyy':{day:1,month:3,year:5,sep:'-',parser:/^(\d{1,2})(\-)(\d{1,2})(\-)(\d{4})$/},'dd/mm/yyyy':{day:1,month:3,year:5,sep:'/',parser:/^(\d{1,2})(\/)(\d{1,2})(\/)(\d{4})$/},'dd-mm-yy':{day:1,month:3,year:5,sep:'-',parser:/^(\d{1,2})(\-)(\d{1,2})(\-)(\d{2})$/},'dd/mm/yy':{day:1,month:3,year:5,sep:'/',parser:/^(\d{1,2})(\/)(\d{1,2})(\/)(\d{2})$/}},_daysInMonth:function(_m,_y){var nDays=0;if(_m===1||_m===3||_m===5||_m===7||_m===8||_m===10||_m===12)
{nDays=31;}
else if(_m===4||_m===6||_m===9||_m===11)
{nDays=30;}
else
{if((_y%400===0)||(_y%4===0&&_y%100!==0))
{nDays=29;}
else
{nDays=28;}}
return nDays;},_isValidDate:function(year,month,day){var yearRegExp=/^\d{4}$/;var validOneOrTwo=/^\d{1,2}$/;if(yearRegExp.test(year)&&validOneOrTwo.test(month)&&validOneOrTwo.test(day)){if(month>=1&&month<=12&&day>=1&&this._daysInMonth(month,year)>=day){return true;}}
return false;},mail:function(email)
{var emailValido=new RegExp("^[_a-z0-9-]+((\\.|\\+)[_a-z0-9-]+)*@([\\w]*-?[\\w]*\\.)+[a-z]{2,4}$","i");if(!emailValido.test(email)){return false;}else{return true;}},url:function(url,full)
{if(typeof full==="undefined"||full===false){var reHTTP=new RegExp("(^(http\\:\\/\\/|https\\:\\/\\/)(.+))","i");if(reHTTP.test(url)===false){url='http://'+url;}}
var reUrl=new RegExp("^(http:\\/\\/|https:\\/\\/)([\\w]*(-?[\\w]*)*\\.)+[a-z]{2,4}","i");if(reUrl.test(url)===false){return false;}else{return true;}},isPTPhone:function(phone)
{phone=phone.toString();var aInd=[];for(var i in this._indicativosPT){if(typeof(this._indicativosPT[i])==='string'){aInd.push(i);}}
var strInd=aInd.join('|');var re351=/^(00351|\+351)/;if(re351.test(phone)){phone=phone.replace(re351,"");}
var reSpecialChars=/(\s|\-|\.)+/g;phone=phone.replace(reSpecialChars,'');var reInt=/[\d]{9}/i;if(phone.length===9&&reInt.test(phone)){var reValid=new RegExp("^("+strInd+")");if(reValid.test(phone)){return true;}}
return false;},isPortuguesePhone:function(phone)
{return this.isPTPhone(phone);},isCVPhone:function(phone)
{phone=phone.toString();var aInd=[];for(var i in this._indicativosCV){if(typeof(this._indicativosCV[i])==='string'){aInd.push(i);}}
var strInd=aInd.join('|');var re238=/^(00238|\+238)/;if(re238.test(phone)){phone=phone.replace(re238,"");}
var reSpecialChars=/(\s|\-|\.)+/g;phone=phone.replace(reSpecialChars,'');var reInt=/[\d]{7}/i;if(phone.length===7&&reInt.test(phone)){var reValid=new RegExp("^("+strInd+")");if(reValid.test(phone)){return true;}}
return false;},isAOPhone:function(phone)
{phone=phone.toString();var aInd=[];for(var i in this._indicativosAO){if(typeof(this._indicativosAO[i])==='string'){aInd.push(i);}}
var strInd=aInd.join('|');var re244=/^(00244|\+244)/;if(re244.test(phone)){phone=phone.replace(re244,"");}
var reSpecialChars=/(\s|\-|\.)+/g;phone=phone.replace(reSpecialChars,'');var reInt=/[\d]{9}/i;if(phone.length===9&&reInt.test(phone)){var reValid=new RegExp("^("+strInd+")");if(reValid.test(phone)){return true;}}
return false;},isMZPhone:function(phone)
{phone=phone.toString();var aInd=[];for(var i in this._indicativosMZ){if(typeof(this._indicativosMZ[i])==='string'){aInd.push(i);}}
var strInd=aInd.join('|');var re258=/^(00258|\+258)/;if(re258.test(phone)){phone=phone.replace(re258,"");}
var reSpecialChars=/(\s|\-|\.)+/g;phone=phone.replace(reSpecialChars,'');var reInt=/[\d]{8,9}/i;if((phone.length===9||phone.length===8)&&reInt.test(phone)){var reValid=new RegExp("^("+strInd+")");if(reValid.test(phone)){if(phone.indexOf('2')===0&&phone.length===8){return true;}else if(phone.indexOf('8')===0&&phone.length===9){return true;}}}
return false;},isTLPhone:function(phone)
{phone=phone.toString();var aInd=[];for(var i in this._indicativosTL){if(typeof(this._indicativosTL[i])==='string'){aInd.push(i);}}
var strInd=aInd.join('|');var re670=/^(00670|\+670)/;if(re670.test(phone)){phone=phone.replace(re670,"");}
var reSpecialChars=/(\s|\-|\.)+/g;phone=phone.replace(reSpecialChars,'');var reInt=/[\d]{7}/i;if(phone.length===7&&reInt.test(phone)){var reValid=new RegExp("^("+strInd+")");if(reValid.test(phone)){return true;}}
return false;},isPhone:function(){var index;if(arguments.length===0){return false;}
var phone=arguments[0];if(arguments.length>1){if(arguments[1].constructor===Array){var func;for(index=0;index<arguments[1].length;index++){if(typeof(func=this['is'+arguments[1][index].toUpperCase()+'Phone'])==='function'){if(func(phone)){return true;}}else{throw"Invalid Country Code!";}}}else if(typeof(this['is'+arguments[1].toUpperCase()+'Phone'])==='function'){return this['is'+arguments[1].toUpperCase()+'Phone'](phone);}else{throw"Invalid Country Code!";}}else{for(index=0;index<this._countryCodes.length;index++){if(this['is'+this._countryCodes[index]+'Phone'](phone)){return true;}}}
return false;},codPostal:function(cp1,cp2,returnBothResults){var cPostalSep=/^(\s*\-\s*|\s+)$/;var trim=/^\s+|\s+$/g;var cPostal4=/^[1-9]\d{3}$/;var cPostal3=/^\d{3}$/;var parserCPostal=/^(.{4})(.*)(.{3})$/;returnBothResults=!!returnBothResults;cp1=cp1.replace(trim,'');if(typeof(cp2)!=='undefined'){cp2=cp2.replace(trim,'');if(cPostal4.test(cp1)&&cPostal3.test(cp2)){if(returnBothResults===true){return[true,true];}else{return true;}}}else{if(cPostal4.test(cp1)){if(returnBothResults===true){return[true,false];}else{return true;}}
var cPostal=cp1.match(parserCPostal);if(cPostal!==null&&cPostal4.test(cPostal[1])&&cPostalSep.test(cPostal[2])&&cPostal3.test(cPostal[3])){if(returnBothResults===true){return[true,false];}else{return true;}}}
if(returnBothResults===true){return[false,false];}else{return false;}},isDate:function(format,dateStr){if(typeof(this._dateParsers[format])==='undefined'){return false;}
var yearIndex=this._dateParsers[format].year;var monthIndex=this._dateParsers[format].month;var dayIndex=this._dateParsers[format].day;var dateParser=this._dateParsers[format].parser;var separator=this._dateParsers[format].sep;var trim=/^\w+|\w+$/g;var data=dateStr.match(dateParser);if(data!==null){if(data[2]===data[4]&&data[2]===separator){var _y=((data[yearIndex].length===2)?"20"+data[yearIndex].toString():data[yearIndex]);if(this._isValidDate(_y,data[monthIndex].toString(),data[dayIndex].toString())){return true;}}}
return false;},isColor:function(str){var match,valid=false,keyword=/^[a-zA-Z]+$/,hexa=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/,rgb=/^rgb\(\s*([0-9]{1,3})(%)?\s*,\s*([0-9]{1,3})(%)?\s*,\s*([0-9]{1,3})(%)?\s*\)$/,rgba=/^rgba\(\s*([0-9]{1,3})(%)?\s*,\s*([0-9]{1,3})(%)?\s*,\s*([0-9]{1,3})(%)?\s*,\s*(1(\.0)?|0(\.[0-9])?)\s*\)$/,hsl=/^hsl\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})(%)?\s*,\s*([0-9]{1,3})(%)?\s*\)$/,hsla=/^hsla\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})(%)?\s*,\s*([0-9]{1,3})(%)?\s*,\s*(1(\.0)?|0(\.[0-9])?)\s*\)$/;if(keyword.test(str)||hexa.test(str)){return true;}
var i;if((match=rgb.exec(str))!==null||(match=rgba.exec(str))!==null){i=match.length;while(i--){if((i===2||i===4||i===6)&&typeof match[i]!=="undefined"&&match[i]!==""){if(typeof match[i-1]!=="undefined"&&match[i-1]>=0&&match[i-1]<=100){valid=true;}else{return false;}}
if(i===1||i===3||i===5&&(typeof match[i+1]==="undefined"||match[i+1]==="")){if(typeof match[i]!=="undefined"&&match[i]>=0&&match[i]<=255){valid=true;}else{return false;}}}}
if((match=hsl.exec(str))!==null||(match=hsla.exec(str))!==null){i=match.length;while(i--){if(i===3||i===5){if(typeof match[i-1]!=="undefined"&&typeof match[i]!=="undefined"&&match[i]!==""&&match[i-1]>=0&&match[i-1]<=100){valid=true;}else{return false;}}
if(i===1){if(typeof match[i]!=="undefined"&&match[i]>=0&&match[i]<=360){valid=true;}else{return false;}}}}
return valid;}};