multipleBox = {	

	daquiPrali: function(oDaquiStr, oPraliStr){
		
		var oDaqui = document.getElementById(oDaquiStr);
		var oPrali = document.getElementById(oPraliStr);
		
		var sTexto;
		var sValor;
		var bCriaFilho = false;
		for(var i=0; i<oDaqui.length; i++){
			if(oDaqui.options[i].selected){
				sTexto = oDaqui.options[i].text;
				sValor = oDaqui.options[i].value;
				
				if(oDaqui.options[i].parentNode.nodeName.toLowerCase() == "optgroup"){					
					var sLabel = oDaqui.options[i].parentNode.label;
					var groupExiste = multipleBox.existeOptGroup(oPrali, sLabel);
					if(groupExiste == false){	
						var oG = document.createElement("optgroup");
						oG.setAttribute("label", sLabel);
						oG.setAttribute("class", "opt_pai");
						oPrali.appendChild(oG);
					}
					else{
						oG = groupExiste;
					}
					bCriaFilho = true;
				}
				else{
					oG = oPrali;
					bCriaFilho = false;
				}

				var oP = document.createElement("option");
				oP.setAttribute("value", sValor);
				if(bCriaFilho == true){
					oP.setAttribute("class", "opt_filho");
				}
				oP.appendChild(document.createTextNode(sTexto));
				oG.appendChild(oP);

				ccDOM.removeChild(oDaqui.options[i]);
				i--;
			};
		}
		multipleBox.limpaOptGroup(oDaqui);
	},
	
	existeOptGroup: function(oPrali, sLabel){
		var bExiste = false;
		for(var k=0; k<oPrali.childNodes.length; k++){
			var oOptTag = oPrali.childNodes[k];
			if(oOptTag.nodeName.toLowerCase() == "optgroup"){
				if(oOptTag.label == sLabel){
					bExiste =  oOptTag;
				}
			}
		}		
		return bExiste;
	},

	limpaOptGroup: function(oDaqui){
		for(var k=0; k < oDaqui.childNodes.length; k++){
			var oOpt = oDaqui.childNodes[k];
			if(oOpt.nodeName.toLowerCase() == "optgroup"){
				if(oOpt.childNodes.length == 0){
					oOpt.parentNode.removeChild(oOpt);
					k--; // esse é o cara
				}
			}
		}
	},
	
	selectAllOptGroup: function(idObj){
		oDaqui = document.getElementById(idObj);
		for(var k=0; k < oDaqui.length; k++){
			var oOpt = oDaqui[k];
			oOpt.setAttribute("selected", "selected");
		}
	}
}

ccForm = {
	
	init: function(){
		var campos = document.getElementsByTagName("input");
		if(campos.length == 0){
			return false;
		}
		else{
			for(var i=0; i<campos.length; i++){

				if(campos[i].getAttribute("name") && campos[i].getAttribute("name").substring(0,3) == 'AC_'){
					
					campos[i].onkeydown = function(){
						var ac_id = ccForm.ciddIndex(this);
						if(document.getElementById('UF_'+ac_id).value == ''){
							alert('Selecione a UF da cidade');
							document.getElementById('UF_'+ac_id).focus();
						}
					}
					campos[i].onblur = function(){
						var ac_id = ccForm.ciddIndex(this);
						if(this.value != document.getElementById('CP_'+ac_id).value){
							document.getElementById(ac_id).value = '';
							document.getElementById('CP_'+ac_id).value = '';
						}
					}
					var ac_id = ccForm.ciddIndex(campos[i]);
					document.getElementById('UF_'+ac_id).onchange = function(){
						var ac_id = ccForm.ciddIndex(this);
						document.getElementById('AC_'+ac_id).value = '';
						document.getElementById(ac_id).value = '';
						document.getElementById('CP_'+ac_id).value = '';
					}
				}
				
				if(campos[i].getAttribute('type') == 'text' && campos[i].getAttribute('name').indexOf('_counter') == -1){
					if(document.getElementById(campos[i].getAttribute('name') + '_counter')){
						// conta a primeira vez
						qtd_char_ini = campos[i].value;
						name_qtd_char_ini = campos[i].getAttribute('name') + '_counter';
						valor_qtde = qtd_char_ini.length;
						if(valor_qtde == 0){
							valor_qtde = '';
						}
						document.getElementById(name_qtd_char_ini).value = valor_qtde;  
						// atribui um evento para contar a cada alteração
						campos[i].onkeyup = function(e){
							obj = ccEvent.getSource(e);
							tamanho = obj.value;
							nome_obj = obj.id;
							document.getElementById(nome_obj+'_counter').value = tamanho.length;
						}
					}
				}

				if(/required/.test(campos[i].className)){
					/*
					// É preciso verificar a situação de quando já existe um evento deste tipo no campo
					// Desta forma ele simplesmente da um replace. neste caso tirei por causa do combo de
					// cidade mas devo implementar aqui tbm e corrigir a situação
					var strClass = campos[i].className;
					campos[i].onfocus = function(){			
						this.className = "";	
					}
					campos[i].onblur = function(){			
						if(this.value == ""){
							this.className = strClass;
						};	
					}
					*/
				}
				if(/mask_cpf_angola/.test(campos[i].className)){
					campos[i].onkeypress = function(e){			
						e = ccEvent.formatEvent(e);
						ccForm.maskCpfAngola(this, e);			
					}
					campos[i].onblur = function(e){			
						ccForm.clearField(this, 'abcdefghijklmnopqrstuvxzwyABCDEFGHIJKLMNOPQRSTUVXZWY');			
					}
				}
				if(/mask_number/.test(campos[i].className)){
					campos[i].onkeypress = function(e){			
						e = ccEvent.formatEvent(e);
						ccForm.maskNumber(e);			
					}
					campos[i].onblur = function(e){			
						ccForm.clearField(this, '');			
					}
				}
				else if(/mask_gabarito/.test(campos[i].className)){
					campos[i].onkeypress = function(e){			
						e = ccEvent.formatEvent(e);
						ccForm.maskGabarito(e);			
					}
				}
				else if(/mask_fone/.test(campos[i].className)){
					var ddd_fone = document.getElementById('ddd_'+campos[i].getAttribute("id"));
					//alert(ddd_fone);
					if(ddd_fone != null){
						ddd_fone.onkeypress = function(e){			
							e = ccEvent.formatEvent(e);							
							ccForm.maskNumber(e);
						}	
						ddd_fone.onkeyup = function(e){			
							if(this.value.length == 2){
								// por alguma razão não funcionou a var fone
								var next_field = this.name.substr(4,this.name.length);
								document.getElementById(next_field).focus();
							}						
						}	
						ddd_fone.onblur = function(e){			
							ccForm.clearField(this, '');			
						}
						campos[i].onkeypress = function(e){			
							e = ccEvent.formatEvent(e);						
							ccForm.maskNumber(e);						
						}
						campos[i].onblur = function(e){			
							ccForm.clearField(this, '');			
						}
					}

				}
				else if(/mask_date_no_calendar/.test(campos[i].className)){
					campos[i].onkeypress = function(e){			
						e = ccEvent.formatEvent(e);
						ccForm.maskDateNoCalendar(e);			
					}
					campos[i].onblur = function(e){			
						ccForm.clearField(this, '/');			
					}
				}
				else if(/mask_date/.test(campos[i].className)){
					campos[i].onkeypress = function(e){			
						e = ccEvent.formatEvent(e);
						ccForm.maskDate(e);			
					}
					campos[i].onblur = function(e){			
						ccForm.clearField(this, '/');			
					}
				}
				else if(/mask_hour/.test(campos[i].className)){
					campos[i].onkeypress = function(e){			
						e = ccEvent.formatEvent(e);
						ccForm.maskHour(e);			
					}
					campos[i].onblur = function(e){			
						ccForm.clearField(this, ':');			
					}
				}
				else if(/mask_cep/.test(campos[i].className)){
					campos[i].onkeypress = function(e){			
						e = ccEvent.formatEvent(e);
						ccForm.maskCep(e);			
					}
					campos[i].onblur = function(e){			
						ccForm.clearField(this, '-');			
					}
				}
				else if(/mask_real/.test(campos[i].className)){
					campos[i].onkeypress = function(e){			
						e = ccEvent.formatEvent(e);
						ccForm.maskNumber(e, 'real');			
					}
					campos[i].onblur = function(e){			
						ccForm.clearField(this, ':.,');			
					}
				}
				else if(/mask_currency/.test(campos[i].className)){
					campos[i].onkeypress = function(e){			
						e = ccEvent.formatEvent(e);
						ccForm.maskNumber(e, this);			
					}
					campos[i].onkeydown = function(e){			
						e = ccEvent.formatEvent(e);
						ccForm.maskCurrency(e);			
					}
					campos[i].onblur = function(e){			
						ccForm.clearField(this, '.,');			
					}
				}	
				else if(/combo_search/.test(campos[i].className)){
					campos[i].onkeyup = function(e){		
						var searched_id = this.name.replace('search_', '');
						oComboSearched = document.getElementById(searched_id);
						ccForm.comboSearch(this, oComboSearched);		
					}
				}			

			}			
		}
	},

	ciddIndex: function(field){
		return field.getAttribute("name").substring(3,field.getAttribute("name").length);
	},
	
	comboSearch: function(field, oComboSearched){
		sSearch = field.value.toUpperCase();
		sSearch.cc_remove_acentos();
		iSearchLength = sSearch.length;
		for (j=0; j < oComboSearched.options.length; j++){
			sOptionText = oComboSearched.options[j].text;
			sOptionComp = sOptionText.substr(0, iSearchLength).toUpperCase();
			if(sSearch == sOptionComp){
				oComboSearched.selectedIndex = j;
				break;
			}
		}		
	},
	
	clearField: function(field, sValid){
		
		var sField = field.value;		
		var sValid = '1234567890'+sValid;
		var sClean = '';
		var iLength = sField.length;

		for(var i=0; i<iLength; i++) {
			var str = sField.substr(i,1);
			if(sValid.indexOf(str) > -1){
				sClean += str;
			}
		}
		field.value = sClean;

	},
	
	maskCurrency: function(oEvent){	
		
		// ta meia boca mas funciona
		
		var campo = ccEvent.getSource(oEvent);
		var tammax = campo.getAttribute("maxlength") - 1;
		var tecla = oEvent.keyCode;

		vr = campo.value;
		vr = vr.replace( "/", "" );
		vr = vr.replace( "/", "" );
		vr = vr.replace( ",", "" );
		vr = vr.replace( ".", "" );
		vr = vr.replace( ".", "" );
		vr = vr.replace( ".", "" );
		vr = vr.replace( ".", "" );
		tam = vr.length;

		if (tam < tammax && tecla != 8){ tam = vr.length + 1 ; }

		if (tecla == 8 ){	tam = tam - 1 ; }		
			
		if ( tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 ){
			if ( tam <= 2 ){ 
				campo.value = vr ; }
			if ( (tam > 2) && (tam <= 5) ){
				campo.value = vr.substr( 0, tam - 2 ) + ',' + vr.substr( tam - 2, tam ) ; }
			if ( (tam >= 6) && (tam <= 8) ){
				campo.value = vr.substr( 0, tam - 5 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }
			if ( (tam >= 9) && (tam <= 11) ){
				campo.value = vr.substr( 0, tam - 8 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }
			if ( (tam >= 12) && (tam <= 14) ){
				campo.value = vr.substr( 0, tam - 11 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }
			if ( (tam >= 15) && (tam <= 17) ){
				campo.value = vr.substr( 0, tam - 14 ) + '.' + vr.substr( tam - 14, 3 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ;}
		}	

	},

	maskDate: function (oEvent) {
		// onkeypress		
		var campo = ccEvent.getSource(oEvent);
		var sValidChars = '1234567890/';
		var sChar = String.fromCharCode(oEvent.charCode);
		if(sValidChars.indexOf(sChar) == -1){
			// Se não for firefox não precisa verificar se são teclas de controle
			if(window.event){
				oEvent.preventDefault();
			}
			else{
				if(!ccEvent.keyControls(oEvent)){	
					oEvent.preventDefault();
				}
			}
		}
		else{
			if(!ccEvent.keyControls(oEvent)){
				if(campo.value.length == 2 || campo.value.length == 5){
					if(campo.value.length == 2 && sChar != '/'){
						campo.value = campo.value+'/';
					}
					else if(campo.value.length == 5 && sChar != '/'){
						campo.value = campo.value+'/';
					}
				}
				else if(sChar == '/'){
					oEvent.preventDefault();
				}
			}
		}		
	},

	maskDateNoCalendar: function (oEvent) {
		// onkeypress		
		var campo = ccEvent.getSource(oEvent);
		var sValidChars = '1234567890/';
		var sChar = String.fromCharCode(oEvent.charCode);
		if(sValidChars.indexOf(sChar) == -1){
			// Se não for firefox não precisa verificar se são teclas de controle
			if(window.event){
				oEvent.preventDefault();
			}
			else{
				if(!ccEvent.keyControls(oEvent)){
					oEvent.preventDefault();
				}
			}
		}
		else{
			if(!ccEvent.keyControls(oEvent)){
				if(campo.value.length == 2 || campo.value.length == 5){
					if(campo.value.length == 2 && sChar != '/'){
						campo.value = campo.value+'/';
					}
					else if(campo.value.length == 5 && sChar != '/'){
						campo.value = campo.value+'/';
					}
				}
				else if(sChar == '/'){
					oEvent.preventDefault();
				}
			}
		}		
	},

	maskHour: function (oEvent) {
		// onkeypress		
		var campo = ccEvent.getSource(oEvent);
		var sValidChars = '1234567890:';
		var sChar = String.fromCharCode(oEvent.charCode);
		if(sValidChars.indexOf(sChar) == -1){
			// Se não for firefox não precisa verificar se são teclas de controle
			if(window.event){
				oEvent.preventDefault();
			}
			else{
				if(!ccEvent.keyControls(oEvent)){	
					oEvent.preventDefault();
				}
			}
		}
		else{
			if(!ccEvent.keyControls(oEvent)){
				if(campo.value.length == 2){
					if(campo.value.length == 2 && sChar != ':'){
						campo.value = campo.value+':';
					}
				}
				else if(sChar == ':'){
					oEvent.preventDefault();
				}
			}
		}		
	},

	maskCep: function (oEvent) {
		// onkeypress		
		var campo = ccEvent.getSource(oEvent);
		var sValidChars = '1234567890-';
		var sChar = String.fromCharCode(oEvent.charCode);
		if(sValidChars.indexOf(sChar) == -1){
			// Se não for firefox não precisa verificar se são teclas de controle
			if(window.event){
				oEvent.preventDefault();
			}
			else{
				if(!ccEvent.keyControls(oEvent)){	
					oEvent.preventDefault();
				}
			}
		}
		else{
			if(!ccEvent.keyControls(oEvent)){
				if(campo.value.length == 5){
					if(campo.value.length == 5 && sChar != '-'){
						campo.value = campo.value+'-';
					}
				}
				else if(sChar == '-'){
					oEvent.preventDefault();
				}
			}
		}		
	},
	
	maskNumber: function (oEvent, sType) {

		// onkeypress	
		var campo = ccEvent.getSource(oEvent);
		if(sType == 'real'){
			var sValidChars = '1234567890.,';
		}
		else{
			var sValidChars = '1234567890';
		}
		var sChar = String.fromCharCode(oEvent.charCode);
		if(sValidChars.indexOf(sChar) == -1){
			// Se não for firefox não precisa verificar se são teclas de controle
			if(window.event){
				oEvent.preventDefault();
			}
			else{
				if(!ccEvent.keyControls(oEvent)){	
					oEvent.preventDefault();
				}
			}
		}
	},
	//é utilizado para validar cpf de Angola ainda falta definir onde ficarão as letras no Bilhete de identidade(cpf).
	maskCpfAngola: function (objField, oEvent, sType) {

		// onkeypress	
        var _len = objField.value.length;
        var _arr = objField.value.split("");
        var _newValue = '';
        var sValidChars = 'abcdefghijklmnopqrstuvxzwy';
            //verifica se os primeiros 9 digitos são numéricos 
        if (_len < 9 || (_len > 10 && _len < 14)) {
        	var sValidChars = '1234567890';
        }
        //varifica os digitos 9 e 10 
        if (_len == 9 || _len == 10) {
        	var sValidChars = 'abcdefghijklmnopqrstuvxzwy';
        }
        //válida informações utilizando metodos existentes na estrutura.
        var campo = ccEvent.getSource(oEvent);
		var sChar = String.fromCharCode(oEvent.charCode);
		
		if(sValidChars.indexOf(sChar) == -1){
			// Se não for firefox não precisa verificar se são teclas de controle
			if(window.event){
				oEvent.preventDefault();
			}
			else{
				if(!ccEvent.keyControls(oEvent)){	
					oEvent.preventDefault();
				}
			}
		}
	},
	
	maskGabarito: function (oEvent) {

		var campo = ccEvent.getSource(oEvent);
		var sValidChars = 'ABCDZabcdz';
		var sChar = String.fromCharCode(oEvent.charCode);
		if(sValidChars.indexOf(sChar) == -1){
			// Se não for firefox não precisa verificar se são teclas de controle
			if(window.event){
				oEvent.preventDefault();
			}
			else{
				if(!ccEvent.keyControls(oEvent)){	
					oEvent.preventDefault();
				}
			}
		}
	},

	jumpField: function(campo1, campo2, tamanho){
		if(campo1.value.length == tamanho){
			campo2.focus();
		}
	},

	focusOnFirst: function () {
		var aInput = document.getElementsByTagName("input"); 
		if(aInput.length > 0){
			for(var i=0; i<aInput.length; i++){
				if (aInput[i].type != "hidden" && 
                    aInput[i].type != "checkbox" && 
                    aInput[i].type != "radio" && 
                    aInput[i].type != "submit" && 
                    aInput[i].type != "button" && 
                    aInput[i].type != "file" && 
                    aInput[i].type != undefined){
					if(!(new RegExp("SearchInput").test(aInput[i].name))){
						$executa = true;
						
						if(eval(aInput[i].className != undefined)){
							if(/no_focus_on_first/.test(aInput[i].className)){
								$executa = false;
							}
							if(/submit_form_paginacao/.test(aInput[i].className)){
								$executa = false;
							}
							/*
							if((new RegExp("submit_form_paginacao").test(aInput[i].className)) ||
							   (new RegExp("no_focus_on_first").test(aInput[i].className))){
								$executa = false;
							}
							*/
						}
						
						if($executa == true){
							aInput[i].focus();
							return;
						}
					}
				}				
			}
		}
	}

}
ccEvent.addEvent(window, 'load', ccForm.focusOnFirst);
ccEvent.addEvent(window, 'load', ccForm.init);
