// JavaScript Document

function showElement(element){
	//  alert(element);
 
	document.getElementById(element).style.display = 'inline';
}

function showBlockElement(element){
	//  alert(element);
 
	document.getElementById(element).style.display = 'block';
}

function hideElement(element){
	// alert(element);

	document.getElementById(element).style.display = 'none';
}

function showLayer(element){
	// alert(element);
	if (arguments.length > 1) {
		document.getElementById(element).style.left = arguments[1] + "px";
	}
	if (arguments.length > 2) {
		document.getElementById(element).style.top = arguments[2] + "px";
	}
	
	document.getElementById(element).style.visibility = 'visible';
}

function hideLayer(element){
	// alert(element);

	document.getElementById(element).style.visibility = 'hidden';
}

function disableSubmit(theForm, submitName) {
  var inputSubmit = theForm.elements[submitName];
  //alert (inputSubmit);
  if (inputSubmit) {
    inputSubmit.disabled = true;
  }

  return true;
}

function changeImage(imageObj, imageSrc) {
  if (imageObj){
    imageObj.src = imageSrc;
  }
}

function hideFacesFormElement(formName,elementName) {
	var thisForm = document.forms[formName];
	
	if (thisForm) {
		var targetId = thisForm.id + ":" + elementName;
		//alert("targetId: " + targetId);
		document.getElementById(targetId).style.display = 'none';
	}	
}

// funzione che in base al valore di un checkbox abilita o disabilita un input target
function verifyFacesCheckbox(formName,checkboxName,elementName) {
    var thisForm = document.forms[formName];
    
    if (thisForm) {
        var targetId = thisForm.id + ":" + elementName;
        var checkboxId = thisForm.id + ":" + checkboxName;
        var checkboxObj = thisForm.elements[checkboxId];
        //alert("targetId: " + targetId);
        if (checkboxObj) {
            // se checkbox attivo chiamo disable
            // se checkbox non attivo chiamo enable   
            //alert("checkboxObj.checked: " + checkboxObj.checked);
            if (checkboxObj.checked) {
                document.getElementById(targetId).style.display = 'inline';
            } else {
                document.getElementById(targetId).style.display = 'none';
            }
        }
    }
}


function compareOptionValues(a, b) 

{ 

  // Radix 10: for numeric values

  // Radix 36: for alphanumeric values

  var sA = parseInt( a.value, 36 );  

  var sB = parseInt( b.value, 36 );  

  return sA - sB;

}



// Compare two options within a list by TEXT

function compareOptionText(a, b) 

{ 

  // Radix 10: for numeric values

  // Radix 36: for alphanumeric values

  var sA = parseInt( a.text, 36 );  

  var sB = parseInt( b.text, 36 );  

  return sA - sB;

}

function moveDualList(srcList, destList, moveAll, fieldBlocked){
	
  if (( srcList.selectedIndex == -1 ) && ( moveAll == false )){
    return;
  }
  
  newDestList = new Array( destList.options.length );
  var len = 0;
  for( len = 0; len < destList.options.length; len++ ) {
    if ( destList.options[ len ] != null ){
      newDestList[len] = new Option(destList.options[len].text, destList.options[len].value, destList.options[len].defaultSelected, destList.options[len].selected );
    }
  }

  for( var i = 0; i < srcList.options.length; i++ ) { 
    if ( srcList.options[i] != null && ( srcList.options[i].selected == true || moveAll ) ){
    	// con il valore -1 identifico il campo id. Campo obbligatorio del profilo
    	if(srcList.options[i].value != fieldBlocked){
	    	newDestList[ len ] = new Option( srcList.options[i].text, srcList.options[i].value, srcList.options[i].defaultSelected, srcList.options[i].selected );
	    	len++;
    	} else {
    		alert("Il campo " + srcList.options[i].text + " e' obbligatorio.");
    	}
    }
  }

  // Sort out the new destination list
  newDestList.sort( compareOptionValues );   // BY VALUES
  //newDestList.sort( compareOptionText );   // BY TEXT
  for ( var j = 0; j < newDestList.length; j++ ) {
    if (newDestList[j] != null){
      destList.options[j] = newDestList[j];
    }
  }

  for( var i = srcList.options.length - 1; i >= 0; i-- ) {
    if ( srcList.options[i] != null && ( srcList.options[i].selected == true || moveAll ) ){
    	// azzero tutto tranne il campo id
      	if(srcList.options[i].value != fieldBlocked){
      		srcList.options[i] = null;
      	}
    }
  }
} // End of moveDualList()

function orderList(objectsList,isDirectionUp){
	//alert("SelectedIndex: " + objectsList.selectedIndex);
	var selectedIndex = objectsList.selectedIndex;
	var destIndex = -1;
	
	var newOptionsList = new Array( objectsList.options.length );
	
	if (selectedIndex >= 0) {
		// se vado verso l'alto e non sono il primo
		if (isDirectionUp && selectedIndex > 0) {
			destIndex = selectedIndex - 1;
		// se vado verso il basso e non sono l'ultimo
		} else if (!isDirectionUp && (selectedIndex < objectsList.options.length - 1)) {
			destIndex = selectedIndex + 1;
		}
		//alert("destIndex: " + destIndex);
		if (destIndex >= 0) {
		    //trasferisco le propriet� nel nuovo Array
			for( var i = 0; i < objectsList.options.length; i++ ) {
				if (i == selectedIndex) {
					newOptionsList[destIndex] = new Option(objectsList.options[i].text, objectsList.options[i].value, objectsList.options[i].defaultSelected, objectsList.options[i].selected );
				} else if (i == destIndex) {
					newOptionsList[selectedIndex] = new Option(objectsList.options[i].text, objectsList.options[i].value, objectsList.options[i].defaultSelected, objectsList.options[i].selected );
				} else {
					newOptionsList[i] = new Option(objectsList.options[i].text, objectsList.options[i].value, objectsList.options[i].defaultSelected, objectsList.options[i].selected );
				}
			}
			for (var i = 0; i < newOptionsList.length; i++ ) {
				objectsList.options[i] = newOptionsList[i];
			}
		}
	}
} // End of orderList()

function selectAllList(srcList){
  for(var i = 0;i < srcList.length;i++){
    //alert("Select: " + srcList.options[i].value);
    srcList.options[i].selected = true;
  }
}

function deselectAllList(srcList){
  for(var i = 0;i < srcList.length;i++){
    //alert("Deselect: " + srcList.options[i].value);
    srcList.options[i].selected = false;
  }
}

function moveDualListFaces( formName, srcElementName, destElementName, moveAll ) {
  
  var thisForm = document.forms[formName];
  if (!thisForm){return;}
  
  // Questa logica viene fatta per recuperare il form in logica faces
  var srcElement = thisForm.id + ":" + srcElementName;
  var srcList = thisForm.elements[srcElement];
  
  var destElement = thisForm.id + ":" + destElementName;
  var destList = thisForm.elements[destElement];
  
  moveDualList(srcList, destList, moveAll, ""); 
}


function selectAllFacesList(formName, srcElementName){
  
  //alert("selectAllFacesList");
  var thisForm = document.forms[formName];
  if (!thisForm){return;}
  
  // Questa logica viene fatta per recuperare il form in logica faces
  var srcElement = thisForm.id + ":" + srcElementName;
  var srcList = thisForm.elements[srcElement];
  
  selectAllList(srcList);
}

function openPopupWindow(titleString,actionString) {
    //alert(actionString);
    var param = "width=700,height=600,menubar=no,toolbar=no,resizable=yes,scrollbars=yes,left=10,top=10";
    openPopup(actionString, titleString, param);
} 

function openPopupWindow(titleString,actionString,width,height) {
    //alert(width);alert(height);
    var param = "width="+width+",height="+height+",menubar=no,toolbar=no,resizable=yes,scrollbars=yes,left=10,top=10";
    //alert(param);
    openPopup(actionString, titleString, param);
}

function openSmallPopupWindow(titleString,actionString) {
    //alert(actionString);
    var param = "width=400,height=400,menubar=no,toolbar=no,resizable=yes,scrollbars=yes,left=10,top=10";
    openPopup(actionString, titleString, param);
}

/* Funz per rimuovere da una combo box con selezione multipla */
function removeReceiver(formName, selectedField,actionName) {
    var thisForm = document.forms[formName];
    var selectedObject = thisForm.elements[selectedField];
    var selectedValue = null;
    var actionString = null;
    
    if (selectedObject) {
        newOptionsList = new Array( selectedObject.options.length );
        selectedValue = selectedObject.value;
        //alert("selectedValue: " + selectedValue);
        // ciclo sul selectionObject e rimuovo
        // quel destinatario
        for (var i = 0; i < selectedObject.length; i++ ) {
            //alert("selectedObject[i].value: " + selectedObject[i].value);
            if (selectedObject[i].value == selectedValue) {
                selectedObject[i].value = null;
                selectedObject[i] = null;
                actionString = actionName + ".do?tokenizedId=" + selectedValue;
                //alert("actionString: " + actionString);
                //thisForm.action = actionString;
                //thisForm.submit();
                window.location = actionString;
            }
        }
    }
}

/*
Funzione JS che chiama un action sulla finestra madre,
passa sulla request un discriminator e chiude la
popup
*/
function refreshOpenerAndClose(actionString,userDiscriminator,formName) {

    //alert("action: " + actionString);
    var thisForm = window.opener.document.forms[formName];
    thisForm.action = actionString + ".do?userDiscriminator=" + userDiscriminator;
    thisForm.submit();
    window.close();
}

/*
Funzione JS che esegue un submit sul form della finestra madre,
chiamando una action sulla request passa un discriminator
*/
function refreshEventOpener(actionString,userDiscriminator,formName) {
    //alert(formName);
    var thisForm = window.opener.document.forms[formName];
    //alert("form: " + thisForm);
    thisForm.action = actionString + ".do?userDiscriminator=" + userDiscriminator;
    thisForm.submit(); 
}

/*
Funzione JS che chiama una action sulla finestra madre e
passa sulla request un discriminator
*/
function refreshMailAddressOpener(actionString,userDiscriminator,formName) {

    var toAddressesField = window.opener.document.forms[formName].elements['toAddresses'];
    //alert("toAddresses: " + toAddressesField.value);
    var ccAddressesField = window.opener.document.forms[formName].elements['ccAddresses'];
    
    //alert("ccAddresses: " + ccAddressesField.value);
    window.opener.location = actionString + ".do?userDiscriminator=" + userDiscriminator + "&toAddresses=" + toAddressesField.value 
    + "&ccAddresses=" + ccAddressesField.value;
}




/*********************************************************************************/
/* Funzioni di utility ***********************************************************/
/*********************************************************************************/
//enableInput: Render a enabled input field
function enableInput(item){
	item.disabled = false;
	item.readOnly = false;
	item.className = "x-input";
}

//readOnlyInput: Render a read-only input field
function readOnlyInput(item){ 
	item.value = '';
	item.readOnly = true;
	item.className = "x-input-not-editable";
}

//disableInput: Render a disabled input field
function disableInput(item){
	item.value = '';
	item.disabled = true;
	item.className = "x-input-not-editable";
}

