
var isIE;
var completeTable;
var completeField;
var autorow;
var distFromTop;
var distFromLeft;
var isIE = false;
var req;
var ajaxSelect;

var agt=navigator.userAgent.toLowerCase();
var is_major = parseInt(navigator.appVersion);
var is_minor = parseFloat(navigator.appVersion);
var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1) && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1) && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1));



function AJAXInteraction(url) {
    this.url = url;
    var req = init();
    req.onreadystatechange = processRequest;

    function init() {
      if (is_nav && window.XMLHttpRequest) {
        return new XMLHttpRequest();
      } else if (window.ActiveXObject) {
        isIE = true;
        return new ActiveXObject("Msxml2.XMLHTTP");
      }
    }

    function processRequest () {
      if (req.readyState == 4) {
        if (req.status == 200) {
        	//alert("aaaareq.responseText" +req.responseText);
 	        dispatcherProcess(req.responseXML);
        }else{
     	 //alert("1 "+req.parseError);
         }
      }else{
     	 //alert("2 "+req.parseError);
      }
    }

    this.send = function() {
        req.open("GET", url, true);
        req.send(null);
    }
}


function getElementY(element){
	var targetTop = 0;
	if (element.offsetParent) {
		while (element.offsetParent) {
			targetTop += element.offsetTop;
            element = element.offsetParent;
		}
	} else if (element.y) {
		targetTop += element.y;
    }
	return targetTop;
}

function getElementX(element){
	var targetTop = 0;
	element = element.parentElement
	if (element.offsetLeft ) {
	    targetTop = element.offsetLeft;
            //element = element.offsetParent;

	} else
		if (element.x) {
		targetTop += element.x;
    }

	return targetTop;
}


function init(fromTop,fromLeft,boxWidth) {
    distFromTop =  fromTop;
    if(fromLeft!=null && fromLeft!= 'undefined'){ distFromLeft =fromLeft;}else{distFromLeft =0;}

    completeTable = document.createElement("table");

    if(boxWidth!=null && boxWidth!= 'undefined'){ completeTable.style.width = boxWidth+'px';}else{completeTable.style.width = '150px';}


    completeTable.style.textColor = '#000000';

    completeTable.style.borderColor = '#993300';
    completeTable.style.borderCollapse = 'collapse';
}

modeVoc = ""; //per docedit

function doCompletion(theElement,theTypology,theMode) {

    completeField = theElement;
    ilValore = completeField.value;
    if(ilValore.indexOf("\"")==0)
    	ilValore = ilValore.substring(1);
    if (completeField.value == "") {
        clearTable();
    } else {

        var url = "";

        if(theMode == 'idx'){
			theName = theElement.name;
			if(theName.indexOf(".")==0){ //per docedit
				theName = theElement.id;
				ilValore = " "+ilValore
				modeVoc = "docedit";

			}

        	url = "AjaxServlet?flagTipologia=vocabolarioSelect&db=" + escape(document.theForm.db.value)+"&value=" + escape(ilValore)+"&key=" + escape(theName)+"&typology=" + escape(theTypology);
        	//url = "ajaxVoc.jsp?flagTipologia=vocabolarioSelect&db=" + escape(document.theForm.db.value)+"&value=" + escape(ilValore)+"&key=" + escape(theElement.name)+"&typology=" + escape(theTypology);
       	}

         //alert("11111111")
        var ajax = new AJAXInteraction(url);
          //alert("22222222")
        ajax.send();
           //alert("33333333")
    }
}

function controlledLookup(theElement,theTypology,theMode) {

    completeField = theElement;
    ilValore = completeField.value;
    if(ilValore.indexOf("\"")==0)
    	ilValore = ilValore.substring(1);
    if (completeField.value == "") {
        clearTable();
    } else {

        var url = "";

        if(theMode == 'idx'){
        	url = "ajaxVoc.jsp?db=" + document.theForm.db.value+"&value=" + ilValore+"&key=" + theElement.name+"&typology=" + theTypology+"&theHost=<%=theHost%>";
        	}

       //alert(url)
        var ajax = new AJAXInteraction(url);
        ajax.send();
    }
}

function ajaxGetValues(theElement,theFile,thePath) {
     //alert(theElement.name)
 ajaxSelect = theElement;

 strURL  = "AjaxServlet?flagTipologia=valoriControllati&nameFileXml="+theFile+"&xpath="+thePath;

 var ajax = new AJAXInteraction(strURL);
 ajax.send();

 return true;

}


function dispatcherProcess(responseXML){
	var vocKeys = responseXML.getElementsByTagName("keyList")[0];
	var optionKeys = responseXML.getElementsByTagName("optionList")[0];
	if(vocKeys!=null){
		idxProcess(responseXML);
	}else if(optionKeys!=null){
		optionProcess(responseXML)
	}
}

function clearSelect(theSelect){

	//alert('pulisci')

	var toDelete = theSelect
	//alert(toDelete)
	for (i = 0; i < toDelete.childNodes.length; i++) {
		if(i>2){
			toDelete.removeChild(toDelete.childNodes[i]);
		}
	}
}

function optionProcess(responseXML) {
  var optionKeys = responseXML.getElementsByTagName("optionList")[0];
 // alert(ajaxSelect.childNodes.length);
  if (ajaxSelect.childNodes.length == 2 || ajaxSelect.childNodes.length == 0) {

	 //clearSelect(ajaxSelect);
     if(optionKeys!=null){

	    if(appendSelectKey("------","")){

	    for (loop = 0; loop < optionKeys.childNodes.length; loop++) {

		var optionKey = optionKeys.childNodes[loop];

		var optionKeyVal = optionKey.getElementsByTagName("value")[0];
		var optionKeyText = optionKey.getElementsByTagName("text")[0];

		 // alert(optionKeyText.childNodes[0]);
		 //alert(optionKeyVal.childNodes[0]);

		 keyText = "";
		 keyVal = "";
		 if(optionKeyVal.childNodes[0]!=null){
			keyVal = optionKeyVal.childNodes[0].nodeValue;
		 }
		 if(optionKeyText.childNodes[0]!=null){
			keyText = optionKeyText.childNodes[0].nodeValue;
		 }

		if(appendSelectKey(keyText,keyVal)){
			//codiceHTML = ajaxSelect.innerHTML

			//ajaxSelect.innerHTML = codiceHTML

		}

		}
	    }
    }else{
   //    alert(vocKeys);
    }
	ajaxSelect.parentNode.appendChild(ajaxSelect)
   }

}


function idxProcess(responseXML) {

    clearTable();
   //alert((responseXML));
    var vocKeys = responseXML.getElementsByTagName("keyList")[0];


    if(vocKeys!=null){


    if (vocKeys.childNodes.length > 0) {
        completeTable.setAttribute("bordercolor", "black");
        completeTable.setAttribute("border", "1");
    } else {
        clearTable();
    }

    for (loop = 0; loop < vocKeys.childNodes.length; loop++) {
	var vocKey = vocKeys.childNodes[loop];
        var vocKeyVal = vocKey.getElementsByTagName("val")[0];



        var vocKeyId = vocKey.getElementsByTagName("freq")[0];
         //alert("vocKeyVal "+vocKeyVal.childNodes[0].nodeValue);
        appendvocKey(vocKeyVal.childNodes[0].nodeValue, vocKeyId.childNodes[0].nodeValue);
    }
    }else{
   //    alert(vocKeys);
    }


    scriviResponse(completeField);
}



function clearTable() {
    if (completeTable) {
      completeTable.setAttribute("bordercolor", "white");
      completeTable.setAttribute("border", "0");
      completeTable.style.visible = false;

      	for (loop = completeTable.childNodes.length-1; loop >= 0 ; loop--) {
      	  completeTable.removeChild(completeTable.childNodes[loop]);
      	}
    }
}





function appendSelectKey(optionText,optionValue) {

var optionElement = document.createElement("option");

 optionElement.appendChild(document.createTextNode(optionText))
 optionElement.setAttribute("value",optionValue);

 //alert(optionText+" - "+optionValue )
 ajaxSelect.appendChild(optionElement)

return true;

}



function appendvocKey(vocKeyVal,vocKeyId) {
    var vocKeyValCell;
    var vocKeyIdCell;
    var row;
    var nameCell;
    var idCell;
    if (isIE) {
        row = completeTable.insertRow(completeTable.rows.length);
        nameCell = row.insertCell(0);
        idCell = row.insertCell(1);
    } else {
        row = document.createElement("tr");
        nameCell = document.createElement("td");
      //  nameCell.setAttribute("nowrap","nowrap");
        idCell = document.createElement("td");
        row.appendChild(nameCell);
        row.appendChild(idCell);
        completeTable.appendChild(row);
    }

    var linkElement = document.createElement("a");
    linkElement.className = "testoMain11";


    linkElement.setAttribute("href", "javascript:returnValue('"+escape(escape(vocKeyVal))+"')");

    linkElement.appendChild(document.createTextNode(vocKeyVal));
    nameCell.appendChild(linkElement);
    idCell.className = "testoMain11";
    idCell.appendChild(document.createTextNode(vocKeyId));
}

function scriviResponse(){

   	ilPadre = completeField.parentElement;
   	loSpan = document.createElement("span");
   	loSpan.className = "suggSpan";

   	ilPadre.appendChild(loSpan);

       	loSpan.style.top = (getElementY(completeField) - distFromTop) + "px"
       	loSpan.style.left = (getElementX(completeField)+2- distFromLeft) + "px";
       	loSpan.appendChild(completeTable);

}

function returnValue(valore,campo){
	valore = unescape(unescape(valore));

	if(modeVoc == "docedit"){ //per docedit
		if(valore.indexOf(" ")==0)
			valore = valore.substring(1);
	}else{
		if(valore.indexOf(" ")!=-1)
			valore = '"'+valore+'"'
	}
	completeField.value = valore;
	clearTable();
}
