/*
 * jQuery jScrollTouch plugin 1.1
 *
 * Copyright (c) 2010 Damien Rottemberg damien@dealinium.com
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 *
 */


(function($){
  $.fn.jScrollTouch = function () {
	if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i))) {
 		var isTouchScreen = 1;
 	}else{
 		var isTouchScreen = 0;
 	}
	
	if (isTouchScreen){
	 	$(this).css({'overflow': 'auto','position':'relative'});
		return this.each(function() {
			var cont = $(this);
			
			var height = 0;
			var cpos = cont.scrollTop()
			cont.scrollTop(100000);
			height = cont.scrollTop();
			cont.scrollTop(cpos);
			var fullheight = height + cont.outerHeight();
			var scrollbarV_length = cont.innerHeight()*(cont.innerHeight()/fullheight)+2;
			
			var width = 0;
			var lpos = cont.scrollLeft();
			cont.scrollLeft(100000);
			width = cont.scrollLeft();
			cont.scrollLeft(lpos);
			var fullwidth = width + cont.outerWidth();
			var scrollbarH_length = cont.innerWidth()*(cont.innerWidth()/fullwidth)+2;
			
			
			if(isTouchScreen){
				var scrollbarV = $('<div></div>');
				scrollbarV.css({'display':'none','position':'absolute','width':'5px','height':scrollbarV_length+'px','left':cont.innerWidth()-7+'px','top':0,'background':'black','border':'1px white solid','-webkit-border-radius':'5px','opacity':'0.9'});
				
				var scrollbarH = $('<div></div>');
				scrollbarH.css({'display':'none','position':'absolute','height':'5px','width':scrollbarH_length+'px','top':cont.innerHeight()-7+'px','left':0,'background':'black','border':'1px white solid','-webkit-border-radius':'5px','opacity':'0.9'});
				
				
				if(height) cont.append(scrollbarV);
				if(width) cont.append(scrollbarH);
			}
			
		
			cont.bind('mousedown touchstart',function(e){
				cpos = cont.scrollTop();
						
				if(isTouchScreen){
					e = e.originalEvent.touches[0];
				}
				
				if(isTouchScreen){
					scrollbarV.show();
					scrollbarH.show();
				}
				
				var sY = e.pageY;
				var sX = e.pageX;
				
				cont.bind('mousemove touchmove ',function(ev){
					if(isTouchScreen){
						ev.preventDefault();
						ev = ev.originalEvent.touches[0];
						
					}	
					
					var top = cpos-(ev.pageY-sY);
					var left =  lpos-(ev.pageX-sX);
					
					cont.scrollTop(top);
					cpos = cont.scrollTop();
					sY = ev.pageY;
					
					cont.scrollLeft(left);
					lpos = cont.scrollLeft();
					sX = ev.pageX;
					if(isTouchScreen){
						scrollbarV.css({'left':Math.min(cont.innerWidth()-7+lpos,fullwidth)+'px','top':Math.min(cpos+cpos*cont.innerHeight()/fullheight,fullheight-scrollbarV_length)+'px'});
						scrollbarH.css({'top':Math.min(cont.innerHeight()-7+cpos,fullheight)+'px','left':Math.min(lpos+lpos*cont.innerWidth()/fullwidth,fullwidth-scrollbarH_length)+'px'});
						
					}	
				});
				cont.bind('mouseup touchend',function(ev){	
					cont.unbind('mousemove touchmove mouseup touchend');
					if(isTouchScreen){
						scrollbarV.fadeOut();
						scrollbarH.fadeOut();
					}
					
				});
			});
		});
	}
}
})(jQuery);   
