// 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:
*
*				- 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);
*				- Slider		en progreso...
*				- 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@exeperu.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@exeperu.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);
		}
		/*---------Precarga-------------*/
      var PreloadImagenes = new Array();
		$.Preloads = function(Img,callback){
			if(typeof Img == "object"){
				$.Log("Iniciando Precarga",{clear:true});
				for(var index in Img){$.Preload(Img[index])}}
			if(typeof callback == 'function'){
				callback.call(this, {'result':'success'} );
			}$.Log("Imagenes Precargadas: "+Img.length);
		}
		$.Preload =function(){
			try{
				for (x=0; x<$.Preload.arguments.length; x++){
					PreloadImagenes[x] = new Image();
					PreloadImagenes[x].src = $.Preload.arguments[x];
					$.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){ 
		 var o = $.extend( {} ,$.fn.OMask , opciones );
		 return this.each( function(){	
			var $obj		 	= $(this);
			var $val		 	= $(this).val();
			var $mask 			= o.Texto;
			var $mensaje 		= o.Mensaje;
			$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'
					 })
			$obj.bind("focus", function(e){
				$newobj =$(this);
				if ($newobj.val()==$mask){
					$newobj.val("");
				}
			});
			$obj.bind("blur", function(e){
				$newobj =$(this);
				if ($newobj.val().trim()==""){
					$newobj.val($mask);
				}
			});
			
		 });
	 }
	 $.fn.OMask = {
		 Texto 		: "Hola",
		 Img 		: "user_32.png"	,
		 ImgSize	: 16,	
		 Borde		: 1	,
		 BordeColor	: "#666"
	 }
	/*---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)").height();
			Carrusel.Speed  	= o.Speed;
			Carrusel.Animation  = o.Animation;
			Carrusel.Scroll  	= o.Scroll;
			Carrusel.Y = 0;
			Carrusel.Up = false;
			
			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});
					}
				}
			})
		}
		$.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";
									/*if($.browser.msie){
										if($.browser.version=="6.0"){
											position = "absolute";
											cx +=20 ; 
											cy +=20 ;
										}
									}*/
									CurrentT.css({'position':position,'left':cx,'top':cy})
								})
							   $(this).mouseover(function(){ $(".tooltipo").hide(); CurrentT.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);
		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"; });
        });
    };
    function renderpager(pagenumber, pagecount, buttonClickCallback) {
		var $pager = $('<ul class="pages"></ul>');
		$pager.append(renderButton('primera', pagenumber, pagecount, buttonClickCallback)).append(renderButton('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('siguiente', pagenumber, pagecount, buttonClickCallback)).append(renderButton('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 "primera":
                destPage = 1;
                break;
            case 'anterior':
                destPage = pagenumber - 1;
                break;
            case 'siguiente':
                destPage = pagenumber + 1;
                break;
            case "ultima":
                destPage = pagecount;
                break;
        }
		if (buttonLabel == "primera" || buttonLabel == '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;
    }
	$.fn.pager.defaults = {
        pagenumber: 1,
        pagecount: 1
    };
		 
})(jQuery);
