/**
 * create closure
 */
(function($) {
   //
   // plugin definition
   //
   $.fn.citymenu = function(options) {
      // iterate and reformat each matched element
      return this.each(function() {
         $.fn.citymenu.setupmenu(this, options)
      });
   }

   // $this ist das eingabefeld
   $.fn.citymenu.setupmenu = function(el, options) {
      var $this = $(el);
      // build element specific options
      var o = $.extend({}, $.fn.citymenu.defaults, options);

      if ($.fn.metadata)
         $.extend(true, o, $this.metadata());
      
      if (!o.working_link && o.working_link != '#')
         $this.bind('click', function () { return false; });
      $this.bind('mouseover', function () { $this.css('text-decoration', 'underline');
                                            $.fn.citymenu.display('s', $this, o.mname); });
      $this.bind('mousemove', function () { $this.css('text-decoration', 'underline');
                                            $.fn.citymenu.resetMenTime(o.mname); });
      $this.bind('mouseout',  function () { $.fn.citymenu.restartMenTime(o.mname); });

      menu = $(o.mname);
      menu.bind('mouseover', function () { $.fn.citymenu.resetMenTime(o.mname); });
      menu.bind('mousemove', function () { $.fn.citymenu.resetMenTime(o.mname); });
      menu.bind('mouseout',  function () { $.fn.citymenu.restartMenTime(o.mname); });
         
      return $this;
   }
   
   $.fn.citymenu.display = function(mode, link, ele) 
   {
      if (mode == 's') 
      {
         $.fn.citymenu.hideall();
         $(ele).fadeIn('fast', function () {  } );
         
         $.fn.citymenu.subs[ele] = { 'menu' : ele, 
                                     'link' : link.attr('id')};
      }
      else
         $.fn.citymenu.resetMenTime(ele);
   }   
   
   $.fn.citymenu.hideall = function() {
      for (var e in $.fn.citymenu.subs)
      {
         $.fn.citymenu.hideele(e);
      }
      $.fn.citymenu.subs = new Array();
   }

   $.fn.citymenu.hideele = function(ele) {
      if ($.fn.citymenu.subs[ele])
      {
         var o = $.fn.citymenu.subs[ele];
         $("#" + o.link).css('text-decoration', 'none');
         
         $(ele).fadeOut('fast');
      }
   }

   $.fn.citymenu.restartMenTime = function(ele) {
      var i = $.fn.citymenu.tims[ele];
      if (i)
         window.clearTimeout(i);
      i = window.setTimeout(function() { $.fn.citymenu.hideele(ele); }, 1000);
      $.fn.citymenu.tims[ele] = i;
   }

   $.fn.citymenu.resetMenTime = function(ele) {
      var i = $.fn.citymenu.tims[ele];
      if (i)
         window.clearTimeout(i);
      $.fn.citymenu.tims[ele] = false;
   }


   function dbg(o, txt, pure)
   {
      if (window.console && window.console.log)
      {
         if (pure)
            window.console.log(txt + ": " + o);
         else
            window.console.log(txt + ": " + $.toJSON(o));
      }
   };

   $.fn.citymenu.links = new Array();
   $.fn.citymenu.subs = new Array();
   $.fn.citymenu.tims = new Array();

   //
   // plugin defaults
   //
   $.fn.citymenu.defaults = {
     overcolor : '#ffe'
   };

})(jQuery);
