//alert(0);
(function($) {
function PopupMenu()
{
	this.className  = 'popup';
	this.blankImage = 'blank.gif';
	this.popups     = new Array();
};
$.extend(PopupMenu.prototype, {
	add: function() 
	{
		for(i=0;i<arguments.length;i++)
		{
			var obj = arguments[i];
			var popup              = document.createElement("div");
			popup.id               = obj.name;
			popup.className        = (obj.className)?obj.className:this.className;
			popup.style.position   = 'absolute';
			popup.style.zIndex     = '600';
			if(obj.align!=null)
				popup.alignment=obj.align;
			if(obj.buttonWidth==true) popup.buttonWidth=true;
			document.body.insertBefore(popup, document.body.firstChild);
			//this.popups[obj.name] = popup;
			popup.alignment =  (obj.align===undefined)?'left':obj.align;
			var oself=this;
			popup.onmouseover=function()
			{
				document.hitTestPopup=true;
			}
			popup.onmouseout=function()
			{
				document.hitTestPopup=false;
			}
			for(param in obj)
			{
				if(param == 'contentUrl')
				{
					
				}else if(param == 'items')
				{
					 this._fillItems(popup,obj);
				}
			}


		}
        
	},
	_fillItems: function(popup,obj) 
	{
		var tbl = '<table class="popupclient" border="0" cellspacing="0" cellpadding="0">';
		var useicon = false;
		for(j=0;j<obj.items.length;j++)
		{
			//if(obj.items[j].icon){
				useicon = true;
				break;
			//}
		}
		var ajax_contents = [];
		var html_contents = [];
		var callbacks     = [];
		
		for(j=0;j<obj.items.length;j++)
		{
			var item = obj.items[j];
			tbl += "<tr><td class=item nowrap>";
			if(item.label)
			{
				if(item.label=='-')
				{
					tbl += '<div class="separator" style="height:1px;overflow:hidden"></div>';
				}else
				{
					var href = (item.href)?item.href:'javascript:void(0)';
					var attr =(item.submenu !=null)?' _submenu="'+item.submenu+'"':'';
					if(item.callback)
					{
						var _callback_=item.data?[item.callback,item.data]:[item.callback];
						callbacks[obj.name +'_callback_'+ j] = _callback_;
						attr = ' id="'+ obj.name +'_callback_'+ j+'"';
					}
					tbl += '<A href="'+ href +'"'+attr+'>';
					var arrow='';
					if(!(item.submenu === undefined))
					{
						tbl += '<img class="icon arrow" border="0" align="right" width="16" height="16" src="'+this.blankImage+'" />';
					}
					if(useicon)
					{
						var icon = (item.icon)?item.icon:this.blankImage;
						tbl += '<img class="icon" border="0" width="16" height="16" align="absmiddle" src="'+ icon +'" /> ';
					}
					
					tbl +=  item.label + '</A>';
				}
			}else if(item.contentUrl)
			{
				
				ajax_contents[obj.name +'_item'+ j] = item.contentUrl;
				tbl += '<tr><td><div id="'+ obj.name + '_item' + j + '" class="ajax-preloader">Loading...</div><td></tr>';
			}else if(item.contentHtml)
			{
				var _elem =document.getElementById(item.contentHtml);
				html_contents['html_'+item.contentHtml] = _elem.innerHTML;
				tbl += '<tr><td id="html_'+item.contentHtml +'"><td></tr>';
				_elem.innerHTML='';
			}
			tbl += "</td></tr>";
		}

			popup.innerHTML = tbl + '</table>';
			popup.firstChild.style.width = (popup.offsetWidth+30) +"px";
			popup.style.display = 'none';
			
			for(c in html_contents)
			{
				if(html_contents[c])
				{
					document.getElementById(c).innerHTML=html_contents[c];
					html_contents[c]=null;
				}
			}
			for(c in ajax_contents)
			{
				if(ajax_contents[c])
					$('#'+c).load(ajax_contents[c]);
			}
			for(c in callbacks)
			{
				if(callbacks[c])
				{
					$('#'+c).click(function()
					{
						document.hitTestPopup=false;
						$.popupMenu.docMouseDownHandler() ;
						var cdata=callbacks[c];
						if(cdata[1])
							cdata[0](cdata[1]);
						else
							cdata[0]();
					});
				}
			}
			
			var zIndex = popup.style.zIndex;
			$('#'+ obj.name + ' a').mouseover(function(e)
			{
				this.className='hover';
				if(this.getAttribute('_submenu')!=null)
				{
					if(popup.currSub && popup.currSub!= this)
					{
						$.popupMenu.hide(popup.currSub.submenu);
						popup.currSub.className="";
						popup.currSub=false;
					}
					this.submenu = $('#' + this.getAttribute('_submenu'));
					this.submenu.css( {'z-index':++zIndex});

					popup.currSub = this;
					this.isSubmenu=true;
					this.popup=popup;
					$.popupMenu.showSubMenu(this.submenu,this);
				}else{
					if(popup.currSub)
					{
						$.popupMenu.hide(popup.currSub.submenu);
						popup.currSub.className="";
						popup.currSub=false;
					}
				}
				
		    });
		    $('#'+ obj.name + ' a').mouseout(function(e)
			{
				if(this.getAttribute('_submenu')==null)
					this.className="";
		    });
			
		
	},
	
	docMouseDownHandler:function(e) 
	{
		if(document.hitTestPopup!=true)
		{
			$.popupMenu.hide(document.cur_popup);
			$(document).unbind("mousedown", $.popupMenu.docMouseDownHandler);
		}
	},
	getDisplayPos: function(popup,refElem)
	{
		var popupElem  = popup.get(0);
		var alignment  = popupElem.alignment;
		var objref     = $(refElem);
		
		var posRef     = objref.offset();
		posRef.width   = objref.outerWidth();
		posRef.height  = objref.outerHeight();
	
		//if(refElem.isSubmenu){
			//alert(refElem.popup.tagName);
			//var parentPopup= $(refElem.popup)
			//posRef.left  = parentPopup.offset().left;
			//posRef.width = parentPopup.outerWidth()-1;
		//}
		
		var pop_width  = popup.outerWidth();
		var pop_height = popup.outerHeight();

		var pop_left   = refElem.isSubmenu?(posRef.left + posRef.width-1):posRef.left;
		var pop_top    = refElem.isSubmenu?(posRef.top):posRef.top+posRef.height;

		
		if(refElem.isSubmenu != true)
		{
			if(alignment == 'right'){
				pop_left   = (posRef.left+posRef.width)-pop_width;
			}
			else if(alignment == 'center')
				pop_left   = posRef.left - ((pop_width - posRef.width)/2);
		}
		var pop_right   = pop_left + pop_width;
		var pop_bottom  = pop_top  + pop_height;
	
		var doc = $(window);
		var doc_dim    = {width:doc.width(),height:doc.height()};
		var doc_scroll =  {left:doc.scrollLeft(),top:doc.scrollTop()};

		if(refElem.isSubmenu)
		{
				if(pop_right > doc_dim.width + doc_scroll.left)
					pop_left =  posRef.left  - pop_width;
		}else{
				if(alignment == 'right')
				{
					if(pop_left < doc_scroll.left)
						pop_left = posRef.left;
				}
				else if(alignment == 'center')
				{
					if(pop_left < doc_scroll.left)
						pop_left = posRef.left;
					else if(pop_right > doc_dim.width + doc_scroll.left)
						pop_left = (posRef.left + posRef.width) - pop_width;
				}
				else
				{
					if(pop_right > doc_dim.width + doc_scroll.left)
						pop_left = (posRef.left + posRef.width) - pop_width;
				}
		}
		if(pop_bottom > doc_dim.height + doc_scroll.top)
		{
			if(popup.isSubmenu)
				pop_top = (posRef.top+posRef.height) - pop_height;
			else
				pop_top = (posRef.top - pop_height);
		}

		return  {left:pop_left,top:pop_top};
	},
	show: function(name, refElem) 
	{
		$(document).unbind("mousedown", this.docMouseDownHandler);
		popup = $('#'+name);
		if(document.cur_popup){
			if(document.cur_popup!=popup)
			{
				this.hide(document.cur_popup)
				if(document.cur_refElem==refElem)
				{
					document.cur_refElem=null;
					return;
				}
			}
		}
		
		document.cur_refElem = refElem;
		document.cur_popup = popup;
		document.cur_popupobj = this;
		
		refElem.active = true;
		var popupElem=popup.get(0);
		if(popupElem.buttonWidth==true) 
		{
			//var w= popupElem.offsetWidth - popupElem.clientWidth;
			//alert(refElem.offsetWidth)
			popupElem.style.width = refElem.offsetWidth + 'px';
			popupElem.firstChild.style.width ='100%';
		}
		var pos= this.getDisplayPos(popup,refElem);
		popup.css({
			'left': pos.left,
			'top': pos.top
		});
		
		//popup.fadeIn(140,function(){$(document).bind("mousedown",document.cur_popupobj.docMouseDownHandler)});
		popup.show();
		window.setTimeout('$(document).bind("mousedown",document.cur_popupobj.docMouseDownHandler)',50);
		
	},
	showSubMenu: function(popup, refElem) 
	{
		var pos = this.getDisplayPos(popup,refElem);
		popup.css({
			'left': pos.left,
			'top': pos.top
		});
		//popup.fadeIn(140);
		popup.show();
		
		
	},
	hide: function(popup) 
	{
		//$(document).unbind("mousedown", this.docMouseDownHandler);
		if(!popup){
			if(document.cur_popup)
				popup = document.cur_popup;
			else
				return;
		}
		if(document.cur_popup==popup)
		{
			if(document.cur_refElem)
			{
				document.cur_refElem.active = false;
				document.cur_refElem.className = document.cur_refElem.deffClass;
			}
			document.cur_popup=null;
		}
		
		var popupElem = popup.get(0);
		popup.hide();
        if(popupElem.currSub)
        {
			popupElem.currSub.className='';
			$.popupMenu.hide(popupElem.currSub.submenu);
        }
	},
	attachToElements: function(elems,popid) 
	{
		var elems   =  $(elems);
		//var popup =  $('#'+popid);
		
		elems.each( function()
		{
			this.deffClass = this.className;
		})
		elems.mouseover(function(e)
		{
			if(this.active!=true)
			{
				if(document.cur_popup)
				{
					this.className = this.deffClass + '-active';
					$.popupMenu.show(popid,this);
				}else
				this.className = this.deffClass + '-hover';
			}
		
		});
		elems.mouseout(function()
		{
			if(this.active!=true)
				this.className = this.deffClass;
		});
		elems.mousedown(function()
		{
			this.className = this.deffClass + '-active';
			
			$.popupMenu.show(popid,this);
		});
	}
});
$(document).ready(function()
{
	$.popupMenu = new PopupMenu(); // singleton instance
});
})(jQuery);

function collapsiblePanel(panels)
{
	var elems = $(panels);
	elems.each( function()
	{
		var childs= $(this).children();
		
		childs[0].onclick=function()
		{
			var c=childs[1];
			if(c.style.display=='none')
			{
				this.className="sb_title collaps";
				$(c).show();
			}else
			{
				this.className="sb_title expand";
				$(c).hide();
			}
		}
	})
	
}
