﻿var App={};

function _T(skey)
{
	try {
		var slabel = App.languages[skey];
		if( slabel == undefined ) slabel = skey;
		return slabel;
	}
	catch(e) {
		return skey;
	}
}

function $_(A)
{
		if(typeof A=="string")
		{
				A=document.getElementById(A)
		}
		return A
}

function $F(A){return $(A).getValue()}

Browser.getDocumentWidth = function() {
    return (document.documentElement && document.documentElement.scrollWidth) || document.body.scrollWidth;
}
Browser.getDocumentHeight = function() {
    return (document.documentElement && document.documentElement.scrollHeight) || document.body.scrollHeight;
}
Browser.getClientWidth = function() {
    return (window.innerWidth || (document.documentElement && document.documentElement.clientWidth) || (document.body && document.body.clientWidth) || 0);
}
Browser.getClientHeight = function() {
    return (window.innerHeight || (document.documentElement && document.documentElement.clientHeight) || (document.body && document.body.clientHeight) || 0);
}
Browser.getScrollTop = function() {
    return (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop) || 0;
}
Browser.getScrollLeft = function() {
    return (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft) || 0;
}

Object.clone=function(A){return $merge(A)};
Object.extend=$extend;

Function.implement( {
    bindAsEventListener : function (B, A) {
        return this.create( {
            bind : B, event : true, "arguments" : A}
        );
    }
	}
);

Array.prototype.normalize = function(sum) {
    var x = 0;
    var ratio = sum / this.inject(0, 
    function(a, n) {
        return a + n;
    });
    for (var i = 0; i < this.length - 1; i++) x += (this[i] *= ratio);
    this[this.length - 1] = sum - x;
};

Array.implement( {
    inject : function (A, B) {
        this.each(function (D, C) {
            A = B(A, D, C)}
        );
        return A}
    , detect : function (B) {
        var A;
        this.each(function (D, C) {
            if (B(D, C)) {
                A = D;
                return A}
        }
        );
        return A}
	}
);

Request.implement( {
    success : function (text, xml) {
							text = this.processScripts(text);
							if (this.options.update) $(this.options.update).empty().set('html', text);
							this.onSuccess(text, xml);
		}
	}
);

Native.implement([Element, Document], {
    getElementsByClassName : function (A) {
        return this.getElements("." + A)}
	}
);

Element.implement( {
    empty : function () {
		    var A = $A(this.getElementsByTagName("*"));
		    A.each(function (B) {
		        $try (Element.prototype.dispose, B)}
		    );
		    Garbage.trash(A);
		    $try (Element.prototype.set, this, ["html", ""]);
            return this}
		, dispose: function(){
					try{
						if (this.parentNode != null)
							return this.parentNode.removeChild(this);
						return this;
					}
					catch(e){
						alert(this);
						}
				}
    , destroy : function () {
		    Garbage.kill(this.empty().dispose());
		    return null}	
    , interpolate : function () {
        var A = arguments[0].split(/[{}]/);
        for (var B = 0; B < A.length; B++) {
            if (A[B].trim() != "" && arguments[1][A[B]]) {
                A[B] = arguments[1][A[B]]}
        }
        for (var B = 0; B < A.length; B++) {
            if (typeof A[B] == "string") {
                if (A[B].length != 0) {
                    this.appendChild(document.createTextNode(A[B]))}
            }
            else {
                A[B].inject(this)}
        }
        return this}
    , hide : function () {
        this.style.display = "none";
        return this}
    , show : function () {
        this.style.display = "block";
        return this}
    , getValue : function () {
        return this.get("value")}
    , effect : function (B, A) {
        return new Fx.Style(this, B, A)}
    , yellowFade : function (B, C) {
        if (!$defined(B)) {
            B = "#FFFF9C"}
        if (!$defined(C)) {
            C = "#FFFFFF"}
        var A = this.get("tween", "background-color", {
            duration : 500, link : "chain"}
        );
        A.start(B).chain(function () {
            A.start(C)}
        );
        return this}
    , wait : function (C, A) {
        if( this.empty ) this.empty();
        var B = {};
        if (typeof A == "object") {
            $extend(B, A)}
            
        var HtmlTextMessage = "<div class='WaitMessage' style='' ><table width=100% height=100% border=0 cellpadding=0 cellspacing=0><tr height=100%><td width=100% align=middle valign=center><span class='WaitMessageText'>{_Message_Text_}</span></td></tr></table></div>";
				var sMessage = HtmlTextMessage.replace("\{_Message_Text_\}", _T(WaitMessage_Text));
				var D = new Element("SPAN", {
            html :  sMessage , styles : B}
        );
				
				$(D).getChildren()[0].style.width = this.offsetWidth;
				$(D).getChildren()[0].style.Height = this.offsetHeight;
			
        D.inject(this);
        
        var destroy = function () {
	        try {D.destroy();} catch(e){}
	        C.removeEvent("onComplete",destroy);
        }
        
        if (C) {
        	C.addEvent("onComplete", destroy )
        }
        return this}
    , endWait : function () {
        var A = this.getElement(".spinner");
        if (A) {
            A.destroy()}
    }
}
);
$extend(Element, {
    getDimensions : function (C) {
        C = $_(C);
        var G = C.style.display;
        if (G != "none" && G != null) {
            return {
                width : C.offsetWidth, height : C.offsetHeight}
        }
        var B = C.style;
        var F = B.visibility;
        var D = B.position;
        var A = B.display;
        B.visibility = "hidden";
        B.position = "absolute";
        B.display = "block";
        var H = C.clientWidth;
        var E = C.clientHeight;
        B.display = A;
        B.position = D;
        B.visibility = F;
        return {
            width : H, height : E}
    }
    , visible : function (A) {
        return $_(A).style.display != "none"}
    , hide : function (A) {
        A = $_(A);
        A.style.display = "none";
        return A}
    , show : function (A) {
        A = $_(A);
        A.style.display = "";
        return A}
    , setStyle : function (A, B) {
        return $(A).setStyles(B)}
    , hasClassName : function (A, B) {
        A = $_(A);
        return (typeof A.className == 'undefined'?false:A.className.contains(B, " "))}
    , addClassName : function (A, B) {
        A = $_(A);
        if (!Element.hasClassName(A, B)) {
            A.className = (A.className + " " + B).clean()}
        return A}
    , removeClassName : function (A, B) {
        A = $_(A);
        A.className = A.className.replace(new RegExp("(^|\\s)" + B + "(?:\\s|$)"), "$1").clean();
        return A}
    , remove : function (A) {
        return $(A).remove()}
    , update : function (B, A) {
        $_(B).innerHTML = A}
    , getParentByIdentifier : function(A, B, C) {
    	var parentElem = A;
    	while(parentElem != null && ((B == 'className' && !Element.hasClassName(parentElem,C)) || (B != 'className' && (eval('typeof parentElem.' + B) =='undefined' || (eval('parentElem.' + B)).toLowerCase() != C.toLowerCase())))) {
    			parentElem = parentElem.parentNode;
    	}
    	return parentElem;
    }
}
);

$extend(Event, {
    KEY_BACKSPACE : 8, KEY_TAB : 9, KEY_RETURN : 13, KEY_ESC : 27, KEY_LEFT : 37, KEY_UP : 38, KEY_RIGHT : 39, KEY_DOWN : 40, KEY_DELETE : 46, pointerX : function (A) {
        if (!A.$extended) {
            A = new Event(A)}
        return A.page.x || (A.client.y + (document.documentElement.scrollLeft || document.body.scrollLeft))}
    , pointerY : function (A) {
        if (!A.$extended) {
            A = new Event(A)}
        return A.page.y || (A.client.y + (document.documentElement.scrollTop || document.body.scrollTop))}
    , element : function (A) {
        return A.target || new Event(A).target}
    , stop : function (A) {
        if (!A ||!A.$extended) {
            A = new Event(A)}
        A.stop()}
    , findElement : function (C, B) {
        var A = C.target || new Event(C).target;
        while (A.parentNode && (!A.tagName || (A.tagName.toUpperCase() != B.toUpperCase()))) {
            A = A.parentNode}
        return A}
    , observe : function (D, C, B, A) {
        D = $_(D);
        if (C == "keypress" && $defined(window.webkit)) {
            C = "keydown"}
        $(D).addEvent(C, B)}
    , stopObserving : function (D, C, B, A) {
        $(D).removeEvent(C, B)}
}
);


Activportal={};
Activportal.UI={};

Activportal.UI.createIcon = function(id,source,htmlClass,description,width,height,fHtml)
{
	
	fHtml = fHtml!==false
	if(fHtml)
	{
		var oIcon = new Element("img",{src: (source)?source:"pictures/blank.gif","class":"icon " + htmlClass,alt:description,width:width,height:height});
		if (id != null && id != '') oIcon.id = id;
		return oIcon;
	}
	else
	{
		'<img ' + ((id != null && id != '')?'id="' + id + '" ':'') + 'src="'+(source)?source:"pictures/blank.gif"+(width?'" width="'+ width:'') +(Height?'" height="'+Height:'')+'" class="icon ' + htmlClass + '" alt="' + description+'" title="'+description+'" />';
	}
};

Activportal.UI.createButton = function(label,description, htmlClass,fHtml)
{
	var a = document.createElement("a");
	a.title = label;
	a.style.display = 'inline';
	a.style.padding = '1px';
	a.style.cursor = 'pointer';
	a.style.border = '0';
	a.style.backgroundColor = 'transparent';
	a.href = 'javascript:void(0)';
	a.target = '_blank';
	a.className = htmlClass;	
	a.innerText = label;
	if( fHtml ){
		return new Element(a);	
	}else {
		return a.outerHTML;
	}
	
};


Activportal.UI.ToggleView = new Class(	{
		name: 'Activportal.UI.ToggleView',
		Implements:[Events,Options],
		options : { 
		classTabNav : "tab-nav-horizontal", 
		classTabItem : "tab-nav-horizontal-item", 
		classTabContent : "tab-content", 
		orientation : "left", 
		dataKey : "text", 
		activportalEvent : false },
	  
	  initialize : function (divTab, divToogle, A) {
        this.setOptions(A);
        this.dataItems = {};
        this.selectedTab = null;
        this.firstElement = null;
        this.initFirstElement = true;
        this.selectedIndex = this.options.selectedIndex || 0;
        this.elem_tabs = divTab;
        this.elem_toogle = divToogle;
        this._create();
    }, 
    
    _create : function () {
	    this.elem_tabItem = new Element('ul');//document.createElement("ul");
	    this.elem_tabItem.className = this.options.classTabItem + " autoclear";
	    this.elem_tabItem.style.padding = "0";
	    if (/^(top|bottom|left|right)$/.test(this.options.orientation)) {
	        Element.addClassName( this.elem_tabItem,this.options.orientation);
	    }
	    this.elem_tabs.appendChild(this.elem_tabItem);
	    
      /*this.toogle = new Fx.Slide(this.elem_toogle, {mode: 'horizontal'});
      this.toogle.hide();*/
      
      this.elem_toogle.style.display = 'none';
      
	    
	    
	 	}, 

		destroy: function() {
			this.elem_tabs.removeNode(true);
			Hash.remove(this, 'elem_tabItem');
			Hash.remove(this, 'elem_tabs');
			Hash.remove(this, 'dataItems');
			Hash.remove(this, 'selectedTab');
			Hash.remove(this, 'selectedIndex');
			Hash.remove(this, 'options');
			Hash.remove(this, 'elem_sort');
			Hash.remove(this, 'contentArray');
		},
	
		addSort: function() {
			this.elem_sort = new Sortables(this.elem_tabItem, {constrain: true, clone: false, revert: true});
		},
		
	 	appendTo : function (A) {
        if (!this.elem_tabs) {
            this._create()
        }
        if (!this.selectedTab && this.elem_tabItem.hasChildNodes()) {
            this.selectTab(0, false)
        }
        A.appendChild(this.elem_tabs);
    },
		
		addTab : function (B, A) {
			if (!this.firstElement) this.firstElement = B;
      var K = new Element("li");
      K.className = "tab";
      if (A.tabClassName) Element.addClassName(K, A.tabClassName);
      K.setAttribute("name", B);
      if (A.disabled || A.tabOnly) {
         Element.addClassName(K, "disabled");
      }
      else {
          K.onclick = this.onTabClicked.bindWithEvent(this);
      }
      //var H = document.createElement("a");
      //H.href = "javascript:void(0)";
      //H.title = "";
      //H.target = "_blank";
      //H.style.whiteSpace = "nowrap";
      var H = new Element("a",{href:"javascript:void(0)", title:"", target:"_blank", style:"white-space:nowrap;",transform:"rotate(90deg)"});
      H.onclick = function () {
          return false;
      };
      
      if (A.icon) {
          //var G = document.createElement("img");
          //G.src = A.icon;
          //G.style.marginRight = "4px";
          //G.style.marginBottom = "-2px";
		      var G = new Element("img",{src:A.icon, style:"margin-right:4px; margin-bottom:-2px;"});
          H.appendChild(G)
      }

	    if (typeof A.text == "string") {
	    		if (Browser.Engine.name != 'trident') {
			    		var sTmpText = '';
			    		var cpt;
			    		var sSep = '';
			    		for (cpt = 0 ; cpt < A.text.length ; cpt++) {sTmpText += sSep + A.text[cpt].toUpperCase();sSep='<br>';}
			        H.innerHTML=sTmpText;
			        H.style.textAlign = 'center';
		    	}
		    	else H.appendChild(document.createTextNode(A.text));
	    }
	    else {
	        H.appendChild(A.text)
	    }

      K.appendChild(H);
      
      // boucle pour trouver ou doit être inséré l'élément
      this.insertTab(K, A.order)
      /*
      if (typeof A.order != 'undefined' && A.order > -1) {
      	if (this.elem_tabItem.childNodes.length > A.order)
      		this.elem_tabItem.insertBefore(K, this.elem_tabItem.childNodes[A.order]);
      	else
      		this.elem_tabItem.insertAfter(K, this.elem_tabItem.childNodes[this.elem_tabItem.childNodes.length - 1]);
      }
      else this.elem_tabItem.appendChild(K);
      */
      
      if (!A.tabOnly)
      {
	      if( A.contentHTML && typeof A.contentHTML == "object"  ) {
	      	var C =A.contentHTML;
	      }
	    	else {
		     	var C = document.createElement("div");
		      C.className = this.options.classTabContent + " " + ( A.className || '' );
		      C.setAttribute("id", 'WebpartToogleContainer_' + B);
		    }
		     C.setAttribute("name", B);
		    //C.style.display = 'none';
		    this.elem_toogle.appendChild(C);
				if (!this.contentArray) {
	      	this.contentArray = []
	     	}
	      this.contentArray.push(C);
	      C.setAttribute("tabIndex", this.contentArray.length - 1)
	      	    
	      this.dataItems[B] = A;
	    }
      return K;
    }, 
    
    removeTab : function (A) {
        var B = this.getTab(A);
        if (typeof B == 'object') Element.remove(B);
    }, 
    
    insertTab : function(tabElem, position) {
      if (typeof position != 'undefined' && position > -1 && $(this.elem_tabItem).getChildren().length > position)
      {
      		this.elem_tabItem.insertBefore(tabElem, $(this.elem_tabItem).getChildren()[position]);
      		if (position == 0) this.firstElement = tabElem.getAttribute('name');
      }
      else this.elem_tabItem.appendChild(tabElem);				
    },
    
    onTabClicked : function (B) {
	    if (Event.element(B).className == "placeHolder") {
	        return false}
	    var A = Event.findElement(B, "LI");
	    if (!Element.hasClassName(A,"disabled")) {
	        this.selectTab(A)
	    }
	    return false;
	 	},
	 	
    enableTab : function (B, A) {
	    var C = this.getTab(B);
	    if (A) {
	        Element.removeClassName(C, "disabled")
	    }
	    else {
	        Element.addClassName(C, "disabled")
	    }
    }, 
    
    getTab : function (B) {
	    if (typeof B == "string" || typeof B == "number") {
	        var A = this.elem_tabs.getElementsByTagName("li");
	        for (var C = 0, D; D = A[C]; C++) {
	            if (typeof B == "number" && B == C) {
	                return D
	            }
	            if (B == D.getAttribute("name")) {
	                return D
	            }
	        }
	    }
	    return B
	  },    
    
    selectTab : function (E, I) {
      if (typeof E == "number" || typeof E == "string") {
          E = this.getTab(E);
      }

      var A = E.getAttribute("name");
      if (this.selectedTab && (this.selectedTab.getAttribute("name") == A) && I == undefined &&!this.options.allowReload) {
      		if( this.selectedTab.getAttribute("name") == A ) {
      			this.elem_toogle.style.display = 'none';
						if( this.selectedTab )
      				Element.removeClassName(this.selectedTab, "selected");
						this.selectedTab = null;
      		}    
          
          return;
      }
			if( this.selectedTab )
      	Element.removeClassName(this.selectedTab, "selected");
      Element.addClassName(E, "selected");
      
      for (var D = 0, F; F = this.contentArray[D]; D++) {
          if (Browser.isSafari && F.getElementsByTagName("iframe").length) {
              if (A == F.getAttribute("name")) {
                  F.style.visibility = "visible";
                  F.style.position = "static"
              }
              else {
                  var B = F.getElementsByTagName("iframe")[0];
                  F.style.width = B.contentWindow.innerWidth + "px";
                  F.style.visibility = "hidden";
                  F.style.position = "absolute";
                  F.style.left = "0px";
                  F.style.top = "0px"
              }
          }
          else {
              if (A == F.getAttribute("name")) {
                  Element.show(F)
               		this.elem_toogle.style.display = '';
               }
              else {
                  Element.hide(F);
              }
          }
      }
      
      
      this.selectedTab = E;
      this.selectedIndex = E.getAttribute("index");
      
      this._notify("activeTabChange");
   	}, 
   	
   	hide : function () {
    	Element.hide(this.elem_tabs)
    }, 
    
    show : function () {
        Element.show(this.elem_tabs)
    }, 
   	
    reload : function () {
        this._notify("activeTabChange")
    }, 
    
    observe : function (B, A) {
    	if (!this.observers) {
      	this.observers = []
    	}
    	this.observers.push([B, A])
    },
    
    DisplayFirstElement : function(A) {
    	if (this.firstElement && this.initFirstElement && this.firstElement == A)
    	{
					this.selectTab(App.layoutManager.toggle.firstElement);
					this.initFirstElement = false;
    	}
    },
    
    _notify : function (C) {
    	if (!this.observers) { return; }
      var B = this.selectedTab;
      var A = this.dataItems[B.getAttribute("name")];

      this.observers.each(function (E) {
      	if (E[0] == C && typeof (E[1]) == "function") {
          	E[1](B.getAttribute("name"), A)
        }
     	});
   	},
   	
   	addDrag: function() {
   		var i;
   		
   		for ( i=0 ; i<$(this.elem_tabItem).getChildren().length ; i++)
   		{
   			var oTab = $(this.elem_tabItem).getChildren()[i];
   			this.addTabDrag(oTab);
   		}
   	},

   	addTabDrag: function(K) {
	      App.DragMe(K, K, function(){}, function(){}
										, function(itemId,parentId,order){
														var position = -1;
														var MyLayoutForm = App.createFormLayout();
														MyLayoutForm.Zone.value = '';
														MyLayoutForm.Order.value = order;
														var oWebpart = App.getWebpartByUrlSuffix(parentId);
														MyLayoutForm.Cmd.value = 'orderdocument';
														MyLayoutForm.WebpartID.value = '';
														MyLayoutForm.DocumentID.value = oWebpart.documentList[K.name].data.urlSuffix;
														MyLayoutForm.ContentClass.value = '';
														position = oWebpart.getTabPositionByOrder(order);
														MyLayoutForm.set('send',{
															onSuccess: function(jsonObj) {
																					var docJson = Json.evaluate(jsonObj).document;
																					oWebpart.tabs.insertTab(K, position);
																					oWebpart.setDocumentOrders(Json.evaluate(jsonObj).urllist);
															},
															onFailure: function(jsonObj) {alert(_T('L_ErrorSavingPlacement_Text'))},
															evalScripts: true
														});
	
														MyLayoutForm.send();
											}
				);   			
   	},
   	
   	remodeDrag: function(){
   		var i;
   		
   		for ( i=0 ; i<$(this.elem_tabItem).getChildren().length ; i++)
   		{
   			var K = $(this.elem_tabItem).getChildren()[i];
   			App.RemoveDragMe(K);
   		}
   	}
});	


Activportal.UI.TabView = new Class(	{
		name: 'Activportal.UI.TabView',
		Implements:[Events,Options],
		options : { classTabNav : "tab-nav", classTabItem : "tab-nav-item", classTabContent : "tab-content", orientation : "top", dataKey : "text", activportalEvent : false },
	  
	  initialize : function (A) {
        this.setOptions(A);
        this.dataItems = {};
        this.selectedTab = null;
        this.selectedIndex = this.options.selectedIndex || 0
    }, 
    
    _create : function () {
	    this.elem_tabs = document.createElement("div");
	    this.elem_tabs.className = this.options.classTabNav;
	    this.elem_tabs.style.height = '100%';
	    this.elem_tabItem = new Element('ul');//document.createElement("ul");
	    this.elem_tabItem.className = this.options.classTabItem + " autoclear";
	    this.elem_tabItem.style.padding = "0";
	    if (/^(top|bottom|left|right)$/.test(this.options.orientation)) {
	        Element.addClassName( this.elem_tabItem,this.options.orientation);
	    }
	    this.elem_tabs.appendChild(this.elem_tabItem);
	 	}, 

		destroy: function() {
			this.elem_tabs.removeNode(true);
			Hash.remove(this, 'elem_tabItem');
			Hash.remove(this, 'elem_tabs');
			Hash.remove(this, 'dataItems');
			Hash.remove(this, 'selectedTab');
			Hash.remove(this, 'selectedIndex');
			Hash.remove(this, 'options');
			Hash.remove(this, 'elem_sort');
			Hash.remove(this, 'contentArray');
		},
	
		addSort: function() {
			this.elem_sort = new Sortables(this.elem_tabItem, {constrain: true, clone: false, revert: true});
		},
		
	 	appendTo : function (A) {
        if (!this.elem_tabs) {
            this._create()
        }
        if (!this.selectedTab && this.elem_tabItem.hasChildNodes()) {
            this.selectTab(0, false)
        }
        A.appendChild(this.elem_tabs);
    },
		
		addTab : function (B, A) {
    	if (!this.elem_tabs) {
          this._create()
      }
      
      var K = new Element("li");
      K.className = "tab";
      if (A.tabClassName) Element.addClassName(K, A.tabClassName);
      K.setAttribute("name", B);
      if (A.disabled) {
         Element.addClassName(K, "disabled");
      }
      else {
          K.onclick = this.onTabClicked.bindWithEvent(this);
      }
      var H = document.createElement("a");
      H.href = "javascript:void(0)";
      H.title = "";
      H.target = "_blank";
      H.style.whiteSpace = "nowrap";
      H.onclick = function () {
          return false;
      };
      
      if (A.icon) {
          var G = document.createElement("img");
          G.src = A.icon;
          G.style.marginRight = "4px";
          G.style.marginBottom = "-2px";
          H.appendChild(G)
      }

	    if (typeof A.text == "string") {
	        H.appendChild(document.createTextNode(A.text))
	    }
	    else {
	        H.appendChild(A.text)
	    }

      K.appendChild(H);
      if (App.EditMode)
	      App.DragMe(K, K, function(){}, function(){}
										, function(itemId,parentId,order){
														var position = -1;
														var MyLayoutForm = App.createFormLayout();
														MyLayoutForm.Zone.value = '';
														MyLayoutForm.Order.value = order;
														var oWebpart = App.getWebpartByUrlSuffix(parentId);
														MyLayoutForm.Cmd.value = 'orderdocument';
														MyLayoutForm.WebpartID.value = '';
														MyLayoutForm.DocumentID.value = oWebpart.documentList[B].data.urlSuffix;
														MyLayoutForm.ContentClass.value = '';
														position = oWebpart.getTabPositionByOrder(order);
														MyLayoutForm.set('send',{
															onSuccess: function(jsonObj) {
																					var docJson = Json.evaluate(jsonObj).document;
																					oWebpart.tabs.insertTab(K, position);
																					oWebpart.setDocumentOrders(Json.evaluate(jsonObj).urllist);
															},
															onFailure: function(jsonObj) {alert(_T('L_ErrorSavingPlacement_Text'))},
															evalScripts: true
														});
	
														MyLayoutForm.send();
											}
				);
      
      // boucle pour trouver ou doit être inséré l'élément
      this.insertTab(K, A.order)
      /*
      if (typeof A.order != 'undefined' && A.order > -1) {
      	if (this.elem_tabItem.childNodes.length > A.order)
      		this.elem_tabItem.insertBefore(K, this.elem_tabItem.childNodes[A.order]);
      	else
      		this.elem_tabItem.insertAfter(K, this.elem_tabItem.childNodes[this.elem_tabItem.childNodes.length - 1]);
      }
      else this.elem_tabItem.appendChild(K);
      */
      
      if (!A.tabOnly)
      {
	      if( A.contentHTML && typeof A.contentHTML == "object"  ) {
	      	var C =A.contentHTML;
	      }
	    	else {
		     	var C = document.createElement("div");
		      C.className = this.options.classTabContent + " " + ( A.className || '' );
		      C.setAttribute("id", 'DocumentContent_' + B);
		      
		      
		    }
		    C.setAttribute("name", B);
		    this.elem_tabs.appendChild(C);
				if (!this.contentArray) {
	      	this.contentArray = []
	     	}
	      this.contentArray.push(C);
	      C.setAttribute("tabIndex", this.contentArray.length - 1)
	      	    
	      this.dataItems[B] = A;
	    }
      return K;
    }, 
    
    removeTab : function (A) {
        var B = this.getTab(A);
        var C = $('DocumentContent_' + A);
        if (C) 
        {
        	Hash.remove(this.contentArray, C.tabIndex);
	        Hash.remove(this.dataItems, A);
	        C.removeNode(true);
	      }
        if (typeof B == 'object') Element.remove(B);
    }, 
    
    insertTab : function(tabElem, position) {
      if (typeof position != 'undefined' && position > -1 && $(this.elem_tabItem).getChildren().length > position)
      		this.elem_tabItem.insertBefore(tabElem, $(this.elem_tabItem).getChildren()[position]);
      else this.elem_tabItem.appendChild(tabElem);				
    },
    
    onTabClicked : function (B) {
	    if (Event.element(B).className == "placeHolder") {
	        return false}
	    var A = Event.findElement(B, "LI");
	    if (!Element.hasClassName(A,"disabled")) {
	        this.selectTab(A)
	    }
	    return false;
	 	},
	 	
    enableTab : function (B, A) {
	    var C = this.getTab(B);
	    if (A) {
	        Element.removeClassName(C, "disabled")
	    }
	    else {
	        Element.addClassName(C, "disabled")
	    }
    }, 
    
    renameTab : function(B, C) {
    	var D = this.getTab(B);
    	if (D) D = D.getElement('a');
    	if (D) D.innerText = C;
    },
    
    getTab : function (B) {
	    if (typeof B == "string" || typeof B == "number") {
	        var A = this.elem_tabs.getElementsByTagName("li");
	        for (var C = 0, D; D = A[C]; C++) {
	            if (typeof B == "number" && B == C) {
	                return D
	            }
	            if (B == D.getAttribute("name")) {
	                return D
	            }
	        }
	    }
	    return B
	  },    
    
    selectTab : function (E, I) {
      if (typeof E == "number" || typeof E == "string") {
          E = this.getTab(E)
      }
      
      var A = E.getAttribute("name");
			
      if (this.selectedTab && (this.selectedTab.getAttribute("name") == A) && I == undefined &&!this.options.allowReload) {
          return }
			if( this.selectedTab )
      	Element.removeClassName(this.selectedTab, "selected");
      Element.addClassName(E, "selected");
      
      for (var D = 0, F; F = this.contentArray[D]; D++) {
          if (Browser.isSafari && F.getElementsByTagName("iframe").length) {
              if (A == F.getAttribute("name")) {
                  F.style.visibility = "visible";
                  F.style.position = "static"
              }
              else {
                  var B = F.getElementsByTagName("iframe")[0];
                  F.style.width = B.contentWindow.innerWidth + "px";
                  F.style.visibility = "hidden";
                  F.style.position = "absolute";
                  F.style.left = "0px";
                  F.style.top = "0px"
              }
          }
          else {
              if (A == F.getAttribute("name")) {
                  Element.show(F)}
              else {
                  Element.hide(F)}
          }
      }
      
      
      this.selectedTab = E;
      this.selectedIndex = E.getAttribute("index");
      
      this._notify("activeTabChange");
   	}, 
   	
   	hide : function () {
    	Element.hide(this.elem_tabs)
    }, 
    
    show : function () {
        Element.show(this.elem_tabs)
    }, 
   	
    reload : function () {
        this._notify("activeTabChange")
    }, 
    
    observe : function (B, A) {
    	if (!this.observers) {
      	this.observers = []
    	}
    	this.observers.push([B, A])
    },
    
    _notify : function (C) {
    	if (!this.observers) { return; }
      var B = this.selectedTab;
      var A = this.dataItems[B.getAttribute("name")];

      this.observers.each(function (E) {
      	if (E[0] == C && typeof (E[1]) == "function") {
          	E[1](B.getAttribute("name"), A)
        }
     	});
   	},
   	
   	addDrag: function() {
   		var i;
   		
   		for ( i=0 ; i<$(this.elem_tabItem).getChildren().length ; i++)
   		{
   			var oTab = $(this.elem_tabItem).getChildren()[i];
   			this.addTabDrag(oTab);
   		}
   	},

   	addTabDrag: function(K) {
	      App.DragMe(K, K, function(){}, function(){}
										, function(itemId,parentId,order){
														var position = -1;
														var MyLayoutForm = App.createFormLayout();
														MyLayoutForm.Zone.value = '';
														MyLayoutForm.Order.value = order;
														var oWebpart = App.getWebpartByUrlSuffix(parentId);
														MyLayoutForm.Cmd.value = 'orderdocument';
														MyLayoutForm.WebpartID.value = '';
														MyLayoutForm.DocumentID.value = oWebpart.documentList[K.name].data.urlSuffix;
														MyLayoutForm.ContentClass.value = '';
														position = oWebpart.getTabPositionByOrder(order);
														MyLayoutForm.set('send',{
															onSuccess: function(jsonObj) {
																					var docJson = Json.evaluate(jsonObj).document;
																					oWebpart.tabs.insertTab(K, position);
																					oWebpart.setDocumentOrders(Json.evaluate(jsonObj).urllist);
															},
															onFailure: function(jsonObj) {alert(_T('L_ErrorSavingPlacement_Text'))},
															evalScripts: true
														});
	
														MyLayoutForm.send();
											}
				);   			
   	},
   	
   	remodeDrag: function(){
   		var i;
   		
   		for ( i=0 ; i<$(this.elem_tabItem).getChildren().length ; i++)
   		{
   			var K = $(this.elem_tabItem).getChildren()[i];
   			App.RemoveDragMe(K);
   		}
   	}
});

Activportal.UI.Layout = new Class(
{
		name:'Activportal.UI.Layout',
		Implements:[Events,Options],
		options:{enableResize:true,minWidth:150,minHeight:50},
		initialize: function( htmlLayout, urlSuffix, callbackRefresh )
		{
			this.urlSuffix = urlSuffix;
			//this.setOptions(options);
			this.loaded=false;
			this.elem_container = htmlLayout;
			this.callBackRefresh = callbackRefresh || function(){};
			
			/*this.elem_debug = document.createElement("DIV");
			this.elem_debug.style.display = '';
			this.elem_debug.style.width = "100%";
			document.body.appendChild(this.elem_debug);*/
			
			//var strFrm = "<FORM Method='POST' action='CatalogProviderV2.asp'></FORM>"
			//this.formContent = new Element(document.createElement(strFrm));
			var strFrm = "FORM";
			this.formContent = new Element(strFrm,{method:"POST",action:"CatalogProviderV2.asp"});
			
			//var strInput = "<INPUT TYPE='HIDDEN' NAME='" + App.V_KEY_FORM + "' VALUE='" + App.V_VALUE_FORM + "' >";
			//var oInput = document.createElement(strInput);
			var oInput = new Element('INPUT',{type:"HIDDEN",name:App.V_KEY_FORM,value:App.V_VALUE_FORM});
			this.formContent.appendChild(oInput);		
			Garbage.trash(oInput);
			
			//strInput = "<INPUT TYPE='HIDDEN' ID='cmd' NAME='cmd' VALUE='save_resizinglayout'>";
			//oInput = document.createElement(strInput);
			var oInput = new Element('INPUT',{type:"HIDDEN",id:"cmd",name:"cmd",value:"save_resizinglayout"});
			this.formContent.appendChild(oInput);
			Garbage.trash(oInput);
			
			//strInput = "<INPUT TYPE='HIDDEN' ID='urlSuffix' NAME='urlSuffix' VALUE=''>";
			//oInput = document.createElement(strInput);
			var oInput = new Element('INPUT',{type:"HIDDEN",id:"urlSuffix",name:"urlSuffix",value:""});
			this.formContent.appendChild(oInput);
			Garbage.trash(oInput);

			//strInput = "<INPUT TYPE='HIDDEN' ID='xmlLayout' NAME='xmlLayout' VALUE=''>";
			//oInput = document.createElement(strInput);
			var oInput = new Element('INPUT',{type:"HIDDEN",id:"xmlLayout",name:"xmlLayout",value:""});
			this.formContent.appendChild(oInput);		
			Garbage.trash(oInput);
			
			this.verticalBeam = document.createElement('div');
			//this.verticalBeam.style.backgroundColor = 'red';
			this.verticalBeam.style.borderLeft = '1px dashed #eeeeee';
			this.verticalBeam.style.display = 'none'
			this.verticalBeam.style.width = '1px';
			this.verticalBeam.style.position = 'absolute'; 
			this.verticalBeam.style.top = 0;
			this.verticalBeam.style.zIndex = 500;
			this.verticalBeam.style.height = '100%'
			document.body.appendChild(this.verticalBeam);
			
			this.horizontalBeam = document.createElement('div');
			//this.verticalBeam.style.backgroundColor = 'red';
			this.horizontalBeam.style.borderTop = '1px dashed #eeeeee';
			this.horizontalBeam.style.display = 'none'
			this.horizontalBeam.style.height = '1px';
			this.horizontalBeam.style.position = 'absolute'; 
			this.horizontalBeam.style.left = 0;
			this.horizontalBeam.style.zIndex = 500;
			this.horizontalBeam.style.width = '100%'
			document.body.appendChild(this.horizontalBeam);			
			
			this.loadLayout()
			
		},
		loadLayout: function() {
			if( !this.loaded )
				Element.wait(this.elem_container,new Request().addEvent("onComplete", this.onLoadContent.bind(this)).addEvent("onFailure",this.onErrorLoadContent.bind(this)).get(App.CATALOG_PROXY + '?cmd=getlayout&urlsuffix=' + this.urlSuffix));
		},
		
		onLoadContent: function(content)	{
			this.elem_container.innerHTML = content;
			
			
			this.detachZone();
			
			var ColumnsArray = $$('#' + this.elem_container.id + ' .zoneColumn');
			//var ColumnsArray = $$('#' + this.elem_container.id + ' .zoneColumn');
			
			
			this.AreaDivs = [];
			this.GripDivs = [];
			
	  	this.numCols = ColumnsArray.length;
	  	
	    for (var B = 0; B < ColumnsArray.length; B++) {
	    	this.attachZone(ColumnsArray[B]);			
			}
			
			this.elem_toggleview = $("layouttoggleview");
			this.elem_toggletabs = $("layouttoggletab");
			this.elem_layoutview = $("Layout");
			if( this.elem_toggletabs ) {
				this.toggle = new Activportal.UI.ToggleView(this.elem_toggletabs,this.elem_toggleview)
				this.toggle.observe("activeTabChange", this.onDisplayChange.bind(this));	
				//this.onDisplayChange();
				
				
			}
			
			this.elem_header = $("layoutheader");
			this.elem_middle = $("layoutmiddle");
			this.elem_footer = $("layoutfooter");			

			this.elem_header_column = $$("#layoutheader .zoneColumn");
			this.elem_middle_column = $$("#layoutmiddle .zoneColumn");
			this.elem_footer_column = $$("#layoutfooter .zoneColumn");			
			
			this.GripDivs = $$(".gripper")
			
			for( var i=0 ; i< this.GripDivs.length; i++)
			{
				var divResizer = this.GripDivs[i];
				
				if( Element.hasClass(divResizer,"h-gripper") ) {
	      	divResizer.style.cursor = Browser.isMozilla ? 'sn-resize': 's-resize';
	      	divResizer.mode = "H"
	      }  else	{
	      	divResizer.style.cursor = Browser.isMozilla ? 'ew-resize': 'e-resize';
	      	divResizer.mode = "V"
	      }
	      divResizer.onmouseover = function() {
	          if (!self.drag) Element.addClassName(this, "hover");
	      };
	      divResizer.onmouseout = function() {
	          if (!self.drag) Element.removeClassName(this, "hover");
	      };
	      divResizer.onmousedown = this.onResizeStart.bindAsEventListener(this);
				
			}
			this.updateLayout();
			this.callBackRefresh();
			this.loaded = true;
			
			this.setEditMode(App.EditMode);
		},
		
		onDisplayChange: function(name, el){
			App.webpartList[name].show();
		},
		
		add: function( el , zoneId) {
			
			var oZone = this.getZone(zoneId)
			if( oZone && oZone.id == 'layouttoggleview' ) {
				this.toggle.addTab(el.qualifier, { urlSuffix: el.urlSuffix, text: el.itemCaption, contentHTML: el.element, order:el.order } );

			} 
			else {
				var i;
				for ( i = 0 ; i < $(oZone).getChildren().length ; i++ ) {
					if ($(oZone).getChildren()[i].id != 'moduleGhost' && App.webpartList[$(oZone).getChildren()[i].id].getOrder() >= el.order)
					{
						el.element.injectBefore($(oZone).getChildren()[i]);
						i = $(oZone).getChildren().length + 1;
					}
				}
				if (i == $(oZone).getChildren().length) oZone.appendChild(el.element);							
			}
		},

		addToggleTabGhost: function(order) {
			if( this.elem_toggletabs ) this.toggle.addTab('tabGhost', { urlSuffix: '', text:' ', tabClassName:'Ghost', order:order, tabOnly:true }); 
		},
		
		removeToggleTabGhost: function(){
			if( this.elem_toggletabs ) this.toggle.removeTab('tabGhost');
		},

		onResizeStart: function(e) {
			var gripper = Event.element(e);
			if( gripper.mode == undefined ) gripper = gripper.parentNode;
			
      this.drag = true;
      document.body.style.cursor = gripper.style.cursor;
      
      this.resizeInfos = {
          startX: Event.pointerX(e),
          startY: Event.pointerY(e),
          gripper: gripper,
          originalWidth: Element.getDimensions(gripper.previousSibling).width,
          originalHeight: Element.getDimensions(gripper.previousSibling).height,
          originalRight: Element.getDimensions(gripper.nextSibling).width,
          originalBottom: Element.getDimensions(gripper.nextSibling).height
      };
      
      var divGhost = $("resize-divGhost");
      if (divGhost) Element.remove(divGhost);
      divGhost = document.createElement("div");
      divGhost.id = "resize-divGhost";
      divGhost.style.position = "absolute";
      divGhost.style.top = "0";
      divGhost.style.right = "0";
      divGhost.style.width = "100%";
      divGhost.style.height = "100%";
      divGhost.style.visibility = "hidden";
      divGhost.onmousemove = this.onResizing.bindAsEventListener(this);
      document.body.appendChild(divGhost);
      if( gripper.mode == 'V' ) {
      	this.verticalBeam.style.left = Event.pointerX(e);
        this.verticalBeam.style.display = '';
      }
      else {
      	this.horizontalBeam.style.top = Event.pointerY(e);
        this.horizontalBeam.style.display = '';
			}      		
      
      Event.observe(document, 'mousemove', this.onResizing.bindAsEventListener(this));
      Event.observe(document, 'mouseup', this.onResizeEnd.bindAsEventListener(this));
      Event.stop(e);			
			
		},
		
		onResizing : function(e) {
      if (!this.drag) return;
      var divGhost = $("resize-divGhost");
      if (divGhost.style.visibility != "visible") {
          divGhost.style.visibility = "visible";
      }
      var deltaX = Event.pointerX(e) - this.resizeInfos.startX;
      var deltaY = Event.pointerY(e) - this.resizeInfos.startY;
      var previousColumnWidth = this.resizeInfos.originalWidth + deltaX;
      var previousRowHeight = this.resizeInfos.originalHeight + deltaY;
      var nextColumnWidth = this.resizeInfos.originalRight - deltaX;
      var nextRowHeight = this.resizeInfos.originalBottom - deltaY;
      if( this.resizeInfos.gripper.mode == "V" ) {
	      
	      if ((previousColumnWidth > this.options.minWidth) && (nextColumnWidth > this.options.minWidth)) {
	          this.verticalBeam.style.left = Event.pointerX(e);
	          this.resizeInfos.gripper.previousSibling.style.width = previousColumnWidth + 'px';
	          //this.resizeInfos.gripper.previousSibling.offsetWidth = previousColumnWidth;
	          
	          /*if( previousColumnWidth < this.resizeInfos.gripper.previousSibling.offsetWidth) {
	          	nextColumnWidth += ( this.resizeInfos.gripper.previousSibling.offsetWidth -  previousColumnWidth );
	          	previousColumnWidth = this.resizeInfos.gripper.previousSibling.offsetWidth;
	          	this.resizeInfos.gripper.previousSibling.style.width = previousColumnWidth + 'px';
	          }*/
	          //this.elem_debug.innerHTML = 'offset Width:' + String(this.resizeInfos.gripper.previousSibling.offsetWidth) + '<BR>Width: ' + this.resizeInfos.gripper.previousSibling.style.width
	          this.resizeInfos.gripper.nextSibling.style.width = nextColumnWidth + 'px';
	          /*if( nextColumnWidth < this.resizeInfos.gripper.nextSibling.offsetWidth) {
	          	nextColumnWidth = this.resizeInfos.gripper.nextSibling.offsetWidth;
	          	this.resizeInfos.gripper.nextSibling.style.width = nextColumnWidth + 'px';
	          }*/
	          
	          

	      } else {
	          if (previousColumnWidth > this.options.minWidth) {
	              deltaX = this.resizeInfos.originalRight - this.options.minWidth;
	              
	              if ((this.resizeInfos.originalWidth + deltaX)>0)
	              this.resizeInfos.gripper.previousSibling.style.width = (this.resizeInfos.originalWidth + deltaX) + 'px';
	              else
	              	this.resizeInfos.gripper.previousSibling.style.width = this.options.minWidth + 'px';
	              //this.elem_debug.innerHTML = 'offset Width:' + String(this.resizeInfos.gripper.previousSibling.offsetWidth) + '<BR>Width: ' + this.resizeInfos.gripper.previousSibling.style.width
	          } else {
	              this.resizeInfos.gripper.previousSibling.style.width = this.options.minWidth + 'px';
	          }
	          if (nextColumnWidth > this.options.minWidth) {
	              deltaX = this.options.minWidth - this.resizeInfos.originalWidth;
	              if ((this.resizeInfos.originalRight - deltaX)>0)
	              this.resizeInfos.gripper.nextSibling.style.width = (this.resizeInfos.originalRight - deltaX) + 'px';
	              else
	              	this.resizeInfos.gripper.nextSibling.style.width = this.options.minWidth + 'px';
	          } else {
	              this.resizeInfos.gripper.nextSibling.style.width = this.options.minWidth + 'px';
	          }
	          Element.addClassName(this.resizeInfos.gripper, "max");
	      }
	      this.applyWidthToChild(this.resizeInfos.gripper.previousSibling);
	      
	    } else {
	    	this.horizontalBeam.style.top = Event.pointerY(e);
	    	if ((previousRowHeight > this.options.minHeight) && (nextRowHeight > this.options.minHeight)) {
	          this.resizeInfos.gripper.previousSibling.style.height = previousRowHeight + 'px';
	          if( previousRowHeight < this.resizeInfos.gripper.previousSibling.offsetHeight) {
	          	nextRowHeight = nextRowHeight - ( this.resizeInfos.gripper.previousSibling.offsetHeight - previousRowHeight)
	          	previousRowHeight = this.resizeInfos.gripper.previousSibling.offsetHeight;
	          	this.resizeInfos.gripper.previousSibling.style.height = previousRowHeight + 'px';
	          	
	          }
	          
	          this.resizeInfos.gripper.nextSibling.style.height = nextRowHeight + 'px';
	          if( nextRowHeight < this.resizeInfos.gripper.nextSibling.offsetHeight) {
	          	nextRowHeight = this.resizeInfos.gripper.nextSibling.offsetHeight;
	          	this.resizeInfos.gripper.nextSibling.style.height = nextRowHeight + 'px';
	          }		          
	          //this.elem_debug.innerHTML = 'offset height:' + String(this.resizeInfos.gripper.nextSibling.offsetHeight) + '<BR>Height: ' + this.resizeInfos.gripper.nextSibling.style.height	          
	          Element.removeClassName(this.resizeInfos.gripper, "max");
	      } else {
	          if (previousRowHeight > this.options.minHeight) {
	              deltaY = this.resizeInfos.originalBottom - this.options.minHeight;
	              if ((this.resizeInfos.originalHeight + deltaY)>0)
	              this.resizeInfos.gripper.previousSibling.style.height = (this.resizeInfos.originalHeight + deltaY) + 'px';
	              else
	              	this.resizeInfos.gripper.previousSibling.style.height = this.options.minHeight + 'px';
	          } else {
	              this.resizeInfos.gripper.previousSibling.style.height = this.options.minHeight + 'px';
	          }
	          if (nextRowHeight > this.options.minHeight) {
	              deltaY = this.options.minHeight - this.resizeInfos.originalHeight;
	              if ((this.resizeInfos.originalHeight - deltaY)>0)
	              this.resizeInfos.gripper.nextSibling.style.height = (this.resizeInfos.originalHeight - deltaY) + 'px';
	              else
	              	this.resizeInfos.gripper.nextSibling.style.height = this.options.minHeight + 'px';
	          } else {
	              this.resizeInfos.gripper.nextSibling.style.height = this.options.minHeight + 'px';
	          }
	          Element.addClassName(this.resizeInfos.gripper, "max");
	      }
	    }
      Event.stop(e);			
			
		},
		
		applyWidthToChild: function(node) {
			if( Element.hasClassName(node,'zoneLayout') || Element.hasClassName(node,'zoneRow') ) {
				node.childNodes[0].style.width = node.style.width;
				this.applyWidthToChild(node.childNodes[0]);
			}
		},
		
		onResizeEnd: function(e) {
			if (!this.drag) return;
			this.drag = false;
			document.body.style.cursor = 'default';
			var divGhost = $("resize-divGhost");
			if (divGhost) {
			  Element.remove(divGhost);
			}
			Event.stopObserving(document, 'mousemove', this.onResizing);
			Event.stopObserving(document, 'mouseup', this.onResizeEnd);
			Element.removeClassName(this.resizeInfos.gripper, "hover");
			Element.removeClassName(this.resizeInfos.gripper, "max");
			var deltaX = Event.pointerX(e) - this.resizeInfos.startX;
			var deltaY = Event.pointerY(e) - this.resizeInfos.startY;
			if ((Math.abs(deltaX) <= 1 && this.resizeInfos.gripper.mode == 'V') || (Math.abs(deltaY) <= 1 && this.resizeInfos.gripper.mode == 'H' )) {
			  return;
			}
			this.verticalBeam.style.display = 'none';
			this.horizontalBeam.style.display = 'none';
			this.updateLayout(true);
			this.saveLayout();
			if( this.resizeInfos.gripper.mode == "V" ) {
				this.notifyResizing(this.resizeInfos.gripper.previousSibling);
				this.notifyResizing(this.resizeInfos.gripper.nextSibling);
			}
      			
			
		},
		
		notifyResizing: function(zone) {
			var tmpZone;
			
			
			tmpZone = $$("#" + zone.id + " .zoneColumn");
			
			for(var i=0; i<tmpZone.length; i++ ) {
				for( var j=0 ;j<tmpZone[i].childNodes.length;j++) {
					App.webpartList[tmpZone[i].childNodes[j].id].resizing(zone.offsetWidth);
				}
			}
		},
		
		getColumnsByZone: function(zoneName) {
			switch(zoneName) {
				case 'layoutheader':
					return this.elem_header_column;
				case 'layoutmiddle':
					return this.elem_middle_column;
				case 'layoutfooter':
					return this.elem_footer_column;
				default:
					return [];					
			}
		},
		
		getRows: function() {
			return $$('div.zoneRow');
		},

		getZoneId: function(sId) {
			var pos = sId.indexOf('.');
			if (pos == -1) return sId;
			return sId.substr(0,pos);
		},

		onErrorLoadContent: function(content)	{
			this.elem_container.innerHTML = content.responseText;
		},
		
    attachZone: function(E) {
    	this[E.id] = E;
    	this.AreaDivs[this.AreaDivs.length] = E;
    	
    },
    
    detachZone: function() {
			if( this.elem_header ) Garbage.trash(this.elem_header,true);
			if( this.elem_middle ) Garbage.trash(this.elem_middle,true);
			if( this.elem_footer ) Garbage.trash(this.elem_footer,true);
			this.elem_header = null;
			this.elem_middle = null;
			this.elem_footer = null;			

			var trashGarbage = function(A) {
				A.forEach( function(el) { Garbage.trash(el,true); });
			}
			
			if( this.elem_header_column ) {
				trashGarbage(this.elem_header_column);
				this.elem_header_column.empty();
			}
			
			if(this.elem_middle_column ) {
				trashGarbage(this.elem_middle_column);
				this.elem_middle_column.empty();
			}
			
			if( this.elem_footer_column ) {
				trashGarbage(this.elem_footer_column);
				this.elem_footer_column.empty();			
			}
			
			if( this.GripDivs ) {
				trashGarbage(this.GripDivs);
				this.GripDivs.empty();
			}
			
			if( this.AreaDivs ) {
    		for( var i=0; i<this.AreaDivs.length; i++ ){
    			this[this.AreaDivs[i].id] = null;
    			Garbage.trash(this.AreaDivs[i],true);
    		}
    		this.AreaDivs.empty();
    	}
    	
    },
    
    getZone: function(id) {
			if (id!=undefined && id!=null)
			{
	    	switch(id.toString())
	    	{
	 		
	    		case '1':
	    			id = 'layoutheader.1.1';
	    			break;
	    		case '2':
	    			id = 'layoutmiddle.1.1';
	    			break;
		   		case '3':
	    			id = 'layoutmiddle.1.2';
	    			break;
		   		case '4':
	    			id = 'layoutmiddle.1.3';
	    			break;
		   		case '5':
	    			id = 'layoutfooter.1.1';
	    			break;
	    		case '7':
	    			id = 'layoutleft.1.1';
	    			break;
		   		case '6':
		   		case 'layouttoggleview':
	    			id = 'layouttoggleview';
	    			if( this.elem_toggleview ) return this.elem_toggleview;
	    			break;    			
	    	}
    	
    		if( this[id] ) return this[id];
    	}
    	return this.AreaDivs[0];
    },
    
    updateLayout: function() {
    	
			var calculateSize = function(columnDivs) {
				var sizes = []
				for(var i=0; i<columnDivs.length; i++) {
					sizes[i] = columnDivs[i].offsetWidth;
				}
				return sizes;
			}     	
    	
			this.elem_header_column_sizes = calculateSize(this.elem_header_column);
			this.elem_middle_column_sizes = calculateSize(this.elem_middle_column);
			this.elem_footer_column_sizes = calculateSize(this.elem_footer_column);    	
    	
    	var updateZoneLayout = function(columnDivs, columnSizes,enableResize ) {
				
				var columnDiv;
				
				for (var i = 0; i < columnDivs.length; i++) {
        	columnSizes[i] = parseInt(columnSizes[i], 10);
          if (!columnSizes[i])
          columnSizes[i] = 1;
        }
        var sizes = columnSizes.slice();
        if (enableResize) {
            sizes.normalize(99.4);
        } else {
            sizes.normalize(99.4);
        }
    		
    		for (var i = 0, columnDiv; columnDiv = columnDivs[i]; i++)  {
            if (sizes[i] <= 0.01) sizes[i] = 0;
            columnDiv.style.width = sizes[i] + '%';
    		}
    	}
    	
    	updateZoneLayout(this.elem_header_column,this.elem_header_column_sizes,this.options.enableResize);
    	updateZoneLayout(this.elem_middle_column,this.elem_middle_column_sizes,this.options.enableResize);
    	updateZoneLayout(this.elem_footer_column,this.elem_footer_column_sizes,this.options.enableResize);
    	
    },
    
    saveLayout: function() {
    	var str = '';

    	var buildXML = function(zone) {
    		var sXML = '';
    		var listRow = $$('#' + zone.id + ' .zoneRow');
    		
    		sXML = '<zone id="' + zone.id.toLowerCase() + '" height="' + String(zone.style.height) + '" visible="' + String((zone.style.display=='none')?'0':'1') + '" >';
    		
    		for( var i=0; i<listRow.length;i++) {
    			sXML += '<row id="' + listRow[i].id.toLowerCase() + '" visible="' + String((listRow[i].style.display=='none')?'0':'1') + '" >';
    			var listColumn = $(listRow[i]).getChildren()
    			for( var j=0; j<listColumn.length; j++) {
    				if( Element.hasClass(listColumn[j],'zoneColumn') ) {
    					sXML += '<column id="' + listColumn[j].id.toLowerCase() + '" width="' + String(listColumn[j].style.width) + '" visible="' + String((listColumn[j].style.display=='none')?'0':'1') + '" />';
    				}
    			}
    			sXML += '</row>';
    		}
    		sXML += '</zone>';
    		return sXML;
    	};
			
			str = '<layout>';
			$$('.zoneLayout').each( function(elem) {
				str += buildXML(elem);
			});
			
			
			/*if( this.elem_header ) str += buildXML(this.elem_header);
			if( this.elem_middle ) str += buildXML(this.elem_middle);
			if( this.elem_footer ) str += buildXML(this.elem_footer);*/
    	str += '</layout>';
	    this.formContent.elements['urlSuffix'].value = this.urlSuffix;
			this.formContent.elements['xmlLayout'].value = str;
			this.formContent.send();
    	
    	
    },
    
    refresh: function() {
    	this.loaded = false;
    	this.loadLayout();
    },
    
    setEditMode: function(editMode) {
			var displayMode = (editMode?"visible":"hidden");
			var displayMode2 = (editMode?"":"none");
			if (typeof this.GripDivs == 'undefined' || this.GripDivs==null) return;
			for( var i=0 ; i< this.GripDivs.length; i++)
			{
				var divResizer = this.GripDivs[i];
				divResizer.style.visibility = displayMode;
				//divResizer.style.display = displayMode2;
			}    	
    }
	
});

Activportal.UI.Panel = new Class(
{
	name: 'Activportal.UI.Panel',
	Implements:[Events,Options],
	options:{saveOnClose: false},
	initialize: function(identifier, parentContainer, opt) {
		
		this.setOptions(opt);
		this.urlSuffix = ''
		this.isShow = false;
		this.loaded = false;
		this.updatedProperties = true,

		this.elem_container = parentContainer;
		
		//var strFrm = "<FORM Method='POST' action='CatalogProviderV2.asp' style='width:100%'></FORM>"
		//this.formContent = new Element(document.createElement(strFrm));
		var strFrm = "FORM";
		this.formContent = new Element(strFrm,{method:"POST",action:"CatalogProviderV2.asp"});

		//var strInput = "<INPUT TYPE='HIDDEN' NAME='" + V_KEY_FORM + "' VALUE='" + V_VALUE_FORM + "' >";
		//var oInput = document.createElement(strInput);
		var oInput = new Element('INPUT',{type:"HIDDEN",name:App.V_KEY_FORM,value:App.V_VALUE_FORM});
		this.formContent.appendChild(oInput);		
		Garbage.trash(oInput);
		
		//strInput = "<INPUT TYPE='HIDDEN' ID='cmd' NAME='cmd' VALUE=''>";
		//oInput = document.createElement(strInput);
		var oInput = new Element('INPUT',{type:"HIDDEN",id:"cmd",name:"cmd",value:"save_resizinglayout"});
		this.formContent.appendChild(oInput);
		Garbage.trash(oInput);
		
		//strInput = "<INPUT TYPE='HIDDEN' ID='urlSuffix' NAME='urlSuffix' VALUE=''>";
		//oInput = document.createElement(strInput);
		var oInput = new Element('INPUT',{type:"HIDDEN",id:"urlSuffix",name:"urlSuffix",value:""});
		this.formContent.appendChild(oInput);		
		Garbage.trash(oInput);
	
		//this.formContent = new Element(document.createElement('<FORM Method="POST" action="CatalogProviderV2.asp"><INPUT type="hidden" name="cmd" ><INPUT type="hidden" name="urlSuffix"></FORM>'));
    this.formContent.id = identifier;
    this.formContent.name = identifier;
    this.formContent.style.height = '100%'
		
    this.elem_panel = document.createElement("div");
    this.elem_panel.className = "PanelPropertiesInner";
    this.elem_panel.style.width = '100%'; 
    this.elem_panel.style.height = '100%';
    
    this.elem_header = document.createElement("div");
    this.elem_header.className = "panelHeader";
    this.elem_header.style.cursor = "default";
    this.elem_close = new Element("div",{href:"javascript:void(0)",styles:{},	events:{mousedown:this.onClosing.bindWithEvent(this)}}).adopt(Activportal.UI.createIcon("","","action-close",_T("L_Close_Text"),14,14));
    this.elem_header.appendChild(this.elem_close);
    
    this.elem_divcontent = new Element("div");
    this.elem_divcontent.style.width = '100%'; 
    this.elem_divcontent.className = "panelContent";
    
/*    this.elem_footer = document.createElement("div");
    this.elem_footer.className = 'PanelFooter';
    this.elem_footer.align = 'center';
    this.elem_footer.style.width = '100%'; 
    var ButtonSubmit = Activportal.UI.createButton(_T("L_Save_Text"),_T("L_Save_Text"),'buttonPicture',true);
    ButtonSubmit.onclick = this.onSend.bind(this);
    this.elem_footer.appendChild(ButtonSubmit);*/
		    
    
    this.elem_panel.appendChild(this.elem_header);
    this.elem_panel.appendChild(this.elem_divcontent);
    //this.elem_panel.appendChild(this.elem_footer);
    
    
    this.formContent.appendChild(this.elem_panel);
    this.elem_container.appendChild(this.formContent);
    this.elem_divcontent.style.height = String(this.elem_panel.offsetHeight - this.elem_header.offsetHeight /*- this.elem_footer.offsetHeight*/) + 'px';
    this.elem_slide = new Fx.Slide(this.elem_container);

    //this.elem_container.style.display='none';
    this.elem_slide.hide();
    

	},
	
	onSend: function() {
		
		
		
	},
	
	onClosing: function() {
		if (this.options.setUpdateOnHide && this.updatedProperties)
		{
			var oResponse = confirm(_T('L_AskSaveProperties_Text'));
			if (oResponse) {var e = new Object(); e.target = new Object(); e.target.command = 'save_properties'; this.onActionClick(e);}
		}
		this.toggle();
	},
	
	show: function(urlSuffix, callBackOnLoad, callBackOnBeforeSubmit, callBackOnSubmit, qualifier) {
		//this.elem_container.style.display = '';
		this.callBackOnLoad = callBackOnLoad || function(){};
		this.callBackOnBeforeSubmit = callBackOnBeforeSubmit  || function(){return true;};
		this.callBackOnSubmit = callBackOnSubmit  || function(){};
		if (typeof qualifier == 'undefined') qualifier = '';
		if (this.elem_container.style.display=='none') {this.elem_container.style.display='';this.elem_slide.hide();}
		if( !this.isShow ) this.elem_slide.toggle();
		this.isShow = true;	
		//this.elem_container.setStyle('width',this.elem_container.parentNode.getCoordinates().width);
		//if( urlSuffix != this.urlSuffix || !this.loaded ) {
			this.urlSuffix = urlSuffix;
			Element.wait(this.elem_divcontent,new Request().addEvent("onComplete", this.onLoadContent.bind(this)).addEvent("onFailure",this.onErrorLoadContent.bind(this)).get(App.CATALOG_PROXY + '?cmd=getproperties&urlsuffix=' + this.urlSuffix + '&qualifier=' + qualifier));
		//}
		
		
	},
	toggle: function() {
		this.callBackOnLoad = function(){};
		this.callBackOnSubmit = function(){};
		this.callBackOnBeforeSubmit = function(){return true;};
		if( this.isShow ) this.elem_slide.toggle();
		this.isShow = false;			
	},
	hide: function() {
		this.callBackOnLoad = function(){};
		this.callBackOnSubmit = function(){};
		this.callBackOnBeforeSubmit = function(){return true;};		
		this.elem_slide.hide();
		this.elem_container.style.display='none'
		this.isShow = false;	
	},
	
	onLoadContent: function(content)	{
		//this.elem_divcontent.style.visibility = 'hidden';
		this.elem_divcontent.innerHTML = content;
		
		var divWebTabPanel = this.elem_divcontent.getElements(".web-tabpane-control");
		var divTabPage = this.elem_divcontent.getElements(".tab-page")
		if( divWebTabPanel.length > 0 )
		{
			if( this.webTabPanel == null ) this.webTabPanel = [];
			for( var i=0; i<divWebTabPanel.length; i++) {
				
				if( this.webTabPanel != null && this.webTabPanel[i] != null) delete this.webTabPanel[i];	
				this.webTabPanel[i] =  new WebTabPane(divWebTabPanel[i],true);
				
				for( j=0; j < divTabPage.length; j++ ) {
					if( divTabPage[j].parentNode === divWebTabPanel[i] ) {
						this.webTabPanel[i].addTabPage( divTabPage[j] );
					}
				}
				this.webTabPanel[i].Init();
			}
			
		}
		//this.elem_divcontent.style.visibility = '';
		
		//Récupération des Boutons d'actions ...
		this.elem_divcontent.getElements("input[type='button']").addEvent("click", this.onActionClick.bind(this));
		
		this.loaded = true;
	},
	
	onActionClick: function(e) {
		this.formContent.elements['urlSuffix'].value = this.urlSuffix;
		this.formContent.elements['cmd'].value = e.target.command;
		var sender = this.formContent.get('send',{async:false});
		if( sender )
		{
			if (typeof e.target.causeValidation == 'undefined' || e.target.causeValidation == '1')
			{
				if (e.target.checkOnBeforeSubmit == '1' && this.callBackOnBeforeSubmit && !this.callBackOnBeforeSubmit(e.target.command,this.formContent)) return;
				sender.send();
			}
			if( this.callBackOnSubmit ) this.callBackOnSubmit(e.target.command,this.formContent);
		}
	},
	
	onErrorLoadContent: function(content) {
		this.elem_divcontent.innerHTML = content.responseText;
	}
	
});
	
Activportal.UI.Menu = new Class(
{	
	name: 'Activportal.UI.Menu',
	Implements:[Events,Options],
	options:{},
	initialize:function(D,B)
	{
		this.setOptions(B);
		this.data = D;
		this.groupId = 'gr' + this.data.id;
		this.load();
	},
	
	load: function(){
		if( !this.elem_menu )
		{
			this.build();
		}
	},
	
	build: function(){
		if(!this.elem_menu)
		{
			var oMenuParent = document.createElement("SPAN");
			var oMenu = document.createElement("DIV");
			oMenu.id = 'gr' + this.data.id;
			oMenu.srcId = this.data.id;
			oMenu.className = 'mnuGAdmin';
			oMenu.style.zIndex = 999;
			oMenu.style.position = 'absolute';
			oMenu.style.pixelTop = 300;
			oMenu.style.pixelLeft = 10;
			//oMenu.style.display = 'block';
			oMenu.style.visibility = 'hidden';
			oMenu.onmouseover = function() {mnu_groupMsOver(this.groupId);};
			oMenu.onmouseout = function() {if (Browser.loaded) mnu_groupMsOut(event, this.id, this.srcId, null, 2, null);};
			this.elem_menu = oMenu;
			oMenuParent.appendChild(oMenu);		
			document.body.appendChild(oMenuParent);		
			//
		}
		
		//for ( var i=0 ; i<this.data.itemList.length ; i++ )
		//{
		//	addMenuItem(this.data.itemList[i]);
		//}
	},
	
	addMenuItem: function(qualifier, urlSuffix, caption, position, eventMethod) {
			if (typeof position == 'undefined') position = -1;
			
			var itemId = this.data.id + '_' + qualifier;
			var oItemContent = $(itemId);
			if (oItemContent) {oItemContent.innerText = caption; Garbage.trash(oItemContent); return;}
			
			oItemContent = document.createElement("DIV");
			oItemContent.noWrap = true;
			oItemContent.className = "mnuI";
			oItemContent.onmousemove = function() {'return false;'};
			oItemContent.id = itemId;
			oItemContent.ondblclick = function() {'return false;'};
			oItemContent.onmouseover = function() {if (Browser.loaded) mnu_updateCell(itemId, 'mnuIO', null, '', null, '', 'over')};
			oItemContent.onmouseout = function() {if (Browser.loaded) mnu_updateCell(itemId, 'mnuI', null, '', null, '', 'out')};
			oItemContent.onmousedown = function() {if (Browser.loaded) mnu_updateCell(itemId, 'mnuID', null, '', null, '', 'down')};
			oItemContent.onmouseup = function() {if (Browser.loaded) mnu_updateCell(itemId, 'mnuIO', null, '', null, '', 'down')};
			oItemContent.innerText = caption;
			if (typeof eventMethod != 'undefined') oItemContent.onclick = eventMethod;
			
			if (position >=0 && position < $(this.elem_menu).getChildren().length) this.elem_menu.insertBefore(oItemContent, $(this.elem_menu).getChildren()[position]);
			else this.elem_menu.appendChild(oItemContent);
			Garbage.trash(oItemContent);
	},
	
	renameMenuItem: function(qualifier, caption) {
			var itemId = this.data.id + '_' + qualifier;
			var oItemContent = $(itemId);
			if (oItemContent) {oItemContent.innerText = caption; Garbage.trash(oItemContent); return;}
	},
	
	hasItems: function() {
		return ($(this.elem_menu).getChildren().length > 0);
	},
	
	removeMenuItem: function (qualifier) {
		var oItem = $(this.data.id + '_' + qualifier);
		if (oItem)
		{	oItem.removeNode(true);
			Garbage.trash(oItem);
		}
	},
	
	removeAllMenuItem: function () {
		for ( var i = 0, iNbMenuItem = $(this.elem_menu).getChildren().length ; i < iNbMenuItem ; i++ )
		{	
			oItem = $(this.elem_menu).getChildren()[0];
			oItem.removeNode(true);
			Garbage.trash(oItem);
		}
	},
	
	destroy: function() {
		this.elem_menu.parentNode.removeNode(true);
		Hash.remove(this, 'elem_menu');
	}
	
});

Activportal.UI.Webpart = new Class(
{	
	name: 'Activportal.UI.Webpart',
	Implements:[Events,Options],
	options:{refreshOnResizing:true,confirmOnClose:true,draggable:false,viewTypes:['rows','cols','tabs']},
	initialize:function(D,B)
	{
		if (B) this.setOptions(B);
		this.editMode=false;
		this.loaded=false;
		this.loading=false;
		this.onqueue=false;
		this.data = D;
		this.documentList = [];
		this.load();
	},
	
	load: function(){
		if( !this.elem_module )
		{
			this.build();
		}
	},
	
	getIdentifier: function() {
		return this.data.wpQualifier;
	},
	
	getOrder: function() {
		return this.data.order;
	},
	
	build: function(){
		
		var C,D=true;
		var Me = this;
		if(!this.elem_webpart)
		{
			this.elem_webpart=new Element("div",{"class":"webpart", events:{mouseover:this.highlight.bind(this),mouseleave:this.unHighlight.bind(this)}});
			this.elem_webpart.setProperty('id',this.getIdentifier());
			this.elem_webpart.data=this.data
		}
		else
		{
			D=false
		}
		C=this.elem_webpart;
		if (typeof this.data.isVisible != 'undefined' && this.data.isVisible == 1)
			C.style.display="block";
		else
			C.style.display="none";
	
	 	var webpartFrame=new Element("div",{"class":"webpartFrame webpartunHighlight"});
	 	this.elem_webpartFrame = webpartFrame;
		
		
	  //var F=new Element("div",{"class":"webpartHeaderContainer"}).inject(webpartFrame);

		this.elem_webpartTop = new Element("div",{"class":"webpartTop"}).inject(webpartFrame);
		
		this.elem_webpartHeader = new Element("div",{"class":"webpartHeader"}).inject(this.elem_webpartTop);
		
		var webpartPanel = new Element("div",{"class":"webpartPanel"}).inject(this.elem_webpartTop);

		this.elem_ico=new Element("div",{"href":"javascript:void(0)"});
		
		if( this.data.smallIcon ){
			this.elem_ico.adopt(Activportal.UI.createIcon("",this.data.smallIcon,"",_T("L_DependentItems_Text"),14,14));
		}
		else {
			this.elem_ico.adopt(Activportal.UI.createIcon("","","smallIcon",_T("L_DependentItems_Text"),14,14));
		}

		if (this.data.title == undefined || this.data.title == "")
			this.elem_title=new Element("span",{"class":"title",text:this.data.caption});
		else
			this.elem_title=new Element("span",{"class":"title",text:this.data.title});
			this.elem_title.addEvent('click',function(e) {e = new Event(e).stop();if (!App.EditMode) return; this.contentEditable = true;this.addClass('titleEdit');})
			this.elem_title.addEvent('blur', this.onUpdateCaption.bind(this));
			this.elem_title.addEvent('mousedown',function(e) {e = new Event(e).stop();})
		
		// PRINT 
		if (hasUserRight(CONST_PrintItem_Access))
		{
			//this.elem_printItems = new Element("div",{href:"javascript:void(0)",styles:{visibility:"hidden"},events:{mousedown:this.showPrintItemsMenu.bindWithEvent(this)}}).adopt(Activportal.UI.createIcon("","","action-PrintItems",_T("PrintItems"),21,14));
			var printItems = new Object();
			printItems.id = "printItems" + this.getIdentifier();
			var printItemMenu = new Activportal.UI.Menu({id: printItems.id});
			printItems.groupId = printItemMenu.groupId;
			this.elem_printItems = new Element("div",{href:"javascript:void(0)",styles:{visibility:"hidden"},events:{mouseover:this.onDisplayMenu.bindWithEvent(this, printItems),mouseout:this.onHideMenu.bindWithEvent(this, printItems)}}).adopt(Activportal.UI.createIcon(printItems.id,"","action-PrintItems",_T("L_PrintItems_Text"),21,14));
			this.elem_printItems.addEvent('mousedown',function(e) {e = new Event(e).stop();});
			this.elem_printItems.elem_menu = printItemMenu;
			if (this.data.isPrintable == 1)
				this.elem_printItems.elem_menu.addMenuItem(this.getIdentifier(),this.data.urlSuffix,(this.data.title?_T('L_Webpart_Text') + ' ' + this.data.title: _T('L_Webpart_Text') + ' ' + this.data.caption),0, this.onPrintItem.bind(this));
		}

		// WEBQUERY
		if (hasUserRight(CONST_WebQuery_Access))
		{
			//this.elem_webQueryItems = new Element("div",{href:"javascript:void(0)",styles:{visibility:"hidden"},events:{mousedown:this.showWebQueryItemsMenu.bindWithEvent(this)}}).adopt(Activportal.UI.createIcon("","","action-WebQueryItems",_T("WebQueryItems"),21,14));
			var webQueryItems = new Object();
			webQueryItems.id = "webQueryItems" + this.getIdentifier();
			var webQueryItemMenu = new Activportal.UI.Menu({id: webQueryItems.id});
			webQueryItems.groupId = webQueryItemMenu.groupId;
			this.elem_webQueryItems = new Element("div",{href:"javascript:void(0)",styles:{visibility:"hidden"},events:{mouseover:this.onDisplayMenu.bindWithEvent(this, webQueryItems),mouseout:this.onHideMenu.bindWithEvent(this, webQueryItems)}}).adopt(Activportal.UI.createIcon(webQueryItems.id,"","action-WebQueryItems",_T("L_WebQueryItems_Text"),21,14));
			this.elem_webQueryItems.addEvent('mousedown',function(e) {e = new Event(e).stop();});
			this.elem_webQueryItems.elem_menu = webQueryItemMenu;
		}

		// PUSH ITEMS
		if (hasUserRight(CONST_PushItem_Access))
		{
			//this.elem_pushItems = new Element("",{"div":"",href:"javascript:void(0)",styles:{visibility:"hidden"},events:{mousedown:this.showPushItemsMenu.bindWithEvent(this)}}).adopt(Activportal.UI.createIcon("","","action-PushItems",_T("PushItems"),21,14));
			var pushItems = new Object();
			pushItems.id = "pushItems" + this.getIdentifier();
			var pushItemMenu = new Activportal.UI.Menu({id: pushItems.id});
			pushItems.groupId = pushItemMenu.groupId;
			this.elem_pushItems = new Element("div",{href:"javascript:void(0)",styles:{visibility:"hidden"},events:{mouseover:this.onDisplayMenu.bindWithEvent(this, pushItems),mouseout:this.onHideMenu.bindWithEvent(this, pushItems)}}).adopt(Activportal.UI.createIcon(pushItems.id,"","action-PushItems",_T("L_PushItems_Text"),21,14));
			this.elem_pushItems.addEvent('mousedown',function(e) {e = new Event(e).stop();});
			this.elem_pushItems.elem_menu = pushItemMenu;
			//if (this.data.isPushable == 1 || this.data.isPushable == 3)
			//	this.elem_pushItems.elem_menu.addMenuItem(this.getIdentifier(),this.data.urlSuffix,(this.data.title?_T('Webpart') + ' ' + this.data.title: _T('Webpart') + ' ' + this.data.caption),0, this.onPushItem.bind(this));
		}

		// SEND MAIL ITEMS
		if (hasUserRight(CONST_SendEmailItem_Access))
		{
			//this.elem_sendMailItems = new Element("div",{href:"javascript:void(0)",styles:{visibility:"hidden"},events:{mousedown:this.showSendMailItemsMenu.bindWithEvent(this)}}).adopt(Activportal.UI.createIcon("","","action-SendMailItems",_T("SendMailItems"),15,15));
			var sendMailItems = new Object();
			sendMailItems.id = "sendMailItems" + this.getIdentifier();
			var sendMailItemMenu = new Activportal.UI.Menu({id: sendMailItems.id});
			sendMailItems.groupId = sendMailItemMenu.groupId;
			this.elem_sendMailItems = new Element("div",{href:"javascript:void(0)",styles:{visibility:"hidden"},events:{mouseover:this.onDisplayMenu.bindWithEvent(this, sendMailItems),mouseout:this.onHideMenu.bindWithEvent(this, sendMailItems)}}).adopt(Activportal.UI.createIcon(sendMailItems.id,"","action-SendMailItems",_T("L_SendMailItems_Text"),21,14));
			this.elem_sendMailItems.addEvent('mousedown',function(e) {e = new Event(e).stop();});
			this.elem_sendMailItems.elem_menu = sendMailItemMenu;
			//if (this.data.isPushable == 2 || this.data.isPushable == 3)
			//	this.elem_sendMailItems.elem_menu.addMenuItem(this.getIdentifier(),this.data.urlSuffix,(this.data.title?_T('Webpart') + ' ' + this.data.title: _T('Webpart') + ' ' + this.data.caption),0, this.onsendMailItem.bind(this));
		}
		

		// DEPENDENT ITEMS
		var dependentItems = new Object();
		dependentItems.id = "dependentItems" + this.getIdentifier();
		var dependentItemMenu = new Activportal.UI.Menu({id: dependentItems.id});
		dependentItems.groupId = dependentItemMenu.groupId;
		this.elem_dependentItems = new Element("div",{href:"javascript:void(0)",styles:{visibility:"hidden"},events:{mouseover:this.onDisplayMenu.bindWithEvent(this, dependentItems),mouseout:this.onHideMenu.bindWithEvent(this, dependentItems)}}).adopt(Activportal.UI.createIcon(dependentItems.id,"","action-DependentItems",_T("L_DependentItems_Text"),16,16));
		this.elem_dependentItems.addEvent('mousedown',function(e) {e = new Event(e).stop();})
		this.elem_dependentItems.elem_menu = dependentItemMenu;
		this.elem_dependentItems.exist = false;
		
		// EDIT PROPERTIES ITEMS
		//if (hasUserRight(CONST_EditContent_Access) || hasAccessRight(this,CONST_ACCESS_UPDATE) )
		//{
			var editItems = new Object();
			editItems.id = "EditItems" + this.getIdentifier();
			var editItemMenu = new Activportal.UI.Menu({id: editItems.id});
			editItems.groupId = editItemMenu.groupId;
			this.elem_editItems = new Element("div",{href:"javascript:void(0)",styles:{visibility:"hidden",display:"none"},events:{mouseover:this.onDisplayMenu.bindWithEvent(this, editItems),mouseout:this.onHideMenu.bindWithEvent(this, editItems)}}).adopt(Activportal.UI.createIcon(editItems.id,"","action-EditItems",_T("L_EditItems_Text"),21,15));
			this.elem_editItems.addEvent('mousedown',function(e) {e = new Event(e).stop();})
			this.elem_editItems.elem_menu = editItemMenu;
			if (hasAccessRight(this,CONST_ACCESS_UPDATE))
					this.elem_editItems.elem_menu.addMenuItem(this.getIdentifier(),this.data.urlSuffix,(this.data.title?_T('L_Webpart_Text') + ' ' + this.data.title: _T('L_Webpart_Text') + ' ' + this.data.caption),0, this.onEditProperties.bind(this));
		//}
		
		this.elem_webpartState = new Element("div",{href:"javascript:void(0)",styles:{visibility:"hidden"},	events:{mousedown:this.onCollapseExpand.bindWithEvent(this)}}).adopt(Activportal.UI.createIcon("","",this.data.frameState==1?"action-minimize":"action-maximize",this.data.frameState==1?_T("L_Minimize_Text"):_T("L_Maximize_Text"),14,14));
		this.elem_close = new Element("div",{href:"javascript:void(0)",styles:{visibility:"hidden"},	events:{mousedown:this.onClosing.bindWithEvent(this)}}).adopt(Activportal.UI.createIcon("","","action-close",_T("L_Close_Text"),14,14));
		if (!App.EditMode) this.elem_close.style.display="none";

		this.elem_webpartHeader.appendChild(this.elem_close);
		this.elem_webpartHeader.appendChild(this.elem_webpartState);
		if (hasUserRight(CONST_EditContent_Access)) this.elem_webpartHeader.appendChild(this.elem_editItems);
		if (hasUserRight(CONST_PrintItem_Access)) this.elem_webpartHeader.appendChild(this.elem_printItems);
		if (hasUserRight(CONST_WebQuery_Access)) this.elem_webpartHeader.appendChild(this.elem_webQueryItems);
		if (hasUserRight(CONST_PushItem_Access)) this.elem_webpartHeader.appendChild(this.elem_pushItems);
		if (hasUserRight(CONST_SendEmailItem_Access)) this.elem_webpartHeader.appendChild(this.elem_sendMailItems);
		this.elem_webpartHeader.appendChild(this.elem_dependentItems);
		this.elem_webpartHeader.appendChild(this.elem_ico);
		this.elem_webpartHeader.appendChild(this.elem_title);	
		//this.elem_webpartHeader.appendChild(this.elem_edit);	

		this.elem_webpartContent=new Element("div",{style:{width:"100%",height:"100%"}});;
		this.elem_webpartContent.className="webpartContent";
		if (this.data.hAlign)
		{
			this.elem_webpartContent.style.textAlign = this.data.hAlign;
		}
		switch(this.data.viewType)
		{
			case 0 :
						this.elem_webpartContent.style.display = "block";
						break;
			case 1 :
						this.elem_webpartContent.style.display = "inline";
						break;
			case 2 :
						this.elem_webpartContent.style.display = "block";
						break;
		}
		if(typeof this.data.height != 'undefined' && this.data.height != '' && this.data.height != 'px') {
			this.elem_webpartContent.style.height = this.data.height;
			this.elem_webpartContent.style.overflowY = 'auto';
		}
		if(this.data.width != undefined && this.data.width != '') {
			this.elem_webpartContent.style.width = this.data.width;
		}
		
	
		
		this.data.documents.each( function(elem,index)	{
			Me.addDocument(new Activportal.UI.Document(Me,elem));
			}
		);
			
		if( this.tabs )
			this.tabs.appendTo(this.elem_webpartContent);				


		webpartFrame.appendChild(this.elem_webpartContent);
		this.elem_webpart.appendChild(webpartFrame);
		
		if(D)
		{
			App.layoutManager.add({qualifier: this.getIdentifier(), urlSuffix: this.data.urlSuffix, itemCaption: this.data.itemCaption, order: this.data.order, element: this.elem_webpart}, this.data.zone);
			//var oZone = App.layoutManager.getZone(this.data.zone);
			//if (oZone.childNodes.length == 0) oZone.appendChild(this.elem_webpart);
			//else
			//{

			//}
      if (App.EditMode) this.addDrag();
		}
		this.elem_panel = new Activportal.UI.Panel('Panel_' + this.getIdentifier(),webpartPanel, {setUpdateOnHide:true});
		this.refreshDesign();
		if (this.data.frameState == 0) this.elem_webpartContent.style.display = 'none';
		
		RegisterEvent('www.activportal.mc:Webpart','SetDisplay',this.setDisplay.bind(this),this.getIdentifier());
		
		if( this.data.helpLink != undefined && this.data.helpLink != '' ) {
			RegisterEvent('www.activportal.mc:Webpart','DisplayHelp',this.displayHelp.bind(this),this.getIdentifier());
		}
		
	},

	onDisplayMenu: function(e, args) {
		e = new Event(e).stop();
		if (Browser.loaded) mnu_itemMsOver(args.id, args.groupId, 'belowleft', -1, 0, 100,null);
	},
	
	onHideMenu: function(e, args) {
		e = new Event(e).stop();
		if (Browser.loaded) 
		{
			//mnu_groupMsOut(args.groupId, args.id, 'MenuNav_group_1',2, null);
			mnu_itemMsOut(e,args.id, null, args.groupId, 100, null);
		}
	},

	show: function() {
		//this.elem_panel.isShow = true;
		this.elem_panel.hide();
	},

	displayHelp: function() {
		window.open(this.data.helpLink,'','scrollbars=yes,top=20,left=20,height=600,width=800,resizable=yes,menubar=no,location=no,status=no,titlebar=yes,toolbar=yes');
	},
	
	setDisplay: function(bDisplay) {
		//this.elem_panel.isShow = true;
		this.elem_webpart.style.display = bDisplay?'block':'none';
	},

	onUpdateCaption: function(e) {
			e = new Event(e).stop();
			if (!App.EditMode) return;
			e.target.contentEditable = false;
			e.target.removeClass('titleEdit');
			if (e.target.innerText.trim() == '' || e.target.innerText.trim() == this.data.caption) {e.target.innerText = this.data.caption; return;}
			var MyCaptionForm = App.createFormCaption();
			MyCaptionForm.getElementById('CaptionUrlSuffix').value = this.data.urlSuffix;
			MyCaptionForm.getElementById('CaptionItemCaption').value = e.target.innerText;
			MyCaptionForm.set('send',{
							onFailure: function(jsonObj) {alert(_T('L_ErrorSavingCaption_Text'))},
							evalScripts: true
			});
			MyCaptionForm.send();
			Garbage.trash(MyCaptionForm);
	},
	
	onEditProperties: function(e) {
		var Me = this;
		this.elem_panel.show(this.data.urlSuffix, function(){}, function(){}, function(cmd,oForm){
																								Me.data.title = oForm.elements['Title' + oForm.elements['DataLanguage'].value].value;
																								Me.data.isPushable = eval(oForm.elements['IsPushable'].value);
																								Me.data.reportingExecuteMode = eval(oForm.elements['ReportingExecuteMode'].value);
																								Me.data.isPrintable = oForm.elements['IsPrintable'].checked?1:0;
																								Me.data.hasFrame = oForm.elements['HasFrame'].checked?1:0;
										
																								if (oForm.elements['FgColorTitleBar'].value.length > 0) Me.data.fgColorTitleBar = oForm.elements['FgColorTitleBar'].value;
																								else Hash.remove(Me.data, 'fgColorTitleBar');
										
																								if (oForm.elements['BgColorTitleBar'].value.length > 0) Me.data.bgColorTitleBar = oForm.elements['BgColorTitleBar'].value;
																								else Hash.remove(Me.data, 'bgColorTitleBar');
																									
																								if (oForm.elements['BgColorContent'].value.length > 0) Me.data.bgColorContent = oForm.elements['BgColorContent'].value;
																								else Hash.remove(Me.data, 'bgColorContent');
										
																								if (oForm.elements['BorderColor'].value.length > 0) Me.data.borderColor = oForm.elements['BorderColor'].value;
																								else Hash.remove(Me.data, 'borderColor');
																								
																								if (oForm.elements['BorderStyle'].value.length > 0) Me.data.borderStyle = oForm.elements['BorderStyle'].value;
																								else Hash.remove(Me.data, 'borderStyle');
										
																								if (oForm.elements['BorderSize'].value.length > 0) Me.data.borderSize = oForm.elements['BorderSize'].value;
																								else Hash.remove(Me.data, 'borderSize');

																								if (oForm.elements['Width'].value == parseFloat(oForm.elements['Width'].value) && oForm.elements['Width'].value.length > 0) 
																										Me.data.width = oForm.elements['Width'].value + oForm.elements['WidthUnitType'].value;
																								else
																										Me.data.width = '';
																								if (oForm.elements['Height'].value == parseFloat(oForm.elements['Height'].value) && oForm.elements['Height'].value.length > 0) 
																										Me.data.height = oForm.elements['Height'].value + oForm.elements['HeightUnitType'].value;
																								else
																										Me.data.height = '';
																								
																								var iViewType = -1;
																								for ( var i = 0 ; i<oForm.elements['ViewType'].length && iViewType == -1 ; i++ )
																											if (oForm.elements['ViewType'][i].checked) iViewType = eval(oForm.elements['ViewType'][i].value);
																								if (Me.data.viewType != iViewType) 
																								{
																									Me.data.newViewType = iViewType;
																								}

																								Me.refreshDesign();
																							}, this.getIdentifier());
	},

	refreshDesign: function() {
		
		if (typeof this.data.newViewType != 'undefined') 
		{
			this.clearDocuments();
			this.data.viewType = this.data.newViewType;
			switch(this.data.viewType)
			{
				case 0 :
							this.elem_webpartContent.style.display = "block";
							break;
				case 1 :
							this.elem_webpartContent.style.display = "inline";
							break;
				case 2 :
							this.elem_webpartContent.style.display = "block";
							break;
			}
			this.addDocuments();
			Hash.remove(this.data,'newViewType');
		}
		
		if(typeof this.data.height != 'undefined')
			if (this.data.height != this.elem_webpartContent.style.height) {
					this.elem_webpartContent.style.height = this.data.height;
					this.elem_webpartContent.style.overflowY = 'auto';
			}

		this.elem_title.innerText = this.data.title;
		if (hasUserRight(CONST_PushItem_Access)) {
			//if (this.data.isPushable == 1 || this.data.isPushable == 3)
			//		this.elem_pushItems.elem_menu.addMenuItem(this.getIdentifier(),this.data.urlSuffix,(this.data.title?_T('Webpart') + ' ' + this.data.title: _T('Webpart') + ' ' + this.data.caption),0, this.onPushItem.bind(this));
			//else
			//		this.elem_pushItems.elem_menu.removeMenuItem(this.getIdentifier());
			this.elem_pushItems.style.display = (this.elem_pushItems.elem_menu.hasItems() && !App.EditMode)?"":"none";
		}			

		if (hasUserRight(CONST_SendEmailItem_Access)) {
			//if (this.data.isPushable == 2 || this.data.isPushable == 3)
			//		this.elem_sendMailItems.elem_menu.addMenuItem(this.getIdentifier(),this.data.urlSuffix,(this.data.title?_T('Webpart') + ' ' + this.data.title: _T('Webpart') + ' ' + this.data.caption),0, this.onSendMailItem.bind(this));
			//else
			//		this.elem_sendMailItems.elem_menu.removeMenuItem(this.getIdentifier());
			this.elem_sendMailItems.style.display = (this.elem_sendMailItems.elem_menu.hasItems() && !App.EditMode)?"":"none";
		}			
		
		this.elem_dependentItems.style.display = (this.elem_dependentItems.exist && !App.EditMode)?"":"none";
		
		if (hasUserRight(CONST_PrintItem_Access)) 
		{
			if (this.data.isPrintable == 1)
					this.elem_printItems.elem_menu.addMenuItem(this.getIdentifier(),this.data.urlSuffix,(this.data.title?_T('L_Webpart_Text') + ' ' + this.data.title: _T('L_Webpart_Text') + ' ' + this.data.caption),0, this.onPrintItem.bind(this));
			else
					this.elem_printItems.elem_menu.removeMenuItem(this.getIdentifier());
			this.elem_printItems.style.display = (this.elem_printItems.elem_menu.hasItems() && !App.EditMode)?"":"none";
		}
		
		if ( this.data.hasFrame == 0 ) 
		{	
			this.elem_webpartFrame.setStyle('border-width', '');
			if( !Element.hasClassName(this.elem_webpartFrame, 'noFrame') ) Element.addClassName(this.elem_webpartFrame, 'noFrame');
			if (!App.EditMode) this.elem_webpartTop.style.display = "none";
		}
		else 
		{
			if (!App.EditMode) {this.elem_webpartTop.style.display = ""; this.elem_panel.elem_slide.hide();}
			if( Element.hasClassName(this.elem_webpartFrame, 'noFrame') ) Element.removeClassName(this.elem_webpartFrame, 'noFrame');
			
			if (typeof this.data.borderSize != 'undefined')
			{
				this.elem_webpartFrame.setStyle('border-top-width', this.data.borderSize + 'px');
				this.elem_webpartFrame.setStyle('border-left-width', this.data.borderSize + 'px');
				this.elem_webpartFrame.setStyle('border-right-width', this.data.borderSize + 'px');
				this.elem_webpartFrame.setStyle('border-bottom-width', this.data.borderSize + 'px');
				this.elem_webpartFrame.setStyle('border-width', this.data.borderSize + 'px ' + this.data.borderSize + 'px ' + this.data.borderSize + 'px ' + this.data.borderSize + 'px');
			}
			else
			{
				this.elem_webpartFrame.setStyle('border-top-width', '');
				this.elem_webpartFrame.setStyle('border-left-width', '');
				this.elem_webpartFrame.setStyle('border-right-width', '');
				this.elem_webpartFrame.setStyle('border-bottom-width', '');
				this.elem_webpartFrame.setStyle('border-width', '');
			}
				
			if (typeof this.data.borderStyle != 'undefined')
			{
				this.elem_webpartFrame.setStyle('border-top-style', this.data.borderStyle);
				this.elem_webpartFrame.setStyle('border-left-style', this.data.borderStyle);
				this.elem_webpartFrame.setStyle('border-right-style', this.data.borderStyle);
				this.elem_webpartFrame.setStyle('border-bottom-style', this.data.borderStyle);
			}
			else
			{
				this.elem_webpartFrame.setStyle('border-top-style', '');
				this.elem_webpartFrame.setStyle('border-left-style', '');
				this.elem_webpartFrame.setStyle('border-right-style', '');
				this.elem_webpartFrame.setStyle('border-bottom-style', '');
			}

			if (typeof this.data.borderColor != 'undefined')
			{
				this.elem_webpartFrame.setStyle('border-top-color', this.data.borderColor);
				this.elem_webpartFrame.setStyle('border-left-color', this.data.borderColor);
				this.elem_webpartFrame.setStyle('border-right-color', this.data.borderColor);
				this.elem_webpartFrame.setStyle('border-bottom-color', this.data.borderColor);
			}
			else
			{
				this.elem_webpartFrame.setStyle('border-top-color', '');
				this.elem_webpartFrame.setStyle('border-left-color', '');
				this.elem_webpartFrame.setStyle('border-right-color', '');
				this.elem_webpartFrame.setStyle('border-bottom-color', '');
			}
		}
		
		if (typeof this.data.bgColorContent != 'undefined')
		{ 
			this.elem_webpartContent.setStyle('background-color', this.data.bgColorContent);
			this.elem_webpartFrame.setStyle('background-color', this.data.bgColorContent);
		}
		else 
		{
			this.elem_webpartContent.setStyle('background-color', '');
			this.elem_webpartFrame.setStyle('background-color', '');
		}
			
		
		if (typeof this.data.fgColorTitleBar != 'undefined') this.elem_title.setStyle('color', this.data.fgColorTitleBar);
		else this.elem_title.setStyle('color', '');

		if (typeof this.data.bgColorTitleBar != 'undefined') 
		{
			this.elem_webpartHeader.setStyle('background-color', this.data.bgColorTitleBar);
			if ($(this.elem_webpartHeader).getComputedStyle('background-image') != '')
				this.elem_webpartHeader.setStyle('background-image', 'url(Pictures/pixel.gif)');
		}
		else
		{
			this.elem_webpartHeader.setStyle('background-color', '');
			if ($(this.elem_webpartHeader).getComputedStyle('background-image') == 'url(Pictures/pixel.gif)')
				this.elem_webpartHeader.setStyle('background-image', '');
		}
	},

	resizing: function() {
		for( var property in this.documentList ) {
			if( $type(this.documentList[property]) == 'object' && this.documentList[property].name == 'Activportal.UI.Document') {
				this.documentList[property].resizing() 
			}
		}
	},

	addDocument: function(doc, forceOrder) {		
		this.documentList[doc.getIdentifier()] = doc;
		App.documentList[doc.getIdentifier()] = doc;
		if( this.options.viewTypes[this.data.viewType] == 'tabs' && !this.tabs ) {
			this.tabs = new Activportal.UI.TabView();
			this.tabs.observe("activeTabChange", this.onActiveTabChanged.bind(this));	
		}

		if( this.tabs ) {
			var tabPosition = -1;
			if (typeof this.tabs.elem_tabItem != 'undefined' && forceOrder) tabPosition = this.getPositionByOrder(doc.data.itemOrder);
			this.tabs.addTab(doc.data.docQualifier, { urlSuffix: doc.data.urlSuffix, text: doc.data.itemCaption, contentHTML: doc.getContent(), order:tabPosition } )	
		}
		else {
			doc.appendTo(this.elem_webpartContent);
			//doc.show();
		}

	},
	
	addDocuments: function() {
		
		for (oDocProperty in this.documentList)
		{
			if (oDocProperty.indexOf(this.getIdentifier())==0)
			{
				oDocument = this.documentList[oDocProperty];
				oDocument.removeDrag();
				switch(this.data.viewType)
				{
					case 0 :
								oDocument.elem_content.style.styleFloat = '';
								oDocument.elem_content.style.display = '';
								oDocument.elem_content.style.width = "100%";
								break;
					case 1 :
								oDocument.elem_content.style.styleFloat = 'left';
								oDocument.elem_content.style.display = '';
								if( typeof oDocument.data.width != 'undefined' && oDocument.data.width != '' ){
									oDocument.elem_content.style.width = oDocument.data.width;
								} else {
									
									if( this.data.width != 'undefined' && this.data.width != '' ) {
										oDocument.elem_content.style.width = this.data.width;
									} else {
										oDocument.elem_content.style.width = 'auto';
									}
								}
								break;
					case 2 :
								oDocument.elem_content.style.styleFloat = '';
								oDocument.elem_content.style.width = "100%";
								break;
				}
				this.addDocument(oDocument, true);
				oDocument.hasChanged = true;
				oDocument.loadContent(true);
				if (!this.tabs && App.EditMode) oDocument.addDrag();
			}
		}
		if (this.tabs) this.tabs.appendTo(this.elem_webpartContent);				


	},

	removeDocument: function(B) {
		
		if( this.tabs ) {
			this.tabs.removeTab(B);
			if ($(this.tabs.elem_tabItem).getChildren().length > 0) this.tabs.selectTab(0, false);
		}
		else {
			doc = this.documentList[B];
			//doc.removeNode(true);
			doc.destroy();
		}

		if (hasUserRight(CONST_EditContent_Access)) this.elem_editItems.elem_menu.removeMenuItem(B);
		if (hasUserRight(CONST_PrintItem_Access)) this.elem_printItems.elem_menu.removeMenuItem(B);
		if (hasUserRight(CONST_PushItem_Access)) this.elem_pushItems.elem_menu.removeMenuItem(B);
		if (hasUserRight(CONST_SendEmailItem_Access)) this.elem_sendMailItems.elem_menu.removeMenuItem(B);
		if (hasUserRight(CONST_WebQuery_Access)) this.elem_webQueryItems.elem_menu.removeMenuItem(B);
		Hash.remove(this.documentList, B);
	},
	
	clearDocuments: function(B) {
		if (this.tabs) {this.tabs.destroy(); Hash.remove(this, 'tabs');}
		else this.elem_webpartContent.empty();
	},
			
	remove: function() {
			var oResponse = confirm(_T('L_ConfirmWebpartRemoval_Text'));
			if (oResponse)
				new Request().addEvent("onComplete", this.destroy.bind(this)).addEvent("onFailure",this.onErrorAlert.bind(this)).get(App.CATALOG_PROXY + '?cmd=deleteall&documentid=' + this.data.urlSuffix);
	},
	
	destroy: function() {
		var WPQ = this.getIdentifier();
		var oZone = App.layoutManager.getZone(this.data.zone);
		UnRegisterEvent('www.activportal.mc:Webpart','SetDisplay',this.setDisplay.bind(this),this.getIdentifier());
		if (this.tabs)
		{
			this.tabs.destroy();
			Hash.remove(this, 'tabs');
		}
		for (oDocProperty in this.documentList)
		{
			if (oDocProperty.indexOf(this.getIdentifier())==0)
			{
				oDocument = this.documentList[oDocProperty];
				oDocument.destroy();
			}
		}

		if (this.elem_editItems) this.elem_editItems.elem_menu.destroy();
		if (this.elem_dependentItems) this.elem_dependentItems.elem_menu.destroy();
		if (this.elem_pushItems) this.elem_pushItems.elem_menu.destroy();
		if (this.elem_sendMailItems) this.elem_sendMailItems.elem_menu.destroy();
		if (this.elem_printItems) this.elem_printItems.elem_menu.destroy();
		if (this.elem_webQueryItems) this.elem_webQueryItems.elem_menu.destroy();

		this.elem_webpart.removeNode(true);
		Hash.remove(this, 'elem_webpart');
		Hash.remove(this, 'data');
		Hash.remove(this, 'elem_webpartHeader');
		Hash.remove(this, 'elem_ico');
		Hash.remove(this, 'elem_title');
		Hash.remove(this, 'contentEditable');
		Hash.remove(this, 'elem_printItems');
		Hash.remove(this, 'elem_webQueryItems');
		Hash.remove(this, 'elem_pushItems');
		Hash.remove(this, 'elem_sendMailItems');
		Hash.remove(this, 'elem_dependentItems');
		Hash.remove(this, 'elem_editItems');
		Hash.remove(this, 'elem_webpartState');
		Hash.remove(this, 'elem_close');
		Hash.remove(this, 'elem_webpartContent');
		Hash.remove(this, 'elem_panel');
		Hash.remove(this, 'elem_webpartTop');
		Hash.remove(App.webpartList, WPQ);
	},

	onErrorAlert: function(content)
	{
		alert(content.responseText);
	},
		
  getPositionByOrder: function(order) {
  		var i;
  		for ( i = 0 ; i < $(this.tabs.elem_tabItem).getChildren().length ; i++ )
  		{
  			if (this.documentList[$(this.tabs.elem_tabItem).getChildren()[i].name].data.itemOrder >= order) return i;
  		}
  		return -1;
  },
  

	hasTab: function() {
		if( this.tabs ) return true;
		if( this.options.viewTypes[this.data.viewType] == 'tabs') return true;
		return false;
	},
	
	addTabGhost: function(order){
		if ( this.hasTab() && !this.tabs )
		{
			this.tabs = new Activportal.UI.TabView();
			this.tabs.observe("activeTabChange", this.onActiveTabChanged.bind(this));	
		}
		if (this.tabs) this.tabs.addTab('tabGhost', { urlSuffix: '', text:' ', tabClassName:'Ghost', order:order, tabOnly:true } );
	},
	
	getTabPositionByIdentifier: function(DocQualifier){
		var position = 0;
		var oTab = this.tabs.getTab(DocQualifier);
		if (typeof oTab != 'object') return -1;
		for ( oTab = oTab.previousSibling ; oTab ; oTab = oTab.previousSibling )
		{
			position++;
		}
		return position;
	},

	getTabPositionByOrder: function(order){
		var position = 0;
		if ($(this.tabs.elem_tabItem).getChildren().length == 0) return position;
		var oTab = null;
		for ( oTab = $(this.tabs.elem_tabItem).getChildren()[0] ; oTab && this.documentList[oTab.name].data.itemOrder < order ; oTab = oTab.nextSibling )
		{
			position++;
		}
		return position;
	},

	removeTabGhost: function(){
		if (this.tabs) this.tabs.removeTab('tabGhost');
	},

	setDocumentOrders: function(jsonOrder) {
		var Me = this;
		jsonOrder.each( function(item) {
				var oDocument;
				oDocument = Me.getDocumentByUrlSuffix(item.urlsuffix);
				if (oDocument)
				{
					oDocument.data.itemOrder = item.order;
				}
			}
		)			
	},
	
	getDocumentByUrlSuffix: function(sUrlSuffix) {
			var oDocument,oDocProperty;
			for (oDocProperty in this.documentList)
			{
				if (oDocProperty.indexOf(this.getIdentifier())==0)
				{
					oDocument = this.documentList[oDocProperty];
					if (oDocument.data.urlSuffix == sUrlSuffix)
					{
						return oDocument;
					}
				}
			}
			return null;
	},
	
	getNewDocQualifier: function() {
		var iCptDOC;
		for ( iCptDOC=1 ; this.documentList[this.getIdentifier() + '_DOCQ' + iCptDOC] ; iCptDOC++ ) {};
		return this.getIdentifier() + '_DOCQ' + iCptDOC;
	},

	highlight: function()	{
		this.elem_close.style.visibility="visible"
		this.elem_webpartState.style.visibility="visible";
		if (hasUserRight(CONST_PrintItem_Access)) this.elem_printItems.style.visibility="visible";
		if (hasUserRight(CONST_WebQuery_Access)) this.elem_webQueryItems.style.visibility="visible";
		if (hasUserRight(CONST_PushItem_Access)) this.elem_pushItems.style.visibility="visible";
		if (hasUserRight(CONST_SendEmailItem_Access)) this.elem_sendMailItems.style.visibility="visible";
		this.elem_dependentItems.style.visibility=(this.elem_dependentItems.elem_menu.hasItems()?'visible':'hidden');
		if (hasUserRight(CONST_EditContent_Access)) this.elem_editItems.style.visibility="visible";
	},
	
	unHighlight: function()	{
	
		this.elem_close.style.visibility="hidden"
		this.elem_webpartState.style.visibility="hidden";
		if (hasUserRight(CONST_PrintItem_Access)) this.elem_printItems.style.visibility="hidden";
		if (hasUserRight(CONST_WebQuery_Access)) this.elem_webQueryItems.style.visibility="hidden";
		if (hasUserRight(CONST_PushItem_Access)) this.elem_pushItems.style.visibility="hidden";
		if (hasUserRight(CONST_SendEmailItem_Access)) this.elem_sendMailItems.style.visibility="hidden";
		this.elem_dependentItems.style.visibility="hidden";			
		if (hasUserRight(CONST_EditContent_Access)) this.elem_editItems.style.visibility="hidden";		
	},

	showEditToolbar: function()	{
		this.elem_close.style.display=(this.data.allowRemove!='0'?'':'none');
		this.elem_webpartState.style.display=(this.data.allowMinimize!='0'?'':'none');
		if (hasUserRight(CONST_PrintItem_Access)) this.elem_printItems.style.display="none";
		if (hasUserRight(CONST_WebQuery_Access)) this.elem_webQueryItems.style.display="none";
		if (hasUserRight(CONST_PushItem_Access)) this.elem_pushItems.style.display="none";
		if (hasUserRight(CONST_SendEmailItem_Access)) this.elem_sendMailItems.style.display="none";
		this.elem_dependentItems.style.display="none";
		if (hasUserRight(CONST_EditContent_Access)) this.elem_editItems.style.display=((this.elem_editItems.elem_menu.hasItems())?"":"none");
	},

	hideEditToolbar: function()	{
		this.elem_close.style.display="none";
		this.elem_webpartState.style.display=(this.data.allowMinimize!='0'?'':'none');
		if (hasUserRight(CONST_PrintItem_Access)) this.elem_printItems.style.display=((this.elem_printItems.elem_menu.hasItems() && !App.EditMode)?"":"none");
		if (hasUserRight(CONST_WebQuery_Access)) this.elem_webQueryItems.style.display=((this.elem_webQueryItems.elem_menu.hasItems() && !App.EditMode)?"":"none");
		if (hasUserRight(CONST_PushItem_Access)) this.elem_pushItems.style.display=((this.elem_pushItems.elem_menu.hasItems() && !App.EditMode )?"":"none");
		if (hasUserRight(CONST_SendEmailItem_Access)) this.elem_sendMailItems.style.display=((this.elem_sendMailItems.elem_menu.hasItems() && !App.EditMode )?"":"none");
		this.elem_dependentItems.style.display=((this.elem_dependentItems.exist)?"":"none");	
		if (hasUserRight(CONST_EditContent_Access)) this.elem_editItems.style.display="none";
	},
	
	onActiveTabChanged: function(qualifier, elem) {
		
/*		for (var D = 0, F; F = this.documentList[D]; D++) {
			F.hide();
		}
*/
		for (oDCProperty in this.documentList)
		{
			if (oDCProperty.substr(0,3)=="WPQ")
			{
				this.documentList[oDCProperty].hide();
			}
		}
	
		this.elem_dependentItems.elem_menu.removeAllMenuItem();
		this.documentList[qualifier].addDependentItemsToWebpart();			
		this.documentList[qualifier].show();
		this.elem_dependentItems.style.visibility = (this.elem_dependentItems.elem_menu.hasItems()?this.elem_webpartState.style.visibility:'hidden');
	},

	onCollapseExpand: function(e) {
		e = new Event(e).stop();
		var oIcon = $(this.elem_webpartState).getElement('img.icon');
		var iState;
		if (Element.hasClassName(oIcon, 'action-minimize'))
		{
			this.elem_webpartContent.style.display = 'none';
			iState = 0;
			Element.removeClassName(oIcon, 'action-minimize');
			Element.addClassName(oIcon, 'action-maximize');
			
		}
		else
		{
			this.elem_webpartContent.style.display = '';
			iState = 1;
			Element.removeClassName(oIcon, 'action-maximize');
			Element.addClassName(oIcon, 'action-minimize');
		}
		if (App.EditMode) 
		{
				var MyLayoutForm = App.createFormLayout();
				MyLayoutForm.elements['State'].value = iState;
				MyLayoutForm.elements['Cmd'].value = 'save_webpartstate';
				MyLayoutForm.elements['WebpartID'].value = this.data.urlSuffix;
				MyLayoutForm.set('send',{
					onFailure: function(jsonObj) {alert(_T('L_ErrorSavingWebpartState_Text'))},
					evalScripts: true
				});

				MyLayoutForm.send();
		}
	},

	onExpand: function() {
		if (App.EditMode) return;
		var oIcon = $(this.elem_webpartState).getElement('img.icon');
		var iState;
		if (!Element.hasClassName(oIcon, 'action-minimize'))
		{
			this.elem_webpartContent.style.display = '';
			iState = 1;
			Element.removeClassName(oIcon, 'action-maximize');
			Element.addClassName(oIcon, 'action-minimize');
		}
	},
	
	showPrintItemsMenu: function() {
		
	},
	
	onPrintItem: function() {
			if (document.getElementById('_FRMPRINTWP') == null || document.getElementById('_FRMPRINTWP')==undefined)
			{
				var strFrm = "<FORM id='_FRMPRINTWP' name='_FRMPRINTWP' Method='POST' target='_new' action='dcprint.asp?URLSUFFIX=" + URLEncode(this.data.urlSuffix) + "&WebpartQualifier=" + this.getIdentifier() + "'>"
				strFrm = strFrm + "</FORM>";
				var oForm = document.createElement(strFrm);
				
				var strInput = "<INPUT TYPE='HIDDEN' NAME='" + V_KEY_FORM + "' VALUE='" + V_VALUE_FORM + "' >";
				var oInput = document.createElement(strInput);
				oForm.appendChild(oInput);		
				
				strInput = "<INPUT TYPE='HIDDEN' ID='WPPrintDisplay' NAME='WPPrintDisplay' VALUE=''>";
				oInput = document.createElement(strInput);
				oForm.appendChild(oInput);
				document.body.appendChild(oForm);
			}
			document.getElementById('_FRMPRINTWP').action = "dcprint.asp?URLSUFFIX=" + URLEncode(this.data.urlSuffix) + "&WebpartQualifier=" + this.getIdentifier();
			document.getElementById('WPPrintDisplay').value = GetDashboardConfig('',this.getIdentifier());
			document.getElementById('_FRMPRINTWP').submit();			
	},

	onPushItem: function() {
			
	},
	
	onSendMailItem:function() {
		
	},
	
	showWebQueryItemsMenu: function() {
		
	},
	
	showSendMailItemsMenu: function() {
		
	},
	
	showDependentItemsMenu: function() {
		
	},
	
	showPushItemsMenu: function() {
		
	},
	
	onClosing: function(e) {
		e = new Event(e).stop();
		this.remove();
	},

	addDrag: function() {
			App.DragMe(this.elem_webpartHeader, this.elem_webpart, 
								function(){}, 
								function(){}, 
								function(itemId,parentId,order){
									var MyLayoutForm = App.createFormLayout();
									
									var oWebpart = App.getWebpartByUrlSuffix(itemId);
									if (oWebpart.data.zone == 'layouttoggleview' && parentId != 'layouttoggleview')
									{
										App.layoutManager.toggle.selectTab(oWebpart.getIdentifier());
										App.layoutManager.toggle.removeTab(oWebpart.getIdentifier());
									}
									
									MyLayoutForm.Cmd.value = 'orderwebpart';
									MyLayoutForm.WebpartID.value = itemId;
									MyLayoutForm.Zone.value = parentId;
									MyLayoutForm.Order.value = order;
									MyLayoutForm.UpdatePersonalization.value = oWebpart.data.canCustomization;
									
									MyLayoutForm.set('send',{
										onSuccess: function(jsonObj) {
																App.setWebpartOrders(Json.evaluate(jsonObj).urllist);
										},
										onFailure: function(jsonObj) {alert(_T('L_ErrorSavingPlacement_Text'))},
											evalScripts: true	});
									MyLayoutForm.send();
																	
								});
	},

	removeDrag: function() {
			App.RemoveDragMe(this.elem_webpartHeader);
	},
	
	setEditMode: function(editMode) {
		var oDocument,oDocProperty;
		
		if (editMode)
		{
			this.showEditToolbar();
			this.addDrag();
			this.elem_webpartTop.style.display = "";
			this.elem_panel.elem_slide.hide();
		}
		else {
			this.hideEditToolbar();
			this.elem_panel.hide();
			this.removeDrag();
			this.elem_webpartTop.style.display = (this.data.hasFrame == 0?"none":"");
			this.elem_panel.elem_slide.hide();
		}
			
		if (this.tabs)
		{
			if (editMode) this.tabs.addDrag();
			else this.tabs.remodeDrag();
		}
		else
		{
			for (oDocProperty in this.documentList)
			{
				if (oDocProperty.indexOf(this.getIdentifier())==0)
				{
					oDocument = this.documentList[oDocProperty];
					oDocument.setEditMode(editMode);
				}
			}
		}
	}
		
});


Activportal.UI.Scripts = new Class( {
	name: 'Activportal.UI.Scripts',
	Implements:[Events,Options],
	
	initialize: function(A) 
	{
      this.setOptions(A);
      this.ScriptList = new Array();
	},
	
	addScript: function(B,DC){
	
		var E=document.getElementsByTagName("head")[0];
		var C = null;
		if(!E){return false}
		var A=E.getElementsByTagName("script");
		if( Browser.Engine.name != 'trident' ) {
			B = B + '?timestamp=' + Math.random();
		}
		for(var D=0;D<A.length;D++)
		{
			//if(A[D].getAttribute("type")=="text/javascript"&&A[D].getAttribute("src")==B){
			if(A[D].getAttribute("type")=="text/javascript") {
				var sSrc = A[D].getAttribute("src");
				var iPos = sSrc.indexOf('?timestamp=');
				if (iPos >= 0) sSrc = sSrc.substr(0, sSrc.indexOf('?timestamp='));
				if (B.indexOf(sSrc)>=0){
						if( Browser.Engine.name != 'trident' ) {
							A[D].readyState = 'loaded';
						}
						C = A[D];
				}
			}
		}
		
		if (C == null)
		{
			var re = /\//gi;
			C=new Element("script", {"language":"JavaScript", "type":"text/javascript", "src":B, "id":B});	
			E.appendChild(C);
		}

		var callBackFct = B.substring(B.lastIndexOf('/')+1);
		callBackFct = callBackFct.substring(0,callBackFct.indexOf('.'));
		callBackFct = callBackFct + 'CallBack';
		if (typeof this.ScriptList[B] == 'undefined')
		{
				this.ScriptList[B] = new Object();
				this.ScriptList[B].script_elem = C;
				this.ScriptList[B].documents = new Array();
				var oScript = this;


				if (eval("typeof " + callBackFct) != 'undefined' && (Browser.Engine.name != 'trident'))
				{
						this.ScriptList[B].script_elem.readyState = 'loaded';
				}
				else
				{
						//if (typeof this.ScriptList[B].script_elem.readyState == 'undefined')
						if (Browser.Engine.name != 'trident')
						{
								C.addEvent('load', this.LoadDocumentsContentForLoad.bind(this,B));
						}
						else
						{
								C.addEvent('readystatechange', this.LoadDocumentsContentForReadyState.bind(this,B));
						}
				}
		}
		var i;
		for (i=0; i < this.ScriptList[B].documents.length ; i++)
		{
			if (this.ScriptList[B].documents[i] == DC) return C;
		}
		this.ScriptList[B].documents[this.ScriptList[B].documents.length] = DC;
		return C
	},

	LoadDocumentsContentForReadyState: function(A) {
		var oScript = this.ScriptList[A];
		if (oScript && (oScript.script_elem.readyState == 'loaded' || oScript.script_elem.readyState == 'complete')) {
			for (i=0; i < oScript.documents.length ; i++)
			{
				if (oScript.documents[i].waitingForLoad) oScript.documents[i].loadContent(true);
			}
		}
	},

	LoadDocumentsContentForLoad: function(A,B) {
		var oScript = this.ScriptList[A];
		if (typeof oScript.script_elem.readyState == 'undefined') oScript.script_elem.readyState = 'loaded';
		for (i=0; i < oScript.documents.length ; i++)
		{
			if (oScript.documents[i].waitingForLoad) oScript.documents[i].loadContent(true);
		}
	}

});

Activportal.UI.Document = new Class( {
	name: 'Activportal.UI.Document',
	Implements:[Events,Options],
	options: {
		reportingExecuteMode:0
		/*
		onLoadCompleted: $empty,
		onEventReceived: $empty
		*/
	},
	
	initialize: function(webPart, data, options) 
	{
		this.setOptions(options);
		this.webPart = webPart;
		this.loaded=false;
		this.loading=false;
		this.onqueue=false;
		this.hasChanged=false;
		this.visible=false;
		this.data = data;
		this.loadedScript = new Object();
		this.waitingForLoad = false;
		//this.waitingForRefreshContent = false;
		this.displayEditContentIcon = false;
		this.build();
		this.attachScript();
		this.attachCSS();
		
		this.options.reportingExecuteMode = this.data.criterions?( ( this.webPart && this.webPart.data.reportingExecuteMode ) || this.options.reportingExecuteMode ):1;
		
		var data = this.data;
		if( this.data.criterions  ) {
			CreateCriteriaManager((this.webPart != null )?this.webPart.getIdentifier():this.data.docQualifier ,this.data.docQualifier,this.data.urlSuffix,App.CHOICE_PROXY,null,false,this);
			this.data.criterions.each( function(elem){
				RegisterCriteria(data.docQualifier,elem.idCriterion,elem.idObject,elem.presentationType,elem.objectType,elem.operator,true);			
			});
			RegisterCriteriaManager(this.data.docQualifier);
		}
					
		if( this.data.events ) {
			this.initializeEventFunction();
		}

		if ( this.data.dashboards ) {
			this.loadContent();
		}

		if (typeof this.data.isNew != 'undefined' && this.data.isNew) {this.loadContent();this.data.isNew = false;};
	},
	
	initializeEventFunction: function() {
		var iEvent;
		
		var sFunctionName = '';
		var Me = this;

		for(iEvent=0; iEvent<this.data.events.length; iEvent++) {
			
			var Me = this;
			sFunctionName = 'proxyEvent_' + this.data.events[iEvent].eventName + '_' + String(iEvent);
			var oEvent = $extend({callBackFunctionName:sFunctionName, argsValue:null},this.data.events[iEvent]);
			
			
			this[sFunctionName] = getEventFunction(Me, oEvent);
			
			RegisterEvent(oEvent.eventNamespace,oEvent.eventName, this[sFunctionName]);
		}
		
	},
	
	getIdentifier: function() {
		return this.data.docQualifier;
	},
	
	build: function() {
		this.elem_content = new Element("div",{"class":"document"});
		this.elem_content.setAttribute("id", 'DocumentContent_' + this.data.docQualifier );
		this.elem_content.setAttribute("name", this.data.docQualifier);
		this.elem_content.name = this.data.docQualifier;

		if( this.data.height != undefined && this.data.height != '' ){
			this.elem_content.style.height = this.data.height
		} else {
			this.elem_content.style.height = '100%';
		}
							
		if( this.webPart ) {
		switch(this.webPart.data.viewType)
		{
			case 0 :
						this.elem_content.style.styleFloat = '';
						if (Browser.Engine.webkit) {}
						else this.elem_content.style.width = "100%";
						break;
			case 1 :
						this.elem_content.style.styleFloat = 'left';
						if( typeof this.data.width != 'undefined' && this.data.width != '' ){
							this.elem_content.style.width = this.data.width;
						} else {
							
							this.elem_content.style.width = 'auto';
						}
						break;
			case 2 :
						this.elem_content.style.styleFloat = '';
						if (Browser.Engine.webkit) {}
						else this.elem_content.style.width = "100%";
						break;
		}
		}
		
		if( this.options.width ) {
			
			this.elem_content.style.width = this.options.width;
		}
		
		var Me = this;
		if (App.EditMode) this.addDrag();

		//this.hide();

		if ( this.webPart && hasUserRight(CONST_PrintItem_Access) && this.data.isPrintable == 1)
				this.webPart.elem_printItems.elem_menu.addMenuItem(this.data.docQualifier,this.data.urlSuffix,this.data.itemCaption,-1, this.onPrintItem.bind(this));

		if (this.webPart && hasUserRight(CONST_WebQuery_Access) && this.data.isWebQueriable == 1)
				this.webPart.elem_webQueryItems.elem_menu.addMenuItem(this.data.docQualifier,this.data.urlSuffix,this.data.itemCaption,-1, this.onWebQuery.bind(this));

		if (this.webPart && hasAccessRight(this,CONST_ACCESS_UPDATE))
		{
				this.webPart.elem_editItems.elem_menu.addMenuItem(this.data.docQualifier,this.data.urlSuffix,this.data.itemCaption,-1, this.onEditProperties.bind(this));
		}
		if (hasUserRight(CONST_EditContent_Access) && hasAccessRight(this,CONST_ACCESS_EDITCONTENT))
		{
				RegisterEvent('www.activportal.mc:Editor','SaveCompleted',this.refreshContentEditor.bind(this),this.data.docQualifier);
				RegisterEvent('www.activportal.mc:Editor','UndoCheckout',this.undoCheckout.bind(this));
				RegisterEvent('www.activportal.mc:Document','ContentRefresh',this.loadContent.bind(this,true),this.data.docQualifier);
		}
		RegisterEvent('www.activportal.mc:Document','onExpandWebpart',this.onExpandWebpart.bind(this),this.data.docQualifier);
		
		//if (this.webPart && hasUserRight(CONST_EditContent_Access) && hasAccessRight(this,CONST_ACCESS_UPDATE))
		//{
		//	this.webPart.elem_editItems.elem_menu.addMenuItem(this.data.docQualifier,this.data.urlSuffix,this.data.itemCaption,-1, this.onEditProperties.bind(this));
		//	if (hasAccessRight(this,CONST_ACCESS_EDITCONTENT))
		//	if (hasUserRight(CONST_EditContent_Access) && hasAccessRight(this,CONST_ACCESS_EDITCONTENT))
		//	{
		//		RegisterEvent('www.activportal.mc:Editor','SaveCompleted',this.refreshContentEditor.bind(this),this.data.docQualifier);
		//		RegisterEvent('www.activportal.mc:Editor','UndoCheckout',this.undoCheckout.bind(this));
		//		RegisterEvent('www.activportal.mc:Document','ContentRefresh',this.loadContent.bind(this,true),this.data.docQualifier);
		//	}
		//}
		
		if ( this.webPart && !this.webPart.hasTab())
		{
			this.addDependentItemsToWebpart();
		}
		if (typeof this.data.dependentItems != 'undefined' && this.data.dependentItems.length > 0 && this.webPart) this.webPart.elem_dependentItems.exist = true;
	},
	
	addDependentItemsToWebpart:function() {
		if (typeof this.data.dependentItems != 'undefined' && this.data.dependentItems.length > 0)
		{
			for (var iCptDI = 0 ; iCptDI < this.data.dependentItems.length ; iCptDI++ )
			{
				var oDependentItem = new Object();
				oDependentItem.urlSuffix = this.data.dependentItems[iCptDI].urlSuffix;
				oDependentItem.docType = this.data.dependentItems[iCptDI].docType;
				this.webPart.elem_dependentItems.elem_menu.addMenuItem(this.data.docQualifier + '_' + iCptDI,oDependentItem.urlSuffix,this.data.dependentItems[iCptDI].itemCaption,-1, this.onDisplayDependentItem.bind(this, oDependentItem));
			}
		}
	},
		
	removeDependentItemsFromWebpart: function() {
		if (typeof this.data.dependentItems != 'undefined' && this.data.dependentItems.length > 0)
		{
			for (var iCptDI = 0 ; iCptDI < this.data.dependentItems.length ; iCptDI++ )
			{
				this.webPart.elem_dependentItems.elem_menu.removeMenuItem(this.data.docQualifier + '_' + iCptDI);
			}
		}
	},
	
	remove: function() {
			var oResponse = confirm(_T('L_ConfirmDocumentRemoval_Text'));
			if (oResponse)
				new Request().addEvent("onComplete", this.destroy.bind(this)).addEvent("onFailure",this.onErrorAlert.bind(this)).get(App.CATALOG_PROXY + '?cmd=delete&documentid=' + this.data.urlSuffix);
	},
	
	destroy: function() {
		var DOCQ = this.data.docQualifier;
		var oWebpartContent = this.webPart.elem_webpartContent;

		if (this.webPart.elem_editItems) this.webPart.elem_editItems.elem_menu.removeMenuItem(this.data.docQualifier);
		if (hasUserRight(CONST_EditContent_Access) && hasAccessRight(this,CONST_ACCESS_UPDATE) && hasAccessRight(this,CONST_ACCESS_EDITCONTENT))
		{
				UnRegisterEvent('www.activportal.mc:Document','onExpandWebpart',this.onExpandWebpart.bind(this),this.data.docQualifier);
				UnRegisterEvent('www.activportal.mc:Editor','SaveCompleted',this.refreshContentEditor.bind(this),this.data.docQualifier);
				UnRegisterEvent('www.activportal.mc:Editor','UndoCheckout',this.undoCheckout.bind(this));
				UnRegisterEvent('www.activportal.mc:Document','ContentRefresh',this.loadContent.bind(this,true),this.data.docQualifier);
		}

		if (this.webPart.elem_pushItems) this.webPart.elem_pushItems.elem_menu.removeMenuItem(this.data.docQualifier);
		if (this.webPart.elem_sendMailItems) this.webPart.elem_sendMailItems.elem_menu.removeMenuItem(this.data.docQualifier);
		if (this.webPart.elem_printItems) this.webPart.elem_printItems.elem_menu.removeMenuItem(this.data.docQualifier);
		if (this.webPart.elem_webQueryItems) this.webPart.elem_webQueryItems.elem_menu.removeMenuItem(this.data.docQualifier);
		if (this.webPart.elem_dependentItems) {
			
			this.removeDependentItemsFromWebpart();
		}


		this.elem_content.removeNode(true);
		Hash.remove(this, 'elem_content');
		Hash.remove(this.webPart.documentList, DOCQ);
	},

	onErrorAlert: function(content)
	{
		alert(content.responseText);
	},

	getContent: function() {
		if(! this.elem_content ) this._create();
		return this.elem_content;
	},
	
	isSkinTemplateCSS:function(DocTypeName){
		if( typeof App.Skin != 'undefined' && App.Skin != null && typeof App.Skin.CssTemplates != 'undefined' && App.Skin.CssTemplates != null )
		{
			for(var i=0; i<App.Skin.CssTemplates.length; i++)	{
				if ( App.Skin.CssTemplates[i] == DocTypeName) return true;				
			}
		}
		return false;
	},	
	
	attachCSS:function(){
		if( this.data.css )
		{
			for(var i=0; i<this.data.css.length; i++)	{
				if (this.isSkinTemplateCSS(this.data.docTypeName))
				{
					App.insertCssFile(App.getStaticUrl(App.Skin.path + '/' + this.data.css[i]));
				}
				else
				App.insertCssFile(App.getStaticUrl(this.data.css[i]));
			}
		}
	},
	
	attachScript:function(){
		if( this.data.script )
		{
			this.loadedScript.completed = false;
			for(var i=0; i<this.data.script.length; i++)	{
				//var oScript = App.insertJavascriptFile(App.getStaticUrl(this.data.script[i]),i);
				var oScript = App.ScriptsManager.addScript(App.getStaticUrl(this.data.script[i]),this);
				this.loadedScript[i] = oScript;
				//var oDoc = this;
				//if (this.loadedScript[i] && this.loadedScript[i].readyState != 'loaded') {
				//	this.loadedScript[i].onreadystatechange = function () {
				//			if (oDoc.waitingForLoad) oDoc.loadContent(true);
				//	}
				//}
			}
			this.loadedScript.completed = true;
		}
	},	

	checkScriptLoading: function(e) {
		if (typeof this.data.script == 'undefined') return true;
		
		for(var i=0; i<this.data.script.length; i++)	{
				if (this.loadedScript[i] != null && this.loadedScript[i].readyState != 'loaded' && this.loadedScript[i].readyState != 'complete') return false;
		}
		
		return this.loadedScript.completed;
	},
	
	onEditProperties: function(e) {
		var Me = this;
		this.webPart.elem_panel.show(this.data.urlSuffix, function(){}, 
																						function(cmd, oForm){
																							switch(cmd) {
																								case 'delete_document':
																											var oResponse = confirm(_T('L_ConfirmDocumentRemoval_Text') + '\'' + Me.data.itemCaption + '\'');
																											if (oResponse) return true;
																											return false
																											break;
																							}
																						}, 
																						function(cmd, oForm){
																							switch(cmd) {
																								case 'save_properties' :
																											Me.data.itemCaption = oForm.elements['Caption' + oForm.elements['DataLanguage'].value].value;
																											Me.data.isPushable = eval(oForm.elements['IsPushable'].value);
																											Me.data.isPrintable = oForm.elements['IsPrintable'].checked?1:0;
																											if (typeof oForm.elements['IsWebQueriable'] != 'undefined' && oForm.elements['IsWebQueriable'] != null)
																												Me.data.isWebQueriable = oForm.elements['IsWebQueriable'].checked?1:0;
																											if (oForm.elements['Width'])
																												if (oForm.elements['Width'].value == parseFloat(oForm.elements['Width'].value) && oForm.elements['Width'].value.length > 0) 
																													Me.data.width = oForm.elements['Width'].value + oForm.elements['WidthUnitType'].value;
																												else
																													Me.data.width = '';
																													
																											if (oForm.elements['Height'])
																												if (oForm.elements['Height'].value == parseFloat(oForm.elements['Height'].value) && oForm.elements['Height'].value.length > 0) 
																													Me.data.height = oForm.elements['Height'].value + oForm.elements['HeightUnitType'].value;
																												else
																													Me.data.height = '';
																											Me.refreshDesign();
																											break;
																								case 'delete_document':
																											Me.webPart.elem_panel.hide();
																											Me.webPart.removeDocument(Me.data.docQualifier);
																											break;
																								case 'edit_content':
																												switch(Me.data.docTypeName)
																												{
																													case 'HTMLDocument':
																														fnWindowOpen('htmleditor.asp?DOCQ=' + Me.data.docQualifier + '&documentid=' + URLEncode(Me.data.urlSuffix),'Edit','800','500','no','yes');
																														break;
																													default:
																														fnWindowOpen('Editor.asp?DOCQ=' + Me.data.docQualifier + '&documentid=' + URLEncode(Me.data.urlSuffix),'Edit','800','500','no','yes');
																														break;
																													
																												}																													
																											break;
																							}
																						}, 
																						this.data.DocQualifier);
	},

	refreshDesign: function() {
		// WEB QUERY		
		if (hasUserRight(CONST_WebQuery_Access))
		{ 
				if (this.data.isWebQueriable == 1)
						this.webPart.elem_webQueryItems.elem_menu.addMenuItem(this.data.docQualifier,this.data.urlSuffix,this.data.itemCaption,-1, this.onWebQuery.bind(this));
				else
						this.webPart.elem_webQueryItems.elem_menu.removeMenuItem(this.data.docQualifier);
		}
				
		// PUSH
		if (hasUserRight(CONST_PushItem_Access))
		{
				if (this.data.isPushable == 1 || this.data.isPushable == 3)
						this.webPart.elem_pushItems.elem_menu.addMenuItem(this.data.docQualifier,this.data.urlSuffix,this.data.itemCaption,-1, this.onPushItem.bind(this));
				else
						this.webPart.elem_pushItems.elem_menu.removeMenuItem(this.data.docQualifier);
		}

		// SEND MAIL
		if (hasUserRight(CONST_SendEmailItem_Access))
		{
				if (this.data.isPushable == 2 || this.data.isPushable == 3)
						this.webPart.elem_sendMailItems.elem_menu.addMenuItem(this.data.docQualifier,this.data.urlSuffix,this.data.itemCaption,-1, this.onSendMailItem.bind(this));
				else
						this.webPart.elem_sendMailItems.elem_menu.removeMenuItem(this.data.docQualifier);
		}
		
		// PRINT
		if (hasUserRight(CONST_PrintItem_Access))
		{
				if (this.data.isPrintable == 1)
						this.webPart.elem_printItems.elem_menu.addMenuItem(this.data.docQualifier,this.data.urlSuffix,this.data.itemCaption,-1, this.onPrintItem.bind(this));
				else
						this.webPart.elem_printItems.elem_menu.removeMenuItem(this.data.docQualifier);
		}
		
		if (hasUserRight(CONST_EditContent_Access) && hasAccessRight(this,CONST_ACCESS_UPDATE))
		{
			this.webPart.elem_editItems.elem_menu.renameMenuItem(this.data.docQualifier,this.data.itemCaption);
		}		

		if (this.webPart.tabs) this.webPart.tabs.renameTab(this.data.docQualifier, this.data.itemCaption);
		
		if(typeof this.data.height != 'undefined')
			if (this.data.height != this.elem_content.style.height) 
			{
				this.elem_content.style.height = this.data.height
			} 
			else {
				this.elem_content.style.height = '100%';
			}


		if(typeof this.data.width != 'undefined')
		{
			switch(this.webPart.data.viewType)
			{
				case 0 :
							this.elem_content.style.styleFloat = '';
							this.elem_content.style.width = "100%";
							break;
				case 1 :
							this.elem_content.style.styleFloat = 'left';
							if( typeof this.data.width != 'undefined' && this.data.width != '' ){
								this.elem_content.style.width = this.data.width;
							} else {
								this.elem_content.style.width = 'auto';
							}
							break;
				case 2 :
							this.elem_content.style.styleFloat = '';
							this.elem_content.style.width = "100%";
							break;
			}
		}
		
		this.refreshContent(true);
		
	},
	
	onPrintItem: function() {
		window.open('dcprint.asp?URLSUFFIX=' + URLEncode(this.data.urlSuffix) + '&DocumentQualifier=' + this.data.docQualifier,'Print','menubar=yes,width=800,height=400,scrollbars=yes,resizable=yes,toolbars=yes').focus();
	},
	
	onWebQuery: function() {
		window.open('WebQueryOption.asp?DocumentQualifier=' + this.data.docQualifier + '&URLSuffix=' + URLEncode(this.data.urlSuffix),'WebQuery',"height=120,width=500,titlebar=no,status=no,toolbar=no,menubar=no,location=no,resizable=no").focus();	
	},
	
	onPushItem: function() {
		window.open("userPushList.asp?DocumentID=" + URLEncode(this.data.urlSuffix) + "&DocQualifier=" + this.data.docQualifier,'PushDefinition','width=800,height=400,scrollbars=yes,resizable=no,toolbars=no').focus();
	},
	
	onSendMailItem:function() {
		window.open("SendMail.asp?DocumentID=" + URLEncode(this.data.urlSuffix) + "&DocQualifier=" + this.data.docQualifier,'PushDefinition','width=800,height=400,scrollbars=yes,resizable=no,toolbars=no').focus();
	},
	
	onDisplayDependentItem: function(dependentItem) {
		switch(dependentItem.docType)
		{
			case 'webpart':
											OpenWebpart(dependentItem.urlSuffix,this.data.docQualifier,this.data.urlSuffix);
											break;
			case 'document':
											OpenDocument(dependentItem.urlSuffix,this.data.docQualifier,this.data.urlSuffix);
											break;
		}
	},
	
	unload:function(){
		delete this.elem_content;
		if(this){delete this}
	},

	loadContent:function(fReload)
	{
			if (!this.checkScriptLoading())
			{
				this.waitingForLoad = true;
				return false;
			}
			//alert(this.data.docQualifier);
			this.waitingForLoad = false;
			if(!fReload && (this.loaded||this.loading)) { return; }
			if(	!this.elem_content){this.build();}
			this.loading=true;

			var iWidth = '';
			
			if( this.elem_content.getSize ) iWidth = this.elem_content.getSize().x;
			if (typeof iWidth == 'undefined') iWidth = '';
			if( iWidth == '' && this.options.width != undefined ) iWidth = this.options.width;
if (iWidth != null)
iWidth = iWidth.toString().replace("%","%25");
			//Element.wait(this.elem_content,new Request({evalScripts:true}).addEvent("onComplete", this.onLoadContent.bind(this)).addEvent("onFailure",this.onErrorLoadContent.bind(this)).get(App.CATALOG_PROXY + '?EditMode=' + ((this.displayEditContentIcon && App.EditMode)?'1':'0') + '&cmd=Getdocument&DOCQualifier=' + this.data.docQualifier + '&DocumentID=' + this.data.urlSuffix + "&ReportingExecuteMode=" + this.options.reportingExecuteMode + "&width=" + iWidth + "&" + Dashboard.GetParametersQueryString()));
			
			var params = ''
			if( this.data.criterions && this.data.criterions.length>0 ) {
				params = 'criterionlist=' + URLEncode(GetCriteriaManager(this.data.docQualifier).GetXml()) + '&';
			}
			
			params += 'EditMode=' + ((this.displayEditContentIcon && App.EditMode)?'1':'0') + '&ReportingExecuteMode=' + this.options.reportingExecuteMode + '&width=' + iWidth + '&' + Dashboard.GetParametersQueryString()
			
			Element.wait(this.elem_content,new App.CatalogProviderRequest().addEvent("onComplete", this.onLoadContent.bind(this)).addEvent("onFailure",this.onErrorLoadContent.bind(this)).getDocument(this.data.urlSuffix,this.data.docQualifier,params,(this.webPart)?this.webPart.getIdentifier():null));
			//this.elem_content.innerHTML = "<DIV ID='ReportContent_WPQ9_DOCQ1'></DIV>"
	},
	
	enableEditContentIcon: function() {
		if (!this.displayEditContentIcon) {
			RegisterEvent('www.activportal.mc:Document','EditMode', this.LoadDisplayDocumentContent.bind(this));
			this.displayEditContentIcon = true;
		}
	},
	
	LoadDisplayDocumentContent: function() {
		this.loadContent(true);
	},
	
	onErrorLoadContent: function(content)
	{
		this.elem_content.innerHTML = content.responseText;
		
	},
	
	onExpandWebpart: function() {
		this.webPart.onExpand();
	},
	
	onLoadContent: function(content)
	{
		
		if( content == undefined ) return;
		this.elem_content.innerHTML = content

		//document.getElementById("ReportContent_WPQ9_DOCQ1").innerHTML = content
		RaiseEvent("www.activportal.mc:Document","onload",this.getIdentifier(),this.getIdentifier());
		this.loaded = true;
		if( this.raiseEventInQueue ) {
			this[this.raiseEventInQueue.callBackFunctionName](this.raiseEventInQueue.argsValue);
		}

		if( this.data.dashboards && this.data.dashboards.length>0  ) {
			var data = this.data;
			var WP = this.webPart;
			this.data.dashboards.each( function(elem) {
				CreateEventObjectManager((WP != null )?WP.getIdentifier():data.docQualifier,data.docQualifier,data.docQualifier + '_DB' + elem.position);
				RegisterEventObject(data.docQualifier + '_DB' + elem.position,'[IGNORED_ALL]','[IGNORED_ALL]');
				elem.events.each( function(item) {
					RegisterEventObject(data.docQualifier + '_DB' + elem.position, item.objectID,item.objectLabel);
				});
				RegisterEventObjectManager(data.docQualifier + '_DB' + elem.position);
				GetEventObjectManager(data.docQualifier + '_DB' + elem.position).Refresh();
				if (!WP.tabs || (WP.tabs && WP.tabs.selectedTab.getAttribute("name") == data.docQualifier))
				{
					if (elem.position == 1)
						TabStrip_ChangeTab(data.docQualifier,data.docQualifier + '_DB' + elem.position);
				}
			});
		}

		if (this.hasChanged || this.options.reportingExecuteMode==0 ) //|| ( this.webPart && this.webPart.data.reportingExecuteMode == 0)
		{
			
			this.hasChanged = false;
			this.refreshContent(false,true);
		}
		if (typeof(App.setToggleDisplay) != 'undefined') App.setToggleDisplay(this.data.docQualifier);
		
		this.fireEvent('onLoadComplete',this);
		
	},
	
	refreshContentEditor: function(args) {
		//if (args['URLSuffix'] == this.data.urlSuffix) 
		//{
			//if (this.data.isNew)
			new Request()
						.addEvent("onSuccess", this.onValidateDocument.bind(this))
						.addEvent("onFailure",this.onErrorAlert.bind(this))
						.get('ValidateDocument.asp?documentid=' + URLEncode(args['URLSuffix']));//+ URLEncode(this.data.urlSuffix));
			//else
			//	new Request().addEvent("onComplete", this.refreshContent.bind(this, true)).addEvent("onFailure",this.onErrorAlert.bind(this)).get('ValidateDocument.asp?documentid=' + URLEncode(this.data.urlSuffix));				
		//}
	},

	onValidateDocument: function() {
		var Me = this;
		var request = new Json.Remote(App.CATALOG_PROXY + '?cmd=getjson_document&urlsuffix=' + URLEncode(this.data.urlSuffix),{method:'get'})
				.addEvent("onSuccess", function(jSonObject){
																			Me.onRefreshContentEditor(jSonObject)
																})
				.addEvent("onFailure", this.onErrorAlert.bind(this))
				.send();
	},

	onRefreshContentEditor: function(A) {
		if (!A) return;
		A.document.docQualifier = this.data.docQualifier;
		this.data = A.document;
		this.show(true);
		//this.refreshContent(true);
	},

	undoCheckout: function(args) {
		if (args['URLSuffix'] == this.data.urlSuffix) 
			new Request().addEvent("onFailure",this.onErrorAlert.bind(this)).get('ValidateDocument.asp?UndoCheckout=1&documentid=' + URLEncode(this.data.urlSuffix));
		//UnRegisterEvent('www.activportal.mc:Editor','SaveCompleted',this.refreshContentEditor.bind(this));
	},

	resizing: function() {
		if( this.visible && this.data.docTypeName == 'SQLVisionGraph' ) {	
			this.refreshContent();
		}
	},
	
	refreshContent: function(fReload,fRefreshOnLoad) {
		if(!fReload && (!this.visible || !this.data.refreshContent) ) return;
		if( fReload || !this.loaded ) 
		{
			if (fReload) this.hasChanged = true;
			this.loadContent(fReload);
			return;
		}
		
		if( this.data.dashboards && this.data.dashboards.length>0  ) {
			var evt = new Object();
			evt.DocumentQualifier = this.data.docQualifier;
			var data = this.data;
			this.data.dashboards.each( function(elem) {
				if (GetEventObjectManager(data.docQualifier + '_DB' + elem.position) != null) GetEventObjectManager(data.docQualifier + '_DB' + elem.position).SetTabActive();
				GetEventObjectManager(data.docQualifier + '_DB' + elem.position).RefreshIfChanged(evt);
			});
		}
		
		if( this.data.criterions && this.data.criterions.length>0 ) {

			if (fRefreshOnLoad) {
			//if ( ( this.options.reportingExecuteMode && this.options.reportingExecuteMode!=0 ) || ( this.webPart && this.webPart.data.reportingExecuteMode != 0)) {
				if ( this.options.reportingExecuteMode!=0 ) {
					GetCriteriaManager(this.data.docQualifier).ClearContent();
					var iWidth = (this.elem_content.offsetWidth<80)?80:this.elem_content.offsetWidth;
					var iHeight = (this.elem_content.offsetHeight<50)?50:this.elem_content.offsetHeight;
					GetCriteriaManager(this.data.docQualifier).Refresh(iWidth,iHeight);
				}
			}
			else
			{
				var iWidth = (this.elem_content.offsetWidth<80)?80:this.elem_content.offsetWidth;
				var iHeight = (this.elem_content.offsetHeight<50)?50:this.elem_content.offsetHeight;
				var evt = new Object();
				evt.DocumentQualifier = this.data.docQualifier;
				GetCriteriaManager(this.data.docQualifier).RefreshIfChanged(evt,iWidth,iHeight);
			}
		}		
	},
	
 	hide : function () {
  	Element.hide(this.elem_content)
  	this.visible = false;
  }, 
  
  show : function (fReload) 
  {
		if( this.visible && !fReload ) return;
		  	
  	if( this.webPart.tabs  )
  	{
  		if( this.webPart.tabs.selectedTab.getAttribute("name") == this.data.docQualifier )
  		{
  			Element.show(this.elem_content);
  			this.visible = true;
  			this.refreshContent(fReload);

  		}
  	}
  	else
  	{
			Element.show(this.elem_content);
			this.visible = true;
			this.refreshContent(fReload);
		}
  }, 
	 	
 	appendTo : function (A) {
      if (!this.elem_content) {
          this._create()
      }

			var i;
			for ( i = 0 ; i < $(A).getChildren().length ; i++ )
			{
				if ($(A).getChildren()[i].id != 'moduleGhost' && this.webPart.documentList[$(A).getChildren()[i].name].data.itemOrder >= this.data.itemOrder)
				{
					this.elem_content.injectBefore($(A).getChildren()[i]);
					i = $(A).getChildren().length;
					return;
				}
			}
			A.appendChild(this.elem_content);
  },
  
  movePosition : function(order) {
  		var A = this.webPart.elem_webpartContent;
			for ( i = 0 ; i < $(A).getChildren().length ; i++ )
				if ($(A).getChildren()[i].id != 'moduleGhost' && this.webPart.documentList[$(A).getChildren()[i].name].data.itemOrder >= order)
				{
					this.elem_content.injectBefore($(A).getChildren()[i]);
					i = $(A).getChildren().length;
					return;
				}
			A.appendChild(this.elem_content);  	
  },	
	
	addDrag: function() {
			var Me = this;
	    App.DragMe(this.elem_content, this.elem_content, function(){}, function(){}
									, function(itemId,parentId,order){
													var MyLayoutForm = App.createFormLayout();
													MyLayoutForm.Zone.value = '';
													MyLayoutForm.Order.value = order;
													var oWebpart = App.getWebpartByUrlSuffix(parentId);
													MyLayoutForm.Cmd.value = 'orderdocument';
													MyLayoutForm.WebpartID.value = '';
													MyLayoutForm.DocumentID.value = Me.data.urlSuffix;
													MyLayoutForm.ContentClass.value = '';
													MyLayoutForm.set('send',{
														onSuccess: function(jsonObj) {
																				var docJson = Json.evaluate(jsonObj).document;
																				Me.movePosition(order);
																				Me.webPart.setDocumentOrders(Json.evaluate(jsonObj).urllist);
														},
														onFailure: function(jsonObj) {alert(_T('L_ErrorSavingPlacement_Text'))},
														evalScripts: true
													});
	
													MyLayoutForm.send();
										}
			);		
	},
	
	removeDrag: function() {
			App.RemoveDragMe(this.elem_content);
	},
		
	setEditMode: function(editMode) {
		if (editMode) this.addDrag();
		else this.removeDrag();
		RaiseEvent('www.activportal.mc:Document','setEditMode',(editMode?1:0),this.data.docQualifier);
	}	
	
});



function _T(skey)
{
	try {
		var slabel = App.languages[skey];
		if( slabel == undefined ) slabel = skey;
		return slabel;
	}
	catch(e) {
		return skey;
	}
}


		
var App={}
App.webpartList = [];
App.documentList = [];

App.layoutManager = null;

App.createFormLayout= function() {
	if ($('_FRMSAVELAYOUT') == null)
	{
		var strFrm = "<FORM id='_FRMSAVELAYOUT' name='_FRMSAVELAYOUT' Method='POST' action='CatalogProviderV2.asp?DashboardID=" + URLEncode(App.data.urlSuffix) + "'>"
		strFrm = strFrm + "</FORM>";
		var oForm = document.createElement(strFrm);
		
		var strInput = "<INPUT TYPE='HIDDEN' NAME='" + V_KEY_FORM + "' VALUE='" + V_VALUE_FORM + "' >";
		var oInput = document.createElement(strInput);
		oForm.appendChild(oInput);		
		
		strInput = "<INPUT TYPE='HIDDEN' ID='Cmd' NAME='Cmd' VALUE=''>";
		oInput = document.createElement(strInput);
		oForm.appendChild(oInput);

		strInput = "<INPUT TYPE='HIDDEN' ID='WebpartID' NAME='WebpartID' VALUE=''>";
		oInput = document.createElement(strInput);
		oForm.appendChild(oInput);

		var strInput = "<INPUT TYPE='HIDDEN' ID='DocumentID' NAME='DocumentID' VALUE='' >";
		var oInput = document.createElement(strInput);
		oForm.appendChild(oInput);		

		var strInput = "<INPUT TYPE='HIDDEN' ID='wpQualifier' NAME='wpQualifier' VALUE='' >";
		var oInput = document.createElement(strInput);
		oForm.appendChild(oInput);		

		var strInput = "<INPUT TYPE='HIDDEN' ID='ContentClass' NAME='ContentClass' VALUE='' >";
		var oInput = document.createElement(strInput);
		oForm.appendChild(oInput);		

		var strInput = "<INPUT TYPE='HIDDEN' ID='Zone' NAME='Zone' VALUE='' >";
		var oInput = document.createElement(strInput);
		oForm.appendChild(oInput);		

		var strInput = "<INPUT TYPE='HIDDEN' ID='Order' NAME='Order' VALUE='' >";
		var oInput = document.createElement(strInput);
		oForm.appendChild(oInput);		

		var strInput = "<INPUT TYPE='HIDDEN' ID='UpdatePersonalization' NAME='UpdatePersonalization' VALUE='' >";
		var oInput = document.createElement(strInput);
		oForm.appendChild(oInput);
		
		var strInput = "<INPUT TYPE='HIDDEN' ID='State' NAME='State' VALUE='' >";
		var oInput = document.createElement(strInput);
		oForm.appendChild(oInput);		

		document.body.appendChild(oForm);
	}
	return $('_FRMSAVELAYOUT');
};

App.createFormCaption= function() {
	if ($('_FRMSAVECAPTION') == null)
	{
		var oForm = new Element("FORM");
		oForm.setAttribute("id","_FRMSAVECAPTION");
		oForm.setAttribute("name","_FRMSAVECAPTION");
		oForm.setAttribute("method","POST");
		oForm.setAttribute("action","CatalogProviderV2.asp?DashboardID=" + URLEncode(App.data.urlSuffix));
				
		var oInputCSF = new Element("INPUT", {"type":"hidden"});
		oInputCSF.setAttribute("name",V_KEY_FORM);
		oInputCSF.setAttribute("value",V_VALUE_FORM);
		oInputCSF.inject(oForm);
		Garbage.trash(oInputCSF);
		
		var oInputCaption = new Element("INPUT", {"type":"hidden"});
		oInputCaption.setAttribute("id","CaptionItemCaption");
		oInputCaption.setAttribute("name","Caption");
		oInputCaption.inject(oForm);
		Garbage.trash(oInputCaption);
	
		var oInputUrl = new Element("INPUT", {"type":"hidden"});
		oInputUrl.setAttribute("id","CaptionUrlSuffix");
		oInputUrl.setAttribute("name","urlSuffix");
		oInputUrl.inject(oForm);
		Garbage.trash(oInputUrl);
	
		var oInputCmd = new Element("INPUT", {"type":"hidden"});
		oInputCmd.setAttribute("name","Cmd");
		oInputCmd.setAttribute("value","update_caption");
		oInputCmd.inject(oForm);
		Garbage.trash(oInputCmd);
	
		document.body.appendChild(oForm);
		Garbage.trash(oForm);
	}
	return $('_FRMSAVECAPTION');
};


App.createFormGlobalSearch= function() {
	if ($('_FRMGLOBALSEARCH') == null)
	{
		var oForm = new Element("FORM");
		oForm.setAttribute("id","_FRMGLOBALSEARCH");
		oForm.setAttribute("name","_FRMGLOBALSEARCH");
		oForm.setAttribute("method","POST");
		oForm.setAttribute("action","SearchItems.asp");
				
		var oInputCSF = new Element("INPUT", {"type":"hidden"});
		oInputCSF.setAttribute("name",V_KEY_FORM);
		oInputCSF.setAttribute("value",V_VALUE_FORM);
		oInputCSF.inject(oForm);
		Garbage.trash(oInputCSF);
		
		var oInputSearchUrlSuffix = new Element("INPUT", {"type":"hidden"});
		oInputSearchUrlSuffix.setAttribute("id","SearchUrlSuffix");
		oInputSearchUrlSuffix.setAttribute("name","SearchUrlSuffix");
		oInputSearchUrlSuffix.inject(oForm);
		Garbage.trash(oInputSearchUrlSuffix);
	
		var oInputSearchModel = new Element("INPUT", {"type":"hidden"});
		oInputSearchModel.setAttribute("id","SearchModel");
		oInputSearchModel.setAttribute("name","SearchModel");
		oInputSearchModel.inject(oForm);
		Garbage.trash(oInputSearchModel);

		var oInputNamespace = new Element("INPUT", {"type":"hidden"});
		oInputNamespace.setAttribute("id","Namespace");
		oInputNamespace.setAttribute("name","Namespace");
		oInputNamespace.inject(oForm);
		Garbage.trash(oInputNamespace);
	
		document.body.appendChild(oForm);
		Garbage.trash(oForm);
	}
	return $('_FRMGLOBALSEARCH');
};

App.insertJavascriptFile = function(B,D){
	
	var E=document.getElementsByTagName("head")[0];
	if(!E){return false}
	var A=E.getElementsByTagName("script");
	for(var D=0;D<A.length;D++)
	{
		if(A[D].getAttribute("type")=="text/javascript"&&A[D].getAttribute("src")==B){
			return null;
		}
	}
	//var re = /\//gi;
	var C=new Element("script", {"language":"JavaScript", "type":"text/javascript", "src":B, "id":B});
	//C.setAttribute("language","JavaScript");
	//C.setAttribute("type","text/javascript");
	//C.setAttribute("src",B);

	E.appendChild(C);
	return C
};

App.insertCssFile=function(B,A)
{
		var E=document.getElementsByTagName("head")[0];
	if(!E){return false}
	var A=E.getElementsByTagName("link");
	for(var D=0;D<A.length;D++){if(A[D].getAttribute("type")=="text/css"&&A[D].getAttribute("href")==B){return false}}
		var C=document.createElement("link");
		C.setAttribute("type","text/css");
		C.setAttribute("rel","stylesheet");
		C.setAttribute("href",B);
		E.appendChild(C);
		return C
	
};

App.getStaticUrl = function(A) {
	return App.AP_URL + A;
}

App.CheckApplicationDomain = function(url) {
	var splitDomain;
	
	
	if( !App.UsePostMessage ) {	
	if( window.parent != window ) {
		if( window.parent.App != undefined ) {
			window.parent.App.CheckApplicationDomain(url);
		}			
	}
	
	if( window.opener != undefined && window.opener != null ) {
		if( window.opener.App != undefined ) {
			window.opener.App.CheckApplicationDomain(url);
		}	
	}
	

		splitDomain = url.split('/')[2];
		if( splitDomain != App.Domain ) {
			var dotArray = App.Domain.split('.');
			if( dotArray.length > 2 )
				document.domain = App.Domain.split('.').slice(1).join('.');		
		}
	}
}


function invokeProcedure(fn, self, params, additionalParams) {
  if (!(params instanceof Array)) {
    // get string representation of function
    var fnDef = fn.toString();
    
    // parse the string representation and retrieve order of parameters
    var argNames = fnDef.substring(fnDef.indexOf("(")+1, fnDef.indexOf(")"));
    argNames = (argNames === "") ? [] : argNames.split(", ");
    
    var argIndexes = {};
    for (var i=0; i<argNames.length; i++) {
      argIndexes[argNames[i]] = i;
    }
    
    // construct an array of arguments from a dictionary
    var callParameters = [];
    for (var paramName in params) {
      if (typeof argIndexes[paramName] !== "undefined") {
        callParameters[argIndexes[paramName]] = params[paramName];
      } else {
        throw "No such param!";
      }
    }
    
    params = callParameters;
  }
  
  // append additional parameters
  if (typeof additionalParams !== "undefined") {
    params = params.concat(additionalParams);
  }
  
  // invoke function with specified context and arguments array
  return fn.apply(self, params);
}    

App.Domain = document.domain;
App.UsePostMessage = ( window.postMessage != undefined )?true:false;

if( App.UsePostMessage ) {
	Window.addListener(window,"message", function(e) {
		var data = JSON.decode(e.data);
		switch ( data.Method ) {
			case 'initialize':
				var DocumentContext = {
					State : 'initialize_response',
					DocumentQualifier : '',
					ActivportalDomain : 'http://' + document.domain
				}
				e.source.postMessage(JSON.encode(DocumentContext),data.Domain);
				break;
			case 'raiseevent':
				
				window.RaiseEvent.call(window,data.NameSpace,data.EventName,data.Value,data.Context);
				break;
				
			case 'ondbview':
				window.OnDBView.call(window,data.Value);
				break;
			case 'ondbpopupview':
				window.OnDBPopupView.call(window,data.Value.url,data.Value.param);
				break;
			
			case 'requestavailableinfos':
				
				var fn = RequestAvailableInfos(data.NameSpace,data.EventName);
				if( fn != null ) {
					var returnValue = invokeProcedure(fn, self, data.Params);
					
					var responseMessage = {
						Id : data.Id,
						State : 'requestavailableinfos_response',
						ReturnValue : returnValue
					}
					e.source.postMessage(JSON.encode(responseMessage),data.Domain);
					break;
				}
			
			}
			
	});
}

App.Start = function()
{
//	document.body.appendChild(testdrag);

	this.EditMode = (fEditMode || false);
	
	V_KEY_FORM = App.V_KEY_FORM;
	V_VALUE_FORM = App.V_VALUE_FORM;
	
	if ($('search')) searchSlide = new Fx.Slide('search');

	if ($('addContentLink'))
	{
		$('addContentLink').addEvent('click', function(e){
			e = new Event(e);
	
			if ($('search').getHTML() !='')
			{ 
				searchSlide.toggle();
			}
			else 
			{ 
				if ($('search').style.display=='none') {$('search').style.display='';searchSlide.hide();}
				DoLoadSearch();
			}
	
	
			e.stop();
		});
	}


	if( searchSlide ) searchSlide.hide();	

	if ($('liPrintDashboard')) {
		if ( App && App.data && App.data.isPrintable) {
			if (App.data.isPrintable == '1')
				$('liPrintDashboard').style.display = '';
			else {
				$('liPrintDashboard').style.display = 'none';
				$('liPrintDashboard').innerHTML = '';
			}
				
		}
	}

	if ($('liPushDashboard')) {
		if ( App && App.data && App.data.isPushable) {
			if (App.data.isPushable == '1' || App.data.isPushable == '3')
				$('liPushDashboard').style.display = '';
			else {
				$('liPushDashboard').style.display = 'none';
				$('liPushDashboard').innerHTML = '';
			}
				
		}
	}

	if ($('liSendMailDashboard')) {
		if ( App && App.data && App.data.isPushable) {
			if (App.data.isPushable == '2' || App.data.isPushable == '3')
				$('liSendMailDashboard').style.display = '';
			else {
				$('liSendMailDashboard').style.display = 'none';
				$('liSendMailDashboard').innerHTML = '';
			}
				
		}
	}

	
	//var E=$$("#layoutAreas td");
	//App.layoutManager = new App.layoutAreas(E);
	
	var onLayoutLoaded = function()
	{
		App.Start.loadWebparts();	
		
//		if (typeof App.layoutManager.toggle != 'undefined' && App.layoutManager.toggle.firstElement) 
//				App.layoutManager.toggle.selectTab(App.layoutManager.toggle.firstElement);
	

		var fx = [];
	
		setTimeout("App.Start.displayWebparts()", 0);
		
	}

	if( $('DashboardCaption') ) {
		if ( App && App.LabelURLSuffix && App.LabelURLSuffix != '') $('DashboardCaption').innerText = App.LabelURLSuffix;
		else
		if( App && App.data.caption ) {
			$('DashboardCaption').innerText = App.data.caption;
		}
	}
	
	if ($('DashboardProperties')) 
		App.DashboardProperties = new Activportal.UI.Panel('DashboardPropertiesPanel',$('DashboardProperties'));
		App.DashboardProperties.hide();
	
  App.layoutManager = new Activportal.UI.Layout($("layoutAreas"),App.data.urlSuffix, onLayoutLoaded);
	App.ScriptsManager = new Activportal.UI.Scripts();
	
	//App.Start.loadWebparts();	


	
	RegisterAvailableInfos('www.activportal.mc:Webpart','GetHiddenWebpartQualifier', App.getHiddenWebpartQualifier)

	
	
	if (this.EditMode) App.onSetEditMode(this.EditMode);

}

App.setToggleDisplay = function(A) {
		var WPQ = A.substring(0, A.indexOf('_DOCQ'));
		if ( App.layoutManager && typeof App.layoutManager.toggle != 'undefined')
				App.layoutManager.toggle.DisplayFirstElement(WPQ);
}

App.getHiddenWebpartQualifier = function() {
		var oWebpart,oWPProperty;
		var oWPQs = new Array();
		var i = 0;
		for (oWPProperty in App.webpartList)
		{
			if (oWPProperty.substr(0,3)=="WPQ")
			{
				oWebpart = App.webpartList[oWPProperty];
				if (typeof oWebpart.data.isVisible == 'undefined' || oWebpart.data.isVisible == 0)
				{
					oWPQs[i++] = oWPProperty;
				}
			}
		}
		return oWPQs;
}

App.onEditProperties = function() {
	App.DashboardProperties.show(App.data.urlSuffix,function(e){}, 
																						function(cmd, oForm){
																							switch(cmd) {
																								case 'delete_dashboard':
																											var oResponse = confirm(_T('L_ConfirmDashboardRemoval_Text'));
																											if (oResponse) return true;
																											return false
																											break;
																							}
																						}, 
																						function(e,oForm){
																							switch(e) {
																								case 'layout_apply':
																												App.layoutManager.refresh();
																												break;
																								case 'save_properties':
																												var IdMenu = 'item' + App.data.urlSuffix.replace(/\//gi,'_');
																												var oMenu = $(IdMenu);
																												App.data.caption = oForm.elements['Caption' + oForm.elements['DataLanguage'].value].value;
																												App.data.title = oForm.elements['Title' + oForm.elements['DataLanguage'].value].value;
																												if (oMenu) oMenu.getElement('span').innerText = (App.data.caption!=''?App.data.caption:App.data.title);
																												App.data.isPushable = eval(oForm.elements["IsPushable"].value);
																												App.data.isPrintable = oForm.elements['IsPrintable'].checked?1:0;
																												break;
																								case 'delete_dashboard':
																												document.location.href = document.location.href.substr(0,document.location.href.indexOf('?'));
																												break;
																								case 'add_dashboard':
																											OnAddDB(App.data.urlSuffix);
																							}
																						});
}

App.onSetEditMode = function(editMode) {
	App.EditMode = editMode;
	var displayMode = (editMode?"":"none");
	var reverseDisplayMode = (editMode?"none":"");

	App.DashboardProperties.elem_container.style.display = 'block';
	App.DashboardProperties.hide();
	searchSlide.hide();
	
	if ($('mnuAddDB')) $('mnuAddDB').style.display = (( (App.data.rootAccessMode & CONST_ACCESS_INSERTDASHBOARD) && hasUserRight(CONST_AddDashboard_Access) )?displayMode:'none');
	if ($('addContentLinkContainer')) $('addContentLinkContainer').style.display = ((hasUserRight(CONST_AddWebpart_Access) && hasUserRight(CONST_AddDocument_Access) && hasUserRight(CONST_EditContent_Access) && hasAccessRight(App,CONST_ACCESS_INSERTDOCUMENT))?displayMode:'none');
	
	if ($('goToEditMode')) $('goToEditMode').style.display = ((hasUserRight(CONST_EditContent_Access) && hasAccessRight(App,CONST_ACCESS_UPDATE))?reverseDisplayMode:'none');
	if ($('goToDisplayMode')) $('goToDisplayMode').style.display = ((hasUserRight(CONST_EditContent_Access) && hasAccessRight(App,CONST_ACCESS_UPDATE))?displayMode:'none');

	if ($('displayDashboardProperties')) $('displayDashboardProperties').style.display = ((hasUserRight(CONST_EditContent_Access) && hasAccessRight(App,CONST_ACCESS_UPDATE))?displayMode:'none');
	if ($('printDashboard')) $('printDashboard').style.display = (( App.data.isPrintable==1 && hasUserRight(CONST_PrintItem_Access) )?reverseDisplayMode:"none");
	if ($('pushDashboard')) $('pushDashboard').style.display = (( (App.data.isPushable==1 || App.data.isPushable==3) && hasUserRight(CONST_PushItem_Access) )?reverseDisplayMode:"none");
	if ($('sendMailDashboard')) $('sendMailDashboard').style.display = (( (App.data.isPushable==2 || App.data.isPushable==3) && hasUserRight(CONST_SendEmailItem_Access) )?reverseDisplayMode:"none");
	if ($('DBTitleInput') && !editMode) App.cancelEditCaption();
	
	App.layoutManager.setEditMode(editMode);
	
	for (oWPProperty in App.webpartList)
	{
		if (oWPProperty.substr(0,3)=="WPQ")
		{
			oWebpart = App.webpartList[oWPProperty]
			oWebpart.setEditMode(editMode);
		}
	}
	RaiseEvent("www.activportal.mc:Document","EditMode",editMode?1:0);
	
}

App.GetNewWPQualifier = function()
{
	var iCptWP;
	for ( iCptWP=1 ; this.webpartList['WPQ' + iCptWP] ; iCptWP++ ) {};
	return 'WPQ' + iCptWP;
}

App.Start.loadWebparts = function()
{

	for (var E = 0, C = App.data.webparts.length; E < C; E++) {	
		App.addWebpart(App.data.webparts[E]);
		//var wp = new Activportal.UI.Webpart(App.data.webparts[E])
		//App.webpartList[wp.getIdentifier()] = wp;
	}
}

App.Start.displayWebparts = function()
{
	var iWP, iDoc, oWebpart, oDocument;
	var oWPProperty, oDocProperty;
	//oWebpart = this.webpartList[iWP];
	for (oWPProperty in App.webpartList)
	{
		if (oWPProperty.substr(0,3)=="WPQ")
		{
			oWebpart = App.webpartList[oWPProperty]
			for (oDocProperty in oWebpart.documentList)
			{
				if(oDocProperty.indexOf(oWPProperty)==0)
				{
					oDocument = oWebpart.documentList[oDocProperty];
					//alert(oDocument.data.urlSuffix + ":" + oDocument.data.refreshContent);
					if(oDocument.data.refreshContent==1)
						oDocument.show();
				}
			}
		}
	}
	/*
	for ( iWP=0 ; oWebpart = this.webpartList[iWP] ; iWP++ ) 
	{
		alert(iWP);
		for ( iDoc=0 ; oDocument = oWebpart.documentList[iDoc] ; iDoc++ ) 
		{
			alert(oDocument);
			//oDocument.show()
		}
	}
	*/
	RaiseEvent('www.activportal.mc:Browser','onload',null);
}

App.addWebpart = function(jsonObject)
{
	var wp = new Activportal.UI.Webpart(jsonObject);
	wp.setEditMode(App.EditMode);
	App.webpartList[wp.getIdentifier()] = wp;
}

App.getWebpartByUrlSuffix = function(sUrlSuffix)
{
		var oWebpart,oWPProperty;
		for (oWPProperty in App.webpartList)
		{
			if (oWPProperty.substr(0,3)=="WPQ")
			{
				oWebpart = App.webpartList[oWPProperty];
				if (oWebpart.data.urlSuffix == sUrlSuffix)
				{
					return oWebpart;
				}
			}
		}
		return null;
}

App.getDocument = function(docQ)
{
		sWPQ = docQ.substr(0, docQ.indexOf('_DOCQ'));
		oDoc = App.webpartList[sWPQ].documentList[docQ];
		return oDoc;
}

App.setWebpartOrders = function(jsonOrder)
{
	jsonOrder.each( function(item) {
			var oWebpart,oWPProperty;
			oWebpart = App.getWebpartByUrlSuffix(item.urlsuffix);
			if (oWebpart)
			{
				oWebpart.data.zone = item.zone;
				oWebpart.data.order = item.order;
			}
/*			for (oWPProperty in App.webpartList)
			{
				if (oWPProperty.substr(0,3)=="WPQ")
				{
					oWebpart = App.webpartList[oWPProperty];
					if (oWebpart.data.urlSuffix == item.urlsuffix)
					{
						oWebpart.data.zone = item.zone;
						oWebpart.data.order = item.order;
						return;
					}
				}
			}
*/
		}
	)
}

App.ShowColor =	function(oObjValue, oObjColor)
{
	if (typeof oObjColor == 'undefined') oObjColor = oObjValue;
	var oDlg = $('dlgHelper');
	if (typeof oDlg != 'object') return;
	if (oObjValue.value == "") 
		var sColor = oDlg.ChooseColorDlg();
	else
		var sColor = oDlg.ChooseColorDlg(oObjValue.value);

	sColor = sColor.toString(16);
	if (sColor.length < 6) 
	{
			var sTempString = "000000".substring(0,6-sColor.length);
			sColor = sTempString.concat(sColor);
	}
	oObjValue.value = '#' + sColor;
	oObjColor.style.backgroundColor = '#' + sColor;
	//oObjColor.style.color = '#' + sColor;
	Garbage.trash(oDlg);
	Garbage.trash(oObjColor);
	Garbage.trash(oObjValue);
	return true;
}


App.RemoveColor = function(oObjValue, oObjColor, oObjTransparent)
{
	if ( oObjValue instanceof Array ) for ( var i = 0 ; i < oObjValue.length ; i++) {oObjValue[i].value = ''; Garbage.trash(oObjValue[i]);}
	else {oObjValue.value = ''; Garbage.trash(oObjValue);}
			
	if (oObjColor instanceof Array ) for ( var i = 0 ; i < oObjColor.length ; i++ ) {oObjColor[i].disabled = false;oObjColor[i].style.filter = "alpha(opacity=100)";oObjColor[i].style.backgroundColor = 'transparent'; Garbage.trash(oObjColor[i]);}
	else {oObjColor.disabled = false;oObjColor.style.filter = "alpha(opacity=100)";oObjColor.style.backgroundColor = 'transparent'; Garbage.trash(oObjColor);}

	if (oObjTransparent instanceof Array ) for ( var i = 0 ; i < oObjTransparent.length ; i++ ) {oObjTransparent[i].className = 'ColorPushedButtonOFF'; Garbage.trash(oObjColor[i]);}
	else {oObjTransparent.className = 'ColorPushedButtonOFF'; Garbage.trash(oObjColor);}
}

App.BrowseFolder = function(sTextBoxId)
{
	var sFolderID;
	var oTextBox = document.getElementById(sTextBoxId);
	if (oTextBox == null) return;
	if (oTextBox != null && oTextBox.value != '') sFolderID = oTextBox.value;
	else sFolderID = null;

	sFolderID = showModalDialog( "BrowsingFolder.asp",sFolderID,"font-family:Verdana; font-size:12; dialogWidth:400px; dialogHeight:275px" );
	if( sFolderID )
	{
		oTextBox.value = sFolderID;
	}
}

App.setTransparentColor = function(oObjValue, oObjColor, oObjTransparent) {
	if (oObjTransparent.className == 'ColorPushedButtonON')
	{
		oObjTransparent.className = 'ColorPushedButtonOFF';
		oObjColor.disabled = false;
		oObjColor.style.filter = "alpha(opacity=100)";
		oObjValue.value = ((oObjColor.style.backgroundColor !='transparent')?oObjColor.style.backgroundColor:'');
	}
	else 
	{
		oObjTransparent.className = 'ColorPushedButtonON';
		oObjColor.disabled = true;
		oObjColor.style.filter = "alpha(opacity=50)";
		oObjValue.value = 'transparent';
	}		
}

App.cancelEditCaption = function(oElem) {
		var oInput = $('DBTitleInput');
				
		if (typeof(App.editedMenu) != 'undefined' && App.editedMenu) App.editedMenu.innerText = App.data.caption;
		oInput.removeNode(true);
		Garbage.trash(oInput);
		App.editedMenu = null;
}

App.onUpdateCaption = function(oElem) {
			if (!App.EditMode) return;
			//oElem.contentEditable = false;
			//Element.removeClassName(oElem,'titleEdit');
			
			//if (oElem.innerText.trim() == '' || oElem.innerText.trim() == App.data.caption) {oElem.innerText = App.data.caption; return;}
			var oInput = $('DBTitleInput');
			if (!oInput || oInput.value.trim() == '' || oInput.value.trim() == App.data.caption) {
				oElem.innerText = App.data.caption; 
			} 
			else
			{
				var MyCaptionForm = App.createFormCaption();
				MyCaptionForm.getElementById('CaptionUrlSuffix').value = App.data.urlSuffix;
				//MyCaptionForm.getElementById('CaptionItemCaption').value = oElem.innerText;
				MyCaptionForm.getElementById('CaptionItemCaption').value = oInput.value;
				oElem.innerText = oInput.value;
				App.data.caption = oInput.value;
				MyCaptionForm.set('send',{
								onFailure: function(jsonObj) {alert(_T('L_ErrorSavingCaption_Text'))},
								evalScripts: true
				});
				MyCaptionForm.send();
				Garbage.trash(MyCaptionForm);
			}
			if (oInput)
			{
				oInput.removeNode(true);
				Garbage.trash(oInput);
			}
			App.editedMenu = null;
}

App.onEditCaption = function(oElem) {
			if (!App.EditMode) return; 
			var oDiv = $(oElem);
			var sText = oDiv.innerText.trim();
			App.editedMenu = oDiv;
			
			var oInput = new Element('INPUT',{type:"TEXT",id:"DBTitleInput",value:sText,className:"TitleEditInput",onclick:function(e){e = new Event(e).stop();},onblur:function(e){e = new Event(e).stop();App.onUpdateCaption(oDiv);}});
			//var oInput = new Element("input", {type:'text', class:'TitleEditInput',id:'DBTitleInput',value:sText});
			oDiv.empty();
			oInput.inject(oDiv);
			oInput.focus();
			//oElem.contentEditable = true;
			//Element.addClassName(oElem,'titleEdit');	
}


App.RedirectEnvironment = function(sProtocol, sHost, sVirtual) {
			document.location.href = 'redirectEnvironment.asp?Protocol=' + sProtocol + '&Host=' + sHost + '&Virtual=' + sVirtual;
}

App.CatalogProviderRequest = new Class(
{	
		Extends: Request,
		
		options: {
			evalScripts: true
		},
		
		initialize: function( options ){
			arguments.callee.parent(options);
		},
		
		getDocument : function( urlSuffix, docQualifier, params, webparQualifier ) {
			
			
			var data = { 	cmd: 'getDocument', 
										DOCQualifier: docQualifier, 
										WPQualifier:  webparQualifier,
										DocumentID: urlSuffix
									};
			data[App.V_KEY_FORM] = App.V_VALUE_FORM;
			
			if( $type(params) == 'string' ) {
				data = Hash.toQueryString(data);
				data += '&' + params;
			}
			else {
				data =  $extends(data,params);
			}
			var options = { url: App.CATALOG_PROXY, method: 'post', "data": data}
			return this.send(options);
		}
});


function getEventFunction(Me, oEvent) {
	return function(oArgs) { 
			if( !Me.loaded ) {
				oEvent.argsValue = oArgs;
				Me.raiseEventInQueue = oEvent;
				Me.fireEvent('onEventReceived',Me);
				return;
			}
			
			RaiseEvent('proxyEvent.' + oEvent.eventNamespace, oEvent.eventName, oArgs);
		}
}


