////////////////////////////////////////////////////////////////////////////////////////////////
//
//			PLUGIN:		TNT SCROLL
//			VERSION:	1.0
//			AUTHOR:		ROMAN D. PACHECO
//			NOTES:		
//						TO DO:
//							ADD HORIZONTAL SCROLL
//			SETTINGS:
//				$("myContainer").tnt_scroll({
//					direction	:	"vertical",		// [vertical]; horizontal COMING SOON
//					cssPos		:	"relative",		// [relative|absolute|static|fixed]
//					trigger		:	"mouseover",	// [hover|click|mouseover|etc]; ANY BINDABLE EVENT
//					distance	:	50,				// NUMBER OF PIXELS TO MOVE
//					speed		:	250,			// MILISECONDS IT TAKES TO MOVE distance
//					showArrows	:	true,
//					arrowTag	:	"div"
//				});
////////////////////////////////////////////////////////////////////////////////////////////////
(function($){var _v={pluginName:"tnt_scroll",contentWrapClass:"tnt_scroll-contentWrap",contentClass:"tnt_scroll-content",arrowUpClass:"tnt_scroll-arrowUp",arrowDownClass:"tnt_scroll-arrowDown"},_s={direction:"vertical",cssPos:"relative",trigger:"mouseover",distance:50,speed:250,showArrows:true,arrowTag:"div"},_e={contentWrap:$("<div />",{"class":_v.contentWrapClass}),content:$("<div />",{"class":_v.contentClass})},_m={init:function(o,callback){return this.each(function(){var $this=$(this),data=$this.data(_v.pluginName);if(!data){var settings=$.extend(true,{},_s),contentWrap=_e.contentWrap.clone(),content=_e.content.clone(),cssProps={"padding-top":"top","padding-right":"right","padding-bottom":"bottom","padding-left":"left"};if(o){$.extend(true,settings,o);};settings.arrowTag=typeof settings.arrowTag=="string"?$("<"+settings.arrowTag+"/>"):settings.arrowTag;var arrowUp=$(settings.arrowTag).clone(),arrowDown=$(settings.arrowTag).clone();arrowUp.addClass(_v.arrowUpClass);arrowDown.addClass(_v.arrowDownClass);contentWrap.append(content);content.html($this.html());$this.css({position:settings.cssPos}).html(contentWrap).prepend(arrowUp,arrowDown);$this.data(_v.pluginName,{obj:$this,settings:settings,contentWrap:contentWrap,content:content,arrowUp:{obj:arrowUp,isTriggered:false},arrowDown:{obj:arrowDown,isTriggered:false}});data=$this.data(_v.pluginName);$.each(cssProps,function(i,v){data.contentWrap.css(v,data.obj.css(i));});data.arrowUp.obj.css("top",data.obj.css("padding-top"));data.arrowDown.obj.css("bottom",data.obj.css("padding-bottom"));data.contentWrap.css({top:parseFloat(data.contentWrap.css("top"))+data.arrowUp.obj.outerHeight(),bottom:parseFloat(data.contentWrap.css("bottom"))+data.arrowDown.obj.outerHeight()});data.arrowUp.obj.bind(data.settings.trigger,function(){_m.scrollDown.call($this);});if(settings.trigger=="mouseover"){arrowUp.bind("mouseout",function(){data.arrowUp.isTriggered=false;});};data.arrowDown.obj.bind(data.settings.trigger,function(){_m.scrollUp.call($this);});if(settings.trigger=="mouseover"){arrowDown.bind("mouseout",function(){data.arrowDown.isTriggered=false;});};var arrowInit=["hide","hide"];if(settings.showArrows){arrowInit=["show","show"];};_m.manageArrows.call($this,["up","down"],arrowInit);};if(typeof callback=="function"){callback();};});},manageArrows:function(arrow,action){return this.each(function(){var $this=$(this),data=$this.data(_v.pluginName);if(data){arrow=$.isArray(arrow)?arrow:[arrow];action=$.isArray(action)?action:[action];$.each(arrow,function(i,v){var arrow;switch(v){case"up":arrow=data.arrowUp.obj;break;case"down":arrow=data.arrowDown.obj;break;};var bottomPos=data.content.height()-data.contentWrap.height()+data.content.position().top;switch(action[i]){case"hide":if((v=="up"&&data.content.position().top>=0)||(v=="down"&&bottomPos<=0)||!data.settings.showArrows){$(arrow).hide();};break;default:if((v=="up"&&data.content.position().top<0)||(v=="down"&&bottomPos>0)){$(arrow).show();};};});};});},scrollUp:function(){return this.each(function(){var $this=$(this),data=$this.data(_v.pluginName);if(data){var bottomPos=data.content.height()-data.contentWrap.height()+data.content.position().top;if(bottomPos>0){data.arrowDown.isTriggered=true;data.content.animate({top:"-="+data.settings.distance+"px"},data.settings.speed,"linear",function(){_m.manageArrows.call($this,"up","show");if(data.arrowDown.isTriggered){_m.scrollUp.call($this);};});}else{_m.manageArrows.call($this,"down","hide");};};});},scrollDown:function(){return this.each(function(){var $this=$(this),data=$this.data(_v.pluginName);if(data){if(data.content.position().top<0){data.arrowUp.isTriggered=true;data.content.animate({top:"+="+data.settings.distance+"px"},data.settings.speed,"linear",function(){_m.manageArrows.call($this,"down","show");if(data.arrowUp.isTriggered){_m.scrollDown.call($this);};});}else{_m.manageArrows.call($this,"up","hide");};};});}};$.fn[_v.pluginName]=function(m){if(_m[m]){return _m[m].apply(this,Array.prototype.slice.call(arguments,1));}else if(!m||typeof m=="object"){return _m.init.apply(this,arguments);}else{$.error(_v.pluginName+": Invalid method passed");};}})(jQuery);
