// JavaScript Document
/*
*		===================   Jquery JOW   ==============
*	
*			Version 		: 	0.1.1
*			Desarrollador 	: 	Williams Medina Aguirre
*                       Modificado en   :	29-nov-2009, 10:24:47 AM
*                       
*			Copyright (c) 2009 WiLLiAms Medina A. - JOW
* 			Condiciones de uso  | 
*			GPL (http://www.opensource.org/licenses/gpl-license.php)
*
*			Description:
*
*				-Paginar 
*				-Ordenar
*				-Vistar
*				-Busqueda
*
*			Compatibilidad	: 
*				- IE 6,7,8+	
*				- Firefox 2.0 + 
*				- Google Chrome 2, 3 + 
*				- Opera 9, 10 +
*				- Safari
*				
*	       ==========================================================
*
*/
window.JOw = {};

var Global = {
    Autor : "Williams Medina Aguirre",
    Fecha : "11:53 Diciembre 2009 "
}
onerror = function(msg,url,l){
    var m="Error en la Pagina:\n\n"
        m+="Error: " + msg + "\n"
        m+="URL: " + url + "\n"
        m+="Linea: " + l + "\n\n"

        m+="Autor: "+Global.Autor+"\n"
        m+="Modificado: "+Global.Fecha+"\n\n"
        m+="Click Aceptar para continuar.\n"
    alert(m)
    return true;
}
/*  -----------  WEB (  funciones ) --------------  */

String.prototype.trim = function() {return this.replace(/^\s+|\s+$/g,"")}
String.prototype.ltrim = function() {return this.replace(/^\s+/,"")}
String.prototype.rtrim = function() {return this.replace(/\s+$/,"")}

JOw.Html = function(){
    this.NombrePagina={ Nombre : "" , Ext :"" };
}
JOw.Html.prototype.setNombrePagina = function(){
    var direccion   = window.location.toString();
    var nombre 	= direccion.substring(direccion.length,direccion.lastIndexOf("/")+1);
    var reg 	= new RegExp("(.+)\\.(html|php|htm)","g");
    this.NombrePagina.Nombre = nombre.replace(reg ,"$1");
	this.NombrePagina.Ext = nombre.replace(reg ,"$2");
}
JOw.Html.prototype.getNombrePagina = function(){
    this.setNombrePagina();
    return this.NombrePagina;
}

/*------------------- Imagenes ------------------*/

JOw.Imagen = function(){
	this.normal ="";
	this.hover  ="" ;
}
JOw.Imagen.prototype.Hover = function(imagen,sufijo,bool){
	var src = imagen.attr("src");
	var reg = new RegExp("(.+)\\.(gif|png|jpg)", "g");
	var hover = src.replace(reg, "$1"+sufijo+".$2");
	if(bool==true){imagen.attr("src",hover);}
	this.hover = hover;
	return this.hover;
};
JOw.Imagen.prototype.Normal = function(imagen,sufijo,bool){
	var src = imagen.attr("src");
	var reg = new RegExp("(.+)"+sufijo+"\\.(gif|png|jpg)", "g");
	var hover = src.replace(reg, "$1.$2");
	if(bool==true){imagen.attr("src",hover);}
	this.hover = hover;
	return this.hover
};
/*  -----------  Pagina ( Paginado en JSON ) --------------  */

JOw.Pagina = function(){ 
    this.Pagina="";
    this.Items=0;
    this.JSON="";
    this.Contenido="";
    this.JsonData="";
    this.Paginador="";
    this.Total=0;
    this.pActual=1;
    this.Orden=new Object();
    this.Orden.campo=false;
    this.Plantilla="";
	this.PaginadorEstilo = { primera: "primera", anterior :"anterior" ,siguiente:"siguiente",ultima:"ultima" };
	
}
JOw.Pagina.prototype.setElementos = function(Contenido,Paginador,PaginadorEstilo){
    this.Contenido = Contenido;
	this.Paginador = Paginador;
	this.PaginadorEstilo = PaginadorEstilo;
}
JOw.Pagina.prototype.getContenido 	= function(){return this.Contenido}
JOw.Pagina.prototype.getPaginador 	= function(){return this.Paginador}
JOw.Pagina.prototype.setJSON 		= function(JSON){this.JSON = JSON}
JOw.Pagina.prototype.getJSON 		= function(){return this.JSON}
JOw.Pagina.prototype.setPlantilla 	= function(Plantilla){this.Plantilla = Plantilla}
JOw.Pagina.prototype.getPlantilla 	= function(){return this.Plantilla}
JOw.Pagina.prototype.setItems 		= function(Items){this.Items = Items}
JOw.Pagina.prototype.getItems 		= function(){return this.Items}
JOw.Pagina.prototype.setJsonData 	= function(JsonData){this.JsonData = JsonData}
JOw.Pagina.prototype.getJsonData 	= function(){return this.JsonData}
JOw.Pagina.prototype.setpActual 	= function(pActual){this.pActual = pActual}
JOw.Pagina.prototype.getpActual		= function(){return this.pActual}
JOw.Pagina.prototype.setTotal 		= function(Total){this.Total = Total}
JOw.Pagina.prototype.getTotal		= function(){return this.Total}
JOw.Pagina.prototype.setOrden 		= function(Orden,Tipo){this.Orden.campo = Orden;this.Orden.tipo = Tipo}
JOw.Pagina.prototype.getOrden		= function(){return this.Orden}
JOw.Pagina.prototype.Actualizar		= function(){this.CargarPagina(this.getpActual())}
JOw.Pagina.prototype.CargarPagina 	= function(npagina){
			/* cargador */
			var topm = 120;
			var loadimagen ="<img style='margin-top:"+topm+"px' src='images/2.gif' />";
			this.getContenido().html("<center></center>");
			
			/* ordernar por campo asc o desc tipo de valor  string  o  numerico */
			var Ordenar = function(campo, reverse, primer){
				try{
						reverse = (reverse) ? -1 : 1;
						return function(a,b){
						a = a[campo];
						b = b[campo];
						if (typeof(primer) != 'undefined'){
							a = primer(a);
							b = primer(b);
						}
						if (a<b) return reverse * -1;
						if (a>b) return reverse *  1;
						return 0;
			    }
				}catch(err){
						alert("fgf");
				}
			}
			/*  valores para paginado */
			var inicio = ( (npagina * this.getItems()) - this.getItems() ); 
			var limite = (npagina * this.getItems());
			var pagina = npagina;
			var Parent = this;
			var TOrden = false;
			if(  Parent.getOrden().campo == false ){
				var JsonData = this.getJsonData()
			}else{
				switch(Parent.getOrden().tipo.toString()){
					case 'asc'  :TOrden = false	;break;
					case 'desc' :TOrden = true		;break;
				}
				var JsonData = this.getJsonData().sort(Ordenar(Parent.getOrden().campo, TOrden , function(a){return a.toUpperCase()}));			
			}
			if(JsonData.length < limite){limite = JsonData.length}
			var ResultText = "";
			/*  reemplazando plantilla por campos del objeto json  */
			for(var index=inicio;	index < limite ; index++){
					var nuevaFila = Parent.getPlantilla();
					for( var i in JsonData[index]){
						//var campojson = new RegExp("/\#(nombre)\/","gi");
						//alert(JsonData[index][i].search("Bruschettas"));
						for(var n=0 ; n <= 3 ;n++){
							nuevaFila = nuevaFila.replace("#("+i+")",JsonData[index][i]);
						}
						nuevaFila = nuevaFila.replace(/#\(n\)/gi,(index+1));
					}	
					ResultText += nuevaFila;
		 	}
			
				setTimeout(function(){
					Parent.getContenido().fadeOut("fast",function(){
						Parent.getContenido().html(ResultText);
						
						var imgArray = Parent.getContenido().find("img");
						var highArray = Parent.getContenido().find("a.preloadlink");
						preArray = new Array();
						
						imgArray.each(function(){
							preArray.push($(this).attr("src"));	
						})
						
						highArray.each(function(){
							preArray.push($(this).attr("href"));	
						})
						
						
						$.Preloads(preArray);
						
						Parent.getContenido().fadeIn();
						try{
							$(document).pngFix();
						}catch(err){
							
						}
					});
				},100);		
			
			$.Log("Mostrando "+inicio+" a "+(limite)+" Items de "+JsonData.length+" Total / Pagina "+pagina,{clear:true});	
		
}

JOw.Pagina.prototype.getPagina = function(){
	var inst=this;
	$.getJSON(this.getJSON(),function(json){
		inst.setJsonData(json);
		var $total 	= 0; 
		var CapaPaginacion = inst.getPaginador();
		var Parent = inst;
		
		$total =  (json.length / inst.getItems() );
		$num = parseInt( (json.length / inst.getItems() ) );
		if($total > $num){$total += 1;}
		Parent.setTotal(parseInt($total));
		
		var Accion = function(number) {
				Parent.setpActual(number);
				CapaPaginacion.pager({pagenumber: number,
									  pagecount	: Parent.getTotal(), 
									  primera : Parent.PaginadorEstilo.primera,
									  siguiente : Parent.PaginadorEstilo.siguiente,
									  anterior : Parent.PaginadorEstilo.anterior,
									  ultima : Parent.PaginadorEstilo.ultima,
									  buttonClickCallback: Accion});
				Parent.CargarPagina(number);
		}
		
			$(".control-siguiente").click(function(){
				var pagina = Parent.getpActual()+1;
				if(pagina <= Parent.getTotal())
				Accion(pagina);				   
			})
			$(".control-anterior").click(function(){
				var pagina = Parent.getpActual()-1;
				if(!pagina < 1)
				Accion(pagina);						   
			})
		
		if(Parent.getpActual()>Parent.getTotal()){Parent.setpActual(Parent.getTotal())}
			CapaPaginacion.pager({pagenumber:Parent.getpActual(),							   
								  pagecount: Parent.getTotal() , 
								  primera : Parent.PaginadorEstilo.primera,
								  siguiente : Parent.PaginadorEstilo.siguiente,
								  anterior : Parent.PaginadorEstilo.anterior,
								  ultima : Parent.PaginadorEstilo.ultima,
								  buttonClickCallback: Accion});
		Parent.CargarPagina(Parent.getpActual());
	})
}

/*  -----------  Admin ----------------------------------  */
JOw.Admin = function(){ 
		this.Tabs;
		this.CurrentTab;
}
JOw.Admin.prototype.setTabs = function(Tabs){ 
	Tabs.tabs({
				tabTemplate: '<li><a href="#{href}">#{label}</a><span class="ui-icon ui-icon-close" onclick="$.CloseTab($(this))">Cerrar</span></li>',
				spinner: 'Cargando...',
				cache: true,
				load:function(event,ui){	$.Log("Cargando Tab... (OK)",{clear:true})	}
				
	}).find(".ui-tabs-nav").sortable({axis:'x'});
	this.Tabs=Tabs 
}
JOw.Admin.prototype.getTabs = function(Tabs){ 
	return this.Tabs 
}
JOw.Admin.prototype.AddTab = function(Titulo,Page){
	var Open=1;
	var t=this.Tabs;
	var ct;
	this.Tabs.find("li a").each(function(index){
		if($(this).html()==Titulo){Open=0;ct=index;t.tabs("select", index)}
	});
	if(Open==1){
		t.tabs("add",Page,Titulo);t.css("display","block");t.tabs("select", t.tabs("length")-1);ct = t.tabs("length")-1;
	}
	this.CurrentTab = ct;
}
JOw.Admin.prototype.getCurrentTab = function(){ 
	return this.CurrentTab 
}
JOw.Admin.prototype.CloseTab = function(obj){
	var index = $('li',this.Tabs).index(obj.parent());
	this.Tabs.tabs('remove', index);
}
JOw.Admin.prototype.RefreshTab = function(Tab){
	this.Tabs.tabs( 'load' , Tab )
}
JOw.Admin.prototype.setHover = function(element){
	$(element).live("mouseover",function(){$(this).addClass('ui-state-hover').css({'cursor':'url("images/link.cur"), pointer'})})
	$(element).live("mouseout",function(){$(this).removeClass('ui-state-hover')})
}

JOw.Window = function(Window){ 
		this.Window = Window;
		this.Title;
		this.Width;
		this.Heigth;
		this.Content;
		this.Buttons;
		this.Icon;
		this.Window.dialog({ autoOpen:false,modal: false});
}
JOw.Window.prototype.getWindow = function(){
		return this.Window;	
}
JOw.Window.prototype.setModal = function(value){
		this.Window.dialog('option', 'modal', value);
}
JOw.Window.prototype.setTitle = function(Title){
		this.Window.dialog('option', 'title', Title);
		this.Title=Title;
}
JOw.Window.prototype.getTitle = function(){
		return this.Title;	
}
JOw.Window.prototype.setSize = function(Width,Heigth){
		this.Window.dialog('option', 'height', Heigth);
		this.Window.dialog('option', 'width', Width);
		this.Heigth=Heigth;
		this.Heigth=Width;
}
JOw.Window.prototype.getSize = function(){
		return this.Width,this.Heigth
}
JOw.Window.prototype.setIcon = function(icon){
		switch(icon){
			case 'Alert': this.Icon ='<span style="float: left; margin-right: 0.3em;" class="ui-icon ui-icon-alert"/>';break;
			case 'Info': this.Icon ='<span style="float: left; margin-right: 0.3em;" class="ui-icon ui-icon-info"/>' ;break;
			default : this.Icon="";
		}
}
JOw.Window.prototype.getIcon = function(){
		if(typeof this.Icon !="undefined"){
			return this.Icon;
		}else{return "";}
}
JOw.Window.prototype.setContent = function(Content){
		this.Window.html(this.getIcon()+Content);
		this.Content = Content;
}
JOw.Window.prototype.getContent = function(){
		return this.Content;
}
JOw.Window.prototype.setButtons = function(Buttons){
		this.Window.dialog('option', 'buttons', Buttons);
		this.Buttons = Buttons;
}
JOw.Window.prototype.Open = function(){
	   this.Window.dialog("open");
	   this.Window.dialog('option', 'modal', false);
	   this.Icon = "";
}
JOw.Window.prototype.Close = function(){
	   this.Window.dialog("close");
	   this.Window.dialog('option', 'modal', false);
	   this.Icon = "";
}

JOw.Data = function(){
		this.CheckItems=new Array();
}
JOw.Data.prototype.getCheckItems = function(){
		return this.CheckItems.toString();
}
JOw.Data.prototype.setCheckItems = function(Element){
		this.CheckItems = new Array();
		var chk=this.CheckItems;
		$('input[class='+Element+']').each(function(e){ 
				if ($(this).is(':checked')){
					chk.push($(this).val());
				}
		})
}
JOw.Data.prototype.SelectAll = function(inputclass,input){
	var a = input.find("span.label").html();
	switch(a){
		case 'Seleccionar':
			Check =	true;Label="Quitar";Icon="ui-icon ui-icon-circle-minus";
		break;
		case 'Quitar':
			Check =	false;Label="Seleccionar";Icon="ui-icon ui-icon-circle-check";
		break;
	}
	$('input[class='+inputclass+']').attr('checked', Check);
	input.find("span.label").html(Label);
	input.find("span.ui-icon").attr("class",Icon);
}
/* ==================== Galeria ====================== */

JOw.Galeria = function(){
	
}
