// JavaScript Document
/*
*		===================   Jquery JOW PLUGINS  ==============
*	
*			Version 	: 	0.1.2
*			Desarrollador 	: 	Williams Medina Aguirre
*           Modificado en   :       04-nov-2009, 3:24:47 AM
*                       
*			Copyright (c) 2009 WiLLiAms Medina A. - JOW
* 			Condiciones de uso  | 
*			GPL (http://www.opensource.org/licenses/gpl-license.php)
*
*			Description:
*							-Slider	
*                           -Preload
*                           -Log
*                           -Mascaras
*                           
*			Compatibilidad	: 
*				- IE 6+	
*				- Firefox 2.0 + 
*				- Google Chrome 2, 3 + 
*				- Opera 9, 10 +
*				- Safari
*				
*	       ==========================================================
*
*/
( function($) {
		   /*---------- Consola  ----------*/
        $.Log = function(msj,opcion){
			ol = $.extend( {}  , $.fn.OLog ,opcion );
			
			if($.browser.msie && $.browser.version=="6.0"){
                //No Soporta
			}else{
				if (typeof console != 'object') {
						  console = {log:function() {}}
				}else{
					if (! ('console' in window) || !('firebug' in console)) {
						var names = ['debug', 'info', 'warn', 'error', 'assert', 'dir', 'dirxml', 'group', 'groupEnd', 'time', 'timeEnd', 'count', 'trace', 'profile', 'profileEnd'];
						window.console = {};
						for (var i = 0; i < names.length; ++i) window.console[names[i]] = function() {};
					}
					if (window.console && window.console.firebug) { 
						if(ol.clear==true){ console.clear()}
						console.info(" williams@exeperu.com:~$ "+msj+".");
					}
				}
			}
        }

        $.fn.OLog = {
                 clear 		: false
        }
		
		/*------------- Slider --------------*/ 
         $.SliderH = function(Opciones){
			 	o = $.extend( {} , Opciones );
				var run=0;
				
				o.Lista.stop();
				
				function UpSlide(){
					var items = o.Lista.find("li").length;
						if(items > 4){		
								if(run==0){run=1;
									linea1	=	o.Lista.find("li:eq(0)");
									linea2	=	o.Lista.find("li:eq(1)");
									o.Lista.animate({ marginTop: '0px' },0);
									o.Lista.animate({ marginTop: (linea1.height()*-2) }, (o.Speed/3) ,function(){
										linea1.remove();
										linea2.remove();
										o.Lista.append( linea1 );
										o.Lista.append( linea2 );
										o.Lista.css({ marginTop: '0px' });
										run=0;
									});
								}
					     }
				}
				function DownSlide(){
					var items = o.Lista.find("li").length;
					if(items > 4){
								if(run==0){run=1;
									linea1	=	o.Lista.find("li:last");
									linea2	=	o.Lista.find("li:last").prev();
									
									o.Lista.find("li:first").before( linea1 );
									o.Lista.find("li:first").before( linea2 );
									
										o.Lista.animate({ marginTop: linea1.height()*-1 },0);
										o.Lista.animate({ marginTop: '0px' }, (o.Speed/3) ,function(){
											run=0;
										});
								}
					}
				}
				o.Up
				.css({'cursor':'pointer'})
				.click(function(){
					UpSlide();
				})
				o.Down
				.css({'cursor':'pointer'})
				.click(function(){
					DownSlide();
				})
				
				Auto = function(){
					UpSlide();
					setTimeout(Auto,5000);
				}
				setTimeout(Auto,5000);
        }	
		var PreloadImagenes = new Array();
		/*---------Precarga-------------*/
		$.Preloads = function(Img,callback){
			if(typeof Img == "object"){
				$.Log("Iniciando Precarga",{clear:true});
				for(var index in Img){$.Preload(Img[index])}
				$.Log("Imagenes Precargadas: "+Img.length);
			}
			if(typeof callback == 'function'){
				callback.call(this, {'result':'success'} );
			}
		}
		$.Preload =function(){
			try{
				
				for (x=0; x<$.Preload.arguments.length; x++){
					PreloadImagenes[x] = new Image();
					PreloadImagenes[x].src = $.Preload.arguments[x];
					/*for(var s in PreloadImagenes[x]){
						$("body").append("<div>"+s+" : "+PreloadImagenes[x][s]+"</div>");
					}*/
					$.Log("Precargando:"+PreloadImagenes[x].src+"...("+PreloadImagenes[x].complete+")");			
				}
			}catch(err){
				var exception ="Error en la pagina: \n"+
					"> Function:("+arguments.callee.name+") Descripcion: (" + err.description + "/" + err.name + ")\n"+
					"> "+err.toString()+"";
				$.Log(exception);
			}
        }
        
	/*----------mascaras ----------*/
		
        $.fn.Mask = function(opciones){ 
		
		o = $.extend( {} ,$.fn.OMask , opciones );
		 
		 return this.each( function(){	
			
			var $obj		 	= $(this);
			var $val		 	= $(this).val();
			var $mask 			= o.Texto;
			var $mensaje 		= o.Mensaje;
			var $efecto			= { 'opacity':	'.60','filter':	'alpha(opacity=60)'}
			var $opacidad		= 1.0;
			
			$obj.val($mask);
			$obj.css({'background':'url('+o.Img+') no-repeat 0 center',
					  'border':''+o.Borde+'px solid '+o.BordeColor+'',
					  'padding':'2px 0 0 '+(o.ImgSize + 2)+'px',
					  'height':'20px'
					 })
			if ( o.Efecto == true ){
				$obj.css($efecto);
				$opacidad = 0.5;
			}
			$obj.bind("focus", function(e){
				$newobj =$(this);
				if ($newobj.val()==$mask){
					$newobj.val("");
					$newobj.animate({opacity:1.0},500)
				}
			});
			$obj.bind("blur", function(e){
				$newobj =$(this);
				
				if ($newobj.val().trim()==""){
					$newobj.val($mask);
					$newobj.animate({opacity: $opacidad },500)
				}
			});
			
		 });
	 }
	 $.fn.OMask = {
		 Texto 		: "Hola",
		 Img 		: "user_32.png"	,
		 ImgSize	: 16,	
		 Borde		: 1	,
		 BordeColor	: "#666",
		 Efecto 	: true
	 }
	 /*---Carrusel----*/
		$.Carrusel = function( opciones ){
				var Carrusel = new Object();
				var o = $.extend( {} ,$.fn.OCarr , opciones );
				Carrusel.Container  = o.Container;
				Carrusel.Height		= Carrusel.Container.height();
				Carrusel.Items		= Carrusel.Container.find("li");
				Carrusel.ItemHeight = Carrusel.Container.find("li:eq(0)").width();//Carrusel.Container.find("li:eq(0)").height();
				Carrusel.Speed  	= o.Speed;
				Carrusel.Animation  = o.Animation;
				Carrusel.Scroll  	= o.Scroll;
				Carrusel.Y = 0;
				Carrusel.Up = false;
				switch(o.Position){
					case 'Vertical':
						if(o.Auto==true){  $.MoveY(Carrusel) }
						var allowmove=true;
						var lc = Carrusel.Container.find("ul");
						
						o.BNext.click(function(){				   
							if(allowmove){
								if( Carrusel.Height - Carrusel.Y < ((Carrusel.Items.length) * Carrusel.ItemHeight) ){
									lc.stop();allowmove=false;Carrusel.Y -=Carrusel.ItemHeight*Carrusel.Scroll
									lc.animate( { marginTop : Carrusel.Y }, o.Animation/2 ,function(){allowmove=true});
								}
							}
						})
						o.Bprev.click(function(){
							if(allowmove){	
								if( Carrusel.Y < 0 ){
									lc.stop();allowmove=false;Carrusel.Y +=Carrusel.ItemHeight*Carrusel.Scroll
									lc.animate( { marginTop : Carrusel.Y }, o.Animation/2 ,function(){allowmove=true});
								}
							}
						})		
					break;
				}
			}
			$.fn.OCarr = {
				container : null,
				Bprev	  : null,	
				BNext	  : null,	
				Speed	  : 2000,
				Animation : 1000,
				Scroll	  : 1,
				Position  : 'Vertical',
				Auto	  : true
			}
			$.MoveY = function(obj){
					var lc = obj.Container.find("ul");
					var o = obj;
					
					if( o.Up==false && o.Height - o.Y < ((o.Items.length) * o.ItemHeight) )
					{o.Y -=o.ItemHeight*o.Scroll}
					else{ o.Up=true }
					
					if( o.Up==true && o.Y < 0 )
					{o.Y +=o.ItemHeight*o.Scroll}
					else{ o.Up=false }
					lc.animate( { marginTop : o.Y }, o.Animation );
					setTimeout(function(){ $.MoveY(obj) },o.Speed)
			}
		
		/*---Tooltip----*/
		$.fn.Tooltip = function(opciones6){ 
						var o = $.extend( {} ,$.fn.Otool , opciones6 );
						return this.each( function(){
							var CurrentT = $(this).find(".tooltip");
								$("body").append(CurrentT);
								if(o.Content!=null){OTool.element.html(o.Content)}
								$(this).children().attr('title','');
								$(this).mousemove(function(e){
									var cy =  (e.pageY ) + o.ofY ;
									var cx =  (e.pageX - o.ofX) ;
									var position = "absolute";
									CurrentT.css({'position':position,'left':cx,'top':cy});
								})
							   $(this).mouseover(function(){ $(".tooltip").hide(); CurrentT.css({'visibility':'visible'}).show(); }) 
							   $(this).mouseout(function(){	CurrentT.hide(); })
						});
						}
		$.fn.Otool = {
			 Content : null,
			 ofX : -10,
			 ofY : 0
		}
		
		/*pager*/
	$.fn.pager = function(options) {
		var opts = $.extend({}, $.fn.pager.defaults, options);
		
		function renderpager(pagenumber, pagecount, buttonClickCallback) {
		var $pager = $('<ul class="pages"></ul>');
		$pager.append(renderButton(opts.primera, pagenumber, pagecount, buttonClickCallback)).append(renderButton(opts.anterior, pagenumber, pagecount, buttonClickCallback));
		var startPoint = 1;
        var endPoint = 9;
		if (pagenumber > 4) {
            startPoint = pagenumber - 4;
            endPoint = pagenumber + 4;
        }
		if (endPoint > pagecount) {
            startPoint = pagecount - 8;
            endPoint = pagecount;
        }
		if (startPoint < 1) {
            startPoint = 1;
        }
		for (var page = startPoint; page <= endPoint; page++) {
			var currentButton = $('<li class="page-number">' + (page) + '</li>');
			page == pagenumber ? currentButton.addClass('pgCurrent') : currentButton.click(function() { buttonClickCallback(this.firstChild.data); });
            currentButton.appendTo($pager);
        }
		$pager.append(renderButton(opts.siguiente, pagenumber, pagecount, buttonClickCallback)).append(renderButton(opts.ultima, pagenumber, pagecount, buttonClickCallback));
		return $pager;
		}
		function renderButton(buttonLabel, pagenumber, pagecount, buttonClickCallback) {
	
			var $Button = $('<li class="pgNext">' + buttonLabel + '</li>');
			var destPage = 1;
			switch (buttonLabel) {
				case opts.primera:
					destPage = 1;
					break;
				case opts.anterior:
					destPage = pagenumber - 1;
					break;
				case opts.siguiente:
					destPage = pagenumber + 1;
					break;
				case opts.ultima:
					destPage = pagecount;
					break;
			}
			if (buttonLabel == opts.primera || buttonLabel == opts.anterior) {
				pagenumber <= 1 ? $Button.addClass('pgEmpty') : $Button.click(function() { buttonClickCallback(destPage); });
			}
			else {
				pagenumber >= pagecount ? $Button.addClass('pgEmpty') : $Button.bind("click",function() { buttonClickCallback(destPage); });
			}return $Button;
		}
			
			
			
			
		return this.each(function() {
			$(this).empty().append(renderpager(parseInt(options.pagenumber), parseInt(options.pagecount), options.buttonClickCallback));
			$('.pages li').mouseover(function() { document.body.style.cursor = "pointer"; }).mouseout(function() { document.body.style.cursor = "auto"; });
		});
		
	};
	$.fn.pager.defaults = {
        pagenumber: 1,
        pagecount: 1,
		siguiente:"Siguiente",
		anterior:"Anterior",
		primera:"Primera",
		ultima:"Ultima"
    };	
		
})(jQuery);
