Sinfo_ClientObjManager = function Sinfo_ClientObjManager()
{

   var oThis = this;

   var objs = new Array();
   
   var oUtil = new Sinfo_Util();
   var oAjax = new Sinfo_Ajax();   
 
   // metodo privato
   function endsWith(str, s)
   {
      var reg = new RegExp(s + "$");
      return reg.test(str);
   }   
   

   var currentRootId;
   // metodo privato
   
            //
            
 
// PUBLIC ATTRIBUTES
   
   this.Util = oUtil;
   this.Ajax = oAjax;

// PUBLIC METHODS
   this.addClientObject = function _addClientObject(cobj)
   {
      //alert('Aggiungo oggetto' + cobj.getId());
      objs[cobj.getId()]=cobj;
      //cobj.getBindFunction()();
   }
   this.getClientObject = function _getClientObject(pid)
   {
      return objs[pid];
   }
   
   this.getClientObjectsTree = function(startId)
   {
	   var ret = new Array();
	   for(key in objs)
       {
           if (key.indexOf(startId) == 0)
           {
        	   var obj = objs[key];
        	   ret[ret.length] = obj;
           }
       }
	   return ret;
   }
   

   this.stopPleaseWait = function()
   {
      document.getElementById(currentRootId + '_progressbar').style.display='none';
   }  

   // new name: syncWithServerObjects
   this.syncWithServerObjects = function (rootid,
		                                  subsession, 
		                                  pPageName, 
		                                  pActionName, 
		                                  pBlockContainersArray,
		                                  longActionContainerId,
		                                  normalAjaxActionImageURL)
      {
	   
	     var waitDivOverlayArray = new Array();
	   
	     var longActionPanel = null;
	     
	     if (!(!longActionContainerId))
	     {
	    	 longActionPanel = new YAHOO.widget.Panel(longActionContainerId, 
	    			{ fixedcenter:true, close:false, visible:false, modal: true, draggable:false} );	    	 
	    	 longActionPanel.center();
	    	 longActionPanel.render();
	    	 longActionPanel.show();
	     }
	     else
	     {
		     var rootElementPWDiv = document.createElement('div');
		     var rootElementPWDivID = rootid + '_appwaitajax';
		     rootElementPWDiv.setAttribute('id', rootElementPWDivID);
		     rootElementPWDiv.className = 'appPleasewait2009';

		     var overlaysDiv = document.getElementById('sinfoverlays');
		     if (!overlaysDiv)
		     {
		    	 alert("sinfoverlays element id not found!");
		     }
		     
		     overlaysDiv.appendChild(rootElementPWDiv);
		     
		     var veryRootElement = document.getElementById(rootid);

		     var ewidth  =  veryRootElement.clientWidth + 'px';
		     var eheight =  veryRootElement.clientHeight + 'px';

		     var xy = YAHOO.util.Dom.getXY(veryRootElement);
		     
		     var  rootElementPWDivOverlay = new YAHOO.widget.Overlay(rootElementPWDivID, { xy:xy, width:ewidth, height:eheight} );
		     rootElementPWDivOverlay.render();
		     rootElementPWDivOverlay.show();

	     }
	     
	     
         if (!(!pBlockContainersArray) && !longActionPanel)
         {
            for(ee in pBlockContainersArray)
            {
               var eName = pBlockContainersArray[ee]; 
               var elementToCover = document.getElementById(eName);
               
               var waitDiv = document.createElement('div');
               waitDiv.setAttribute('id', eName + '_waitajax');
               waitDiv.className = 'pleasewait2009';
               waitDivImg = document.createElement('img');
               waitDivImg.setAttribute('src', normalAjaxActionImageURL);
               waitDiv.appendChild(waitDivImg);
               
               overlaysDiv.appendChild(waitDiv);
               
               var cClientWidth  = elementToCover.clientWidth;
               var cClientHeight = elementToCover.clientHeight;
               
               
               if (cClientWidth < 32)
            	   cClientWidth = 32;

               if (cClientHeight < 32)
            	   cClientHeight = 32;
               
               waitDiv.style.width=cClientWidth;
               waitDiv.style.height=cClientHeight;
               
               cClientWidth  = cClientWidth +'px';
               cClientHeight = cClientHeight+'px';
               
               var xy = YAHOO.util.Dom.getXY(elementToCover);
               
               var  waitDivOverlay = new YAHOO.widget.Overlay(waitDiv, { xy:xy, width:cClientWidth, height:cClientHeight} );
               waitDivOverlay.render();
               waitDivOverlay.show();
               
               
               
               waitDivOverlayArray[waitDivOverlayArray.length] = waitDivOverlay;
               
            } 
         }
         
         //alert('invio gli oggetti!');
         var ret = '';
         var errors = false;
         var errorObjId = null;
         for(key in objs) 
         {
               if (key.indexOf(rootid) == 0)
               {
                  //alert(key);
                  var obj = objs[key];
                  
                  if (!(!obj.getStatus))
                  {
                     if (!(!obj.getStatus()))
                     {
                         if (obj.getStatus() == '1')
                         {
                             //obj.getHtmlObject().value = '?';
                             //obj.getHtmlObject().style.border="3px solid #FF0000";
                             errors     = true;
                             errorObjId = key;
                         }
                     } 
                  } 
                  
                  //alert(obj.getAttrs());
                  var attrs = obj.getAttrs();
                  
                  for (name in attrs)
                  {
                     var val = attrs[name];
                     // DAVIDE qui e' da trovare con cosa sostituire &
                     val = encodeURIComponent(val);
                     //alert(val);
                     ret = ret + '&' + obj.getId() + '_' + name + '=' + val;
                  }
              }            
             
         }
         /*
         if (errors)
         {
             if (!(!pBlockContainersArray))
             {
                for(ee in pBlockContainersArray)
                {
                   var eName = pBlockContainersArray[ee]; 
                   //alert(eName);
                   element = document.getElementById(eName);
                   waitDiv = document.getElementById(eName + '_waitajax');
                   element.removeChild(waitDiv);
                                                 
                } 
             }
             return;
         }
         */
         
         
        
         
         var ajaxCallback2 =   function (request)
                              {
                              
                                   //alert(request.responseText);
                                   var rootElement = request.responseXML.documentElement;
                                   var elemList   = rootElement.getElementsByTagName('prejs');
                                   var len = elemList.length;
                                   var i;
                                   for (i = 0; i < len; i++)
                                   {
                                      var eee = elemList.item(i);
                                      var jscript = oThis.Util.valueOfElement(eee);
                                      oAjax.crossbrowerEval(jscript);
                                   }
                           
                                   var elemList   = rootElement.getElementsByTagName('part');
                                   var len = elemList.length;
                                   var i;
                                   
	                       		   var animSubstElem = null;
	                    		   var oldElementHTML = null;
	                    		   var newElementHTML = null;
	                    		   var postjsArr = [];
	                    		   var isRegistered = false;
	                    		   
		                   		   var updateThicker = function ()
		                		   {
		                   			   try{
		                   				   tb_init('a.thickbox, area.thickbox, input.thickbox');
		                		       }catch(e){}
		                		            
		                		       var elemList   = rootElement.getElementsByTagName('postjs');
		                		       var len = elemList.length;
		                		       var i;
		                		       for (i = 0; i < len; i++)
		                		       {
		                		    	   var eee = elemList.item(i);
		                		           var jscript = oThis.Util.valueOfElement(eee);
		                		           oAjax.crossbrowerEval(jscript);
		                		       }
		                		       
		                		       /* remove feedback panels */
		                		       
		                		       
	                            	   if (!(!longActionPanel))
	                            	   {
	                            		  //alert(longActionPanel);
	                            		  longActionPanel.destroy();
	                            	   }
	                            	   else
	                            	   {
	                            		   for (var i= 0; i < waitDivOverlayArray.length; i++)
			                		       {
			                		    	  waitDivOverlayArray[i].destroy();
			                		       }
			                		       rootElementPWDivOverlay.destroy();
	                            	   }
	                            	  
		                            	  /*
                                    	  YAHOO.util.Dom.addClass(rootid,"applicationBorder");
		                            	  setTimeout("YAHOO.util.Dom.removeClass('" + rootid + "', 'applicationBorder');",4000);
			                		       
		                                  for (var eee = 0; eee < cleanBorder.length; eee++)
		                                  {
	                                    	  YAHOO.util.Dom.addClass(cleanBorder[eee],"ajaxRefresh");
		                                	  setTimeout("YAHOO.util.Dom.removeClass('" + cleanBorder[eee] + "', 'ajaxRefresh');",4000);
		                                  }
		                                  */
		                                  
		                		   }
	                    		   
		                   		   var cleanBorder = new Array();
                                   
                                   for (i = 0; i < len; i++)
                                   {
                                      var substElem = elemList.item(i);
                                      
                                      var eid = substElem.getAttribute('eid');
                                      
                                     // alert(eid);
                                      var eidnoajax = eid;
                                      if (endsWith(eidnoajax,'_ajax'))
                                      {
                                         eidnoajax = eidnoajax.substring(0,eidnoajax.length - 5);
                                      }
                                      
                                      
                                           newobjs = new Array();
                                      
                                           for(key in objs) 
                                       {
                                       
                                             if (!key.indexOf(eidnoajax) == 0)
                                             {
                                                                newobjs[key] = objs[key];
                                             }
                                             else
                                             {
                                                var obj = objs[key];
                                                                obj.destroy();
                                                                delete obj;
                                                //obj.getUnbindFunction()();
                                             }
                                           
                                       }
                                       objs = newobjs;
                                              
                                      
                                      
                                      if (substElem.getElementsByTagName('ihtml').length > 0)
                                      {
                                    	  var ihtml = oThis.Util.valueOfElement(substElem.getElementsByTagName('ihtml').item(0));
                                    	  var element = document.getElementById(eid);
                                    	  
                                    	  cleanBorder[cleanBorder.length] = eid;

                                    	  var elementAnimation = element.getAttribute("anim");
                                    	  if(false == isRegistered && null != elementAnimation)
                                    	  {
                                    		  /*
                                    		   * SCROLL_TO_TOP_OF_DIV_IN_ANIMATION: this is label to delete the 
                                    		   * commented code in order to enable scrolling
                                    		   * if(null != element.parentNode)
                                    		  {
                                    			  element.parentNode.scrollIntoView(true);
                                    		  }*/

                                    		  var freshAnimation =  substElem.getAttribute("freshAnim");
                                    		  if(null != freshAnimation)
                                    		  {
                                    			  elementAnimation = freshAnimation;
                                    		  }
                                    		  var localSubstItem = substElem;
                                    		  var localElementId = eid;
                                    		  var localOriginalHeight = element.clientHeight;
                                    		  var localOriginalWidth = element.clientWidth;
                                    		  var localElement = element;                                    		  
                                    		  
                                    		  
                                    		  oldElementHTML = element.innerHTML;						
                                    		  newElementHTML = ihtml;
                                    		  
                                    		  if(elementAnimation == "downup")
                                			  {
                                    			  element.innerHTML = "<div id=\"animationID\">" +
                                    			  			"<OL>" +
                                   			  					"<LI><DIV style=\"height:" + localOriginalHeight + "px;width:" + localOriginalWidth + "px;overflow:hidden;\">" + oldElementHTML + "</DIV></LI>" +
                                    			  				"<LI><DIV style=\"height:" + localOriginalHeight + "px;width:" + localOriginalWidth + "px;overflow:hidden;\">" + newElementHTML + "</DIV></LI>" +
                                    			  			"</OL>" + 
                                    			  		"</div>";                                    			  
                                    			  var carouselElement = document.getElementById("animationID");
                                        		  var carousel = new YAHOO.widget.Carousel(carouselElement);
                                        		  carousel.set("isVertical", true);
                                        		  carousel.set("animation", { speed: 2.0 });
                                        		  carousel.set("numVisible", 1);
                                        		  carousel.on("afterScroll", function (obj) {
                                        			  document.getElementById(localElementId).innerHTML = newElementHTML;					    			
                                        			  updateThicker();                                    			  
                                        			});
                                        		  carousel.render();
                                        		  carousel.show(); 
                                        		  carousel.scrollForward();
                                    			  
                                			  }
                                			  else if (elementAnimation == "updown")
                                			  {
                                    			  element.innerHTML = "<div id=\"animationID\">" +
		                          			  			"<OL>" +
		                          			  				"<LI><DIV style=\"height:" + localOriginalHeight + "px;width:" + localOriginalWidth + "px;overflow:hidden;\">" + newElementHTML + "</DIV></LI>" +
		                          			  				"<LI><DIV style=\"height:" + localOriginalHeight + "px;width:" + localOriginalWidth + "px;overflow:hidden;\">" + oldElementHTML + "</DIV></LI>" +
		                          			  			"</OL>" + 
		                          			  			"</div>";
                                    			  var carouselElement = document.getElementById("animationID");
                                        		  var carousel = new YAHOO.widget.Carousel(carouselElement);
                                        		  carousel.set("isVertical", true);
                                        		  carousel.set("numVisible", 1);
                                        		  carousel.selectNextItem();
                                        		  carousel.set("animation", { speed: 2.0 });
                                        		  carousel.on("afterScroll", function (obj) {
                                        			  document.getElementById(localElementId).innerHTML = newElementHTML;					    			
                                        			  updateThicker();                                    			  
                                        		  });
                                        		  carousel.render();
                                        		  carousel.show(); 
                                        		  carousel.scrollBackward();
                                			  }
                                			  else if( elementAnimation == "rightleft" )
                                			  {
                                    			  element.innerHTML = "<div id=\"animationID\">" +
                          			  					"<OL>" +
                          			  						"<LI><DIV style=\"height:" + localOriginalHeight + "px;width:" + localOriginalWidth + "px;overflow:hidden;\">" + oldElementHTML + "</DIV></LI>" +
                          			  						"<LI><DIV style=\"height:" + localOriginalHeight + "px;width:" + localOriginalWidth + "px;overflow:hidden;\">" + newElementHTML + "</DIV></LI>" +
                          			  					"</OL>" + 
                          			  				"</div>";                                    			  
			                          			  var carouselElement = document.getElementById("animationID");
			                              		  var carousel = new YAHOO.widget.Carousel(carouselElement);
			                              		  carousel.set("animation", { speed: 2.0 });
			                              		  carousel.set("numVisible", 1);
			                              		  carousel.on("afterScroll", function (obj) {
			                              			  document.getElementById(localElementId).innerHTML = newElementHTML;					    			
			                              			  updateThicker();                                    			  
			                              			});
			                              		  carousel.render();
			                              		  carousel.show(); 
			                              		  carousel.scrollForward();
                                				  
                                			  }
                                			  else if( elementAnimation == "leftright" )
                                			  {                                		
                                    			  element.innerHTML = "<div id=\"animationID\">" +
                    			  					"<OL>" +
                    			  						"<LI><DIV style=\"height:" + localOriginalHeight + "px;width:" + localOriginalWidth + "px;overflow:hidden;\">" + newElementHTML + "</DIV></LI>" +
                    			  						"<LI><DIV style=\"height:" + localOriginalHeight + "px;width:" + localOriginalWidth + "px;overflow:hidden;\">" + oldElementHTML + "</DIV></LI>" +
                    			  					"</OL>" + 
                    			  				"</div>";                                    			  
		                              			  var carouselElement = document.getElementById("animationID");
		                                  		  var carousel = new YAHOO.widget.Carousel(carouselElement);
		                                  		  carousel.set("numVisible", 1);
		                                  		  carousel.selectNextItem();
		                                  		  carousel.set("animation", { speed: 2.0 });
		                                  		  carousel.on("afterScroll", function (obj) {
		                                  			  document.getElementById(localElementId).innerHTML = newElementHTML;					    			
		                                  			  updateThicker();                                    			  
		                                  		  });
		                                  		  carousel.render();
		                                  		  carousel.show(); 
		                                  		  carousel.scrollBackward();                                				  
                                			  }                                    		  
                                			  isRegistered = true;                                    		  
                                    	  }
                                		  else
                                		  {
                                			  element.innerHTML = ihtml;												
                                		  }				
                                      }
                                  } // for parts
                                   
                       			  //if the animation wasn't registered then we execute it here
                       			  if(false == isRegistered)
                       			  {
                       				  updateThicker();			
                       			  }
                              }
         
         
         var ajaxCallback = function(request)
         {
             var rootElement = request.responseXML.documentElement;
             var elemList   = rootElement.getElementsByTagName('extcss');
             var len = elemList.length;
             var i;
             for (i = 0; i < len; i++)
             {
                var substElem = elemList.item(i);
                var src       = substElem.getAttribute('src');
                //alert(src);
                SinfoNet_ClientObjManager.Ajax.loadStyle(src);
             }
             SinfoNet_ClientObjManager.Ajax.check32css();
             
             var jses = new Array();
             var elemList   = rootElement.getElementsByTagName('extjs');
             var len = elemList.length;
             var i;
             for (i = 0; i < len; i++)
             {
                var substElem = elemList.item(i);
                var src       = substElem.getAttribute('src');
                //alert(src);
                jses[jses.length] = src;
             }
             
             var current = -1;
             
             var onJsLoaded = function()
             {
            	 current ++;
            	 if (current < jses.length)
            	 {
            		 SinfoNet_ClientObjManager.Ajax.loadScript(jses[current],onJsLoaded);
            		 //setTimeout(onJsLoaded,1000);
            	 }
            	 else
            	 {
            		 ajaxCallback2(request);
            	 }
             }
             onJsLoaded();             
         }
         
         oAjax.ajaxCall(pPageName, 'ajax=1&subsession=' + subsession + '&rand=' + Math.floor(Math.random()*1111) + '&errors=' + errors + '&errorobjid=' + errorObjId +  '&action='+ encodeURIComponent(pActionName) + '&callurl=' + encodeURIComponent(pPageName) +'&'+ret,
                        true, ajaxCallback);
                         
         
         //var newurl = pPageName+'?action='+ pActionName +'&'+ret; 
         //window.location=newurl;
      }
}

function setAttribute_class(node, value)
{
	var oBrowserDetect = new Sinfo_BrowserDetect();
	if (oBrowserDetect.is_ie) {
		node.setAttribute('className', value);
	} else {
		node.setAttribute('class', value);
	}
}

//var SinfoNet_ClientObjManager = new SinfoNet_ClientObjManager_Class();
