
 var reduceImg = '/_immagini/reduce.gif';
 var expandImg = '/_immagini/expand.gif';
 var closeImg = '/_immagini/close.gif';


 var columnParentBox;
 var portletsObj;

 var boxIndex = 0; 
 var portletsArray = new Array();

 var refreshDelay = 1000*60*5; //msec*sec*min

 var dragDropCounter = -1;
 var dragObject = false;
 var dragObjectNextSibling = false;
 var dragObjectParent = false;
 var destinationObj = false;

 var mouse_x;
 var mouse_y;

 var el_x;
 var el_y; 

 var rectangleDiv;
 var okToMove = true;

 var documentHeight = false;
 var documentScrollHeight = false;
 var dragableAreaWidth = false;

var opera=true;

 var staticObjectArray = new Array();

var nameOfCookie = 'page_layout';

function get_Cookie(name) {
 var nameEQ = name + "=";
 var ca = document.cookie.split(';');
 for(var i=0;i < ca.length;i++) {
  var c = ca[i];
  while (c.charAt(0)==' ') c = c.substring(1,c.length);
  if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
 }
 return null;
}

 function set_Cookie(name,value,days) {
 if (days) {
  var date = new Date();
  date.setTime(date.getTime()+(days*24*60*60*1000));
  var expires = "; expires="+date.toGMTString();
 }
 else var expires = "";
 document.cookie = name+"="+value+expires+"; path=/";
}

function delete_Cookie(name) {
 set_Cookie(name,"",-1);
}

function getElementsByClassName(col,regex) {
  node = document.getElementById(col);
  var a = [];
  var re = new RegExp(regex);
  var els = node.getElementsByTagName("*");
  for(var i=0,j=els.length; i<j; i++){
    if(re.test(els[i].className))a.push(els[i]);
  }
  return a;
}

function saveCookies() {
    var layout='';
    for (var c=1;c<=3;c++){
        var portletName='';
        var plt=getElementsByClassName('column'+c,'\\bportletHeader.+\\b');
        for (var p=0;p<plt.length;p++) {
            var boxInd = plt[p].id.replace(/portletHeader/, '');
            if (boxInd>boxIndex)boxIndex=boxInd;
            var uniqueIdentifier = plt[p].className.split(' ')[1];
            var obj=document.getElementById('portlet'+boxInd);
            portletsArray[boxInd] = new Array();
            portletsArray[boxInd]['obj'] = obj;
            portletsArray[boxInd]['parentObj'] = obj.parentNode;
            portletsArray[boxInd]['uniqueIdentifier'] = uniqueIdentifier;
            var content=document.getElementById('portletContent'+boxInd);
            var pattern=/<!--rss-->/;
            var html=content.innerHTML;
            if (html.search(pattern) != -1){
            portletsArray[boxInd]['refresh'] =1;
            }else{
            portletsArray[boxInd]['refresh'] =0;
            }
            if (content.style.display=='none'){
                uniqueIdentifier +='_';
                portletsArray[boxInd]['boxState'] = 0;
            }
            else {portletsArray[boxInd]['boxState'] = 1;}; // Expanded
            
            staticObjectArray[uniqueIdentifier] = boxInd;
            if (boxInd > 1) {
              var header = document.getElementById('portletHeader' + boxInd);
              //header.onmouseover = mouseoverPortlet;
              //header.onmouseout = mouseoutPortlet;
              header.onmousedown = initPortlet;
              header.style.cursor= 'move';
              header.title = "Sposta in un'altra posizione della pagina";

              var maximizeLink = document.getElementById('portletMaximizeLink' + boxInd);
              maximizeLink.onmousedown = showPortletContent;

              var minimizeLink = document.getElementById('portletMinimizeLink' + boxInd);
              minimizeLink.onmousedown = hidePortletContent;

              var closeLink = document.getElementById('portletCloseLink' + boxInd);
              //closeLink.onmouseover = mouseover_CloseButton;
              //closeLink.onmouseout = mouseout_CloseButton;
              closeLink.onmousedown = closePortlet;
            }

            portletName += '|'+uniqueIdentifier;
        }
        layout += '#'+portletName;
    }
    set_Cookie(nameOfCookie,layout,60000);
}

 function initPortlet(e)
 {
  dragDropCounter = 1;
  if(document.all)e = event;

  if (e.target) source = e.target;
   else if (e.srcElement) source = e.srcElement;
   if (source.nodeType == 3) // defeat Safari bug
    source = source.parentNode;

  if(source.tagName.toLowerCase()=='img' || source.tagName.toLowerCase()=='a' || source.tagName.toLowerCase()=='input' || source.tagName.toLowerCase()=='td' || source.tagName.toLowerCase()=='tr' || source.tagName.toLowerCase()=='table')return;


  mouse_x = e.clientX;
  mouse_y = e.clientY; 
  var numericId = this.id.replace(/[^0-9]/g,'');
//   el_x = getLeftPos(this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode)/1;
//   el_y = getTopPos(this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode)/1 - document.documentElement.scrollTop;
el_x = getLeftPos(this.parentNode.parentNode)/1;
el_y = getTopPos(this.parentNode.parentNode)/1 - document.documentElement.scrollTop;

  //dragObject = this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;
  dragObject = this.parentNode.parentNode;

  documentScrollHeight = document.documentElement.scrollHeight + 100 + dragObject.offsetHeight;


  if(dragObject.nextSibling){
   dragObjectNextSibling = dragObject.nextSibling;
   if(dragObjectNextSibling.tagName!='div')dragObjectNextSibling = dragObjectNextSibling.nextSibling;
  }
  dragObjectParent = portletsArray[numericId]['parentObj'];

  dragDropCounter = 0;
  initPortletTimer(); 

  return false;
 }

 function initPortletTimer()
 {
  if(dragDropCounter>=0 && dragDropCounter<10){
   dragDropCounter++;
   setTimeout('initPortletTimer()',10);
   return;
  }
  if(dragDropCounter==10){
  
   mouseoutPortlet(false,dragObject);
  }

 }

 function movePortlet(e){
  if(document.all)e = event;
  if(dragDropCounter<10)return;

  if(document.all && e.button!=1 && !opera){
   stopPortlet();
   return;
  }

  if(document.body!=dragObject.parentNode){
   dragObject.style.width = (dragObject.offsetWidth - 2) + 'px';
   dragObject.style.position = 'absolute'; 
   dragObject.style.textAlign = 'left';
   dragObject.style.filter = 'alpha(opacity=70)';
   dragObject.style.opacity = '0.7';
   dragObject.parentNode.insertBefore(rectangleDiv,dragObject);
   rectangleDiv.style.display='block';
   document.body.appendChild(dragObject);

   rectangleDiv.style.width = dragObject.style.width;
   rectangleDiv.style.height = (dragObject.offsetHeight - 2) + 'px'; 

  }

  var leftPos = e.clientX;
  var topPos = e.clientY + document.documentElement.scrollTop;

  dragObject.style.left = (e.clientX - mouse_x + el_x) + 'px';
  dragObject.style.top = (el_y - mouse_y + e.clientY + document.documentElement.scrollTop) + 'px';

  if(!okToMove)return;
  okToMove = false;

  destinationObj = false; 
  rectangleDiv.style.display = 'none'; 

  var objFound = false;
  var tmpParentArray = new Array();

  if(!objFound){
   for(var no=1;no<portletsArray.length;no++){
    if(!portletsArray[no])continue;
    if(portletsArray[no]['obj']==dragObject)continue;
    tmpParentArray[portletsArray[no]['obj'].parentNode.id] = true;
    if(!objFound){
     var tmpX = getLeftPos(portletsArray[no]['obj']);
     var tmpY = getTopPos(portletsArray[no]['obj']);

     if(leftPos>tmpX && leftPos<(tmpX + portletsArray[no]['obj'].offsetWidth) && topPos>(tmpY-20) && topPos<(tmpY + (portletsArray[no]['obj'].offsetHeight/2))){
      destinationObj = portletsArray[no]['obj'];
      destinationObj.parentNode.insertBefore(rectangleDiv,portletsArray[no]['obj']);
      rectangleDiv.style.display = 'block';
      objFound = true;
      break;
     }

     if(leftPos>tmpX && leftPos<(tmpX + portletsArray[no]['obj'].offsetWidth) && topPos>=(tmpY + (portletsArray[no]['obj'].offsetHeight/2)) && topPos<(tmpY + portletsArray[no]['obj'].offsetHeight)){
      objFound = true;
      if(portletsArray[no]['obj'].nextSibling){

       destinationObj = portletsArray[no]['obj'].nextSibling;
       if(!destinationObj.tagName)destinationObj = destinationObj.nextSibling;
       if(destinationObj && destinationObj!=rectangleDiv)destinationObj.parentNode.insertBefore(rectangleDiv,destinationObj);
      }else{
       destinationObj = portletsArray[no]['obj'].parentNode;
       portletsArray[no]['obj'].parentNode.appendChild(rectangleDiv);
      }
      rectangleDiv.style.display = 'block';
      break;     
     }

     if(!portletsArray[no]['obj'].nextSibling && leftPos>tmpX && leftPos<(tmpX + portletsArray[no]['obj'].offsetWidth)
     && topPos>topPos>(tmpY + (portletsArray[no]['obj'].offsetHeight))){
      destinationObj = portletsArray[no]['obj'].parentNode;
      portletsArray[no]['obj'].parentNode.appendChild(rectangleDiv); 
      rectangleDiv.style.display = 'block'; 
      objFound = true;    

     }
    }

   }

  }

  if(!objFound){
   for(var no=1;no<=3;no++){
    if(!objFound){
     var obj = document.getElementById('column' + no);   

      var left = getLeftPos(obj)/1;      

      var width = obj.offsetWidth;
      if(leftPos>left && leftPos<(left+width)){
       destinationObj = obj;
       obj.appendChild(rectangleDiv);
       rectangleDiv.style.display='block';
       objFound=true;  
      }    
    }
   }  
  }
  setTimeout('okToMove=true',5);
 }

 function stopPortlet()
 {
  if(dragDropCounter<10){
   dragDropCounter = -1
   return;
  }
  dragDropCounter = -1;
  dragObject.style.filter = null;
  dragObject.style.opacity = null;
  dragObject.style.position = 'static';
  dragObject.style.width = null;
  var numericId = dragObject.id.replace(/[^0-9]/g,'');
  if(destinationObj && destinationObj.id!=dragObject.id){

   if(destinationObj.id.indexOf('column')>=0){
    destinationObj.appendChild(dragObject);
    portletsArray[numericId]['parentObj'] = destinationObj;
   }else{
    destinationObj.parentNode.insertBefore(dragObject,destinationObj);
    portletsArray[numericId]['parentObj'] = destinationObj.parentNode;
   }
  }else{
   if(dragObjectNextSibling){
    dragObjectParent.insertBefore(dragObject,dragObjectNextSibling); 
   }else{
    dragObjectParent.appendChild(dragObject);
   }    
  }
  rectangleDiv.style.display = 'none'; 
  dragObject = false;
  dragObjectNextSibling = false;
  destinationObj = false;
  setTimeout('saveCookies()',100);
  documentHeight = document.documentElement.clientHeight; 
 }
 function getTopPos(inputObj)
 {  
   var returnValue = inputObj.offsetTop;
   while((inputObj = inputObj.offsetParent) != null){
    if(inputObj.tagName!='HTML')returnValue += inputObj.offsetTop;
   }
   return returnValue;
 }

 function getLeftPos(inputObj)
 {
   var returnValue = inputObj.offsetLeft;
   while((inputObj = inputObj.offsetParent) != null){
    if(inputObj.tagName!='HTML')returnValue += inputObj.offsetLeft;
   }
   return returnValue;
 }

 function mouseoverPortlet()
 {
  if(dragDropCounter==10)return;
  var id = this.id.replace(/[^0-9]/g,'');
  document.getElementById('portletExpand' + id).style.visibility = 'visible';  
  document.getElementById('portletCloseLink' + id).style.visibility = 'visible';
 }
 function mouseoutPortlet(e,obj)
 {
  if(!obj)obj=this;

  var id = obj.id.replace(/[^0-9]/g,'');
  document.getElementById('portletExpand' + id).style.visibility = 'hidden';  
  document.getElementById('portletCloseLink' + id).style.visibility = 'hidden';  
 }

 function showPortletContent(e,inputObj)
 {
  if(document.all)e = event;
  if(!inputObj)inputObj=this;

  var numericId = inputObj.id.replace(/[^0-9]/g,'');
  var obj = document.getElementById('portletContent' + numericId);

  obj.style.display = 'block';

  portletsArray[numericId]['boxState'] = 1;
  saveCookies();
  setTimeout('dragDropCounter=-5',5);
 }

 function hidePortletContent(e,inputObj)
 {
  if(document.all)e = event;
  if(!inputObj)inputObj=this;

  var numericId = inputObj.id.replace(/[^0-9]/g,'');
  var obj = document.getElementById('portletContent' + numericId);

  obj.style.display = 'none';

  portletsArray[numericId]['boxState'] = 0;
  saveCookies();
  setTimeout('dragDropCounter=-5',5);
 }

 function mouseover_CloseButton()
 {
  this.className = 'closeButton_over'; 
  setTimeout('dragDropCounter=-5',5);
 }

 function mouseout_CloseButton()
 {
  this.className = 'closeButton'; 
 }

 function closePortlet(e,inputObj)
 {
  if(!inputObj)inputObj = this;
  var numericId = inputObj.id.replace(/[^0-9]/g,'');
  var portletId = document.getElementById('portlet' + numericId);
  //portletId.style.display='none';
  var uniqueIdentifier=portletsArray[numericId]['uniqueIdentifier'];
  delete staticObjectArray[uniqueIdentifier];
  delete portletsArray[numericId];
  portletId.parentNode.removeChild(portletId);
  boxIndex -= 1;
  setTimeout('dragDropCounter=-5',5);
  setTimeout('saveCookies()',100);
 }

 function createHelpObjects()
 {
  /* Creating rectangle div */
  rectangleDiv = document.createElement('div');
  rectangleDiv.id='rectangleDiv';
  rectangleDiv.style.display='none';
  document.body.appendChild(rectangleDiv);
 }

 function cancelSelectionEvent(e)
 {
  if(document.all)e = event;

  if (e.target) source = e.target;
   else if (e.srcElement) source = e.srcElement;
   if (source.nodeType == 3) // defeat Safari bug
    source = source.parentNode;
  if(source.tagName.toLowerCase()=='input')return true;

  if(dragDropCounter>=0)return false; else return true; 

 }

 function cancelEvent(){
    return false;
 }

 function initEvents()
 {
  document.body.onmousemove = movePortlet;
  document.body.onmouseup = stopPortlet;
  document.body.onselectstart = cancelSelectionEvent;

  document.body.ondragstart = cancelEvent; 

  documentHeight = document.documentElement.clientHeight; 

 }

 function initportletsScript() {
  setTimeout('saveCookies()',100);
  createHelpObjects();
  initEvents();
  setInterval ( "refreshRSS()", refreshDelay );
 }

function ajaxRequest(dir){
 var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
 if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
  for (var i=0; i<activexmodes.length; i++){
   try{
    return new ActiveXObject(activexmodes[i])
   }
   catch(e){
    //suppress error
   }
  }
 }
 else if (window.XMLHttpRequest) // if Mozilla, Safari etc
  return new XMLHttpRequest()
 else
  return false
}

function resetPage() {
    delete_Cookie(nameOfCookie);
    window.location.reload();
}

function reloadPortlet(id) {
    var uid=staticObjectArray[id];
    if (!uid)return;
    var mygetrequest=new ajaxRequest();
    mygetrequest.onreadystatechange=function(){
        if (mygetrequest.readyState==4){
            if (mygetrequest.status==200 || window.location.href.indexOf("http")==-1){
                document.getElementById('portletContent'+uid).innerHTML=mygetrequest.responseText;
            }
            else{
                //alert("Error loading portlet");
            }
        }
    }
    var cgi="http://"+window.location.hostname+"/getportlet.html?id="+id;
    mygetrequest.open("GET", cgi, true)
    mygetrequest.send(null)
}

function refreshRSS() {
    for (var p in portletsArray) {
      var pl=portletsArray[p];
      if (pl['refresh']==1)reloadPortlet(pl['uniqueIdentifier']);
    }
}

if (window.attachEvent) {
    window.attachEvent("onload", initportletsScript);
}
else {
    window.addEventListener("DOMContentLoaded", initportletsScript, false);
}
