/*
 * Droppy 0.1.2
 * (c) 2008 Jason Frame (jason@onehackoranother.com)
 */


(function($) {
  var $doc = $(document);
  var $win = $(window);
  $.fn.scrollFollower = function (options){
    var options = $.extend({}, $.fn.scrollFollower.defaults, options);
		if (options.pageWidth)
			var pageWidth    = parseInt(options.pageWidth);
		else
		{
			alert('pageWidth는 필수 옵션값입니다.');
			return false;
		}
    var $layer = $(this);
    var varType      = options.varType;
    var pageAlign    = options.pageAlign;
    var offset       = pageWidth/2;
    var layerPositon = options.type;
    var margin       = parseInt(options.margin);
    var speed        = parseInt(options.speed);
    var easing       = options.easing;
    var topMargin    = parseInt(options.topMargin);
    var minTop       = parseInt(options.minTop);
    var marginResult = offset + margin;
    $layer.css('z-index', options.zindex);
    $layer.css("position","absolute");
    if (layerPositon === 'left')
     varType = 'right';
    function resetXPosition()
    {
      if (pageAlign === 'center')
      {
        var $screenSize = $('body').width();
        var halfScreenSize = $screenSize/2;
        xPosition = halfScreenSize + marginResult;
      }
      else if (pageAlign === 'left')
      {
        varType   = 'left';
        xPosition = pageWidth + margin;
      }
      $layer.css(varType, xPosition);
    }
    resetXPosition();
    $layer.css('top',topMargin);
    $win.resize(resetXPosition);
    $win.scroll(function(){
      $top = $doc.scrollTop();
      if ($top > topMargin + minTop)
        yPosition = $top + minTop;
      else
        yPosition = $top + topMargin;
      $layer.animate({"top":yPosition }, {duration:speed, easing:easing, queue:false});
    });
  };
  $.fn.scrollFollower.defaults = {
    varType:'left',
    pageAlign:'left',
    type:'left',
    topMargin:0,
    minTop:0,
    margin:0,
    speed:1000,
    easing:'linear',
    zindex:10
    };

	$.fn.droppy = function(options) {
		
	  options = $.extend({speed: 250}, options || {});
	  
	  this.each(function() {
		
		var root = this, zIndex = 1000;
		
		function getSubnav(ele) {
		  if (ele.nodeName.toLowerCase() == 'li') {
			var subnav = $('> ul', ele);
			return subnav.length ? subnav[0] : null;
		  } else {
			return ele;
		  }
		}
		
		function getActuator(ele) {
		  if (ele.nodeName.toLowerCase() == 'ul') {
			return $(ele).parents('li')[0];
		  } else {
			return ele;
		  }
		}
		
		function hide() {
		  var subnav = getSubnav(this);
		  if (!subnav) return;
		  $.data(subnav, 'cancelHide', false);
		  setTimeout(function() {
			if (!$.data(subnav, 'cancelHide')) {
			  $(subnav).slideUp(options.speed);
			}
		  }, 500);
		}
	  
		function show() {
		  var subnav = getSubnav(this);
		  if (!subnav) return;
		  $.data(subnav, 'cancelHide', true);
		  $(subnav).css({zIndex: zIndex++}).slideDown(options.speed);
		  if (this.nodeName.toLowerCase() == 'ul') {
			var li = getActuator(this);
			$(li).addClass('hover');
			$('> a', li).addClass('hover');
		  }
		}
		
		$('ul, li', this).hover(show, hide);
		$('li', this).hover(
		  function() { $(this).addClass('hover'); $('> a', this).addClass('hover'); },
		  function() { $(this).removeClass('hover'); $('> a', this).removeClass('hover'); }
		);
		
	  });
	  
	};

})( jQuery );

