(function($){

	$.fn.unselectable = function(object) {
		return this.each(function() {

			if(typeof(this.onselectstart) != 'undefined') {
				$(this).bind('selectstart',function(event){return false;});
			} else if (typeof(this.style.MozUserSelect) != 'undefined') {
				$(this).css('MozUserSelect','none');
			} else {
				$(this).css('cursor','default');
				$(this).mousedown(function(event){return false;});
			}
		});
	};

         $.autoOverflow = function(element_id){

        element = jQuery('#'+element_id);

        if(element.height() > 250)
        {
            var scrollbar = element.find('.js-select-scrollbar');
            var scrollarea = element.find('ul');
            var scrollup = element.find('.js-select-scrollbar-up');
            var scrollmove = element.find('.js-select-scrollbar-move');
            var scrolldown = element.find('.js-select-scrollbar-down');

            element.css('height','250px');
            scrollbar.css('height',element.height()+'px').css('display','block')
            scrollarea.css('width',(element.width() - scrollbar.outerWidth() - 1)+'px');
            scrollarea.css('position','relative');
            scrollarea.css('float','left');

            var min = scrollup.position().top + scrollup.outerHeight() + 1;
            var max = scrolldown.position().top - scrollmove.outerHeight() - 1;
            var height = scrollarea.outerHeight() - element.innerHeight() - 1;
            var factor = -(height/max);

            var mousescroll = function (direction)
            {
                var pixels = scrollmove.position().top + (5 * direction);
                doscroll (pixels);
            };

            var doscroll = function (pixels)
            {
                if(pixels <= min)
                {
                    scrollmove.css('top',min+'px');
                    scrollarea.css('top','0px');
                }
                else if(pixels >= max)
                {
                    scrollmove.css('top',max+'px');
                    scrollarea.css('top',(max*factor)+'px');
                }
                else
                {
                    scrollmove.css('top',pixels+'px');
                    scrollarea.css('top',(pixels*factor)+'px');
                }
            };

            element.bind('DOMMouseScroll',function(event)
            {
                event.preventDefault();
                event.stopPropagation();

                var direction = event.detail > 0 ? 1 : -1;
                mousescroll(direction);
            });

            element.bind('mousewheel',function(event)
            {
                event.preventDefault();
                event.stopPropagation();

                var direction = event.wheelDelta > 0 ? -1 : 1;
                mousescroll(direction);
            });

            element.find('.js-select-scrollbar-move').mousedown(function(event)
            {
                event.preventDefault();
                event.stopPropagation();

                var delta = event.pageY - scrollmove.position().top;

                element.bind('click.jsscroller', function(event){
                    event.preventDefault();
                    event.stopImmediatePropagation();
                    element.unbind('click.jsscroller');
                });

                $(document).bind('mouseup.jsscroller', function(event)
                {
                    $(document).unbind('mousemove.jsscroller').unbind('mouseup.jsscroller');
                });

                $(document).bind('mousemove.jsscroller', function(event)
                {
                    var pixels = event.pageY - delta;
                    doscroll(pixels);
                });
            });

            scrollbar.css('display','block').click(function(event)
            {
                event.preventDefault();
                event.stopPropagation();

                if(event.target == scrollup[0])
                {
                    mousescroll(-1);
                }
                else if (event.target == scrolldown[0])
                {
                    mousescroll(1);
                }
            });
        }
    }

	$.magnify = function(selection_pattern){

            $(selection_pattern).each(function(){
                
                var image_source = jQuery(selection_pattern).attr('src');
                var position = $(this).position();
               

                $(this).attr('status',-1);

                $(this).click(function(event){
                    event.stopPropagation();
                    event.preventDefault();

                    image =  $(this);

                    if(image.attr('status')<=0){
                          image.css('z-index',1000);
                          image.css('position','absolute');
                          image.css('width','383px');
                            
                          if(image.attr('status')<0){
                            image.css('top',position.top);
                            image.css('left',position.left);
                          }
                            

                          image.animate({
                            top: 10,
                            width: "800px"
                          }, 500 );

                           image.attr('status',1);
                        }
                    else{
                          image.animate({
                            top:position.top,
                            left:position.left,
                            width: "383px"
                          }, 500 , 'linear',function(){
                             image.css('z-index',0);
                              image.css('position','static');
                              image.attr('status',0);
                          });
                    }
                
                });

            });
            

	}

})(jQuery);


