function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v3.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function TAU_openBrWindow(theURL,winName,features,largura,altura,f) { //v2.0
  if(f==1){
    l=0;t=0;largura=(screen.availWidth-10);altura=(screen.availHeight-26);
  }else{
    var l = ((screen.availWidth)/2) - (largura/2);
    var t = ((screen.availHeight)/2) - ((altura/2)+20);
  }
  features = features + ",width=" + largura + ",height=" + altura + ",left=" + l + ",top=" + t;
  window.open(theURL,winName,features);
}

function Tau_showHideLayers() { //v3.0
ns4 = (document.layers)? true:false;
ie4 = (document.all)? true:false;
dom = (ns4|ie4)? false:true;
	var camada,condicao,args=Tau_showHideLayers.arguments;
	for(var i=0;i<(args.length/2);i+=1){
		camada=MM_findObj(args[2*i]);
		condicao=args[2*i+1];
		if(ns4) camada.visibility=condicao;
		if(ie4) camada.style.visibility=condicao;
		if(dom) document.getElementById(args[2*i]).style.visibility=condicao;
	}
// Para parar o bubbling
    window.event ? window.event.cancelBubble = true : false;
}

function mensagem(msg)
{
    if (msg.length > 0) {
        alert(msg);
    }
}


function soNumeros(input)
{
    input.value = input.value.replace(/\D/g,'');
}

function getLabel(input) {
    return getLabelTextForId(input.id);
}

function getLabelForId(id) { 
 var label, labels = document.getElementsByTagName('label'); 
 for (var i = 0; (label = labels[i]); i++) { 
   if (label.htmlFor == id) { 
     return label; 
   } 
 } 
 return false; 
}

function getLabelTextForId(id) {
    var label = getLabelForId(id);
    if (label && label.innerHTML != undefined) {
        return label.innerHTML.replace(/[*:]/,'');
    }
    return "["+id+"]";
}

/*
 *--------------------------
 *
 * Tau Validate Form .js
 *
 * Argumentos:
 * (nome do elemento de form, título legível do campo, teststring, ...)
 *
 * teststring:
 * R: (required) preenchimento obrigatório
 * ehNum: é numérico
 * ehEmail: testa se é um endereço de email válido
 * ehCPF: testa se é um CPF válido
 * ehCNPJ: testa se é um CNPJ válido
 * ehRangex:y: testa se uma string tem entre x e y caracteres
 * inRangex:y: testa se um número tem valor entre x e y
 * 
 *--------------------------
 */

var ErrMsg = '';

function newErr()
{
    var args=newErr.arguments;
    var msg = args[0];
    for (i=1;i<args.length;i++) {
        msg = msg.replace(/%s/,args[i]);
    }
    ErrMsg += msg+"\n";
}

var Idioma = 'pt_BR';

function Tau_validateForm() { //v4.0
    var i,p,q,nm,test,num,min,max,errors='',idioma=Idioma,mensagem=new Object(),args=Tau_validateForm.arguments;
    for (i=0; i<(args.length-2); i+=3) {
  	test=args[i+2];
    //alert(typeof args[i].value);
    var val = args[i];
	if (val) {
        if(val.length && !val.options) {
            //alert('Radio!');
            var radio = '';
            for(var rL=0;rL<val.length;rL++) {
                if (val[rL].checked) {
                    radio = val[rL];
                }
            }
            val = radio;
        }
		//nm=val.name;
		nm=args[i+1];
        //console.log(nm+': '+val.value);
        val = val.value;
        if (val == null) {
            val = '';
        }
		if (val.length == 0 && test.charAt(0) == 'R') {
            mensagem['pt_BR'] =
'%s é de preenchimento obrigatório';
            mensagem['en'] = '%s is mandatory';
            newErr(mensagem[idioma],nm);
        }
        if (val.length > 0) {
            if (test.indexOf('ehNum')!=-1) {
                p = val.match(/^[0-9]+$/);
                if (p == null) {
                    mensagem['pt_BR'] =
'%s deve ser um composto por números';
                    mensagem['en'] = '%s must be a number';
                    newErr(mensagem[idioma],nm);
                }
            }
			else if (test.indexOf('ehData')!=-1) {
				p=
val.match(/(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/[12][0-9]{3}/);
				if (p == null) {
                    mensagem['pt_BR'] =
'%s deve conter uma data no formato dd/mm/aaaa';
                    mensagem['en'] =
'%s must contain a date formated as dd/mm/yyyy';
                    newErr(mensagem[idioma],nm);
                }
			}
			else if (test.indexOf('ehEmail')!=-1) {
				p=emailCheck(val);
				if (typeof p == 'object') {
                    mensagem['pt_BR'] = 'erro em %s. %s';
                    mensagem['en'] = 'error in %s. %s';
                    newErr(mensagem[idioma],nm,p[idioma]);
			    }
            }
			else if (test.indexOf('ehCPF')!=-1) {
				p=cpfCheck(val);
				if (p==false) {
                    mensagem['pt_BR'] =
'%s deve conter um número de CPF válido';
                    mensagem['en'] = '%s must contain a valid CPF number';
                    newErr(mensagem[idioma],nm);
                }
			}
			else if (test.indexOf('ehCNPJ')!=-1) {
				p=cnpjCheck(val);
				if (p==0) {
                    mensagem['pt_BR'] = 
'%s deve conter um número de CNPJ válido';
                    mensagem['en'] = '%s must contain a valid CNPJ number';
                    newErr(mensagem[idioma],nm);
                }
			}
			else if (test.indexOf('ehRange') != -1) {
				min=parseInt(test.replace(/.*ehRange(\d*):\d*/,'$1'));
				max=parseInt(test.replace(/.*ehRange\d*:(\d*)/,'$1'));
			    if (typeof val === 'string') {
				    if (val.length<min || max<val.length) {
                        mensagem['pt_BR'] = 
'%s deve ter entre %s e %s caracteres';
                        mensagem['en'] = 
'%s must have between %s and %s characters';
                        newErr(mensagem[idioma],nm,min,max);
                    }
                } else {
                        mensagem['pt_BR'] = 
'%s deve ter apenas números e letras';
                        mensagem['en'] = 
'%s must have only numbers and letters';
                        newErr(mensagem[idioma],nm);
                } 
			}
            else if (test.indexOf('inRange') != -1) {
		    	num = parseFloat(val);
                //console.log(num);
			    if (isNaN(val)) {
                    mensagem['pt_BR'] = '%s deve conter um número';
                    mensagem['en'] = '%s must be a number';
                    newErr(mensagem[idioma],nm);
                }
				min=parseInt(test.replace(/.*inRange(\d*):\d*/,'$1'));
				max=parseInt(test.replace(/.*inRange\d*:(\d*)/,'$1'));
				if (num<min || max<num) {
                    mensagem['pt_BR'] = 
'%s deve ser um número entre %s e %s';
                    mensagem['en'] = 
'%s must be a number between %s and %s';
                    newErr(mensagem[idioma],nm,min,max);
                }
		    }
        }
    }
  }
  if (ErrMsg) {
    mensagem['pt_BR'] = 'Erro(s) encontrado(s):';
    mensagem['en'] = 'Error(s) found:';
    var retMsg = mensagem[idioma]+'\n\n'+ErrMsg;
    ErrMsg = '';
    return retMsg;
  } else {
    return true;
  }
}

/*----------------------------------
 *
 *TauFormFunctions.js
 *
 *----------------------------------
 */

/*************** TAU Functions ****************/
function emailCheck (emailStr) {
/* The following pattern is used to check if the entered e-mail address
   fits the user@domain format.  It also is used to separate the username
   from the domain. */
var emailPat=/^(.+)@(.+)$/
/* The following string represents the pattern for matching all special
   characters.  We don't want to allow special characters in the address. 
   These characters include ( ) < > @ , ; : \ " . [ ]    */
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
/* The following string represents the range of characters allowed in a 
   username or domainname.  It really states which chars aren't allowed. */
var validChars="\[^\\s" + specialChars + "\]"
/* The following pattern applies if the "user" is a quoted string (in
   which case, there are no rules about which characters are allowed
   and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
   is a legal e-mail address. */
var quotedUser="(\"[^\"]*\")"
/* The following pattern applies for domains that are IP addresses,
   rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
   e-mail address. NOTE: The square brackets are required. */
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
/* The following string represents an atom (basically a series of
   non-special characters.) */
var atom=validChars + '+'
/* The following string represents one word in the typical username.
   For example, in john.doe@somewhere.com, john and doe are words.
   Basically, a word is either an atom or quoted string. */
var word="(" + atom + "|" + quotedUser + ")"
// The following pattern describes the structure of the user
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
/* The following pattern describes the structure of a normal symbolic
   domain, as opposed to ipDomainPat, shown above. */
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

var returnMsg = new Object();


/* Finally, let's start trying to figure out if the supplied address is
   valid. */

/* Begin with the coarse pattern to simply break up user@domain into
   different pieces that are easy to analyze. */
var matchArray=emailStr.match(emailPat)
if (matchArray==null) {
  /* Too many/few @'s or something; basically, this address doesn't
     even fit the general mould of a valid e-mail address. */
    returnMsg['pt_BR'] = "Endereço de email incorreto (verifique @ e '.').";
    returnMsg.en = "Incorrect email address (verify @ and '.').";
	return returnMsg;
}
var user=matchArray[1]
var domain=matchArray[2]

// See if "user" is valid 
if (user.match(userPat)==null) {
    // user is not valid
    returnMsg['pt_BR'] = "Nome de usuário de email inválido.";
    returnMsg.en = "Invalid email username.";
	return returnMsg;
}

/* if the e-mail address is at an IP address (as opposed to a symbolic
   host name) make sure the IP address is valid. */
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
    // this is an IP address
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
    returnMsg['pt_BR'] = "IP de destino inválido.";
    returnMsg.en = "Invalid IP.";
	return returnMsg;
	    }
    }
    return true
}

// Domain is symbolic name
var domainArray=domain.match(domainPat)
if (domainArray==null) {
    returnMsg['pt_BR'] = "Nome de domínio inválido.";
    returnMsg.en = "Invalid domain name.";
	return returnMsg;
}

/* domain name seems valid, but now make sure that it ends in a
   three-letter word (like com, edu, gov) or a two-letter word,
   representing country (uk, nl), and that there's a hostname preceding 
   the domain or country. */

/* Now we need to break up the domain to get a count of how many atoms
   it consists of. */
var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>3) {
   // the address must end in a two letter or three letter word.
    returnMsg['pt_BR'] = "O endereço de email deve terminar em um domínio de três letras ou um código de país de duas letras.";
    returnMsg.en = "The email address must end in a three-letter domain or a two-letter country code.";
	return returnMsg;
}

// Make sure there's a host name preceding the domain.
if (len<2) {
    returnMsg['pt_BR'] = "Endereço sem um 'hostname'!";
    returnMsg.en = "Address without a hostname.";
	return returnMsg;
}

// If we've gotten this far, everything's valid!
return true;
}
//  End -->

function cpfCheck(s){ 
  var i; 
  var c = s.substr(0,9); 
  var dv = s.substr(9,2); 
  var d1 = 0; 
    if (s.match(/(00000000000|11111111111|22222222222|33333333333|44444444444|55555555555|66666666666|77777777777|88888888888|99999999999)/) != null) {
        return false;
    }
    for (i = 0; i < 9; i++){ 
      d1 += c.charAt(i)*(10-i); 
    } 
    if (d1 == 0){ 
      return false
    } 
    d1 = 11 - (d1 % 11); 
    if (d1 > 9) d1 = 0; 
    if (dv.charAt(0) != d1){ 
      return false
    } 
  d1 *= 2; 
    for (i = 0; i < 9; i++){ 
      d1 += c.charAt(i)*(11-i); 
    } 
  d1 = 11 - (d1 % 11); 
    if (d1 > 9) d1 = 0; 
    if (dv.charAt(1) != d1){ 
      return false
    } 
  return true; 
} 

function isNUMB(c)
	{
	if((cx=c.indexOf(","))!=-1)
		{		
		c = c.substring(0,cx)+"."+c.substring(cx+1);
		}
	if((parseFloat(c) / c != 1))
		{
		if(parseFloat(c) * c == 0)
			{
			return(1);
			}
		else
			{
			return(0);
			}
		}
	else
		{
		return(1);
		}
	}

function LIMP(c)
	{
	while((cx=c.indexOf("-"))!=-1)
		{		
		c = c.substring(0,cx)+c.substring(cx+1);
		}
	while((cx=c.indexOf("/"))!=-1)
		{		
		c = c.substring(0,cx)+c.substring(cx+1);
		}
	while((cx=c.indexOf(","))!=-1)
		{		
		c = c.substring(0,cx)+c.substring(cx+1);
		}
	while((cx=c.indexOf("."))!=-1)
		{		
		c = c.substring(0,cx)+c.substring(cx+1);
		}
	while((cx=c.indexOf("("))!=-1)
		{		
		c = c.substring(0,cx)+c.substring(cx+1);
		}
	while((cx=c.indexOf(")"))!=-1)
		{		
		c = c.substring(0,cx)+c.substring(cx+1);
		}
	while((cx=c.indexOf(" "))!=-1)
		{		
		c = c.substring(0,cx)+c.substring(cx+1);
		}
	return(c);
	}

function cnpjCheck(CNPJ)
	{
	CNPJ = LIMP(CNPJ);
	if(isNUMB(CNPJ) != 1)
		{
		return(0);
		}
	else
		{
		if(CNPJ == 0)
			{
			return(0);
			}
		else
			{
			g=CNPJ.length-2;
			if(RealTestaCNPJ(CNPJ,g) == 1)
				{
				g=CNPJ.length-1;
				if(RealTestaCNPJ(CNPJ,g) == 1)
					{	
					return(1);
					}
				else
					{
					return(0);
					}
				}
			else
				{
				return(0);
				}
			}
		}
	}
function RealTestaCNPJ(CNPJ,g)
{
	var VerCNPJ=0;
	var ind=2;
	var tam;
	for(f=g;f>0;f--)
		{
		VerCNPJ+=parseInt(CNPJ.charAt(f-1))*ind;
		if(ind>8)
			{
			ind=2;
			}
		else
			{
			ind++;
			}
		}
		VerCNPJ%=11;
		if(VerCNPJ==0 || VerCNPJ==1)
			{
			VerCNPJ=0;
			}
		else
			{
			VerCNPJ=11-VerCNPJ;
			}
	if(VerCNPJ!=parseInt(CNPJ.charAt(g)))
		{
		return(0);
		}
	else
		{
		return(1);
		}
}

