 //Plugins
/*** Alignment: by Read Appenbrink ***/
(function($){
  var target;
  var tcoords;
  var defaults = { offsets:[0,0],animation:false };
  var action;
  var options;
  //var events = $({});


  $.fn.alignTo = function(t,action,options){
	target = $(t);
	if(target.attr('id') === ''){
	  target.attr('id',"jQuery_" + $.data(target));
	}
	//console.log(target.attr('id'));
	tcoords = getElCoords(target);
	//console.log(this[0].className);
	this.each(function(el) {
	  el = $(this);
	  setOptions(el);
	  align(el);
	});
	
	/** FUNCTION **/
	function align(el){
	  t = {top:null,left:null};
	  ocoords = getElCoords(el);
	  tokens = action.split("to",2);
	  switch(true){
		case (tokens[1].lastIndexOf("R") >= 0):
		  t.left = tcoords.r;
		  break;
		case (tokens[1].lastIndexOf("L") >= 0):
		  t.left = tcoords.l;
		  break;
	  }
	  switch(true){
		case (tokens[1].lastIndexOf("T") >= 0):
		  t.top = tcoords.t;
		  break;
		case (tokens[1].lastIndexOf("B") >= 0):
		  t.top = tcoords.b;
		  break;
	  }
	  switch(true){
		case (tokens[1].lastIndexOf("C") === 0):
		  t.left = (tcoords.l + target.outerWidth()/2);
		  t.top = (tcoords.t + target.outerHeight()/2);
		  break;
		case (tokens[1].lastIndexOf("C") === 1 && (tokens[1].charAt(0) === 'T' || tokens[1].charAt(0) === 'B' )):
		  t.left = (tcoords.l + target.outerWidth()/2);
		  break;
		case (tokens[1].lastIndexOf("C") === 1 && (tokens[1].charAt(0) === 'R' || tokens[1].charAt(0) === 'L' )):
		  t.top = (tcoords.t + target.outerHeight()/2);
		  break;
	  }
	  
	  switch(true){
		case (tokens[0].lastIndexOf("R") >= 0):
		  t.left -= el.outerWidth();
		  break;
	  }
	  switch(true){
		case (tokens[0].lastIndexOf("B") >= 0):
		  t.top -= el.outerHeight();
		  break;
	  }
	  switch(true){
		case (tokens[0].lastIndexOf("C") === 0):
		  t.left -= (el.outerWidth()/2);
		  t.top -= (el.outerHeight()/2);
		  break;
		case (tokens[0].lastIndexOf("C") === 1 && (tokens[0].charAt(0) === 'T' || tokens[0].charAt(0) === 'B' )):
		  t.left -= (el.outerWidth()/2);
		  break;
		case (tokens[0].lastIndexOf("C") === 1 && (tokens[0].charAt(0) === 'R' || tokens[0].charAt(0) === 'L' )):
		  t.top -= (el.outerHeight()/2);
		  break;
	  }

	  //console.log("BeforeAlign From: "+ocoords.l+","+ocoords.t+"  To: "+t.left+","+t.top);
	  if(t.left === null)
		t.left = ocoords.l;
	  if(t.top === null)
		t.top = ocoords.t;
	  if(el.parents().is("#"+target.attr('id'))){
		t.left -= ocoords.l;
		t.top -= ocoords.t;
		if(target.css('position') == 'absolute'){
		  t.left -= (tcoords.l - ocoords.l);
		}
	  }
	  
	  {
		t.left += (options.offsets[0] + $("html").scrollLeft());
		t.top += (options.offsets[1] + $("html").scrollTop());
	  }
	  
	  //console.log("Align From: "+ocoords.l+","+ocoords.t+"  To: "+t.left+","+t.top);
	  if(options.animation === true){
		el.css({position: 'absolute'});
		el.animate({
		  left: t.left, 
		  top: t.top
		},1000,"swing");
	  }else{
		el.css({ 
		  position: 'absolute',
		  //zIndex: 5000,
		  //margin: 0,
		  left: t.left, 
		  top: t.top
		});
	  }
	};
	
	/** FUNCTION **/
	function setOptions(new_options) {
	  options = $.extend({}, defaults, options, new_options);
	}
	
	/*function setOptions(el) {
	  $.each(options, function(event, fn) {
		if (typeof(fn) == 'function')
		  el.bind(event, fn);
	  });
	  options = $.extend({}, defaults, el.data('alignTo:options'), options);
	  el.data('alignTo:options', options);
	};*/
	
	
	return this;
  };
  
  function getElCoords(el){
	el = $(el);
	//console.log("ID: "+el[0].className);
	//console.log($("html").scrollTop());
	offset = getRealOffset(el);
	
	//console.log(top+","+left);
	bottom = offset.top + el.outerHeight();
	right = offset.left + el.outerWidth();
	return {t:offset.top,l:offset.left,b:bottom,r:right};
  };
  function getRealOffset(el){
	el = $(el);
	var left = el.offset().left, top = el.offset().top;
	var mleft = 0;
	var parent = el.parent();
	//console.log("OffsetParent Left: "+el.offsetParent().offset().left+" Top: "+el.offsetParent().offset().top);
	//console.log("Left: "+left+" Top: "+top);
	  if(el.css('position') != 'static'){
		while (parent && (!/^body|html$/i.test(parent[0].tagName) )&& parent.css('position') == 'static' ){
		  //left += parent.offset().left;
		  //top += parent.offset().top;
		  //console.log("TLeft: "+left+" TTop: "+top+"  El: "+parent[0].tagName+" ID: "+parent.attr('id')+" Offset: "+parent.offset().left+","+parent.offset().top+" Position: "+parent.css('position'));
		  
		  parent = parent.parent();
		}
		left += parent.offset().left;// + $("html").scrollLeft();
		top += parent.offset().top;
	  }
	//console.log("Left: "+left+" Top: "+top);
	return {left: left,top:top};
  };
})(jQuery);




/*** Others ****/


(function($) {

	function toArray(strg){
		strg = strg.replace(/left|top/g,'0px');
		strg = strg.replace(/right|bottom/g,'100%');
		strg = strg.replace(/([0-9\.]+)(\s|\)|$)/g,"$1px$2");
		var res = strg.match(/(-?[0-9\.]+)(px|\%|em|pt)\s(-?[0-9\.]+)(px|\%|em|pt)/);
		return [parseFloat(res[1],10),res[2],parseFloat(res[3],10),res[4]];
	}
	$.extend($.fx.step,{
	    backgroundPosition: function(fx) {
            if (!fx.bgPosReady) {
                var start = $.curCSS(fx.elem,'backgroundPosition');
				if(!start){
					return false;
				}
				//console.log('T')
                start = toArray(start);
                fx.start = [start[0],start[2]];
                var end = toArray(fx.end);
                fx.end = [end[0],end[2]];
                fx.unit = [end[1],end[3]];
				fx.bgPosReady = true;
			}
			var nowPosX = [];
			nowPosX[0] = ((fx.end[0] - fx.start[0]) * fx.pos) + fx.start[0] + fx.unit[0];
			nowPosX[1] = ((fx.end[1] - fx.start[1]) * fx.pos) + fx.start[1] + fx.unit[1];           
			fx.elem.style.backgroundPosition = nowPosX[0]+' '+nowPosX[1];
        }
	});
})(jQuery);
 
(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY;};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev]);}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev]);};var handleHover=function(e){var p=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget;while(p&&p!=this){try{p=p.parentNode;}catch(e){p=this;}}if(p==this){return false;}var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);}if(e.type=="mouseover"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob);},cfg.timeout);}}};return this.mouseover(handleHover).mouseout(handleHover);};})(jQuery);
 //console.log("Plugins loaded");