
/*	----------------------------------------------------------------- 
	Classe Swiss Knife - Utilitários de Desenvolvimento
	Desenvolvida por Anderson Triacca - anderson@andersontriacca.com
	Data de Criação: 19/02/2007
	Última Modificação: 20/04/2009
-----------------------------------------------------------------	*/

/*
*
* 	Declaração dos métodos da classe
*
*/
function SwissKnife() {
	SwissKnife.prototype.criarObj = criarObj;	
	SwissKnife.prototype.efetuarPedido = efetuarPedido;		
	SwissKnife.prototype.addListener = addListener;		
	SwissKnife.prototype.retornarQueryString = retornarQueryString;		
	SwissKnife.prototype.addSwf = addSwf;		
	SwissKnife.prototype.randomico = randomico;
	SwissKnife.prototype.in_array = in_array;
	SwissKnife.prototype.limpaInputs = limpaInputs;
	SwissKnife.prototype.validaInputs = validaInputs;
	SwissKnife.prototype.elementExists = elementExists;
	SwissKnife.prototype.preCarrega = preCarrega;
	SwissKnife.prototype.base64_encode = base64_encode;
	SwissKnife.prototype.base64_decode = base64_decode;
	SwissKnife.prototype.url_site = url_site;
}

/*
*
* 	Adiciona Ouvintes a ações de DOM
*
*	@param		obj			Objeto a ser monitorado
*	@param		evento		Evento do objeto a ser monitorado
*	@param		funcao		função a disparar junto com o evento
	@return					void
*
*/
function addListener(obj, evento, funcao) {
	if(window.attachEvent) {
		obj.attachEvent('on'+evento, funcao);
	} else{
		obj.addEventListener(evento, funcao, false);
	} 
}

/*
*
* 	Busca Valores de Querystring
*
*	@param		string		Nome da variável a buscar
*	@return					valor contido na variável "string"
*
*/
var req = window.location.search.substr(1,window.location.search.length);
var dbl = req.split('&');
var aPrm = new Array();
var aVal = new Array();
var objQS = new Object();
for (i=0;i < dbl.length;i++) {
  aPrm[i+1] = dbl[i].substring(0,dbl[i].indexOf('='));
  aVal[i+1] = unescape(dbl[i].substring(dbl[i].indexOf('=')+1,dbl[i].length));
  objQS[aPrm[i+1]] = aVal[i+1];
}
function retornarQueryString(string) {
  return eval("objQS." + string);
}

/*
*
* 	Cria um Objeto XMLHttp
*	@return		void
*/
function criarObj() {
	var xmlhttp;
	/*@cc_on
		@if (@_jscript_version >= 5) {
			try {
				xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {
					xmlhttp = false;
				}
			}
		} @else {
			xmlhttp = false;
		}
	@end @*/
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch (e) {
			xmlhttp = false;
		}
	}
	this.obj = xmlhttp;
}

/*
*
* 	Efetua uma requisição através do objeto
*
*	@param		url			url da requisição
*	@param		método		método da requisição
*	@param		conteudo	variáveis contidas na requisição
*	@return					void
*
*/
function efetuarPedido(url, metodo, conteudo){
	this.obj.open(metodo, url, true);
	this.obj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	this.obj.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate"); 
	this.obj.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");
	this.obj.setRequestHeader("Pragma", "no-cache");
	this.carregado = false;
	this.status = 'carregando';
	this.obj.send(conteudo);
}

/*
*
* 	Substitui o conteúdo de uma DIV por um objeto SWF
*
*	@param		swf			Caminho do SWF a substituir
*	@param		alvo		ID do elemento DOM a ser preenchido com o SWF
*	@param		altura		Altura do SWF
*	@param		largura		Largura do SWF
*	@param		[variavel]	Array com as variáveis a Inserir dentro do SWF
*	@param		[valor]		Array com os valores a Inserir dentro do SWF
*	@return					void
*
*/
function addSwf(swf, alvo, largura, altura, variavel, valor){
	var so = new SWFObject(swf, alvo, largura, altura, "8", "");
	if(variavel){
		for(i=0;i<variavel.length;i++){
			so.addVariable(variavel[i], valor[i]);
		}
	}
	so.addParam("wmode", "transparent");
	so.write(alvo);
}

/*
*
* 	Sorteia um Número Randômico entre 1 e "limite"
*
*	@param		limite		Maior número a ser gerado
*	@return					Número sorteado
*
*/
function randomico(limite){
	limite += 1;
	num = Math.floor(Math.random()*limite);
	if(num == 0){
		randomico(limite-1);
	} else{
		return num;
	}
}

/*
*
* 	Verifica valores nos índices de um Array
*
*	@param		array		Array a ser consultado
*	@param		valor		Valor a buscar dentro do Array
*	@return		boolean		True caso o valor seja encontrado dentro do array, e False caso não seja
*
*/
function in_array(array, valor){
	retorno = false;
	for(i=0;i<array.length;i++){
		if(array[i] == valor){
			retorno = true;	
		}
	}
	return retorno;
}

/*
*
* 	Limpa os campos input e textarea do formulário quando se lica neles
*
*	@param		form		Identificador do formulário a ser limpado
*	@param		valores		Array contendo os valores originais dos campos
*	@return					void
*
*/
function limpaInputs(form, valores){
	retorno = false;
	valor = false;
	inputs = document.getElementById(form).getElementsByTagName('input');
	for(i=0;i<inputs.length;i++){
		inputs[i].onclick = function(){
			if(this.type == 'text'){
				valor = this.value;
				retorno = s.in_array(valores,valor);
				if(retorno){
					this.value = '';	
				}
			}	
		}	
		inputs[i].onblur = function(){
			if(this.value == ''){
				this.value = valor;
			}
		}	
	}
	textarea = document.getElementById(form).getElementsByTagName('textarea');
	for(i=0;i<textarea.length;i++){
		textarea[i].onclick = function(){
			valor = this.innerHTML;
			retorno = s.in_array(valores,valor);
			if(retorno){
				this.innerHTML = '';	
			}
		}	
		textarea[i].onblur = function(){
			if(this.innerHTML == ''){
				this.innerHTML = valor;
			}
		}	
	}
}

/*
*
* 	Faz validação dos campos Input do formulário
*
*	@param		form		Identificador do formulário a ser validado
*	@param		campos		Array contendo os ids dos campos a serem validados
*	@param		valores		Array contendo os valores originais dos campos
*	@return					void
*
*/
function validaInputs(form, campos, valores){
	document.getElementById(form).onsubmit = function(){
		retorno = true;
		campo = false;
		for(j=0;j<campos.length;j++){
			if(document.getElementById(campos[j]).value == '' || s.in_array(valores, document.getElementById(campos[j]).value)){
				alert('O campo "'+document.getElementById(campos[j]).title+'" é obrigat\u00F3rio');
				document.getElementById(campos[j]).focus();
				return false;
			}
		}
		return true;
	}
}

/*
*
* 	Função que descobre se um elemento DOM existe na página
*
*	@param		id			ID do elemento a ser buscado
*	@return		boolean		true se o elemento existe, false se não existe
*
*/
function elementExists(id){
	if(!!document.getElementById(id)){
		return true;
	} else{
		return false;
	}
}

/*
*
* 	Função que pré-carrega uma imagem no cache no navegador
*
*	@param		id			ID do elemento a ser buscado
*	@return		boolean		true se a imagem estiver carregada, false se não estiver
*
*/
function preCarrega(imagem){
	var objImagem = new Image();
	objImagem.src=imagem;
	objImagem.onload = function(){
		return true;
	}
	objImagem.onerror = function(){
		return false;
	}
}

/*
*
* 	Função que criptografa uma string no padrão base64
*
*	@param		input		String		String a Ser criptografada
*	@return					String		String criptografada
*
*/
var keyStr = "ABCDEFGHIJKLMNOP"+"QRSTUVWXYZabcdef"+"ghijklmnopqrstuv"+"wxyz0123456789+/"+"=";
function base64_encode(input) {
  input = escape(input);
  var output = "";
  var chr1, chr2, chr3 = "";
  var enc1, enc2, enc3, enc4 = "";
  var i = 0;

  do {
	 chr1 = input.charCodeAt(i++);
	 chr2 = input.charCodeAt(i++);
	 chr3 = input.charCodeAt(i++);

	 enc1 = chr1 >> 2;
	 enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
	 enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
	 enc4 = chr3 & 63;

	 if (isNaN(chr2)) {
		enc3 = enc4 = 64;
	 } else if (isNaN(chr3)) {
		enc4 = 64;
	 }

	 output = output +
		keyStr.charAt(enc1) +
		keyStr.charAt(enc2) +
		keyStr.charAt(enc3) +
		keyStr.charAt(enc4);
	 chr1 = chr2 = chr3 = "";
	 enc1 = enc2 = enc3 = enc4 = "";
  } while (i < input.length);

  return output;
}

/*
*
* 	Função que configura e inicializa a ShadowBox
*
*	@return					void
*
*/
function configShadowBox(){
	Shadowbox.loadSkin('classic', 'src/skin');
	Shadowbox.loadLanguage('pt-BR', 'src/lang');
	Shadowbox.loadPlayer(['html', 'img'], 'src/player');
}

/*
*
* 	Função que descriptografa uma string do padrão base64
*
*	@param		input		String		String a Ser descriptografada
*	@return					String		String descriptografada
*
*/
function base64_decode(input) {
  var output = "";
  var chr1, chr2, chr3 = "";
  var enc1, enc2, enc3, enc4 = "";
  var i = 0;
  var base64test = /[^A-Za-z0-9\+\/\=]/g;
  if (base64test.exec(input)) {
	 alert("Anten\u00E7\u00E3o! Alguns caracteres s\u00E3o inv\u00E1lidos e podem ocorrer erros na convers\u00E3o.");
  }
  input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

  do {
	 enc1 = keyStr.indexOf(input.charAt(i++));
	 enc2 = keyStr.indexOf(input.charAt(i++));
	 enc3 = keyStr.indexOf(input.charAt(i++));
	 enc4 = keyStr.indexOf(input.charAt(i++));

	 chr1 = (enc1 << 2) | (enc2 >> 4);
	 chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
	 chr3 = ((enc3 & 3) << 6) | enc4;

	 output = output + String.fromCharCode(chr1);

	 if (enc3 != 64) {
		output = output + String.fromCharCode(chr2);
	 }
	 if (enc4 != 64) {
		output = output + String.fromCharCode(chr3);
	 }

	 chr1 = chr2 = chr3 = "";
	 enc1 = enc2 = enc3 = enc4 = "";

  } while (i < input.length);

  return unescape(output);
}

function url_site(){
	return(document.getElementById('id_pagina').value);
}