/**
 * @author corey aufang
 * @version 1.0.1
 */
(function($) {
  
  $.conmenu = function(options){
    items.push(options);
    $(options.selector).bind(window.opera?'click':'contextmenu',showmenu);
  };
  
  //defaults
  $.conmenu.containerType = 'div';
  $.conmenu.choicesType = 'div';
  
  var items = [];
  var container = document.createElement($.conmenu.containerType);
  
  $(document).ready(function(){
    $(container).hide().attr('id','conmenu').css('position','absolute').appendTo(document.body);
  });
  
  function showmenu(event){
    event.stopPropagation();
    resetMenu();
		if (window.opera && !event.ctrlKey) {
      return;
    }
    else{
      $(document.body).mousedown(function(){
        resetMenu();
      });
    }
    $.each(items,function(){
      if($.inArray(event.currentTarget,$(this.selector)) > -1){
        $.each(this.choices,function(){
          action = this.action;
          $(document.createElement($.conmenu.choicesType)).html(this.label).click(function(clickEvent){
            clickEvent.stopPropagation();
            resetMenu();
            action(event.currentTarget);
          }).appendTo(container);
        });
      }
    });
		var size = {
      'height':$(window).height(),
      'width':$(window).width(),
      'sT': $(window).scrollTop(),
      'cW':$(container).width(),
      'cH':$(container).height()
    };
		$(container).css({
			'left': ((event.clientX + size.cW) > size.width ? ( event.clientX - size.cW) : event.clientX),
			'top': ((event.clientY + size.cH) > size.height && event.clientY > size.cH ? (event.clientY + size.sT - size.cH) : event.clientY + size.sT)
		}).show();
    return false;
  }
  
  function resetMenu(){
    $(container).hide().empty();
  }
  
})(jQuery);
