	/******************************************************************** 

	copyright (c) - Matita Perê - Publicidade e Interativade

	Criado: 25/03/2006
	Revisão: //
	
	Autor: Charlis Aristimunha
    -----------------------------------------------------------------
	Descrição do Arquivo:

    	Funções de manipulação de elementos de e formulários
    -----------------------------------------------------------------
    Prefixo das Funções: 

    	'forms_'
    -----------------------------------------------------------------
    Dependências: 

    	sniffer
    -----------------------------------------------------------------
    
   *********************************************************************/
    
    
    /*
    -----------------------------------------------------------------
    Nome da função:
    -----------------------------------------------------------------
    
    forms_loadSelectFromXML (objSelect, objXmlDoc, blnPreserveFstOption)

    -----------------------------------------------------------------
	Argumentos:
    -----------------------------------------------------------------
    
    objSelect:
    	ponteiro para o objeto SELECT que será alimentado pelo XML

    objXmlDoc:
    	ponteiro para o objeto XMLDOMDocument devolvido por:

        (new XmlHttpRequest()).responseXML; // mozilla
        (new ActiveXObject("Msxml2.XMLHTTP")).responseXML;       // ie
        (new ActiveXObject("Microsoft.XMLHTTP")).responseXML;    // ie
        (new ActiveXObject("Msxml2.DOMDocument.5.0")).load(url); // ie
        

    blnPreserveFstOption: 
    	Preservará o primeiro option do objeto SELECT apontado por objSelect
    	quando estiver setado
    
    -----------------------------------------------------------------
    Estrutura do XmlDoc analisado:
    -----------------------------------------------------------------
    <!-- início do (new XMLDOMDocument).documentElement -->
    <values>
    	
    	<register id="0">
    		<value><![CDATA[ OPTION.VALUE ]]></value>
    		<text><![CDATA[ OPTION.TEXT ]]></text>
    	</register>
		
		...
		
    	<register id="N">
    		<value><![CDATA[ OPTION.VALUE ]]></value>
    		<text><![CDATA[ OPTION.TEXT ]]></text>
    	</register>
    	
    </values>
    
    -----------------------------------------------------------------
    Nomenclatura
    -----------------------------------------------------------------
    
    OPTION.VALUE: Dado que será atribuído à propriedade [.value] do elemento
                  OPTION correspondente  do objeto SELECT alimentado
                               
    OPTION.TEXT:  Dado que será atribuído à propriedade [.text] do elemento
                  OPTION correspondente  do objeto SELECT alimentado
                               
    -----------------------------------------------------------------
    Exemplo de uso:
    -----------------------------------------------------------------
    
    forms_loadSelectFromXML (
    	document.Form1.objname, 
    	objHttpRequest.responseXML,
    	true
    );
    */
    
    
	//  if ( BiBrowserCheck.ie ) { 
	//		data = xmlDoc.selectNodes('/TreeDataModel/NewDataSet['+(i-1)+']/Table['+(j-1)+']/*');
	//  }
	//  else  {
	//		data = xmlDoc.selectNodes('/TreeDataModel/NewDataSet['+i+']/Table['+j+']/*');
	//  }


	function forms_loadSelectFromXML (objSelect, objXmlDoc, blnPreserveFstOption) {
		//alert("teste");
		if ( sniffer_blnIsIe ) {
			forms_loadSelectFromXML_ie (objSelect, objXmlDoc, blnPreserveFstOption)
		}
		else {
			forms_loadSelectFromXML_firefox (objSelect, objXmlDoc, blnPreserveFstOption)
		}	
	}
    
    function forms_loadSelectFromXML_ie (objSelect, objXmlDoc, blnPreserveFstOption) {

        if ( document.all ) {
	        objXmlDoc.setProperty("SelectionLanguage", "XPath");
	        objValuesNodeList = objXmlDoc.selectSingleNode("/values").childNodes;
        }
        else {
        	//alert("teste " + objXmlDoc.documentElement.childNodes.length);
        	//alert(objXmlDoc.documentElement.childNodes.item(0).hasChildNodes());
        	//objValuesNodeList = objXmlDoc.selectNodes("/values").length;
        	//objValuesNodeList = objXmlDoc.documentElement.childNodes.item(0);
        	
			objValuesNodeList = objXmlDoc.getElementsByTagName("values");
			
        }
        //return;
        
        for (i=0; i<objValuesNodeList.length; i++) {
            
            objNodeListRegister = objValuesNodeList.item(i).childNodes;
            intRegisterId   = objNodeListRegister.item(0).text;
            strRegisterText = objNodeListRegister.item(1).text;
            
            if (blnPreserveFstOption) {
                forms_removeOption(objSelect, 1);
            }
            //alert("adiciona ie");
            forms_addOption(objSelect, intRegisterId, strRegisterText);
        }
    }

	function forms_loadSelectFromXML_firefox (objSelect, objXmlDoc, blnPreserveFstOption) {
    
        XMLDOMNodeList = objXmlDoc.firstChild.childNodes;

        for ( i=0; i < XMLDOMNodeList.length; i++) {
            
            XMLElement = XMLDOMNodeList.item(i);

            if ( XMLElement.nodeType == 1 ) {

                XMLDOMRegisterNodeList = XMLElement.childNodes;
                //alert(XMLDOMRegisterNodeList.length);
                arrRegisters = new Array();
                for ( j=0; j < XMLDOMRegisterNodeList.length; j++ ) {
                    
                    XMLRegElement = XMLDOMRegisterNodeList.item(j);
                    if ( XMLRegElement.nodeType == 1 ) {
                        arrRegisters[arrRegisters.length] = (XMLRegElement.firstChild.data);
                    }
                }
	            if ( blnPreserveFstOption ) {
	                forms_removeOption(objSelect, 1);
	            }
	            //alert("adiciona firefox");
                forms_addOption(objSelect, arrRegisters[0], arrRegisters[1]);
                //arrRegisters = null;
            }
        }
	}

    // TODO: analisar funcionamento da função abaixo
    function forms_resetOptions (objSelect, intFromIndex) {
        // i = intFromIndex;
        // while (i++ < objSelect.options.length) {
        //     objSelect.options.remove(i);
        // }
        objSelect.options.length = intFromIndex;
    }
    
	// TODO: documentar    
    function forms_removeOption (objSelect, intOptionIndex) {
        // alert(objSelect);
        if ( document.all ) {
        	objSelect.options.remove(intOptionIndex);
        	return;
        }
        objSelect.options[intOptionIndex] = null;
        
        
    }
    
	// TODO: documentar    
    function forms_addOption (objSelect, strValue, strText, blnResetOptions, intResetIndex) {

        objOption = document.createElement("OPTION");
        objOption.value = strValue;
        objOption.text  = strText;

        if ( sniffer_blnIsIe ) {
        	objSelect.options.add(objOption, objSelect.options.length);
        }
        else {
        	objSelect.options[objSelect.options.length] = objOption;
        }
    }
    
	// TODO: documentar    
    function forms_getRequestFromFormEx(objForm, strPostfix) {
        
        var arrRequestString = Array();
        var intI = 0;
        for (i=0; i<objForm.childNodes.length; i++) {

        	strTagName = objForm.childNodes[i].tagName;

        	switch (strTagName) {

        		case "INPUT": 
        			arrRequestString[intI++] = forms_parseInputElements(objForm.childNodes[i]);
        			break;
        			
        		case "SELECT": 
        			arrRequestString[intI++] = forms_parseSelectElements(objForm.childNodes[i]);
        			break;
        			
        		default: break;	
        	}
        }
        
        return arrRequestString.join("&");
        //alert (arrRequestString.join("&\n"));
    }

	/*
	Devolve a string de requisição correspondente a um 
	determinado elemento
	
	Analisa INPUTs 
		Tipos: 
		text, submit, password, hidden, checkbox, radio
		
	*/
	
    function forms_parseInputElements (objInput) {
    	
    	var strRequestString = "";
    	switch ( objInput.type ) {
    		case "submit":
    		case "password":
    		case "text":
    		case "hidden": return strRequestString = objInput.name + "=" + objInput.value;
	    	case "checkbox" : 
	    	case "radio" : if ( objInput.checked ) {
								return strRequestString = objInput.name + "=" + objInput.value;
						   }
						   break;
			default: break;			   
    	}
    	return strRequestString.join("&");
    }
    
	/*
	Devolve a string de requisição correspondente a um determinado elemento
	Analisa SELECTs
	*/

    function forms_parseSelectElements (objSelect) {
          return objSelect.name + "=" + objSelect.options[objSelect.selectedIndex].value;
    }