
/*	----------------------------------------------------------------- 
	Classe Swiss Knife - Utilitários de Desenvolvimento
	Desenvolvida por Anderson Triacca - anderson@andersontriacca.com
	Data de Criação: 19/02/2007
	Última Modificação: 09/09/2009
-----------------------------------------------------------------	*/
/*
*
*	Delcaração da Classe
*
*/
function SwissKnife() {
	/*
	*
	* 	@description			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
	*
	*/
	SwissKnife.prototype.addListener = addListener;		
	function addListener(obj, evento, funcao) {
		if(window.attachEvent) {
			obj.attachEvent('on'+evento, funcao);
		} else{
			obj.addEventListener(evento, funcao, false);
		} 
	}
	
	/*
	*
	* 	@description			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];
	}
	SwissKnife.prototype.retornarQueryString = retornarQueryString;		
	function retornarQueryString(string) {
	  return eval("objQS." + string);
	}
	
	/*
	*
	* 	@description			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
	*
	*/
	SwissKnife.prototype.addSwf = addSwf;		
	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);
	}
	
	/*
	*
	* 	@description			Sorteia um Número Randômico entre 1 e "limite"
	*
	*	@param		limite		Maior número a ser gerado
	*	@return					Número sorteado
	*
	*/
	SwissKnife.prototype.randomico = randomico;
	function randomico(limite){
		limite += 1;
		num = Math.floor(Math.random()*limite);
		if(num == 0){
			randomico(limite-1);
		} else{
			return num;
		}
	}
	
	/*
	*
	* 	@description			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
	*
	*/
	SwissKnife.prototype.in_array = in_array;
	function in_array(array, valor){
		retorno = false;
		for(i=0;i<array.length;i++){
			if(array[i] == valor){
				retorno = true;	
			}
		}
		return retorno;
	}
	
	/*
	*
	* 	@description			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
	*
	*/
	SwissKnife.prototype.limpaInputs = limpaInputs;
	function limpaInputs(form, valores){
		retorno = false;
		valor = false;
		inputs = document.getElementById(form).getElementsByTagName('input');
		for(i=0;i<inputs.length;i++){
			inputs[i].onfocus = 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].onfocus = function(){
				valor = this.innerHTML;
				retorno = s.in_array(valores,valor);
				if(retorno){
					this.innerHTML = '';	
				}
			}	
			textarea[i].onblur = function(){
				if(this.innerHTML == ''){
					this.innerHTML = valor;
				}
			}	
		}
	}
	
	/*
	*
	* 	@description			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
	*
	*/
	SwissKnife.prototype.validaInputs = validaInputs;
	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]).getAttribute('title')+' é obrigat\u00F3rio');
					document.getElementById(campos[j]).focus();
					return false;
				}
			}
			return true;
		}
	}
	
	/*
	*
	* 	@description			Função que pré-carrega uma imagem no cache no navegador
	*
	*	@param		caminho		Caminho da imagem a pré-carregar
	*	@return		boolean		true se a imagem estiver carregada, false se não estiver
	*
	*/
	SwissKnife.prototype.preCarrega = preCarrega;
	function preCarrega(caminho){
		var objImagem = new Image();
		objImagem.src=caminho;
		objImagem.onload = function(){
			return true;
		}
		objImagem.onerror = function(){
			return false;
		}
	}
	
	/*
	*
	* 	@description			Função que criptografa uma string no padrão base64
	*
	*	@param		input		String		String a Ser criptografada
	*	@return					String		String criptografada
	*
	*/
	SwissKnife.prototype.base64_encode = base64_encode;
	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;
	}
	
	/*
	*
	* 	@description			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');
	}
	
	/*
	*
	* 	@description			Função que descriptografa uma string do padrão base64
	*
	*	@param		input		String		String a Ser descriptografada
	*	@return					String		String descriptografada
	*
	*/
	SwissKnife.prototype.base64_decode = base64_decode;
	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);
	}
}