/**
 * jQuery custom event "outerClick".
 * @author David Brockman Smoliansky http://littleroom.se/
 * @license GNU Lesser General Public License: http://creativecommons.org/licenses/LGPL/2.1/
 * @version 1.1
 * 2009/02/27
 *
 * The outerClick event is fired when an element outside of the target element is clicked.
 *
 * Usage:
 * jQuery(selector).bind("outerClick", fn);   // Bind the function fn to the outerClick event on each of the matched elements.
 * jQuery(selector).outerClick(fn);           // Bind the function fn to the outerClick event on each of the matched elements.
 * jQuery(selector).trigger("outerClick");    // Trigger the outerClick event on each of the matched elements.
 * jQuery(selector).outerClick();             // Trigger the outerClick event on each of the matched elements.
 * jQuery(selector).unbind("outerClick", fn); // Unbind the function fn from the outerClick event on each of the matched elements.
 * jQuery(selector).unbind("outerClick");     // Unbind all outerClick events from each of the matched elements.
 */

/*global jQuery */
(function (jQuery, elements, OUTER_CLICK) {

	/**
	 * Check if the event should be fired.
	 * @param {Object} event  The click event.
	 * @private
	 */
	function check(event) {
		for (var i = 0, l = elements.length, target = event.target, el; i < l; i++) {
			el = elements[i];
			if (el !== target && !(el.contains ? el.contains(target) : el.compareDocumentPosition ? el.compareDocumentPosition(target) & 16 : 1)) {
				jQuery.event.trigger(OUTER_CLICK, event, el);
			}
		}
	}


	jQuery.event.special[OUTER_CLICK] = {

		setup: function () {
			var i = elements.length;
			if (!i) {
				jQuery.event.add(document, 'click', check);
			}
			if (jQuery.inArray(this, elements) < 0) {
				elements[i] = this;
			}
		},

		teardown: function () {
			var i = jQuery.inArray(this, elements);
			if (i >= 0) {
				elements.splice(i, 1);
				if (!elements.length) {
					jQuery.event.remove(document, 'click', check);
				}
			}
		}

	};


	/**
	 * Event helper outerClick
	 *
	 * @param  {Function} [fn]  A function to bind to the outerClick event on each of the matched elements.
	 *                          If fn is omitted the event is triggered.
	 * @return {jQuery}         Returns the jQuery object.
	 */
	jQuery.fn[OUTER_CLICK] = function (fn) {
		return fn ? this.bind(OUTER_CLICK, fn) : this.trigger(OUTER_CLICK);
	};

})(jQuery, [], 'outerClick');


/**
 *  jquery.popupt
 *  (c) 2008 Semooh (http://semooh.jp/)
 *
 *  Dual licensed under the MIT (MIT-LICENSE.txt)
 *  and GPL (GPL-LICENSE.txt) licenses.
 *
 **/
(function(jQuery){
	jQuery.fn.extend({
		imghover: function(opt){
			return this.each(function() {
        opt = jQuery.extend({
            prefix: '',
            suffix: '_o',
            src: '',
            btnOnly: true,
            fade: false,
            fadeSpeed: 500
          }, opt || {});

        var node = jQuery(this);
				if(!node.is('img')&&!node.is(':image')){
          var sel = 'img,:image';
          if (opt.btnOnly) sel = 'a '+sel;
          node.find(sel).imghover(opt);
          return;
        }

        var orgImg = node.attr('src');

        var hoverImg;
        if(opt.src){
          hoverImg = opt.src;
        }else{
          hoverImg = orgImg;
          if(opt.prefix){
            var pos = hoverImg.lastIndexOf('/');
            if(pos>0){
              hoverImg = hoverImg.substr(0,pos-1)+opt.prefix+hoverImg.substr(pos-1);
            }else{
              hoverImg = opt.prefix+hoverImg;
            }
          }
          if(opt.suffix){
            var pos = hoverImg.lastIndexOf('.');
            if(pos>0){
              hoverImg = hoverImg.substr(0,pos)+opt.suffix+hoverImg.substr(pos);
            }else{
              hoverImg = hoverImg+opt.suffix;
            }
          }
        }

        if(opt.fade){
          var offset = node.offset();
          var hover = node.clone(true);
          hover.attr('src', hoverImg);
          hover.css({
            position: 'absolute',
            left: offset.left,
            top: offset.top,
            zIndex: 1000
          }).hide().insertAfter(node);
          node.mouseover(
            function(){
              var offset=node.offset();
              hover.css({left: offset.left, top: offset.top});
              hover.fadeIn(opt.fadeSpeed);
              node.fadeOut(opt.fadeSpeed,function(){node.show();});
            }
          );
          hover.mouseout(
            function(){
              node.fadeIn(opt.fadeSpeed);
              hover.fadeOut(opt.fadeSpeed);
            }
          );
        }else{
          node.hover(
            function(){node.attr('src', hoverImg);},
            function(){node.attr('src', orgImg);}
          );
        }
			});
		}
	});
})(jQuery);

/**
 * JQuery dragable simple support.Use:
 * < script type="text/javascript">
 *    makeDraggable(jQuery('#draggable'),ZonaUrmarita);
*  </script>
 *
*/

 var makeDraggable = function(element,dragElement) {
	     element = jQuery(element);
	     dragElement = jQuery(dragElement);
	     // Move the element by the amount of change in the mouse position
	     var move = function(event) {
	         if(dragElement.data('mouseMove')) {
	             var changeX = event.clientX - dragElement.data('mouseX');
	             var changeY = event.clientY - dragElement.data('mouseY');

	             var newX = parseInt(element.css('left')) + changeX;
	             var newY = parseInt(element.css('top')) + changeY;

	             element.css('left', newX);
	             element.css('top', newY);
	             dragElement.data('mouseX', event.clientX);
	             dragElement.data('mouseY', event.clientY);
	         }
	     };

	     dragElement.mousedown(function(event) {
	    	 dragElement.data('mouseMove', true);
	    	 dragElement.data('mouseX', event.clientX);
	    	 dragElement.data('mouseY', event.clientY);
	     });

	     dragElement.parents(':last').mouseup(function() {
	    	 if(dragElement.data('mouseMove')){
	    		 Seam.Component.getInstance("Basket").pozitioneaza(element.css('left'),element.css('top'),null);
	    	 }
	    	 dragElement.data('mouseMove', false);
	     });

	     dragElement.mouseout(move);
	     dragElement.mousemove(move);
	 }