/******************************************************************************
******* GESTIONE DEGLI OGGETTI NELLA PAGINA e COMUNICAZIONI********************
*******************************************************************************
Simone Gadenz
*******************************************************************************
Questo file raccoglie le funzioni di supporto alla gestione degli oggetti
presenti sull apagina
******************************************************************************/

/*
* Inverte la visibilità dell'oggetto passato come parametro
*/
function toggleVisibility(me){
	if (me.style.visibility=="hidden")
	{
		me.style.visibility="visible";
	}
	else 
	{
		me.style.visibility="hidden";
	}
}

/*
* Inverte la visualizzazione dell'ogetto passato come parametro
*/
function toggleDisplay(me){
	if (me.style.display=="none")
	{
		me.style.display="";
	}
	else 
	{
		me.style.display="none";
	}
}

/*
* Visualizza l'oggetto passato come parametro
*/
function displayMe(me){
		me.style.display="";
}

/*
* Nasconde l'oggetto passato come parametro
*/
function hideMe(me){
	me.style.display="none";
}

/*
* Apre la pagina richiesta in un popup le cui caratteristiche sono definite dai parametri
*/
function popMeUp(url,params){
	window.open(url, "Popup",params);
}

/*
* Recupera il valore del radio button selezionato
*
* In caso nessuno dei radio sia selezionato o che non ci siano radio nell'oggettopassato restituisce una stringa vuota
*/
// return the value of the radio button that is checked
// return an empty string if none are checked, or
// there are no radio buttons
function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

/*
* Recupara loggetto in base al nome tenendo di conto del browser utilizzato
*/		
function getObj(name)
{
  if (document.getElementById)
  {
	this.obj = document.getElementById(name);
	this.style = document.getElementById(name).style;
  }
  else if (document.all)
  {
	this.obj = document.all[name];
	this.style = document.all[name].style;
  }
  else if (document.layers)
  {
	this.obj = document.layers[name];
	this.style = document.layers[name];
  }
}

/*
* Recupera le dimensioni della finestra del browser tenendo in 
* considerazione il browser utilizzato
*/
function getWinSize(){
   var iWidth = 0, iHeight = 0;

   if( typeof( window.innerWidth ) == 'number' ) {
	//Non-IE
	iWidth = window.innerWidth;
	iHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
	//IE 6+ in 'standards compliant mode'
	iWidth = document.documentElement.clientWidth;
	iHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
	//IE 4 compatible
	iWidth = document.body.clientWidth;
	iHeight = document.body.clientHeight;
  }

   return {width:iWidth, height:iHeight};
}	

/*
* Ridimension l'oggetto in base alla dimensione della finestra del browser e 
* degli offset impostati
*/
function resize_id(obj,topoffset,bottomoffset,centeroffset) {       
	var height_av = 0;       
	var footer_top = 0;            
	var oContent = new getObj(obj);		
	var oWinSize = getWinSize();
	if ((oWinSize.height - parseInt(oContent.obj.offsetTop,10)- topoffset - bottomoffset)>0){
		oContent.style.position = "absolute";
		oContent.style.top = (header_height + topoffset) + "px";
    if (centeroffset != 'none') 
    {
      oContent.style.left= centeroffset + "%";
      oContent.style.width = (100 - (2 * centeroffset)) +"%";;
    }
		height_av = oWinSize.height - header_height - footer_height - topoffset - bottomoffset;
		oContent.style.height = (height_av) +"px";
		var footer = new getObj('HeadBotBar');
		footer_top = oWinSize.height - footer_height;
		footer.style.top = footer_top+"px";
	}
}

/*
* ridimensiona la mappa
*/
function mapResize(){
	resize_id('header',0,0,0);
	resize_id('MapFrame',-69,69,0);
	resize_id('content',0,0,'none');
	resize_id('left',-40,80,'none');
	//resize_id('ResHeader',-60,148,20);
}

/*
* Ridimensiona il frame dei contenuti allo stato iniziale
*/
function setContentOriginalStatus(){
	displayMe(new getObj('ResizeFrame'));
	resetLayerStyle('content');
	resetLayerStyle('left');
	resize_id('content',0,0,'none');
	resize_id('left',-40,80,'none');	
}

/*
* Ridimensiona il frame dei contenuti al full screen
*/
function enlargeContentFrame(widthoffset){
	displayMe(new getObj('content'));
	resize_id('content',0,0,widthoffset);
	resize_id('title',-69,80,widthoffset+2);
	resize_id('left',-40,80,widthoffset+2);
}

/*
* Rimuove gli stili applicai ad un layer html
*/
function resetLayerStyle(layerName){
	 var layer = new getObj(layerName);
	 var objstyle = layer.obj.style;
	 for (x in objstyle){
	   try{
  		 if (objstyle[x]) objstyle[x]= null;
  	 }catch(e){
  	   //alert('An error has occurred: '+e.message);
  	 }
	 }
}

/*
* Genera un oggetto XMLHttp in base al browser utilizzato
*/
function GetXmlHttpObject()
{
var xmlHttp=null;
try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
	{
	xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
	}
  catch (e)
	{
	xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
  }
return xmlHttp;
}

/*
* Submit di un form via ajax
*/
var contentDiv = "";
function postIt(url, parameters, contentContainer, callbackpi) {
      var returnedstatus = false;
	  http_request = false;
	  contentDiv = OpenLayers.Util.getElement('left');
	  contentDiv.innerHTML = "Attendere caricamento contenuto...";
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
         	// set type accordingly to anticipated content type
            //http_request.overrideMimeType('text/xml');
            http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!http_request) {
         alert('Impossibile creare una istanza XMLHTTP');
         return false;
      }
      
      http_request.onreadystatechange = function manageContents() {
											 if (http_request.readyState == 4) {
												 if (http_request.status == 200) {
													//alert(http_request.responseText);
													result = http_request.responseText;
													contentDiv.innerHTML = result; 
													returnedstatus= true;
												 } else {
													alert('Problema riscontrato durante la richiesta. Potrebbe trattarsi di un problema legato alla connessione Internet. Riprovare, e se il problema sussiste contattare l\'amministratore a info@geologyx.it');
												 }
												 callbackpi(returnedstatus);
											  }
										   };
      http_request.open('POST', url, true);
      http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      http_request.setRequestHeader("Content-length", parameters.length);
      http_request.setRequestHeader("Connection", "close");
      http_request.send(parameters);
	  //callback(returnedstatus);
	  //function(status){ returnedstatus = status; alert(returnedstatus);callback(returnedstatus);}
   }

/*
* Gestisce il contenuto di una chiamata ajax

function manageContents() {
     if (http_request.readyState == 4) {
		 alert("managecontent2");
         if (http_request.status == 200) {
            alert(http_request.responseText);
            result = http_request.responseText;
            contentDiv.innerHTML = result; 
			buonfine = true;
         } else {
            alert('Problema riscontrato durante la richiesta. Potrebbe trattarsi di un problema legato alla connessione Internet. Riprovare, e se il problema sussiste contattare l\'amministratore a info@geologyx.it');
         }
      }
   }
*/
/*
* Post di un form passato come oggetto all'URL
*
* obj = nome del form
* url = url su cui postare il form
* container = nome del conteiner in cui caricare il risultato
* titolo = titolo da mostrare nella finestra riusltati
*/   
function get (obj,url,container,titolo) {
	var titleDiv = OpenLayers.Util.getElement('title').innerHTML = "<h1>"+titolo+"</h1>";
	var elem = obj.elements;
	str = '';
	for(x=0; x<elem.length; x++)
	{
  if (elem[x].type != null){   
  	if (elem[x].type == 'radio'){
  		if (getCheckedValue(elem[x]) != ""){
  			str += elem[x].name + "=" + encodeURI(elem[x].value) + "&"
  		}
  	}
  	if (elem[x].type == 'text' || elem[x].type == 'password' || elem[x].type == 'hidden' || elem[x].type == 'textarea' || elem[x].type == 'checkbox' || elem[x].type == 'select-one' || elem[x].type == 'file')
  		{
  			str += elem[x].name + "=" + encodeURI(elem[x].value) + "&"
  		}
  	}
	}
	activateControlByName('drag');
	postIt(url, str,container,function(status){poi.setUrl("getPois.php?random="+Math.random());});
	//poi.setUrl("getPois.php?random="+Math.random());
	//poi.mergeNewParams({'random':Math.random()});  
	//function(status){alert("fatto:"+status);}
}

