/*
 * ajaxContextMenu - jQuery plugin for right-click context menus based on ajax xml files
 *
 * Author: Erik Dohmen
 * http://www.2BinBusiness.nl
 *
 * Main parts of this plugin are inspired by Chris Domigan's ContextMenu plugin
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Version: 1
 * Date: 12 june 2008
 *
 *
 */

(function($){var menu,shadow,trigger,content,hash,currentTarget;var defaults={menuStyle:{listStyle:'none',padding:'1px',margin:'0px',backgroundColor:'#fff',border:'1px solid #999',width:'135px'},itemStyle:{margin:'0px',color:'#000',display:'block',cursor:'default',padding:'3px',border:'1px solid #fff',backgroundColor:'transparent'},itemHoverStyle:{border:'1px solid #0a246a',backgroundColor:'#b6bdd2'},eventPosX:'pageX',eventPosY:'pageY',shadow:true,onContextMenu:null,onShowMenu:null};var busy=false;$.fn.contextMenu=function(e,url,options){if(!menu){menu=$('<div id="jqAjaxContextMenu"></div>').hide().css({position:'absolute',zIndex:'500'}).appendTo('body').bind('click',function(e){e.stopPropagation();});}
if(!shadow){shadow=$('<div></div>').css({backgroundColor:'#000',position:'absolute',opacity:0.2,zIndex:499}).appendTo('body').hide();}
hash=hash||[];if(!hash[url]){$.ajax({type:'post',url:url,dataType:'xml',success:function(xmlData){tempHash=[];tempHash.push({menuStyle:$.extend({},defaults.menuStyle,options.menuStyle||{}),itemStyle:$.extend({},defaults.itemStyle,options.itemStyle||{}),itemHoverStyle:$.extend({},defaults.itemHoverStyle,options.itemHoverStyle||{}),bindings:options.bindings||{},shadow:options.shadow||options.shadow===false?options.shadow:defaults.shadow,onContextMenu:options.onContextMenu||defaults.onContextMenu,onShowMenu:options.onShowMenu||defaults.onShowMenu,eventPosX:options.eventPosX||defaults.eventPosX,eventPosY:options.eventPosY||defaults.eventPosY,xml:xmlData});hash[url]=tempHash[0];makeContextMenu(url,e);}});}else{makeContextMenu(url,e);}};var menuItems=$('<div><ul></ul></div>');function makeContextMenu(url,e){var cur=hash[url];$("menuItem",cur.xml).each(function(){_type=$("type",this).text()
switch(_type){case"title":doTitle(this);break;case"separator":doSeparator();break;case"confirm":doConfirm(this);break;case"alert":doAlert(this);break;case"url":doUrl(this);break;case"callback":doCallback(this);break;}});menuItems.find("ul:first").css(cur.menuStyle).find('li:not(.disabled):not(.separator)').hover(function(){$(this).attr("hoverClass")?$(this).addClass($(this).attr("hoverClass")):$(this).css(cur.itemHoverStyle);},function(){$(this).attr("hoverClass")?$(this).removeClass($(this).attr("hoverClass")):$(this).css(cur.itemStyle);});menuItems.find('li').find('img').css({verticalAlign:'middle',paddingRight:'2px'});menu.find("ul").remove();menu.html(menuItems.find("ul:first"));menuItems=$('<div><ul ></ul></div>');;menu.css({'left':e[cur.eventPosX],'top':e[cur.eventPosY]}).show();shadow.css({width:menu.width(),height:menu.height(),left:e.pageX+2,top:e.pageY+2}).show();$(document).one('click',contextHide);}
function doTitle(info){var Li="<li hoverClass=\""+$("hoverclass",info).text()+"\" class=\""+$("class",info).text()+"\">"+$("title",info).text()+"</li>";menuItems.find("ul").append(Li);}
function doSeparator(info){var Li="<li hoverClass=\""+$("hoverclass",info).text()+"\" class=\"separator\"><hr /></li>";menuItems.find("ul").append(Li);}
function doConfirm(info){var img="";if($("icon",info).text()){img="<img src=\""+$("icon",info).text()+"\" />";}
disabled="";if($("disabled",info).text()){disabled="disabled";$("class",info).text("disabled");}
var Li="<li "+disabled+" hoverClass=\""+$("hoverclass",info).text()+"\" class=\""+$("class",info).text()+"\">"+img+$("title",info).text()+"</li>";menuItems.find("ul").append(Li);if(!disabled){menuItems.find("ul").find("li:last").bind('click',function(){contextHide();if(answer=confirm($("text",info).text())){window.open($("url",info).text(),'_self');}});}}
function doAlert(info){var img="";if($("icon",info).text()){img="<img src=\""+$("icon",info).text()+"\" />";}
disabled="";if($("disabled",info).text()){disabled="disabled";}
var Li="<li hoverClass=\""+$("hoverclass",info).text()+"\"  class=\""+$("class",info).text()+"\">"+img+$("title",info).text()+"</li>";menuItems.find("ul").append(Li);if(!disabled){menuItems.find("ul").find("li:last").bind('click',function(){contextHide();alert($("text",info).text());});}}
function doUrl(info){var img="";if($("icon",info).text()){img="<img src=\""+$("icon",info).text()+"\" />";}
var Li="<li hoverClass=\""+$("hoverclass",info).text()+"\"  class=\""+$("class",info).text()+"\">"+img+$("title",info).text()+"</li>";menuItems.find("ul").append(Li);menuItems.find("ul").find("li:last").bind('click',function(){contextHide();window.open($("url",info).text(),'_self');});}
function doCallback(info){var img="";if($("icon",info).text()){img="<img src=\""+$("icon",info).text()+"\" />";}
var Li="<li hoverClass=\""+$("hoverclass",info).text()+"\"  class=\""+$("class",info).text()+"\">"+img+$("title",info).text()+"</li>";menuItems.find("ul").append(Li);menuItems.find("ul").find("li:last").bind('click',function(){contextHide();eval($("callback",info).text());});}
function contextHide(){menu.hide();shadow.hide();}})(jQuery);
