Index: /trunk/phpgwapi/templates/news/js/cookieManager.js
===================================================================
--- /trunk/phpgwapi/templates/news/js/cookieManager.js	(revision 7842)
+++ /trunk/phpgwapi/templates/news/js/cookieManager.js	(revision 7842)
@@ -0,0 +1,50 @@
+/*  Script contendo funcoes de manipulacao de cookies.
+	// baseado em script de Bill Dortch, hIdaho Design <bdortch@hidaho.com> e
+	// adaptado por Jorge Kinoshita.
+*/
+	function getCookieVal (offset) {
+	  var endstr = document.cookie.indexOf (";", offset);
+	  if (endstr == -1)
+	    endstr = document.cookie.length;
+	  return unescape(document.cookie.substring(offset, endstr));
+	}
+	
+	function FixCookieDate (date) {
+	  var base = new Date(0);
+	  var skew = base.getTime(); // dawn of (Unix) time - should be 0
+	  if (skew > 0)  // Except on the Mac - ahead of its time
+	    date.setTime (date.getTime() - skew);
+	}
+	//
+	//  Function to return the value of the cookie specified by "name".
+	//    name - String object containing the cookie name.
+	//    returns - String object containing the cookie value, or null if
+	//      the cookie does not exist.
+	
+	function GetCookie (name) {
+	  var arg = name + "=";
+	  var alen = arg.length;
+	  var clen = document.cookie.length;
+	  var i = 0;
+	  while (i < clen) {
+	    var j = i + alen;
+	    if (document.cookie.substring(i, j) == arg)
+	      return getCookieVal (j);
+	    i = document.cookie.indexOf(" ", i) + 1;
+	    if (i == 0) break; 
+	  }
+
+	  return 'true';
+	}
+		
+	function SetCookie (name,value,expires,path,domain,secure) {
+	  document.cookie = name + "=" + escape (value) +
+    	((expires) ? "; expires=" + expdate.toGMTString() : "") +
+	    ((path) ? "; path=" + path : "") +
+    	((domain) ? "; domain=" + domain : "") +
+	    ((secure) ? "; secure" : "");
+	}	
+	
+	var expdate = new Date ();
+	FixCookieDate (expdate); // Correct for Mac date bug - call only once for given Date object!
+	expdate.setTime (expdate.getTime() + (30 * 24 * 60 * 60 * 1000)); // Valid for 30 days.
Index: /trunk/phpgwapi/templates/news/js/pngfix.js
===================================================================
--- /trunk/phpgwapi/templates/news/js/pngfix.js	(revision 7842)
+++ /trunk/phpgwapi/templates/news/js/pngfix.js	(revision 7842)
@@ -0,0 +1,33 @@
+function correctPNG() // correctly handle PNG transparency in Win IE 5.5 or higher.
+   {
+   for(var i=0; i<document.images.length; i++)
+      {
+	  var img = document.images[i]
+	  var imgName = img.src.toUpperCase()
+	  if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
+	     {
+		 var imgID = (img.id) ? "id='" + img.id + "' " : ""
+		 var imgClass = (img.className) ? "class='" + img.className + "' " : ""
+		 var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
+		 var imgStyle = "display:inline-block;" + img.style.cssText 
+		 var imgAttribs = img.attributes;
+		 for (var j=0; j<imgAttribs.length; j++)
+			{
+			var imgAttrib = imgAttribs[j];
+			if (imgAttrib.nodeName == "align")
+			   {		  
+			   if (imgAttrib.nodeValue == "left") imgStyle = "float:left;" + imgStyle
+			   if (imgAttrib.nodeValue == "right") imgStyle = "float:right;" + imgStyle
+			   break
+			   }
+            }
+		 var strNewHTML = "<span " + imgID + imgClass + imgTitle
+		 strNewHTML += " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
+	     strNewHTML += "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
+		 strNewHTML += "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>" 
+		 img.outerHTML = strNewHTML
+		 i = i-1
+	     }
+      }
+   }
+window.attachEvent("onload", correctPNG);
Index: /trunk/phpgwapi/templates/news/js/listUsers.js
===================================================================
--- /trunk/phpgwapi/templates/news/js/listUsers.js	(revision 7842)
+++ /trunk/phpgwapi/templates/news/js/listUsers.js	(revision 7842)
@@ -0,0 +1,203 @@
+//Funcoes
+	
+	function remUser(){
+		primary_group  = self.document.getElementById('primary_group_list');
+		select = self.document.getElementById('user_list');							
+			
+		for(var i = 0;i < select.options.length; i++) {
+			if(select.options[i].selected) {	
+				if(primary_group != null) {		
+					for(var j = 0;j < primary_group.options.length; j++) {
+						if(primary_group.options[j].value == select.options[i].value) {
+							primary_group.options[j] = null;
+							if(primary_group.options.length > 0)
+								primary_group.options[0].selected = true;
+							
+							break;
+						}
+					}	
+				}	
+				select.options[i--] = null;							
+			}
+		}
+		
+		if(select.options.length)
+			select.options[0].selected = true;					
+	}
+	
+	function remUserAcl(){
+		select = self.document.getElementById('user_list');								
+		for(var i = 0;i < select.options.length; i++)				
+			if(select.options[i].selected){
+				ids = getIds(select.options[i].value);
+				for(j = 0; j < ids.length; j++)
+					document.getElementById(ids[j]).disabled = true;
+				
+				select.options[i--] = null;
+			}
+		
+		if(select.options.length)
+			select.options[0].selected = true;			
+		
+		execAction('LOAD');
+	}
+	
+	function openListUsers(newWidth,newHeight,currentApp,type){			
+		
+		newScreenX  = screen.width - newWidth;		
+		newScreenY  = 0;
+
+		window.open('phpgwapi/templates/default/listUsers.php?'+(type == 'g' ? 'type=g&' : '')+'currentApp='+currentApp,"","width="+newWidth+",height="+newHeight+",screenX="+newScreenX+",left="+newScreenX+",screenY="+newScreenY+",top="+newScreenY+",status=1,toolbar=no,scrollbars=yes,resizable=no");
+		
+	}
+											
+	function execAction(action){
+								
+		if(!window.opener)				
+			doc = window.document;
+		else
+			doc = window.opener.document;
+		
+		select = doc.getElementById('user_list');					
+		checkAttr = doc.formAcl.checkAttr;												
+		for(i = 0; i < select.length; i++) {					
+			if(select.options[i].selected){
+				ids = getIds(select.options[i].value);
+											
+				for(j = 0; j < ids.length; j++){										
+					
+					if(action == 'SAVE') {
+						doc.getElementById(ids[j]).disabled = !checkAttr[j].checked;
+					}					
+					if(action == 'LOAD') {
+						
+						checkAttr[j].checked = !doc.getElementById(ids[j]).disabled;
+					}
+				}													
+			}			
+		}
+		
+		if(!select.length)
+			for(j = 0; j < checkAttr.length; j++)
+				checkAttr[j].disabled = true;
+				
+		else		
+			for(j = 0; j < checkAttr.length; j++)
+				checkAttr[j].disabled = false;
+			
+	}
+		
+	function getIds(value){
+			
+		ids = new Array();
+		ids[0] = value + '_1]' ;
+		ids[1] = value + '_2]' ;
+		ids[2] = value + '_4]' ;
+		ids[3] = value + '_8]' ;
+		ids[4] = value + '_16]';
+		
+		return ids;
+	}
+
+	
+ 	function optionFinder(oText) {				 		 													
+
+		for(var i = 0;i < select.options.length; i++)				
+			select.options[i--] = null;
+																							
+		for(i = 0; i < users.length; i++)
+																							
+			if(users[i].text.substring(0 ,oText.value.length).toUpperCase() == oText.value.toUpperCase() ||
+				(users[i].text.substring(0 ,3) == '(G)' &&
+				users[i].text.substring(4 ,4+oText.value.length).toUpperCase() == oText.value.toUpperCase())) {																					
+				sel = select.options;						
+				option = new Option(users[i].text,users[i].value);
+				option.onclick = users[i].onclick;				
+				sel[sel.length] = option;
+			 
+			}										  		
+ 	}			 
+ 
+ 
+ 	function addUser() {
+		var select = window.document.getElementById('user_list_in');
+		var selectOpener = window.opener.document.getElementById('user_list');
+	
+		var primary_group  = window.opener.document.getElementById('primary_group_list');
+
+		if(document.all)
+			primary_group  = window.opener.document.all['primary_group_list'];
+		
+		for (i = 0 ; i < select.length ; i++) {				
+
+			if (select.options[i].selected) {
+				isSelected = false;
+
+				for(var j = 0;j < selectOpener.options.length; j++) {																			
+					if(selectOpener.options[j].value == select.options[i].value){
+						isSelected = true;						
+						break;	
+					}
+				}
+
+				if(!isSelected){
+
+					option = window.opener.document.createElement('option');
+					option.value =select.options[i].value;
+					option.text = select.options[i].text;
+					selectOpener.options[selectOpener.options.length] = option;	
+					if(primary_group != null) {
+						primary_group.options[primary_group.options.length] = window.opener.document.createElement('option');
+						primary_group.options[primary_group.options.length - 1].value =select.options[i].value;
+						primary_group.options[primary_group.options.length - 1].text = select.options[i].text;
+					}
+					
+				}
+				
+			}
+		}
+		
+		selectOpener.options[selectOpener.options.length-1].selected = true;
+ 	}				
+ 	
+ 	function addUserAcl() {
+		var select = window.document.getElementById('user_list_in');
+		var selectOpener = window.opener.document.getElementById('user_list');
+		for (i = 0 ; i < select.length ; i++) {				
+
+			if (select.options[i].selected) {
+				isSelected = false;
+
+				for(var j = 0;j < selectOpener.options.length; j++) {																			
+					if(selectOpener.options[j].value == select.options[i].value){
+						isSelected = true;						
+						break;	
+					}
+				}
+
+				if(!isSelected){
+
+					option = window.opener.document.createElement('option');
+					option.value =select.options[i].value;
+					option.text = select.options[i].text;
+					if( option.value.charAt(0) == 'g' )
+						option.text = "(G) "+option.text;
+					selectOpener.options[selectOpener.options.length] = option;	
+					
+					ids = getIds(select.options[i].value);
+					for(k = 0; k < ids.length; k++) {															
+						el = window.opener.document.createElement('input');
+						el.type='hidden';
+						el.value ='Y';
+						el.name = ids[k];
+						el.disabled = true;						
+						el.id = ids[k];
+						window.opener.document.getElementById("tdHiddens").appendChild(el);
+					}
+				}
+				
+			}
+		}
+		selectOpener.options[selectOpener.options.length-1].selected = true;
+		execAction('LOAD');
+ 	} 	
Index: /trunk/phpgwapi/templates/news/js/loginExpresso.js
===================================================================
--- /trunk/phpgwapi/templates/news/js/loginExpresso.js	(revision 7842)
+++ /trunk/phpgwapi/templates/news/js/loginExpresso.js	(revision 7842)
@@ -0,0 +1,96 @@
+(function()
+{
+
+  var formLogin = null;
+
+  function msgLogin()
+  {
+      var divMsgLogin = $("#msg-login");
+
+      var msgType = divMsgLogin.html();
+
+      if( $.trim(msgType) != "" )
+      {  
+        divMsgLogin.css("display","block");
+
+        if( msgType.indexOf("color=\"FF0000\"") > -1 )
+        {
+          divMsgLogin.attr("class","erro").delay(3000).fadeOut('slow');
+        }
+        else
+        {
+          divMsgLogin.attr("class","sucesso").delay(3000).fadeOut('slow');
+        }
+      }
+  }
+
+  function setLogin()
+  {
+
+    if( formLogin.find("select[name=organization]").length > 0 )
+    {
+      formLogin.find("input[name=login]").val( formLogin.find("select[name=organization]").val() + "-"  + formLogin.find("input[name=user]").val() );
+    }
+    else
+    {
+      formLogin.find("input[name=login]").val( formLogin.find("input[name=login]").val() );
+    }
+  }
+
+  function loginExpresso()
+  {
+    $(document).ready(function()
+    {   
+      // Element Form
+      formLogin = $("form[name=flogin]");
+
+      // Msg Expresso  
+      msgLogin();
+
+      // KeyBoard Virtual   
+      var keyBoardV = formLogin.find("input[name=show_kbd]").val();
+    
+      if( $.trim(keyBoardV) != "" && keyBoardV == "True" )
+      {
+        // Keyboard virtual
+        $('#passwd').keypad({
+             keypadOnly: false,
+             showOn: 'button', 
+             layout: $.keypad.qwertyLayout,
+             buttonImageOnly: true,
+             buttonImage: './prototype/plugins/jquery.keyboard/keypad.png'
+        });
+      }
+
+      // Captcha      
+      var captcha = $("#captcha");
+          captcha.css("position","absolute");
+          captcha.css("left","115px");
+
+      if( $.trim(keyBoardV) != "" && keyBoardV == "True" )
+      {  
+        captcha.css("top","272px");
+
+        if( $("#organizacao").parent().css('display') == "block" )
+        {
+          captcha.css("top","327px");
+        }
+      }
+      else
+      {
+        captcha.css("top","263px");
+
+        if( $("#organizacao").parent().css('display') == "block" )
+        {
+          captcha.css("top","318px");
+        }
+      }
+
+    });
+  }
+
+  loginExpresso.prototype.setLogin      = setLogin;
+
+  window.loginExpresso = new loginExpresso;
+
+})();
Index: /trunk/phpgwapi/templates/news/js/simple_show_hide.js
===================================================================
--- /trunk/phpgwapi/templates/news/js/simple_show_hide.js	(revision 7842)
+++ /trunk/phpgwapi/templates/news/js/simple_show_hide.js	(revision 7842)
@@ -0,0 +1,183 @@
+/*****************************************************
+ * ypSlideOutMenu
+ * 3/04/2001
+ * 
+ * a nice little script to create exclusive, slide-out
+ * menus for ns4, ns6, mozilla, opera, ie4, ie5 on 
+ * mac and win32. I've got no linux or unix to test on but 
+ * it should(?) work... 
+ *
+ * --youngpup--
+ *****************************************************/
+
+//var isIE = false;
+//var isOther = false;
+//var isNS4 = false;
+//var isNS6 = false;
+// constructor
+function ypSlideOutMenu(id, dir, left, top, width, height,pos)
+{
+
+	this.ie  = document.all ? 1 : 0
+		this.ns4 = document.layers ? 1 : 0
+		this.dom = document.getElementById ? 1 : 0
+
+		if (this.ie || this.ns4 || this.dom) {
+			this.id			 = id
+				this.dir		 = dir
+				this.orientation = dir == "left" || dir == "right" ? "h" : "v"
+				this.dirType	 = dir == "right" || dir == "down" ? "-" : "+"
+				this.dim		 = this.orientation == "h" ? width : height
+				//this.hideTimer	 = false
+				//this.aniTimer	 = false
+				this.open		 = false
+				this.over		 = false
+				//this.startTime	 = 0
+
+				// global reference to this object
+				//this.gRef = "ypSlideOutMenu_"+id
+				//eval(this.gRef+"=this")
+
+				// add this menu object to an internal list of all menus
+				//ypSlideOutMenu.Registry[id] = this
+
+				var d = document
+
+				var strCSS = '<style type="text/css">';
+			strCSS += '#' + this.id + 'Container { visibility:hidden; '
+				if(pos)
+				{
+					strCSS += pos+':' + left + 'px; '
+				}
+				else
+				{
+					strCSS += 'left:' + left + 'px; '
+				}
+				strCSS += 'top:' + top + 'px; '
+					strCSS += 'overflow:visible; z-index:10000; }'
+					strCSS += '#' + this.id + 'Container, #' + this.id + 'Content { position:absolute; '
+						strCSS += 'width:' + width + 'px; '
+							//		strCSS += 'height:' + height + 'px; '
+							//		strCSS += 'clip:rect(0 ' + width + ' ' + height + ' 0); '
+							strCSS += '}'
+							strCSS += '</style>';
+
+						d.write(strCSS);
+						//	alert(strCSS);
+//						this.load()
+
+					}
+		}
+
+	ypSlideOutMenu.aLs = function(layerID)
+	{
+
+		this.isIE = false;
+		this.isOther = false;
+		this.isNS4 = false;
+		this.isNS6 = false;
+		if(document.getElementById)
+		{
+			if(!document.all)
+			{
+				this.isNS6=true;
+			}
+			if(document.all)
+			{
+				this.isIE=true;
+			}
+		}
+		else
+		{
+			if(document.layers)
+			{
+				this.isNS4=true;
+			}
+			else
+			{
+				this.isOther=true;
+			}
+		}
+
+		var returnLayer;
+		if(this.isIE)
+		{
+			returnLayer = eval("document.all." + layerID + ".style");
+		}
+		if(this.isNS6)
+		{
+			returnLayer = eval("document.getElementById('" + layerID + "').style");
+		}
+		if(this.isNS4)
+		{
+			returnLayer = eval("document." + layerID);
+		}
+		if(this.isOther)
+		{
+			returnLayer = "null";
+			alert("Error:\nDue to your browser you will probably not\nbe able to view all of the following page\nas it was designed to be viewed. We regret\nthis error sincerely.");
+		}
+		return returnLayer;
+	}
+	// HideShow 1.0	Jim Cummins - http://www.conxiondesigns.com
+
+	ypSlideOutMenu.ShowL = function(ID)
+	{
+		ypSlideOutMenu.aLs(ID).visibility = "visible";
+	}
+
+	ypSlideOutMenu.HideL =function(ID)
+	{
+		ypSlideOutMenu.aLs(ID).visibility = "hidden";
+	}
+
+	ypSlideOutMenu.HideShow = function(ID)
+	{
+
+		if((ypSlideOutMenu.aLs(ID).visibility == "visible") || (ypSlideOutMenu.aLs(ID).visibility == ""))
+		{
+			ypSlideOutMenu.aLs(ID).visibility = "hidden";
+		}
+		else if(ypSlideOutMenu.aLs(ID).visibility == "hidden")
+		{
+			ypSlideOutMenu.aLs(ID).visibility = "visible";
+		}
+	}
+
+
+	ypSlideOutMenu.showMenu = function(id)
+	{
+		//temporarly hide all selectboxes to fix IE bug with z-index  
+		if(document.all)
+		{
+			for (var i=0; i<document.all.length; i++) {
+				o = document.all(i)
+					if (o.type == 'select-one' || o.type == 'select-multiple') {
+						// todo: add check for select in div?
+						if (o.style) o.style.display = 'none';
+					}
+			}
+		}
+		ypSlideOutMenu.ShowL(id+'Container');
+
+	}
+
+	ypSlideOutMenu.hide = function(id)
+	{
+		ypSlideOutMenu.HideL(id+'Container');
+		//show all selectboxes again to fix IE bug with z-index  
+		if(document.all)
+		{
+			for (var i=0; i<document.all.length; i++) {
+				o = document.all(i)
+					if (o.type == 'select-one' || o.type == 'select-multiple') {
+						// todo: add check for select in div?
+						if (o.style) o.style.display = 'inline';
+					}
+			}
+		}
+
+	}
+
+
+
Index: /trunk/phpgwapi/templates/news/js/slider.js
===================================================================
--- /trunk/phpgwapi/templates/news/js/slider.js	(revision 7842)
+++ /trunk/phpgwapi/templates/news/js/slider.js	(revision 7842)
@@ -0,0 +1,76 @@
+(function()
+{
+	var divSlider = null;
+
+	function loadImages()
+	{
+		$.ajax(
+		{
+			  url: "./phpgwapi/templates/news/list_images.php",
+			  type	: "POST",
+			  dataType: 'json',
+			  success: function(data)
+			  {
+			  		var _html = "";
+
+			  		for( var i in data )
+			  		{
+		  				// Template EJS
+						_html += new EJS({url: './phpgwapi/templates/news/sliderImages.ejs'}).render(
+						{
+							'name_image'	: data[i]['nome'],
+							'title_image'	: data[i]['titulo'],
+							'text_image'	: data[i]['texto'],
+							'link_image'	: ( data[i]['link'] ) ? data[i]['link'] : ""
+						});
+			  		}
+
+			  		var ulSlider = $("<ul>");
+
+			  		ulSlider.html( _html );
+
+			  		divSlider.append(ulSlider);
+
+			  		configSlider();
+			  }
+		});
+	}
+
+	function configSlider()
+	{
+		divSlider.after('<div id="nav-informacao-login"></div>');
+		divSlider.find('ul').show();
+		divSlider.find('ul').cycle({
+			fx:      'scrollLeft',
+			timeout: 6100,
+			speed:   1000,
+			random:  0,
+			pager:'#nav-informacao-login'
+		});
+		
+		$('#nav-informacao-login-control').toggle(function(e) {
+			e.preventDefault();
+			divSlider.find('ul').cycle('pause');
+			$(this).addClass('play');
+		},
+		
+		function() {
+			divSlider.find('ul').cycle('resume');
+			$(this).removeClass('play');
+		});
+
+	}
+
+	function sliderLoad()
+	{
+		$(document).ready(function()
+		{		
+			divSlider = $('#informacao-login');
+			
+			loadImages();
+		});
+	}
+
+	window.sliderLoad = new sliderLoad;
+
+})();
Index: /trunk/phpgwapi/templates/news/js/slidereffects.js
===================================================================
--- /trunk/phpgwapi/templates/news/js/slidereffects.js	(revision 7842)
+++ /trunk/phpgwapi/templates/news/js/slidereffects.js	(revision 7842)
@@ -0,0 +1,217 @@
+/*****************************************************
+ * ypSlideOutMenu
+ * 3/04/2001
+ * 
+ * a nice little script to create exclusive, slide-out
+ * menus for ns4, ns6, mozilla, opera, ie4, ie5 on 
+ * mac and win32. I've got no linux or unix to test on but 
+ * it should(?) work... 
+ *
+ * --youngpup--
+ *****************************************************/
+
+ypSlideOutMenu.Registry = []
+ypSlideOutMenu.aniLen = 250
+ypSlideOutMenu.hideDelay = 1000
+ypSlideOutMenu.minCPUResolution = 10
+
+// constructor
+function ypSlideOutMenu(id, dir, left, top, width, height,pos)
+{
+	this.ie  = document.all ? 1 : 0
+		this.ns4 = document.layers ? 1 : 0
+		this.dom = document.getElementById ? 1 : 0
+
+		if (this.ie || this.ns4 || this.dom) {
+			this.id			 = id
+				this.dir		 = dir
+				this.orientation = dir == "left" || dir == "right" ? "h" : "v"
+				this.dirType	 = dir == "right" || dir == "down" ? "-" : "+"
+				this.dim		 = this.orientation == "h" ? width : height
+				this.hideTimer	 = false
+				this.aniTimer	 = false
+				this.open		 = false
+				this.over		 = false
+				this.startTime	 = 0
+
+				// global reference to this object
+				this.gRef = "ypSlideOutMenu_"+id
+				eval(this.gRef+"=this")
+
+				// add this menu object to an internal list of all menus
+				ypSlideOutMenu.Registry[id] = this
+
+				var d = document
+
+				var strCSS = '<style type="text/css">';
+			strCSS += '#' + this.id + 'Container { visibility:hidden; '
+				if(pos)
+				{
+					strCSS += pos+':' + left + 'px; '
+				}
+				else
+				{
+					strCSS += 'left:' + left + 'px; '
+				}
+				strCSS += 'top:' + top + 'px; '
+					strCSS += 'overflow:visible; z-index:10000; }'
+					strCSS += '#' + this.id + 'Container, #' + this.id + 'Content { position:absolute; '
+						strCSS += 'width:' + width + 'px; '
+							//		strCSS += 'height:' + height + 'px; '
+							//		strCSS += 'clip:rect(0 ' + width + ' ' + height + ' 0); '
+							strCSS += '}'
+							strCSS += '</style>';
+
+						d.write(strCSS)
+
+							this.load()
+					}
+		}
+
+	ypSlideOutMenu.prototype.load = function() {
+		var d = document
+			var lyrId1 = this.id + "Container"
+			var lyrId2 = this.id + "Content"
+			var obj1 = this.dom ? d.getElementById(lyrId1) : this.ie ? d.all[lyrId1] : d.layers[lyrId1]
+			if (obj1) var obj2 = this.ns4 ? obj1.layers[lyrId2] : this.ie ? d.all[lyrId2] : d.getElementById(lyrId2)
+				var temp
+
+					if (!obj1 || !obj2) window.setTimeout(this.gRef + ".load()", 100)
+					else {
+						this.container	= obj1
+							this.menu		= obj2
+							this.style		= this.ns4 ? this.menu : this.menu.style
+							this.homePos	= eval("0" + this.dirType + this.dim)
+							this.outPos		= 0
+							this.accelConst	= (this.outPos - this.homePos) / ypSlideOutMenu.aniLen / ypSlideOutMenu.aniLen 
+
+							// set event handlers.
+							if (this.ns4) this.menu.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);
+						this.menu.onmouseover = new Function("ypSlideOutMenu.showMenu('" + this.id + "')")
+							this.menu.onmouseout = new Function("ypSlideOutMenu.hideMenu('" + this.id + "')")
+
+							//set initial state
+							this.endSlide()
+					}
+	}
+
+	ypSlideOutMenu.showMenu = function(id)
+	{
+		var reg = ypSlideOutMenu.Registry
+			var obj = ypSlideOutMenu.Registry[id]
+
+			//document.all.select.style="visibily:hidden";
+
+
+			//temporarly hide all selectboxes to fix IE bug with z-index  
+			if(document.all)
+			{
+				for (var i=0; i<document.all.length; i++) {
+					o = document.all(i)
+						if (o.type == 'select-one' || o.type == 'select-multiple') {
+							// todo: add check for select in div?
+							if (o.style) o.style.display = 'none';
+						}
+				}
+			}
+
+
+		if (obj.container) {
+			obj.over = true
+
+				// close other menus.
+				for (menu in reg) if (id != menu) ypSlideOutMenu.hide(menu)
+
+					// if this menu is scheduled to close, cancel it.
+					if (obj.hideTimer) { reg[id].hideTimer = window.clearTimeout(reg[id].hideTimer) }
+
+			// if this menu is closed, open it.
+			if (!obj.open && !obj.aniTimer) reg[id].startSlide(true)
+		}
+	}
+
+	ypSlideOutMenu.hideMenu = function(id)
+	{
+		// schedules the menu to close after <hideDelay> ms, which
+		// gives the user time to cancel the action if they accidentally moused out
+		var obj = ypSlideOutMenu.Registry[id]
+			if (obj.container) {
+				if (obj.hideTimer) window.clearTimeout(obj.hideTimer)
+					obj.hideTimer = window.setTimeout("ypSlideOutMenu.hide('" + id + "')", ypSlideOutMenu.hideDelay);
+			}
+	}
+
+	ypSlideOutMenu.hide = function(id)
+	{
+		var obj = ypSlideOutMenu.Registry[id]
+			obj.over = false
+
+			if (obj.hideTimer) window.clearTimeout(obj.hideTimer)
+
+				// flag that this scheduled event has occured.
+				obj.hideTimer = 0
+
+					// if this menu is open, close it.
+					if (obj.open && !obj.aniTimer) obj.startSlide(false)
+
+						//show all selectboxes again to fix IE bug with z-index  
+						if(document.all)
+						{
+							for (var i=0; i<document.all.length; i++) {
+								o = document.all(i)
+									if (o.type == 'select-one' || o.type == 'select-multiple') {
+										// todo: add check for select in div?
+										if (o.style) o.style.display = 'inline';
+									}
+							}
+						}
+
+
+
+	}
+
+ypSlideOutMenu.prototype.startSlide = function(open) {
+	this[open ? "onactivate" : "ondeactivate"]()
+	this.open = open
+	if (open) this.setVisibility(true)
+	this.startTime = (new Date()).getTime()	
+	this.aniTimer = window.setInterval(this.gRef + ".slide()", ypSlideOutMenu.minCPUResolution)
+}
+
+ypSlideOutMenu.prototype.slide = function() {
+	var elapsed = (new Date()).getTime() - this.startTime
+	if (elapsed > ypSlideOutMenu.aniLen) this.endSlide()
+	else {
+		var d = Math.round(Math.pow(ypSlideOutMenu.aniLen-elapsed, 2) * this.accelConst)
+		if (this.open && this.dirType == "-")		d = -d
+		else if (this.open && this.dirType == "+")	d = -d
+		else if (!this.open && this.dirType == "-")	d = -this.dim + d
+		else										d = this.dim + d
+
+		this.moveTo(d)
+	}
+}
+
+ypSlideOutMenu.prototype.endSlide = function() {
+	this.aniTimer = window.clearTimeout(this.aniTimer)
+	this.moveTo(this.open ? this.outPos : this.homePos)
+	if (!this.open) this.setVisibility(false)
+	if ((this.open && !this.over) || (!this.open && this.over)) {
+		this.startSlide(this.over)
+	}
+}
+
+ypSlideOutMenu.prototype.setVisibility = function(bShow) { 
+	var s = this.ns4 ? this.container : this.container.style
+	s.visibility = bShow ? "visible" : "hidden"
+}
+ypSlideOutMenu.prototype.moveTo = function(p) { 
+	this.style[this.orientation == "h" ? "left" : "top"] = this.ns4 ? p : p + "px"
+}
+ypSlideOutMenu.prototype.getPos = function(c) {
+	return parseInt(this.style[c])
+}
+
+// events
+ypSlideOutMenu.prototype.onactivate		= function() { }
+ypSlideOutMenu.prototype.ondeactivate	= function() { }
