var ncore = {};

ncore.emptyFunction = function(){}

ncore.autoBind = function(object)
{
	if(Object.isUndefined(object.autoBind)) return;
	
	var binds = object.autoBind;
	
	if(!Object.isArray(binds)) binds = [binds];
	
	var x = 0;
	for(x=0;x<binds.length;x++) eval("object." + binds[x].toString() + "_bind = object." + binds[x].toString() + ".bind(object);");
}


var _SELECCIONABLES = [];
new PeriodicalExecuter(SYS_checkHeightALL,1);

_POP_FIX_ELEMENTS = [];

//fix para que se posicione sobre los combos
function SYS_hideElementsPOP()
{
	_POP_FIX_ELEMENTS = [];
	elementos = document.getElementsByTagName("select");
	//alert(elementos.length);
	if(elementos.length > 0)
	{
		var x = 0;
		for(x=0;x<elementos.length;x++)
		{
			if(elementos[x].style.display == "")
			{
				//_CONFIRM_FIX_ELEMENTS.push({objeto:elementos[x],clase:elementos[x].className});
				//alert(elementos[x].className);
				//elementos[x].className = "SYS_itemFix_trans";
				//alert(elementos[x].name);
				//var obj = elementos[x];
				//obj.className = ".SYS_itemFix_trans";
				//alert(elementos[x].className);
				_POP_FIX_ELEMENTS.push(elementos[x]);
				elementos[x].style.display = "none";
			}
		}
	}
}

function SYS_showElementsPOP()
{
	var x = 0;
	for(x=0;x<_POP_FIX_ELEMENTS.length;x++)
	{
		//_CONFIRM_FIX_ELEMENTS[x].objeto.className = _CONFIRM_FIX_ELEMENTS[x].clase;
		_POP_FIX_ELEMENTS[x].style.display = "";
	}
	_POP_FIX_ELEMENTS = [];
}

function SYS_crearRefresher()
{
	//si ya existe lo destruyo
	if($('SYS_refresher') != null) SYS_destruirRefresher();
	
	var contenidosRefresher = document.createElement("div");
	contenidosRefresher.className = "SYS_refresher";
	contenidosRefresher.setAttribute("id","SYS_refresher");
	contenidosRefresher.style.display = "none";
	
	var medidasBrowser = BROWSER_getFullSize();
	contenidosRefresher.style.width = Math.ceil(medidasBrowser[0]) + "px";
	contenidosRefresher.style.height = Math.ceil(medidasBrowser[1]) + "px";
	contenidosRefresher.style.left = "0px";
	contenidosRefresher.style.top = "0px";
	
	var body = document.getElementsByTagName("body")[0];
	body.appendChild(contenidosRefresher);
}

function SYS_mostrarRefresher()
{
	SYS_checkRefresherHeight();	
	Effect.Appear($("SYS_refresher"));
}

function SYS_ocultarRefresher()
{
	Effect.Fade($("SYS_refresher"));
}

function SYS_destruirRefresher()
{
	Element.remove($("SYS_refresher"));
}

var quickMenu = null;
var mainMenu = null;
var unreadMSG = null;

function SYS_startApp()
{
	SYS_mostrarRefresher();
	var body = $("CUERPO_APP");
	new Ajax.Updater(body,"includes/html/app.php",{ onComplete: function(retorno){
	if(SYS_isError(retorno.responseText))
	{
		SYS_doError(retorno.responseText);
		return;
	}
	var fondo = document.getElementsByTagName("body")[0];
	fondo.className = "SYS_body";
	Effect.Appear(body);
	mainMenu = new MainMenu();
	quickMenu = new QuickMenu();
	unreadMSG = new UnreadMSG();
	SYS_loadContents("includes/html/xchange.php");
	}});
}

function SYS_menu(id)
{
	$("MENU_spacer_1").className = "SYS_menu_fondo_" + id;
	$("MENU_spacer_2").className = "SYS_menu_fondo_" + id;
	$("MENU_spacer_3").className = "SYS_menu_fondo_" + id;
	$("MENU_spacer_4").className = "SYS_menu_fondo_" + id;
	
	$("MENU_boton_1").className = "SYS_menu_boton_1_" + id;
	$("MENU_boton_2").className = "SYS_menu_boton_2_" + id;
	$("MENU_boton_3").className = "SYS_menu_boton_3_" + id;
	
	if($("SYS_submenu_1").style.display != "none") $("SYS_submenu_1").style.display = "none";
	if($("SYS_submenu_2").style.display != "none") $("SYS_submenu_2").style.display = "none";
	if($("SYS_submenu_3").style.display != "none") $("SYS_submenu_3").style.display = "none";
	
	$("SYS_submenu_" + id).style.display = "";
}

var prueba;
var paginaLimite = 10;

function SYS_getPaginators($paginable)
{
	var paginadores = new Array();
	paginadores.push($paginable.previous());
	paginadores.push($paginable.next());
	$paginable.store("paginadores",paginadores);

	paginadores.each(function(paginador)
	{
		paginador.store("paginable",$paginable);
		paginador.store("prev",paginador.select("div.anterior")[0]);
		paginador.store("next",paginador.select("div.siguiente")[0]);
		paginador.store("actual",paginador.select("input.input")[0]);
		paginador.store("total",paginador.select("div.total")[0]);
		paginador.select("input.input")[0].store("paginable",$paginable);
	});
}

function SYS_paginateContents(target)
{
	var paginables = $(target).select("table.paginable");
	paginables.each(function(paginable)
	{
		if(paginable.retrieve("paginas") == undefined)
		{
			paginable.store("paginas",0);
			paginable.store("pagina_actual",0);
			paginable.store("elements",[]);
			
			SYS_getPaginators(paginable);
		}
		
		var elementosActuales = paginable.select("table.paginable_elemento");
		if(elementosActuales.length != paginable.retrieve("elements").length)
		{
			paginable.store("elements",elementosActuales);
			paginable.store("paginas",Math.ceil(elementosActuales.length/paginaLimite));
			
			elementosActuales.each(function(elemento,indice)
			{
				var pagNum = Math.floor(indice/paginaLimite);
				elemento.store("indice",indice);
				elemento.store("pagina",pagNum);
				elemento.store("paginable",paginable);
				elemento.store("spacer",elemento.next().next());
				elemento.store("data",elemento.next());
				elemento.store("show_data",false);
				
				elemento.hide();
				elemento.retrieve("spacer").hide();
				elemento.retrieve("data").hide();
			});
		}
		
		prueba = paginable;
		SYS_paginateUpdate(0,paginable);
	})
}

function SYS_paginateUpdate($dir,$paginable)
{
	var current = $paginable.retrieve("pagina_actual");
	var total = $paginable.retrieve("paginas");
	
	var elements = $paginable.retrieve("elements");
	var x;
	
	var showData;
	
	for(x=paginaLimite*current;x<paginaLimite*current+paginaLimite;x++)
	{
		if(elements[x] !== undefined)
		{
			showData = elements[x].retrieve("data").visible();
		
			elements[x].hide();
			elements[x].retrieve("spacer").hide();
			elements[x].store("show_data",showData);
			elements[x].retrieve("data").hide();
		}
	}
	
	current+=$dir;
	if(current >= total) current = 0;
	if(current < 0 ) current = total-1;
	
	for(x=paginaLimite*current;x<paginaLimite*current+paginaLimite;x++)
	{
		if(elements[x] !== undefined)
		{
			showData = elements[x].retrieve("show_data");
			
			elements[x].show();
			elements[x].retrieve("spacer").show();
			if(showData) elements[x].retrieve("data").show();
		}
	}
	
	$paginable.store("pagina_actual",current);
	
	$paginable.retrieve("paginadores").each(function(paginador)
	{
		paginador.retrieve("actual").value = current + 1;
		paginador.retrieve("total").innerHTML = "/ " + total;
	});
}

function SYS_paginateInput($target,$action)
{
	switch($action)
	{
		case "focus":
			$target.addClassName("input_focus");
			break;
			
		case "blur":
			$target.removeClassName("input_focus");
			if($target.empty()) $target.value = $target.retrieve("paginable").retrieve("pagina_actual") + 1;
			else SYS_toPage(parseInt($target.value)-1,$target.retrieve("paginable"));
			break;
			
		case "press":
			$target.value = $target.value.replace(/[^0-9]+/g, "");
			if(!$target.value.empty()) if($target.retrieve("paginable").retrieve("paginas") >= parseInt($target.value)) SYS_toPage(parseInt($target.value)-1,$target.retrieve("paginable"));
			break;
	}
}

function SYS_toPageFromObject($obj)
{
	SYS_toPage($obj.retrieve("pagina"),$obj.retrieve("paginable"));
}

function SYS_toPage($page,$paginable)
{
	if($page < 0) $page = 0;
	var total = $paginable.retrieve("paginas");
	if($page > total-1) $page = total-1;
	var current = $paginable.retrieve("pagina_actual");
	
	if(current < $page) SYS_paginateUpdate($page-current,$paginable);
	else SYS_paginateUpdate(current-$page,$paginable);
}

function SYS_loadContents(url,obj,callback)
{
	SYS_limpiarSeleccion();
	SYS_mostrarRefresher();
	
	if(url == "includes/html/xchange.php") quickMenu.hide();
	else quickMenu.show();
	
	if(url == "includes/html/xchange.php") $("SYS_contents_separador").innerHTML = "<img src='img/xchange_f.gif' alt='puntera'>";
	else $("SYS_contents_separador").innerHTML = "";
	
	if(obj == undefined) obj = $("SYS_contents");
	if(callback == undefined) callback = function(){};
	
	new Ajax.Updater(obj,url,{ onComplete: function(retorno){
		if(SYS_isError(retorno.responseText))
		{
			SYS_doError(retorno.responseText);
			return;
		}
		SYS_checkMenuHeight();
		SYS_ocultarRefresher();
		SYS_paginateContents(obj);
		callback();
		new Effect.ScrollTo('SYS_contents');
	}});
}

function SYS_loadContentsPOP(url,obj,callback)
{
	if(obj == undefined) obj = "SYS_POP";

	//destruyo el pop si existe y creo el nuevo
	SYS_crearPOP(obj);
	var objPOP = $(obj);
	if(callback == undefined) callback = function(){};
	new Ajax.Updater(obj + "_contentsTemp",url,{ onComplete: function(retorno){
		if(SYS_isError(retorno.responseText))
		{
			SYS_doError(retorno.responseText);
			return;
		}
		SYS_ocultarRefresher();
		callback();
		var fondo_pos = BROWSER_getBodyFullSize();
		var scroll = BROWSER_getScroll();
		var size = BROWSER_getFullSize();
		
		var blah = $(obj + "_contentsTemp");
		var left = Math.ceil(((size[0] / 2) - (blah.getDimensions().width / 2)) + scroll[0]);
		var top = Math.ceil(((size[1] / 2) - (blah.getDimensions().height / 2)) + scroll[1]);

		var alturaPOP = blah.getDimensions().height;
		
		if(top < 0) top = 20;
		
		//SYS_actualizarPostPOP();
		
		new Effect.MoveAndReSize(obj + "_contents",{move:['fixed:' + left + ':' + top],resize:['fixed:'+blah.getDimensions().width+':'+blah.getDimensions().height],toggleIndex:1,onComplete:function(){$(obj + "_contents").style.display = "none";$(obj + "_contentsTemp").style.display = "";SYS_actualizarPostPOP($(obj + "_fondo"))}});
		//new Effect.MoveAndReSize(obj + "_contentsTemp",{move:['fixed:' + left + ':' + top],resize:['fixed:'+blah.getDimensions().width+':'+blah.getDimensions().height],toggleIndex:1});
		
		blah.style.left = left + "px";
		blah.style.top = top + "px";
		blah.style.width = blah.getDimensions().width + "px";
		blah.style.height = blah.getDimensions().height + "px";	
	}});
}

function SYS_crearPOP(nombre)
{
	//fixeo elementos
	SYS_hideElementsPOP();
	
	//si existel el POP lo remuevo
	if($(nombre) != undefined) Element.remove(nombre);
	
	var POP = document.createElement("div");
	POP.className = "POP";
	
	POP.id = nombre;
	
	var FONDO = document.createElement("div");
	FONDO.className = "POP_fondo";
	FONDO.id = nombre + "_fondo";
	
	
	
	var VENTANA = document.createElement("div");
	VENTANA.className = "POP_contents";
	VENTANA.id = nombre + "_contents";
	VENTANA.style.width = "100px";
	VENTANA.style.height = "100px";
	
	var CONTEMP = document.createElement("div");
	CONTEMP.className = "POP_contentsFINAL";
	CONTEMP.id = nombre + "_contentsTemp";
	CONTEMP.style.display = "none";
	
	var fondo_pos = BROWSER_getBodyFullSize();
	var scroll = BROWSER_getScroll();
	var size = BROWSER_getFullSize();
	
	FONDO.style.width = fondo_pos[0] + "px";
	FONDO.style.height = fondo_pos[1] + "px";
	
	FONDO.style.left = "0px";
	FONDO.style.top = "0px";
	
	FONDO.setAttribute("title","Cerrar...");
	FONDO.setAttribute("alt","Cerrar...");
	
	if (FONDO.addEventListener)
	{
  		FONDO.addEventListener("click",function(){SYS_cerrarPOP(POP);}, false);
	}
	else if (FONDO.attachEvent)
	{
  		FONDO.attachEvent('onclick',function(){SYS_cerrarPOP(POP);});
	}
	
	var left = Math.ceil(((size[0] / 2) - (100 / 2)) + scroll[0]);
	var top = Math.ceil(((size[1] / 2) - (100 / 2)) + scroll[1]);
	
	VENTANA.style.top = top + "px";
	VENTANA.style.left = left + "px";
	
	
	POP.appendChild(FONDO);
	POP.appendChild(VENTANA);
	POP.appendChild(CONTEMP);
	POP.style.display = "none";
	
	var desktop = document.getElementsByTagName("body")[0];
	
	desktop.appendChild(POP);
	Element.show(POP);
}

function SYS_actualizarPostPOP(fondo)
{
	var medidas = BROWSER_getRealFullSize();
	fondo.style.height = (medidas[1] + 20) + "px";
}

function SYS_cerrarPOP(pop)
{
	SYS_showElementsPOP();
	if(pop == undefined) pop = $("SYS_POP");
	Element.remove(pop);
}

function SYS_checkMenuHeight()
{
	return;
	/*TODO!
	//borrar este método*/
	var m2 = BROWSER_getRealFullSize();
	$('SYS_menu').style.height = (m2[1]) + "px";
}

function SYS_doDeny(cadena)
{
	if(cadena == undefined) cadena = "No posee permisos para realizar esta acción.<br><br>Ante cualquier consulta contáctese con el administrador."
	CONFIRM_do(null,cadena,true);
}

function SYS_checkRefresherHeight()
{
	var fondo_pos = BROWSER_getRealFullSize();
	$("SYS_refresher").style.width = fondo_pos[0] + "px";
	$("SYS_refresher").style.height = fondo_pos[1] + "px";
}

function SYS_invertirSeleccion(tipo)
{
	var seleccionables = $(tipo + "_SELECCIONABLES");
	var ids = explode(",",seleccionables.value);
	
	for(var x=0;x<ids.length;x++) if(!ids[x].empty()) SYS_agregarSeleccion($(tipo + "_cuerpo_" + ids[x]),tipo,'SELECCION_icono_' + ids[x],ids[x]);
}

function SYS_eliminarSeleccion(tipo)
{
	var seleccion = $(tipo + "_SELECCIONADOS");
	if(seleccion.value.empty())
	{
		CONFIRM_do(null,"Primero debe seleccionar elementos.",true);
		return;
	}
	
	CONFIRM_do(function(){
	var ids = explode(",",seleccion.value);
	for(var x=0;x<ids.length;x++) if(!ids[x].empty()) eval(tipo + "_delete(" + ids[x] + ",true);");
	CONFIRM_do(null,"La seleccion fue eliminada correctamente.",true);
	},'¿ Seguro de eliminar los elementos seleccionados ?<br><br>( esta operacion no podra ser revertida )');
}

function SYS_execSeleccion(tipo,accion,pagID)
{
	var seleccion = $(tipo + "_SELECCIONADOS");
	if(seleccion.value.empty())
	{
		CONFIRM_do(null,"Primero debe seleccionar elementos.",true);
		return;
	}
	
	var ids = explode(",",seleccion.value);
	
	//no pertenece a un paginador
	if(pagID !== undefined)
	{
		var eliminarAfueras = '';
		for(var x=0;x<ids.length;x++) if(!ids[x].empty()) if ($(pagID + ids[x]).retrieve("paginable").retrieve("pagina_actual") !== $(pagID + ids[x]).retrieve("pagina"))
		{
			eliminarAfueras += (eliminarAfueras == "" ? "" : ",") + ids[x];
			SYS_agregarSeleccion($("USERENAB_cuerpo_" + ids[x]),'USERENAB','SELECCION_icono_' + ids[x],parseInt(ids[x]));
		}
		if(!eliminarAfueras.empty()) eval("ids = ids.without(" + eliminarAfueras + ",'');");
		if(ids.length < 1) { CONFIRM_do(null,"Primero debe seleccionar elementos.",true); return; }
	}
	
	CONFIRM_do(function(){
	var ids = explode(",",seleccion.value);
	for(var x=0;x<ids.length;x++) if(!ids[x].empty()) eval(accion + "(" + ids[x] + ",true);");
	CONFIRM_do(null,"La acción fue ejecutada con éxito.",true);
	},'¿ Seguro de realizar esta acción ?');
}

function SYS_agregarSeleccion(obj,tipoX,icono,id)
{
	var agregar = true;
	icono = $(icono);
	var seleccion = $(tipoX + "_SELECCIONADOS");
	
	for(x in _SELECCIONABLES) if(_SELECCIONABLES[x].objeto == obj)
	{
		agregar = false;
		_SELECCIONABLES.splice(x,1);
		//icono.style.display = "none";
		icono.className = "SYS_seleccion_icono_off";
		seleccion.value = seleccion.value.gsub(id + ",","");
	}
	if(agregar)
	{
		_SELECCIONABLES.push({objeto:obj,tipo:tipoX});
		//icono.style.display = "";
		icono.className = "SYS_seleccion_icono_on";
		seleccion.value = seleccion.value + id + ",";
	}
}

function SYS_limpiarSeleccion()
{
	_SELECCIONABLES = [];
}

function SYS_doError(cadena)
{
	//alert(cadena);
	SYS_ocultarRefresher();
	error = cadena.toQueryParams();
	CONFIRM_do(null,"Ha ocurrido el siguiente error:<br><br>" + error.PHP_INTERNAL_ERROR + "<br><br>Contáctese con el administrador o inténtelo nuevamente más tarde.",true);
}

function SYS_isError(cadena)
{
	if(cadena.indexOf("PHP_INTERNAL_ERROR") != -1) return true;
	return false;
}

function SYS_checkHeightALL()
{
	//fondo negro del popup
	if($$(".POP_fondo").length > 0)
	{
		var fondos = $$(".POP_fondo");
		var x = 0;
		for(x=0;x<fondos.length;x++)
		{
			var medidas = BROWSER_getRealFullSize();
			//alert(medidas[1]);
			//alert(document.documentElement.clientHeight);
			//alert(for xwindow.frames);
			fondos[x].style.height = (medidas[1]) + "px";
		}	
	}

	//fondos blancos
	if($$(".POP_contentsFINAL").length > 0)
	{		
		var fondos = $$(".POP_contentsFINAL");
		
		var medidas = fondos[0].getDimensions();		
		if($("form_files_0") != undefined) medidas = $("form_files_0").getDimensions();
		if($("form_user_0") != undefined) medidas = $("form_user_0").getDimensions();
		if($("form_grupos_0") != undefined) medidas = $("form_grupos_0").getDimensions();
		if($("form_categorias_0") != undefined) medidas = $("form_categorias_0").getDimensions();
		if($("form_feedback_0") != undefined) medidas = $("form_feedback_0").getDimensions();
		if($("form_gen") != undefined) medidas = $("form_gen").getDimensions();
		var x = 0;	
		//alert(medidas[1]);
		for(x=0;x<fondos.length;x++) if(fondos[x].style.display == "") fondos[x].style.height = (medidas.height + 10) + "px";
	}
	
}

function SYS_recoverPass()
{
	SYS_loadContentsPOP('includes/html/publico.php?recover=true');
}

function SYS_register()
{
	SYS_loadContentsPOP('includes/html/publico.php?register=true');
}

function SYS_quickSearch(objeto)
{
	if(objeto.value.empty())
	{
		 $("SYS_busqueda_icono").className = "SYS_itemFix_trans";
		 return;
	}
	
	$("SYS_busqueda_icono").className = "";
	
	new Ajax.Request("includes/html/quickmenu.php",{method:"post",postBody:"quicksearch=" + objeto.value,onSuccess:function(retorno){
		if(SYS_isError(retorno.responseText))
		{
			SYS_doError(retorno.responseText);
			return;
		}
		
		$("SYS_quickSearch_resultados").innerHTML = retorno.responseText;
		
		SYS_showQuickSearch();
		$("SYS_busqueda_icono").className = "SYS_itemFix_trans";
	}});
}

function SYS_showQuickSearch()
{
	if($("SYS_quickSearch_resultados").style.display == "none") Effect.toggle("SYS_quickSearch_resultados","blind");	
}

function SYS_hideQuickSearch()
{
	if($("SYS_quickSearch_resultados").style.display == "") Effect.toggle($("SYS_quickSearch_resultados"),"blind");
}