/************************************************************************
*************************************************************************
@Name :      	jScrollbar - jQuery Plugin
@Revison :  1.0
@Date :        21/03/2011
@Author:	 Surrel Mickael - http://www.myjqueryplugins.com
@License :		 Open Source - MIT License : http://www.opensource.org/licenses/mit-license.php
**************************************************************************
*************************************************************************/
(function($) {
	$.fn.jScrollbar= function(op) {
        var defaults = {
			scrollStep : 10,
			allowMouseWheel : true
        };
		
		if(this.length>0)
		return this.each(function() {
			
			/*
			// Vars
			*/
			var 
				$this = $(this),
				opts = $.extend(defaults, op),
				js_mask = $this.find('.jScrollbar_mask'),
				js_drag = $this.find('.jScrollbar_draggable a.draggable'),
				js_Parentdrag = $this.find('.jScrollbar_draggable'),
				diff = parseInt(js_mask.innerHeight()) - parseInt($this.height());
			
			/** if mask container is heighter than the main container **/
			if(diff > 0)
			{
				js_Parentdrag.show();
				var pxDraggable = parseInt(js_Parentdrag.height()) - parseInt(js_drag.height());;
				var pxUpWhenScrollMove = opts.scrollStep;
				var pxUpWhenMaskMove = pxUpWhenScrollMove * (diff/pxDraggable);
				
				js_drag
				.click(function(e){e.preventDefault();})
				.draggable({
					axis:'y',
					containment: js_Parentdrag,
					scroll: false,
					drag: function(event, ui){
						js_mask.css('top','-'+(ui.position.top * (diff/pxDraggable))+'px');
					}
				});
				
				
				/** if mousewheel allowed **/
				if(opts.allowMouseWheel)
				$this.mousewheel(function(objEvent, intDelta) {
					// mousewheel up (first if)  and mousewheel down (second if)
					if (intDelta > 0 && parseInt(js_mask.css('top')) < 0){
						js_drag.stop(true, true).animate({top:'-='+pxUpWhenScrollMove+'px'}, 100);
						js_mask.stop(true, true).animate({top:'+='+pxUpWhenMaskMove+'px'},100,function(){
							RelativeTop = parseInt(js_mask.css('top'));
							if(RelativeTop > 0 ) {
								js_drag.animate({top:'0px'},150);
								js_mask.css({top:0});
							}
						});
					}
					else if (intDelta < 00 && parseInt(js_mask.css('top')) > -diff) {
						js_drag.stop(true, true).animate({top:'+='+pxUpWhenScrollMove+'px'}, 100);
						js_mask.stop(true, true).animate({top:'-='+pxUpWhenMaskMove+'px'},100,function(){
							RelativeTop = parseInt(js_mask.css('top'));
							if(RelativeTop < -diff)
							{
								js_mask.css({top:-diff});
								js_drag.animate({top:pxDraggable},150);
							}
						});
					}
				});
				
			}
		});

	};
	
	var map=new Array();
	$.Watermark = {
		ShowAll:function(){
			for (var i=0;i<map.length;i++){
				if(map[i].obj.val()==""){
					map[i].obj.val(map[i].text);					
					map[i].obj.css("color",map[i].WatermarkColor);
				}else{
				    map[i].obj.css("color",map[i].DefaultColor);
				}
			}
		},
		HideAll:function(){
			for (var i=0;i<map.length;i++){
				if(map[i].obj.val()==map[i].text)
					map[i].obj.val("");					
			}
		}
	};
	
	$.fn.Watermark = function(text,color) {
		if(!color)
			color="#666666";
		return this.each(
			function(){		
				var input=$(this);
				var defaultColor=input.css("color");
				map[map.length]={text:text,obj:input,DefaultColor:defaultColor,WatermarkColor:color};
				function clearMessage(){
					if(input.val()==text || input.val()=="This field is required" || input.val()=="Invalid Email Address")
						input.val("");
					input.css("color",defaultColor);
				}

				function insertMessage(){
					if(input.val().length==0 || input.val()==text){
						input.val(text);
						input.css("color",color);	
					}else
						input.css("color",defaultColor);				
				}

				input.focus(clearMessage);
				input.blur(insertMessage);								
				input.change(insertMessage);
				
				insertMessage();
			}
		);
	};
})(jQuery);
