//========================================================
//= Library Java Script version 1.0 ======================
//= Developed for HyperCube Studios, all rights reserved =
//========================================================
//========================================================
//= Functions developed ==================================
//========================================================
//		001 = W_open(url, target, popup, width, height, top, left)
//		002 = Value(tag_form_name, tag_type)
//		003 = Selected(tag_form_name, text)
//		004 = NextFocu(tag_name, next_tag_name)
//		005 = EventNumber()
//		006 = Numeric(string_value, tipo)
//		007 = Replace(string_value , caracter, new_caracter)
//		008 = Mid(string_value , start, length)
//		009 = FormatCPF(tag_name)
//		010 = FormatCNPJ(tag_name)
//		011 = FormatRG(tag_name)
//		012 = FormatPhone(tag_name)
//		013 = FormatCEP(tag_name)
//		019 = RemovesOptionsListbox(listbox_name)
//		020 = PutsOptionsListbox(listbox_name, remove_options, inner_text, option_value, selected_value)
//		021 = FormatNumber(tag_name, house)
//
//
//		VALIDAÇÕES
//
//		014 = ValidationCPF(tag_name)		- v.1 OK
//		015 = ValidationText(tag_name)		- v.1 OK
//		016 = ValidationDDDFone(tag_name)	- v.1 OK
//		018 = ValidationDDD(tag_name)
//		022 = ValidationRadio(tag_name)
//		022 = ValidationEmail(tag_name)		- v.1 OK
//		022 = ValidationData(tag_name)		- v.1 OK
//		022 = ValidationCNPJ(tag_name)  	- v.1 OK
//		022 = ValidationNumber(tag_name)	- v.1 OK
//		022 = ValidationCombo(tag_name)		

//======================================
//= Abre uma janela, podendo ser popup =
//======================================
//url: 		pagina a ser aberta
//target: 	onde a pagina será aberta
//popup:	true ou false
//width:	largura se popup for true
//height:	altura se popup for true
//top:		alinhamento em relação ao topo
//left:		alinhamento em relação a equerda
function W_open(url, target, popup, width, height, top, left){
	if(url != null && url != ''){
		var top = (top == null || top == '' || !Number(top))? 0 : top;
		var left = (left == null || left == '' || !Number(left))? 0 : left;
		var target = (target == null || target == '')? '_self' : target;
		if(popup == true){
			var property = ((width != null && width != '' && Number(width)) && (height != null && height != '' && Number(height)))? 'top='+ top +', left='+ left +', width='+ width +', height='+ height +', scrollbars=no, menubar=no, statusbar=no, resizable=no' : '';
			window.open(url, target, property);
		}else{
			window.open(url, target);
		};
	};
};

//=================================================
//= Retorna o value de qualquer tag de formulário =
//=================================================
//tag_form_name:	nome do campo
//tag_type:			tipo do campo
function Value(tag_form_name, tag_type){
	if((tag_form_name != null && String(tag_form_name)) && (tag_type != null && String(tag_type))){	
		if(tag_type.toLowerCase() == 'select'){
			return tag_form_name.options[tag_form_name.selectedIndex].value;
		}else{
			return tag_form_name.value;
		};
	};
};

//======================================================
//= Deixa um item de um determinado select selecionado =
//======================================================
//tag_form_name:	nome do campo
//text:				value do campo a ser selecionado
function Selected(tag_form_name, text){
	var text = (text == null || text == '')? 'null' : text;
	if(tag_form_name != null && String(tag_form_name)){
		for(i=0; i<tag_form_name.length; i++){
			if(tag_form_name.options[i].value.toLowerCase() == text.toLowerCase()){
				tag_form_name.options[i].selected = true;
				break;
			};
		};
	};
};

//======================================================================
//= Function que muda automaticamente o foco para outra caixa de texto =
//======================================================================
//tag_name:			Nome da tag que perdera o foco
//next_tag_name:	Nome da tag que recebera o foco
function NextFocu(tag_name, next_tag_name){
	if(tag_name.getAttribute("maxlength") != null){
		if(tag_name.value.length == tag_name.getAttribute("maxlength") && next_tag_name != null && next_tag_name != ""){
			next_tag_name.focus();
		};
	};
};

//===================================================
//= Function que que permite digitar apenas números =
//===================================================
function EventNumber(tag_name){
	if(tag_name === Object(tag_name)) tag_name.value = tag_name.value;
	event.returnValue = ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105) || (event.keyCode >= 37 && event.keyCode <= 40) || (event.keyCode == 13) || (event.keyCode == 8) || (event.keyCode == 9) || (event.keyCode == 46))? true : false;
};

//========================================================
//= Function que retorna apenas os números de uma string =
//========================================================
//string_value:		string será verificado quais são seus números
//tipo:				Number, String; obs(default is Number)
function Numeric(string_value, tipo){
	var string_value = String(string_value)
	var tipo = (tipo != null)? tipo : Number;
	var i = new Number(), num = new String();
	for(i=0; i<string_value.length; i++){
		num += (string_value.charAt(i) == Number(string_value.charAt(i)))? string_value.charAt(i) : "";
	};
	return tipo(num);
};

//===================================================
//= Function tira um determidado caracter de string =
//===================================================
//string_value:		A string
//caracter: 	caracter a ser substituido
//new_caracter:	caracter que ira substituir
function Replace(string_value , caracter, new_caracter){
	var string_value=String(string_value), new_caracter=String(new_caracter), crP = "";
	new_caracter = (new_caracter == undefined || new_caracter == null)? "" : new_caracter;
	for(y=0; y<string_value.length; y++){
		if(string_value.charAt(y) != String(caracter)) crP += String(string_value.charAt(y));
		if(string_value.charAt(y) == String(caracter)) crP += String(new_caracter);
	};
	return String(crP);
};

//=================================================================
//= Function que retorna umas um determinado número de caracteres =
//=================================================================
//string_value:	String
//start:		posição inicial
//length:		quantidade de caracteres que ira pegar
function Mid(string_value , start, length){
	var vlr="";
	stg = (string_value != undefined && string_value != null)? String(string_value) : "";
	st = (start > 0 && start != undefined && start != null && start == Number(start) && start <= stg.length)? Number(start) : 1;
	ln = (length > 0 && length != undefined && length != null && length == Number(length) && st+length <= stg.length)? (st-1)+Number(length) : stg.length;
	for(y=(st-1); y<ln; y++){
		vlr += stg.charAt(y);
	};
	return(vlr);
};

//============================
//= Function que formata cpf =
//============================
//tag_name:		string que será formatada
function FormatCPF(tag_name){
	var valor = "", valor2 = (tag_name === Object(tag_name))? Numeric(tag_name.value, String) : Numeric(tag_name, String);
	if(tag_name != null && tag_name != ""){
		for(i=0; i<valor2.length; i++){
			valor += (valor2.charAt(i) == Number(valor2.charAt(i)))? valor2.charAt(i) : "";
			if(Numeric(valor, String).length == 3 || Numeric(valor, String).length == 6) valor += ".";
			if(Numeric(valor, String).length == 9) valor += "-";
			if(tag_name === Object(tag_name)) tag_name.value = valor; else tag_name = valor;
		};
	};
	if(tag_name !== Object(tag_name)) return tag_name;
};

//=============================
//= Function que formata CNPJ =
//=============================
//tag_name:		string que será formatada
function FormatCNPJ(tag_name){
	var valor = "", valor2 = (tag_name === Object(tag_name))? Numeric(tag_name.value, String) : Numeric(tag_name, String);
	if(tag_name != null && tag_name != ""){
		for(i=0; i<valor2.length; i++){
			valor += (valor2.charAt(i) == Number(valor2.charAt(i)))? valor2.charAt(i) : "";
			if(Numeric(valor, String).length == 2 || Numeric(valor, String).length == 5) valor += ".";
			if(Numeric(valor, String).length == 8) valor += "/";
			if(Numeric(valor, String).length == 12) valor += "-";
			if(tag_name === Object(tag_name)) tag_name.value = valor; else tag_name = valor;
		};
	};
	if(tag_name !== Object(tag_name)) return tag_name;
};

//===========================
//= Function que formata RG =
//===========================
//tag_name:		string que será formatada
function FormatRG(tag_name){
	var valor = "", valor2 = (tag_name === Object(tag_name))? Numeric(tag_name.value, String) : Numeric(tag_name, String);
	if(tag_name != null && tag_name != ""){
		for(i=0; i<valor2.length; i++){
			valor += (valor2.charAt(i) == Number(valor2.charAt(i)))? valor2.charAt(i) : "";
			if(Numeric(valor, String).length == 2 || Numeric(valor, String).length == 5) valor += ".";
			if(Numeric(valor, String).length == 8) valor += "-";
			if(tag_name === Object(tag_name)) tag_name.value = valor; else tag_name = valor;
		};
	};
	if(tag_name !== Object(tag_name)) return tag_name;
};

//=================================
//= Function que formata Telefone =
//=================================
//tag_name:		string que será formatada
function FormatPhone(tag_name){
	var valor = "", valor2 = (tag_name === Object(tag_name))? Numeric(tag_name.value, String) : Numeric(tag_name, String);
	if(tag_name != null && tag_name != ""){
		for(i=0; i<valor2.length; i++){
			valor += (valor2.charAt(i) == Number(valor2.charAt(i)))? valor2.charAt(i) : "";
			if(Numeric(valor, String).length == 2 && valor2.length >= 9) valor = "(" + Replace(valor, "(", "") + ")";
			if((Numeric(valor, String).length == 4 && valor2.length == 8) || (Numeric(valor, String).length == 3 && valor2.length == 7) || (Numeric(valor, String).length == 5 && valor2.length == 9) || (Numeric(valor, String).length == 6 && valor2.length == 10)) valor = Replace(valor, "-", "") + "-";
			if(tag_name === Object(tag_name)) tag_name.value = valor; else tag_name = valor;
		};
	};
	if(tag_name !== Object(tag_name)) return tag_name;
};

//============================
//= Function que formata CEP =
//============================
//tag_name:		string que será formatada
function FormatCEP(tag_name){
	var valor = "", valor2 = (tag_name === Object(tag_name))? Numeric(tag_name.value, String) : Numeric(tag_name, String);
	if(tag_name != null && tag_name != ""){
		for(i=0; i<valor2.length; i++){
			valor += (valor2.charAt(i) == Number(valor2.charAt(i)))? valor2.charAt(i) : "";
			if(Numeric(valor, String).length == 5) valor += "-";
			if(tag_name === Object(tag_name)) tag_name.value = valor; else tag_name = valor;
		};
	};
	if(tag_name !== Object(tag_name)) return tag_name;
};

//=======================================
//= Function que faz a validação de cpf =
//=======================================
//tag_name:		string que será validade
function ValidationCPF(tag_name){
	var vl = (tag_name === Object(tag_name))? Numeric(tag_name.value, String) : Numeric(tag_name, String);
	var i = new Number(), ii = new Number(), sm = new Number(), sm2 = new Number();
	var vl2 = new String(), vlr = new String(), vlr2 = new String();
	if(vl.length == 11){
		for(i=0; i<10; i++){
			for(ii=0; ii<11; ii++){
				vl2 += i;
			};
			if(vl == vl2){
				return false;
				break;
			}else vl2 = "";
		};
		for(i=1; i<=9; i++){
			sm += (Number(vl.charAt(i-1)) * (10 - (i - 1)));
			sm2 += (Number(vl.charAt(i-1)) * (11 - (i - 1)));
		};
		sm2 += (vl.charAt(9) * 2);
		vlr = new Array(Math.floor(sm / 11) * 11, Math.floor(sm2 / 11) * 11);
		vlr2 = new Array(sm - vlr[0], sm2 - vlr[1]);
		if(vlr2[0] == 0 || vlr2[0] == 1){
			if(vl.charAt(9) != 0) return false;
		}else{
			if(vl.charAt(9) != (11 - vlr2[0])) return false;
		};
		if(vlr2[1] == 0 || vlr2[1] == 1){
			if(vl.charAt(10) != 0) return false; 
		}else{
			if(vl.charAt(10) != (11 - vlr2[1])) return false;
		};
		return true;
	}else{
		return false;
	};
};

//=======================================
//= Function que valida compos de testo =
//=======================================
//tag_name:		string que será validade
function ValidationText(tag_name){
	var valor = (tag_name === Object(tag_name))? Replace(tag_name.value, " ", "") : Replace(tag_name, " ", "");

	if(valor.length == 0) return false; else return true;
};

//==================================
//= Function que valida ddd Brasil =
//==================================
//tag_name:		string que será validade
function ValidationDDD(tag_name){
	var valor = (tag_name === Object(tag_name))? Replace(tag_name.value, " ", "") : Replace(tag_name, " ", "");
	var i = new Number()
	
	var a = '';
	
	if((valor != Numeric(valor, String)) || (Numeric(valor, String).length < 2) || (Numeric(valor, String).length > 2)){
		 return false; 
	}else{
		var c = [68,82,96,92,71,88,61,27,62,98,65,84,31,91,83,41,81,86,21,84,51,69,95,48,11,79,63];
		for (i=0; i< 27; i++){
			if (c[i] == valor){
		  		a = 'achou';
			}

		}	
		

		if (a=='achou'){
			return true;
		}else{
   		        return false;
		}
	}
	
};

//=======================================
//= Function que valida telefone Brasil =
//=======================================
//tag_name:		string que será validade
function ValidationFone(tag_name){
	var valor = (tag_name === Object(tag_name))? Replace(tag_name.value, " ", "") : Replace(tag_name, " ", "");
	if((Replace(valor, "-", "") != Numeric(valor, String)) || (Numeric(valor, String).length < 7) || (Numeric(valor, String).length > 8)) return false; else return true;
};

//========================================================
//= Function que formata campos de DDD + telefone Brasil =
//========================================================
//tag_name:		string que será validade
function ValidationDDDFone(tag_name){
	var valor = (tag_name === Object(tag_name))? Replace(tag_name.value, " ", "") : Replace(tag_name, " ", "");
	valor = Replace(valor, "(", "");
	valor = Replace(valor, ")", "");
	valor = Replace(valor, "-", "");
	var valor1 = Mid(valor, 1, 2);
	var valor2 = Mid(valor, 3);
	if((valor1 != Numeric(valor1, String)) || (Numeric(valor1, String).length < 2) || (valor2 != Numeric(valor2, String)) || (Numeric(valor2, String).length < 7)) return false; else return true;
};

//============================================
//= Function que remove opções de um listbox =
//============================================
//listbox_name:		Nome do listbox a ter seus valores deletados
function RemovesOptionsListbox(listbox_name){
	var i = new Number();
	if(listbox_name === Object(listbox_name)){
		i = listbox_name.options.length;
		while(i >= 0){
			listbox_name.options.remove(i);
			i -= 1;
		};
	};
};

//===============================================
//= Function que preenche um listbox com opções =
//===============================================
//listbox_name:		Nome do listbox a ter seus valores deletados
//remove_options:	true para remover as opções atuáis
//inner_text:		o testo que cada opção tem, isso separado por virgula
//option_value:		qual será a proprieda value de cada option, isso separado por vigura
//selected_value:	o valor que devera ser selecionado
function PutsOptionsListbox(listbox_name, remove_options, inner_text, option_value, selected_value){
	var _text = inner_text.split(","), _value = option_value.split(","), opt = new Object();
	if(listbox_name === Object(listbox_name)){
		if(remove_options == true) RemovesOptionsListbox(listbox_name);
		if(_text.length > 1){
			for(i=0; i<_text.length; i++){
				opt = document.createElement("OPTION");
				listbox_name.options.add(opt);
				opt.innerText = _text[i];
				_value[i] = (_value[i] != undefined)? _value[i] : _text[i];
				opt.value = _value[i]
				if(String(selected_value) == String(_value[i])) opt.selected = true;
			};
		}else{
			if(_text[0] == ""){
				_text[0] = "Doesn't exist options";
				_value[0] = "Null";
			};
			opt = document.createElement("OPTION");
			listbox_name.options.add(opt);
			opt.innerText = _text[0];
			opt.value = _value[0];
		};
	};
};

//=================================
//= Function que formata Telefone =
//=================================
//tag_name:		string que será formatada
//house:		numro de casas decimais
function FormatNumber(tag_name, house){
	var valor = "", valor2 = (tag_name === Object(tag_name))? Numeric(tag_name.value, String) : Numeric(tag_name, String);
	var house = (house === Number(house) && Numeric(house, String).length >= 1)? Numeric(house) : 2;
	var num = new Number();
	for(i=0; i<valor2.length; i++){
		if(valor2.charAt(i) != "0"){
			num = i+1;
			break;
		};
	};
	valor2 = Mid(valor2, num);
	if(tag_name != null && tag_name != ""){
		for(i=0; i<valor2.length; i++){
			valor += (valor2.charAt(i) == Number(valor2.charAt(i)))? valor2.charAt(i) : "";
			if(valor2.length - i == house + 1) valor += ",";
		};
		if(Numeric(valor, String).length <= house && Numeric(valor, String).length > 0){
			for(i=0; i<(house-valor.length); i++) valor = "0" + valor;
			valor = "0," + Replace(valor, ",", "");
		};
		if(Numeric(valor, String).length == house){
			valor = "0," + Replace(valor, ",", "");
		};
		if(tag_name === Object(tag_name)) tag_name.value = valor; else tag_name = valor;
	};
	if(tag_name !== Object(tag_name)) return tag_name;
};

//=============================
//= Function que valida radio =
//=============================
function ValidaRadio(tag_name) {
	//validacao de radio buttons sem saber quantos sao
	marcado = -1
	for (i=0; i<nform.resp.length; i++) {
		if (nform.resp[i].checked) {
			marcado = i
			resposta = nform.resp[i].value
		}
	}
	
	if (marcado == -1) {
		alert("Selecione uma resposta.");
		nform.resp[0].focus();
		return false;
	} else { //esse else so foi colocado para evitar que o form desse o submit
		alert("Você selecionou que é " + resposta); 
		return false; 
	} 
		return true;
}

//=================
//= validar email =
//=================

function ValidationEmail(tag_name) {
	var email = (tag_name === Object(tag_name))? Replace(tag_name.value, " ", "") : Replace(tag_name, " ", "");
        parte1 = email.indexOf("@");
        parte2 = email.indexOf(".");
        parte3 = email.length;

         if (!(parte1 >= 3 && parte2 >= 6 && parte3 >= 9)) {
                 return false;
         }else{
		return true;
	}
}

//================
//= validar CNPJ =
//================

function validationCNPJ(tag_name) {
	var CNPJ = (tag_name === Object(tag_name))? Replace(tag_name.value, " ", "") : Replace(tag_name, " ", "");
	var i = new Number()
	var y = new Number()

	var erro = new String();
	if ((Object(CNPJ).length != 18) && (Object(CNPJ).length != 14)) erro = 'true';
	//if ((Object(CNPJ).charAt(2) != ".") || (Object(CNPJ).charAt(6) != ".") || (Object(CNPJ).charAt(10) != "/") || (Object(CNPJ).charAt(15) != "-")){
	//	if (erro.length == 0) erro = 'true';
	//}
	//substituir os caracteres que nao sao numeros
	if(document.layers && parseInt(navigator.appVersion) == 4){
		x = CNPJ.substring(0,2);
		x += CNPJ.substring(3,6);
		x += CNPJ.substring(7,10);
		x += CNPJ.substring(11,15);
		x += CNPJ.substring(16,18);
		CNPJ = x;	
	} else {
		CNPJ = CNPJ.replace(".","");
		CNPJ = CNPJ.replace(".","");
		CNPJ = CNPJ.replace("-","");
		CNPJ = CNPJ.replace("/","");
	}
	var nonNumbers = /\D/;
	if (nonNumbers.test(CNPJ)) erro = 'true';	
	var a = [];
	var b = new Number;
	var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
	for (i=0; i<12; i++){
		a[i] = CNPJ.charAt(i);
		b += a[i] * c[i+1];
	}
	if ((x = b % 11) < 2) { a[12] = 0 } else { a[12] = 11-x }
	b = 0;
	for (y=0; y<13; y++) {
		b += (a[y] * c[y]); 
	}
	if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; }
	if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13])){
		erro = 'true';
	}
	if (erro.length > 0){
		return false;
	} else {
		return true;
	}
}

//========================================
//= Function que valida compos  numericos=
//========================================

//tag_name:		string que será validade
function ValidationNumber(tag_name){
	var valor = (tag_name === Object(tag_name))? Replace(tag_name.value, " ", "") : Replace(tag_name, " ", "");

	if (valor == ''){
		return false;
	}else{
		if (isNaN(valor)) return false; else return true;
	}
};

//=================
//= validar datas =
//=================

function ValidationData(tag_name) {
	var valor = (tag_name === Object(tag_name))? Replace(tag_name.value, " ", "") : Replace(tag_name, " ", "");
	erro=0;
        hoje = new Date();
        anoAtual = hoje.getFullYear();
        barras = valor.split("/");

        
	if (barras.length == 3){
        	dia = barras[0];
                mes = barras[1];
                ano = barras[2];
                resultado = (!isNaN(dia) && (dia > 0) && (dia < 32)) && (!isNaN(mes) && (mes > 0) && (mes < 13)) && (!isNaN(ano) && (ano.length == 4) && (ano <= anoAtual && ano >= 1900));
                
		if (!resultado) {
                       return false;
                }else{
			return true;
		}
	} else {
		return false
        }
}

//================
//= valida combo =
//================

function ValidationCombo(tag_name) {
	var valor = (tag_name === Object(tag_name))? Replace(tag_name.value, " ", "") : Replace(tag_name, " ", "");
	if (valor == ''){
		return false;
	}else{
		return true;
	}
}


//=============
//= valida RG =
//=============

function ValidationRG(tag_name) {
	var RG = (tag_name === Object(tag_name))? Replace(tag_name.value, " ", "") : Replace(tag_name, " ", "");
	x= new Array(9);
	y= new Number();
	var i = new Number();
	y=0;

	if(document.layers && parseInt(navigator.appVersion) == 4){
		v = RG.substring(0,2);
		v += RG.substring(3,6);
		v += RG.substring(7,10);
		v += RG.substring(11,15);
		v += RG.substring(16,18);
		RG = v;	
	} else {
		RG = RG.replace(".","");
		RG = RG.replace(".","");
		RG = RG.replace("-","");
	}

	
	if ((RG=='') || (RG.length != 9) || (RG == '000000000') ){
		return false;
	}else{
	
		for(i=0;i<8;i++)
		{
			x[i]= RG.charAt(i)*(i+2);
			y=y+x[i];
		}

		if (RG.charAt(8)=="x" || RG.charAt(8)=="X"){
			x[8] = 10*100;
		}else{
			x[8]=RG.charAt(8)*100;

		}


		if (isNaN(RG.charAt(8)) && RG.charAt(8)!="x" && RG.charAt(8)!="X"){
			return false;
		}else{	
			y=y+x[8];

			if((y%11)==0) {
				return true;
			}else{
				return false;	
			}
		}
	}
}
