/*
 * JavaScript Components Beta
 * http://uncms.com/
 *
 * Copyright 2010, Tuesta Group
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://www.tuestagroup/license
 *
 * Date: Sat Feb 13 22:33:48 2010 -0500
 */
var MenuCategorias = {
	init: function(){
		return false;
	}	
		
};
var mensajeServidor = {
	id: 'panel-mensaje-sistema',
	cssRespuestaServidor:'respuesta-servidor',
	cssFormulario: 'formulario',
	cssLoading: '.loading',
	section: '#section',
	init: function(){
		this.crearPanel();
		this.config();
		return;
	},
	config: function(){
		this.panel = $('#' + this.id);
		this.respuesta = this.panel.find('.' + this.cssRespuestaServidor);
		this.formulario = this.panel.find('.' + this.cssFormulario);
		return;
	},
	crearPanel: function(){
		if($('#' + this.id).size() > 0) return;
		var that = this;
		var h2 = $(this.section).find('h2');
		h2.after(this.paneles());
		return;
	},
	paneles : function(){
		var html = '<div id="' + this.id + '">\n';
		html += '<div class="' + this.cssRespuestaServidor + '">\n';
		html += '<p class="empty-mesages">Ningún mensaje del sistema<\/p>\n';
		html += '<\/div>\n';
		html += '<div class="' + this.cssFormulario + '">\n';
		html += '<\/div>\n';
		html += '<\/div>\n';
		return html;
	},
	mostrar: function(mensaje){
		var that = this;
		this.respuesta.html(mensaje);
		this.respuesta.show();
		return;
	},
	limpiarPanel: function(){
		this.respuesta.fadeOut('slow', function(){$(this).html('')});
		return;
	},
	marcarErroresFormulario: function(){
		var errores = this.respuesta.find('ul.listado-errores li');
		errores.each(function(){
			var id = $(this).attr('class');
			$('#' + id).css({'border': '1px solid red', 'background':'Snow'});
		})
		return;
	},	
	mostrarErroresFormulario: function(mensaje){
		this.marcarErroresFormulario();
		return;
	},
	loading: function(){
		this.mostrar(this.panelLoading());
		return;
	},
	panelLoading: function(){
		var panel = '<div class="panel-mensajes loading">\n';
		panel += '<h3>Actualizando información<\/h3>\n';
		panel += '<p>Un momento por favor<\/p>\n';
		panel += '<\/div>\n';
		return panel;		
	}
};
var formulario = {
	id: '#panel-mensaje-sistema',
	cssFormulario: '.formulario',
	init: function(){
		this.config();
		return;
	},
	config: function(){
		this.panel = mensajeServidor.formulario;
		return;
	},
	mostrar: function(formulario){
		this.panel.html(formulario);
		this.panel.show();
		return;
	},
	ocultar: function(){
		this.panel.fadeOut('slow', function(){$(this).html('')});
		return;
	}
		
};
var tabla = {
	id: '#section',
	datatable: '.table-section',
	actualizada: 'actualizada',
	idFilaActiva: -1,
	init: function(){
		this.config();
		this.marcarFilasConId();
	},
	config: function(){
		this.registros = $(this.id + ' ' + this.datatable);
		return;
	},	
	marcarFilasConId: function(){
		var inputs = this.registros.find('input.idRegistro[type=hidden]');
		$(inputs).each(function(){
			var $input = $(this);
			$input.parents('tr').attr('id', 'fila' + $input.val());
		});
		return;
	},
	marcarFilaActualizada: function(){
		var filaActualizada = this.registros.find('#fila' + this.idFilaActiva);
		$(filaActualizada).addClass(this.actualizada);
		return;
	},
	desmarcarFila: function(){
		var filaActualizada = this.registros.find('#fila' + this.idFilaActiva);
		$(filaActualizada).removeClass(this.actualizada);
		return;		
	},
	refrescar: function(href){
		var that = this;
		var href =  href  || document.location.href;
		var isRefresh = false;
		this.registros.html('<p><strong>Actualizando registros</strong></p>');
		$.ajax({
			type: "POST",
		   	url: href,
		   	dataType: "html",
		   	success: function(respuesta){	
				var servidor = $(respuesta);
				var html = servidor.find(that.id + ' ' + that.datatable).html();
				that.registros.html(html);
				that.marcarFilasConId();
				if( that.idFilaActiva != -1) that.marcarFilaActualizada();
				accionBaseBoton.enganchar();
				accionEditar.enganchar();
				return;
		   	},
		   	error: function (XMLHttpRequest, textStatus, errorThrown) {
		   		//$("#error").html(XMLHttpRequest.responseText);
			   alert('lo sentimos. Ha habido un error en el servidor ' + textStatus);
			   return;
		   	}
		});
	}		
}
var accionCrear = {
		id: '#section',
		css: '.accion-crear-boton',
		cssIgnoreAjax: 'ignoreAjax',
		respuesta: '#panel-formularios',
		datatable: '.table-section',
		init: function(){
			this.config();
			this.enganchar();
			return false;
		},
		config: function(){
			//this.tabla = $(this.id + ' ' + this.datatable);
			return;
		},
		enganchar: function(){
			var that = this;
			$(this.id).find(this.css).each(function(){
				if(!$(this).hasClass(that.cssIgnoreAjax)){
					that.eventClick(this);
				}
			});
			return;		
		},
		eventClick: function(boton){
			var that = this;
			$(boton).bind('click',function(event){
				that.ejecutar(event);
				return false;
			});
		},
		ejecutar: function(event){		
			var that = this;	
			var boton = $(event.target);
			var action = boton.attr('href');
			mensajeServidor.loading();
			$.ajax({
				type: "POST",
			   	url: action,
			   	dataType: "html",
			   	success: function(respuesta){	
					var servidor = $(respuesta);
					var html = servidor.find(that.respuesta).html();
					formulario.mostrar(html);
					var textareas = servidor.find('textarea.editorHtml');
					if($(textareas).size() > 0) engancharEditoresHtml();
					mensajeServidor.limpiarPanel();
					respuestaBasicaFormularios.init();
					engancharCalendarios.init();
					return true;	
			   	},
			   	error: function (XMLHttpRequest, textStatus, errorThrown) {
			   		//$("#error").html(XMLHttpRequest.responseText);
				   alert('lo sentimos. Ha habido un error en el servidor ' + textStatus);
			   	}
			});
		}	
				
	};
var accionEditar = {
		id: '#section',
		css: '.accion-editar-boton',
		cssIgnoreAjax: 'ignoreAjax',
		respuesta: '#panel-formularios',
		datatable: '.table-section',
		init: function(){
			this.config();
			this.enganchar();
			return false;
		},
		config: function(){
			this.tabla = $(this.id + ' ' + this.datatable);
			return;
		},
		enganchar: function(){
			var that = this;
			$(this.id).find(this.css).each(function(){
				if(!$(this).hasClass(that.cssIgnoreAjax)){
					that.eventClick(this);
				}
			});
			return;		
		},
		eventClick: function(boton){
			var that = this;
			$(boton).bind('click',function(event){
				tabla.idFilaActiva = $(this).parents('tr').find('input.idRegistro[type=hidden]').val();
				tabla.marcarFilaActualizada();
				that.ejecutar(event);
				return false;
			});
		},
		ejecutar: function(event){		
			var that = this;	
			var boton = $(event.target);
			var action = boton.attr('href');
			mensajeServidor.loading();
			$.ajax({
				type: "POST",
			   	url: action,
			   	dataType: "html",
			   	success: function(respuesta){	
					var servidor = $(respuesta);
					var html = servidor.find(that.respuesta).html();
					formulario.mostrar(html);
					this.textareas = servidor.find('textarea.editorHtml');
					if(this.textareas.size() > 0) engancharEditoresHtml();					
					mensajeServidor.limpiarPanel();
					respuestaBasicaFormularios.init();
					engancharCalendarios.init();
					return true;
			   	},
			   	error: function (XMLHttpRequest, textStatus, errorThrown) {
			   		//$("#error").html(XMLHttpRequest.responseText);
				   alert('lo sentimos. Ha habido un error en el servidor ' + textStatus);
			   	}
			});
			
		}	
				
	};
var accionBaseBoton = {
	id: '#section',
	css: '.accion-base-boton',
	cssIgnoreAjax: 'ignoreAjax',
	respuesta: '#panel-mensaje-sistema',
	datatable: '.table-section',
	init: function(){
		this.config();
		this.enganchar();
		return false;
	},
	config: function(){
		this.tabla = $(this.id + ' ' + this.datatable);
		return;
	},
	enganchar: function(){
		var that = this;
		$(this.id).find(this.css).each(function(){
			if(!$(this).hasClass(that.cssIgnoreAjax)){
				that.eventClick(this);
			}
		});
		return;		
	},
	eventClick: function(boton){
		var that = this;
		$(boton).bind('click',function(event){
			tabla.idFilaActiva = $(this).parents('tr').find('input.idRegistro[type=hidden]').val();
			tabla.marcarFilaActualizada();
			that.ejecutar(event);
			return false;
		});
	},
	ejecutar: function(event){		
		var that = this;	
		var boton = $(event.target);
		var action = boton.attr('href');
		mensajeServidor.loading();
		$.ajax({
			type: "POST",
		   	url: action,
		   	dataType: "html",
		   	success: function(respuesta){	
				var servidor = $(respuesta);
				var html = servidor.find(that.respuesta).html();
				var respuestaServidorId = servidor.find('input#respuesta').val();
				mensajeServidor.mostrar(html);				
				if(parseInt(respuestaServidorId) == 1){
					tabla.refrescar();
					setTimeout(function(){
						mensajeServidor.limpiarPanel();
						tabla.desmarcarFila();
					}, 1000);						
				} 
				return;
		   	},
		   	error: function (XMLHttpRequest, textStatus, errorThrown) {
		   		//$("#error").html(XMLHttpRequest.responseText);
			   alert('lo sentimos. Ha habido un error en el servidor ' + textStatus);
		   	}
		});
		
	}	
			
};
var respuestaBasicaFormularios = {
	css: '.customForm',
	cssIgnoreAjax: 'ignoreAjax',
	cssFileUploadSubmit: 'fileUploadSubmit',
	respuesta: '#panel-mensaje-sistema',
	init: function(){
		this.config();
		return false;
	},
	config: function(){
		var that = this;
		$(this.css).find('input[type=submit]').each(function(){
			that.buttonSubmit = $(this);
			if($(this).hasClass(that.cssFileUploadSubmit)) engancharFileUpload();
			if(!$(this).hasClass(that.cssIgnoreAjax)) that.eventClick(this);
		});
		return;
	},
	editorHtml: function(){
		var $form = this.$panelMensajesSistema.find('form');
		var that = this;
		this.textareas = $form.find('textarea.editorHtml');
		if(this.textareas.size() > 0) engancharEditoresHtml();
		return;
	},	
	copiarHtmlEditores: function(){
		this.textareas.each(function(){
			var body = $('#' + this.id + '_ifr').contents().find('body');
			var $newBody = $(body);
			$newBody.find('br').each(function(){
				$(this).remove();
			}); 
			var newHtml = $newBody.html();
			if(newHtml != '<p></p>') $(this).val(newHtml);
		});
		return;
	},	
	customTextAreas: function(){
		var $form = this.buttonSubmit.parents('form.customForm');
		this.textareas = $form.find('textarea.editorHtml');
		if(this.textareas.size() > 0) this.copiarHtmlEditores();
		return;
	},
	eventClick: function(submit){
		var that = this;
		$(submit).bind('click',function(event){
			that.customTextAreas();
			that.ejecutar(event);
			return false;
		});
	},
	ejecutar: function(event){
		var that = this;	
		var submit = $(event.target);
		var form = submit.parents('form');
		var action = form.attr('action');
		var inputs = form.serialize();
		mensajeServidor.loading();
		$.ajax({
			type: "POST",
		   	url: action,
		   	data: inputs,
		   	dataType: "html",
		   	success: function(respuesta){
				var $respuesta = $(respuesta);
				var html = $respuesta.find(that.respuesta).html();
				var idServidor = $respuesta.find('input#respuesta').val();
				if(parseInt(idServidor) == 1){
					mensajeServidor.mostrar(html);
					formulario.ocultar();
					tabla.refrescar();					
					setTimeout(function(){
						mensajeServidor.limpiarPanel();
						tabla.desmarcarFila();
					}, 1000);					
				}else if(idServidor == 4){
					mensajeServidor.mostrar(html);
					mensajeServidor.marcarErroresFormulario();
				} 					
				return;
		   	},
		   	error: function (XMLHttpRequest, textStatus, errorThrown) {
		   		//$("#error").html(XMLHttpRequest.responseText);
			   alert('lo sentimos. Ha habido un error en el servidor ' + textStatus);
		   	}
		});					
				
	}			
};
var engancharFileUpload = function(){	
    $('form').iframePostForm({
         post : function (){
            mensajeServidor.loading();
        },
        complete : function (respuesta)
        {
			var $respuesta = $(respuesta);
			var html = $respuesta.find('#panel-mensaje-sistema').html();
			var idServidor = $respuesta.find('input#respuesta').val();
			if(parseInt(idServidor) == 1){
				mensajeServidor.mostrar(html);
				formulario.ocultar();
				tabla.refrescar();					
				setTimeout(function(){
					mensajeServidor.limpiarPanel();
					tabla.desmarcarFila();
				}, 1000);					
			}else if(idServidor == 4){
				mensajeServidor.mostrar(html);
				mensajeServidor.marcarErroresFormulario();
			} 					
			return;            
        }
    });
};
var engancharEditoresHtml = function(){
	tinyMCE.init({
	mode: "textareas",
	theme: "advanced",
	element_format: "html",
	skin: "o2k7",
	skin_variant: "silver",
	plugins: "safari,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
	theme_advanced_resizing: 1,
	theme_advanced_buttons1: "bold,italic,underline,strikethrough,|,bullist,numlist,|,pasteword,|,undo,redo,|,link,code,",
	theme_advanced_buttons2: "",
	theme_advanced_buttons3: ""
	});
};
var destacarFila = {
	id: '#section',
	cssTabla: '.datatable',
	init: function(){
		this.table = $(this.id + ' ' + this.cssTabla);
		if(this.table.size() <= 0) return;
		this.config();
		this.action();
		return;
	},
	config: function(){
		return;
	},
	action: function(){
		this.table.find('tbody tr').each(function(){
			$(this).hover(function(){
				$(this).css('background','lightYellow');
			},function(){
				$(this).css('background','none');
			})
		});
		return;
	}
};
var engancharCalendarios = {
	init: function(){
		$("#fechaPublicacion").datepicker({dateFormat: 'dd-mm-yy'});
		$("#fechaInicio").datepicker({dateFormat: 'dd-mm-yy'});
		//$("#fechaPublicacion").datepicker({regional: 'es'});
		$("#fechaFin").datepicker({dateFormat: 'dd-mm-yy'});		
	}
};
$(function(){
	// navegacion principal
	$('#header .nav-principal .categoriasNivelUno').navegacion({alto:19});
	
	//paneles
	mensajeServidor.init();
	tabla.init();
	formulario.init();
	respuestaBasicaFormularios.init();
	accionCrear.init();
	destacarFila.init();
	if($("input.inputFile").size() > 0){
		engancharFileUpload();		
	}

	accionBaseBoton.init();
	accionEditar.init();
});
