// JavaScript Document
/*
*		===================   Jquery JOW PLUGINS  ==============
*	
*			Version 		: 	0.2.5
*			Desarrollador 	: 	Williams Medina Aguirre
*           Modificado en   :	29-nov-2010, 10:24:47 AM
*                       
*			Copyright (c) 2010 WiLLiAms Medina A. - JOW
* 			Condiciones de uso  | 
*			GPL (http://www.opensource.org/licenses/gpl-license.php)
*
*			Description:
*
*				- Consola		ex. $.Log(mensaje);
*               - Cookies		ex. $.CreateCookie(variable,valor,dias); - $.EraseCookie(variable); - var a = $.ReadCookie(variable);
*               - Preload		ex. $.Preload(imgurl);
*               - Mascaras      ex. $("#selector").Mask(opciones);
*				- Tooltip		ex. $("#selector").Tooltip(opciones);
*           	- Pager		          
*			
*			Compatibilidad	: 
*				- IE 6,7,8+	
*				- Firefox 2.0 + 
*				- Google Chrome 2, 3 + 
*				- Opera 9, 10 +
*				- Safari
*				
*	       ==========================================================
*
*/
( function($) {
		/*---------- Consola  ----------*/
        $.Log = function(msj,opcion){
			var ol = $.extend( {}  , $.fn.OLog ,opcion );
			if($.browser.msie){
               if($.browser.version=="6.0"){/*No Soporta*/}else{	
			   if (typeof console != 'object') { console = {log:function() {}}}
			   console.log("> williams@jow.com:~$ "+msj+".");	}
			}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.log("> williams@jow.com:~$ "+msj+".");}}
			}
        }
        $.fn.OLog = { clear : false }
		/*---------- Cookies -----------*/
		$.CreateCookie = function(name,value,days){
			if (days) {
				var date = new Date();
				date.setTime(date.getTime()+(days*24*60*60*1000));
				var expires = "; expires="+date.toGMTString();
			}
			else{ var expires = "";}
			document.cookie = name+"="+value+expires+"; path=/";
		}
		$.ReadCookie = function (name) {
			var nameEQ = name + "=";
			var ca = document.cookie.split(';');
			for(var i=0;i < ca.length;i++) {
				var c = ca[i];
				while (c.charAt(0)==' ') c = c.substring(1,c.length);
				if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
			}
			return null;
		}
		$.EraseCookie = function (name) {
			createCookie(name,"",-1);
		}
		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);
			}
        }
		/*---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);

