// JavaScript Document


//#########################################
//##### VALIDADOR DE DADOS (p/ dados) #####
//#########################################

function validatedata() {
	
	//PROPERTIES
	this.NAME
	this.EMAIL
	this.DATE
	this.BR_CPF
	this.BR_RG
	this.BR_CNPJ
	this.BR_IESP
	this.BR_UF
	this.BR_ZIPCODE
	this.BR_PHONECOD
	this.BR_PHONENUM
	this.DOMAIN
	this.USERNAME
	this.PASSWORD
	this.VALIDATE_ERRORS /*msg de erro gerado nas validações*/
		 VALIDATE_ERRORS = new Array()

	// METHODS
	this.setname = __setName
	this.setemail = __setEmail
	this.setdate = __setDate
	this.setbrcpf = __setBRCPF
	this.setbrrg = __setBRRG
	this.setbrcnpj = __setBRCNPJ
	this.setbriesp = __setBRIESP
	this.setbruf = __setBRUF
	this.setbrzipcode = __setBRZipCode
	this.setbrphone = __setBRPhone
	this.setdomain = __setDomain
	this.setusername = __setUsername
	this.setpassword = __setPassword


	function __setName(n) {

		var whitespaces = new RegExp(/[\s]/)
		if (!whitespaces.test(n))
		  throw new Error (VALIDATE_ERRORS['name'][0])

		var strangerschars = new RegExp(/[^A-Za-zãáàêéèíìôõóòúùçÃÁÀÊÉÈÍÌÔÕÓÒÚÙÇ\-'\s]/)
		if (strangerschars.test(n))
			throw new Error (VALIDATE_ERRORS['name'][1])
		
		NAME = n
	}
	
	function __setEmail(e) {
		e = e.replace(/ /, "")
	    var correct = new RegExp(/^([A-Za-z0-9_\-\.]+)\@([A-Za-z0-9_\-\.]+)\.([a-z]{2,3})(\.[a-z]{2})?$/);
		if (!correct.test(e))
			throw new Error (VALIDATE_ERRORS['email'][0])
		
		EMAIL = e
	}

	function __setDate(d, country) {

		if (country == 'br')
			var dateformat = new RegExp(/^([\d]{2})[^\d]([\d]{2})[^\d]([\d]{4})$/)
		else
			var dateformat = new RegExp(/^([\d]{4})[^\d]([\d]{2})[^\d]([\d]{2})$/)
		if (!dateformat.test(d))
			throw new Error(VALIDATE_ERRORS['date'][0])
		
		var spl = d.split(/[^\d]/)
		var year  = country == 'br' ? parseInt(spl[2]) : parseInt(spl[0])
		var month = parseInt(spl[1].replace(/^0/, ""))
		var day   =	country == 'br' ? parseInt(spl[0].replace(/^0/, "")) : parseInt(spl[2].replace(/^0/, ""))

		if (year == 'NaN' || year < 1900)
			throw new Error(VALIDATE_ERRORS['date'][1])
		if (month == 'NaN' || month < 1 || month > 12)
			throw new Error(VALIDATE_ERRORS['date'][2])
		if (day == 'NaN' || day < 1 || day > 31)
			throw new Error(VALIDATE_ERRORS['date'][3])
		else {
			if (month == 4 || month == 6 || month == 9 || month == 11) {
				if (day > 30)
					throw new Error(VALIDATE_ERRORS['date'][3])
			}
			if (month == 2) {
				if (day > 29)
					throw new Error(VALIDATE_ERRORS['date'][3])
			}
		}

		DATE = d.replace(/[^\d]/, "-")
	}

	function __setBRCPF(c) {

		var correctpatt = new RegExp(/^[0-9]{3}\.?[0-9]{3}\.?[0-9]{3}\-?[0-9]{2}$/)
		if (!correctpatt.test(c))
			throw new Error (VALIDATE_ERRORS['brcpf'][0])

		BR_CPF = c.replace(/[^\d]/, "")
	}

	function __setBRRG(r) {
		
		var correctpatt = new RegExp(/^[^0-9\.\-]+$/)
		if (correctpatt.test(r))
			throw new Error (VALIDATE_ERRORS['brrg'][0])
		
		BR_RG = r
	}

	function __setBRCNPJ(c) {
		
		var correctpatt = new RegExp(/^[0-9]{2}\.?[0-9]{3}\.?[0-9]{3}\/?[0-9]{4}\-?[0-9]{2}$/)
		if (!correctpatt.test(c))
			throw new Error (VALIDATE_ERRORS['brcnpj'][0])

		BR_CNPJ = c
	}

	function __setBRIESP() {}
	function __setBRUF(u) {
	
		var states = ',AC,AL,AP,AM,BA,CE,DF,GO,ES,MA,MT,MS,MG,PA,PB,PR,PE,PI,RJ,RN,RS,RO,RR,SP,SC,SE,TO,'

		var patt = new RegExp(','+u.toUpperCase()+',')
		if (states.search(patt.source) == -1)
			throw new Error (VALIDATE_ERRORS['bruf'][0])
		
		BR_UF = u.toUpperCase()
	}

	function __setBRZipCode(zc) {
	
		var correctpatt = new RegExp(/^[0-9]{2}\.?[0-9]{3}\-?[0-9]{3}$/)
		if (!correctpatt.test(zc))
			throw new Error (VALIDATE_ERRORS['brzipcode'][0])

		BR_ZIPCODE = zc
	}

	function __setBRPhone(ddd, num) {
		
		ddd = parseInt(ddd)
		if (ddd < 11 || ddd > 99)
			throw new Error (VALIDATE_ERRORS['brphone'][0])

		var correctpatt = new RegExp(/^([0-9]{3,4})[^\d]?([0-9]{4})$/)
		if (!correctpatt.test(num))
			throw new Error (VALIDATE_ERRORS['brphone'][1])
		
		if (num.search(/^0/) != -1)
			throw new Error (VALIDATE_ERRORS['brphone'][1])
		
		BR_PHONECOD = ddd
		BR_PHONENUM = num.replace(/[^\d]/, "")
	}

	function __setDomain(d, tipo) {

		if (!tipo)
			var correctpatt = new RegExp(/^(http\:\/\/)?(www\.)?[a-z0-9\-]+\.[a-z]{2,3}(\.[a-z]{2})?$/)
		else if (tipo == 'ftp')
			var correctpatt = new RegExp(/^ftp\.[a-z0-9\-]+\.[a-z]{2,3}(\.[a-z]{2})?$/)

		if (!correctpatt.test(d))
			throw new Error (VALIDATE_ERRORS['domain'][0])
		
		DOMAIN = d
	}
	
	function __setUsername(u) {

		var chars = new RegExp(/^[A-Za-z0-9_\-\.]{6,}$/)
		if (!chars.test(u))
			throw new Error (VALIDATE_ERRORS['username'][0])

		USERNAME = u
	}

	function __setPassword(p) {

		var chars = new RegExp(/^[A-Za-z0-9_\-\.]{6,}$/)
		if (!chars.test(p))
			throw new Error (VALIDATE_ERRORS['password'][0])
		
		var lets = new RegExp(/[A-Za-z]/)
		if (!lets.test(p))
			throw new Error (VALIDATE_ERRORS['password'][1])

		var nums = new RegExp(/[\d]/)
		if (!nums.test(p))
			throw new Error (VALIDATE_ERRORS['password'][1])

		PASSWORD = p
	}




	// BIBLIOTECA DE ERROS
	// err name
	VALIDATE_ERRORS['name'] 	 = new Array()
	VALIDATE_ERRORS['name'][0] = 'Nome incompleto'
	VALIDATE_ERRORS['name'][1] = 'Nome com caracteres estranhos'
	// err e-mail
	VALIDATE_ERRORS['email'] 	  = new Array()
	VALIDATE_ERRORS['email'][0] = 'Formato incorreto de e-mail'
	// err date
	VALIDATE_ERRORS['date'] 	 = new Array()
	VALIDATE_ERRORS['date'][0] = 'Data incorreta (formato permitido: dd-mm-aaaa)'
	VALIDATE_ERRORS['date'][1] = 'Ano incorreto'
	VALIDATE_ERRORS['date'][2] = 'Mês incorreto'
	VALIDATE_ERRORS['date'][3] = 'Dia incorreto'
	// err br cpf
	VALIDATE_ERRORS['brcpf'] 	  = new Array()
	VALIDATE_ERRORS['brcpf'][0] = 'CPF incorreto'
	// err br rg
	VALIDATE_ERRORS['brrg'] 	 = new Array()
	VALIDATE_ERRORS['brrg'][0] = 'R.G. incorreto'
	// err br cnpj
	VALIDATE_ERRORS['brcnpj']	   = new Array()
	VALIDATE_ERRORS['brcnpj'][0] = 'CNPJ incorreto'
	// err br uf
	VALIDATE_ERRORS['bruf']	 = new Array()
	VALIDATE_ERRORS['bruf'][0] = 'UF incorreto'
	// err br zip code
	VALIDATE_ERRORS['brzipcode'] 	  = new Array()
	VALIDATE_ERRORS['brzipcode'][0] = 'CEP incorreto'
	// err br phone
	VALIDATE_ERRORS['brphone'] 	= new Array()
	VALIDATE_ERRORS['brphone'][0] = 'DDD incorreto'
	VALIDATE_ERRORS['brphone'][1] = 'Número incorreto'
	// err username
	VALIDATE_ERRORS['domain'] 	 = new Array()
	VALIDATE_ERRORS['domain'][0] = 'Domínio incorreto'
	// err username
	VALIDATE_ERRORS['username'] 	 = new Array()
	VALIDATE_ERRORS['username'][0] = 'Nome de usuário inválido'
	// err password
	VALIDATE_ERRORS['password'] 	 = new Array()
	VALIDATE_ERRORS['password'][0] = 'Senha inválida'
	VALIDATE_ERRORS['password'][1] = 'Senha deve conter letras e números'
}







//###########################################################
//##### VALIDADOR DE ELEMENTOS DE FORMULÁRIO (p/ dados) #####
//###########################################################
function formlib() {

	//METHODS
	this.onlynum = __onlyNumbers
	this.jumptonext = __jumpToNextElem
	this.radiodefined = __getCheckedValueRadio
	this.selectdefined = __getCheckedValueSelect
	this.checkboxdefined = __getCheckedCheckbox
	this.checkall = __checkAll
	this.uncheckall = __unCheckAll


	function __onlyNumbers(obj, exc) {
		var digits="0123456789"
		
		if (exc) digits = digits+exc

		var campo_temp
		for (var i=0;i<obj.value.length;i++){
		  campo_temp=obj.value.substring(i,i+1)
		  if (digits.indexOf(campo_temp)==-1){
				obj.value = obj.value.substring(0,i);
				break;
		  }
		}
	}
	
	
	function __jumpToNextElem(obj) {
		if (obj.value.length == obj.maxLength) {
			for (var i = 0; i < obj.form.length; i++) {
				if (obj.form[(i-1)] == obj)	{
					obj.form[i].focus()
					break;
				}
			}
		}
	}
	
	function __getCheckedValueRadio(radioObj) {
		if(!radioObj)
			return null;
	
		var radioLength = radioObj.length;
	
		if(radioLength == undefined) {
			if(radioObj.checked)
				return radioObj.value;
			else
				return null;
		}
	
		for(var i = 0; i < radioLength; i++) {
			if(radioObj[i].checked)
				return radioObj[i].value;
		}
		return null;
	}

	function __getCheckedValueSelect(slct, ind)	{
		var indice = slct.selectedIndex
		
		if (slct.options[indice].value != '')
			return ind ? indice : slct.options[indice].value
		else
			return null
	}
	
	function __getCheckedCheckbox(obj) {
		if (!obj)
			return null
		
		var valores = new Array()
	
		if (typeof(obj.length) == 'undefined' && obj.checked) // só tem um checkbox
		  valores[0] = obj.value
		else {
		  for(i = 0; i < obj.length; i++) {
			  if (obj[i].checked) {
				  valores.push(obj[i].value)
			  }
		  }
		}
	
		if (valores.length > 0)
		  return valores
		else
		  return null
	}

	function __checkAll(obj) {
		for (i in obj) {
			obj[i].checked = true
		}
	}
	
	function __unCheckAll(obj) {
		for (i in obj) {
			obj[i].checked = false
		}
	}
}





//################
//##### AJAX #####
//################
function ajax() {

	//PROPERTIES
	this.XMLHTTP
	this.PARAMSTOSEND
		 PARAMSTOSEND = new Array()
	this.REQUESTURL
		 REQUESTURL = new String()
	this.METHOD
		 METHOD = new String()
	this.AJAX_ERRORS //msgs de erros
		 AJAX_ERRORS = new Array()


	//METHODS
	this.connect = __xmlhttp
	this.setparam = __setParam
	this.seturl = __setURL
	this.post = __methodPOST
	this.get = __methodGET
	this.mystatereader
	this.onreadystate1
	this.onreadystate2
	this.onreadystate3
	this.onreadystate4
	this.status200
	this.withresponsetext
	this.withresponsexml
	this.gorequest = __request
	
	function __xmlhttp() {
		try {
			XMLHTTP = new XMLHttpRequest ();
		} catch (ee) {
			try {
				XMLHTTP = new ActiveXObject ("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					XMLHTTP = new ActiveXObject ("Microsoft.XMLHTTP");
				} catch (E) {
					XMLHTTP = false;
					throw new Error(AJAX_ERRORS['xmlhttp'][0])
				}
			}
		}	
	}
	
	function __setParam(name, vl) {
		if (name)
			PARAMSTOSEND.push(name+'='+vl)
	}

	function __setURL(url) {
		if (url)
			REQUESTURL = url
	}
	
	function __methodPOST() {
		METHOD = 'POST'
	}
	
	function __methodGET() {
		METHOD = 'GET'
	}

	function __request() {

		if (REQUESTURL == '')
			throw new Error(AJAX_ERRORS['requesturl'][0])

		var Params = PARAMSTOSEND.length > 0 ? PARAMSTOSEND.join('&') : null


		//array de parametro é zerado para ser preenchido novamente numa outra requisição
		PARAMSTOSEND.length = 0


		if (METHOD == 'undefined')
			METHOD = 'GET'
		
		if (METHOD == 'POST') {
			XMLHTTP.open('POST', REQUESTURL+'?uniq='+Math.random(), true)
			XMLHTTP.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
			XMLHTTP.setRequestHeader('Content-Type', "application/x-www-form-urlencoded; charset=iso-8859-1")
			XMLHTTP.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate")
			XMLHTTP.setRequestHeader("Cache-Control", "post-check=0, pre-check=0")
			XMLHTTP.setRequestHeader("Pragma", "no-cache")
			XMLHTTP.send(Params)
		}
		else {
			var URL = Params == null ? REQUESTURL+'?uniq='+Math.random() : REQUESTURL+'?'+Params+'&uniq='+Math.random()
			XMLHTTP.open('GET', URL, true)
			XMLHTTP.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate")
			XMLHTTP.setRequestHeader("Cache-Control", "post-check=0, pre-check=0")
			XMLHTTP.setRequestHeader("Pragma", "no-cache")
			XMLHTTP.send(null)
		}

/*		if (this.onreadystate1 != 'undefined') XMLHTTP.onreadystate1 = this.onreadystate1
		if (this.onreadystate2 != 'undefined') XMLHTTP.onreadystate2 = this.onreadystate2
		if (this.onreadystate3 != 'undefined') XMLHTTP.onreadystate3 = this.onreadystate3
		if (this.onreadystate4 != 'undefined') XMLHTTP.onreadystate4 = this.onreadystate4
		if (this.status200 != 'undefined') XMLHTTP.status200 = this.status200
		if (this.withresponsetext != 'undefined') XMLHTTP.withresponsetext = this.withresponsetext
		if (this.withresponsexml != 'undefined') XMLHTTP.withresponsexml = this.withresponsexml

		XMLHTTP.onreadystatechange = function() {
			if (XMLHTTP.readyState == 1) {
				if (this.onreadystate1 != 'undefined') this.onreadystate1()
			}

			if (XMLHTTP.readyState == 4) {
				if (XMLHTTP.status == 200) {
					if (this.withresponsetext != 'undefined') this.withresponsetext()
					if (this.withresponsexml != 'undefined') this.withresponsexml()
				}
			}
		}*/
		
		XMLHTTP.onreadystatechange = this.mystatereader
	}


	// BIBLIOTECA DE ERROS
	AJAX_ERRORS = new Array()
	// err xmlhttp
	AJAX_ERRORS['xmlhttp'] 	= new Array()
	AJAX_ERRORS['xmlhttp'][0] = 'Your browser does not support XMLHTTP'
	// err request url
	AJAX_ERRORS['requesturl']	   = new Array()
	AJAX_ERRORS['requesturl'][0] = 'Nenhuma URL informada'
}




//################
//##### AJAX #####
//################
function novoajax() {

	//PROPERTIES
	try {
		this.XMLHTTP = new XMLHttpRequest ();
	} catch (ee) {
		try {
			this.XMLHTTP = new ActiveXObject ("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				this.XMLHTTP = new ActiveXObject ("Microsoft.XMLHTTP");
			} catch (E) {
				this.XMLHTTP = false;
				throw new Error(AJAX_ERRORS['xmlhttp'][0])
			}
		}
	}
	this.PARAMSTOSEND = new Array()
	this.REQUESTURL = new String()
	this.METHOD = new String()
	this.AJAX_ERRORS = new Array()


	//METHODS
	this.setparam = __setParam
	this.seturl = __setURL
	this.post = __methodPOST
	this.get = __methodGET
	this.mystatereader
	this.gorequest = __request


	function __setParam(name, vl) {
		if (name)
			this.PARAMSTOSEND.push(name+'='+vl)
	}

	function __setURL(url) {
		if (url)
			this.REQUESTURL = url
	}
	
	function __methodPOST() {
		this.METHOD = 'POST'
	}
	
	function __methodGET() {
		this.METHOD = 'GET'
	}

	function __request() {

		if (this.REQUESTURL == '')
			throw new Error(this.AJAX_ERRORS['requesturl'][0])

		var Params = this.PARAMSTOSEND.length > 0 ? this.PARAMSTOSEND.join('&') : null


		//array de parametro é zerado para ser preenchido novamente numa outra requisição
		this.PARAMSTOSEND.length = 0


		if (this.METHOD == 'undefined')
			this.METHOD = 'GET'
		
		if (this.METHOD == 'POST') {
			this.XMLHTTP.open('POST', this.REQUESTURL+'?uniq='+Math.random(), true)
			this.XMLHTTP.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
			this.XMLHTTP.setRequestHeader('Content-Type', "application/x-www-form-urlencoded; charset=iso-8859-1")
			this.XMLHTTP.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate")
			this.XMLHTTP.setRequestHeader("Cache-Control", "post-check=0, pre-check=0")
			this.XMLHTTP.setRequestHeader("Pragma", "no-cache")
			this.XMLHTTP.send(Params)
		}
		else {
			var URL = Params == null ? this.REQUESTURL+'?uniq='+Math.random() : this.REQUESTURL+'?'+Params+'&uniq='+Math.random()
			this.XMLHTTP.open('GET', URL, true)
			this.XMLHTTP.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate")
			this.XMLHTTP.setRequestHeader("Cache-Control", "post-check=0, pre-check=0")
			this.XMLHTTP.setRequestHeader("Pragma", "no-cache")
			this.XMLHTTP.send(null)
		}

		
		this.XMLHTTP.onreadystatechange = this.mystatereader
	}


	// BIBLIOTECA DE ERROS
	// err xmlhttp
	this.AJAX_ERRORS['xmlhttp'] 	= new Array()
	this.AJAX_ERRORS['xmlhttp'][0] = 'Your browser does not support XMLHTTP'
	// err request url
	this.AJAX_ERRORS['requesturl']	   = new Array()
	this.AJAX_ERRORS['requesturl'][0] = 'Nenhuma URL informada'
}





function urllib() {

	//METHODS
	this.getquery = __QScatch

	function __QScatch (chv) {
		var url = document.location.toString()
	
		if (url.indexOf('?') == -1 || url.indexOf('=') == -1)
			return false
	
		var queries_captadas = new Array()
	
		var linhaquery = url.slice(url.indexOf("?")+1)

		if (linhaquery.search(/&/) != -1)
		{
			var queries = linhaquery.split('&')
	
			for (var i = 0; i < queries.length; i++) {
				
				var valores = queries[i].split('=')
				queries_captadas[valores[0]] = valores[1]
			}
		}
		else {
			var valores = linhaquery.split('=')
			queries_captadas[valores[0]] = valores[1]
		}
		
		if (!queries_captadas[chv])
			return false

		return queries_captadas[chv]
	}
}





function pureswf(url,width,height,wm){
	document.write("<object type='application/x-shockwave-flash' data='"+url+"' width='"+width+"' height='"+height+"'>");
	document.write("<param name='movie' value='"+url+"'>");
	document.write("<param name='quality' value='high'>");
	document.write("<param name='wmode' value='"+wm+"'>");
	document.write("<param name='SCALE' value='exactfit'>");
	document.write("<param name='menu' value='false'>");
	document.write("</object>");
}
