/*
Library: controlador-de-búsquedas.js
Theme URI: http://www.congresovisible.org
Description: Script genérico para el control de listas y búsquedas
Version: 2.2
Author: http://www.monoku.com

Creada : 14.01.10
Modificada : $Date: 2010-07-07 16:51:10 +0000 (Wed, 07 Jul 2010) $
*/
var abcdario="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
var tagsUpThere = []; 
var resetPagination = true;
var presentPage = '1';
var totalpags = 0;
var modeSmartPagination = false;

function trim( val ){
	return val.replace(/^\s/, '').replace(/\s$/, '');
}

jQuery(document).ready(function(){	
	// Lista letras
	$("p.letra .paginas-disponibles a").live("click", function() {
		if($(this).hasClass("active")){
			return;
		}
		var index = $(this).parent().find("a").index( $(this) ),
			letter = presentPage = $("p.letra a").eq(index).html();
			
		$("p.letra a").removeClass("active");
		
		for ( var i = 0, n = $("p.letra").length; i < n; i++) {
			$( $("p.letra")[i] ).find("a").eq(index).addClass("active");
		}
		if(modeSmartPagination){
			smartPaginationGenerator();
		}
		
		HManager.setVar('page', letter);
		
		resetPagination=false;
		if(abcdario.indexOf(letter)!= -1){
			HManager.page = letter;
		}else{
			HManager.page = parseInt( letter );
		}
		
		gwtHistoryReceiver( HManager.hash );
		
		return false;
	});
	
	$("#more_elements .more-attributes li").live("click", function(event) {
		var value = $(this).children(".text").html();
		var category = $(this).parent().parent().prev().prev().html();
		var fullValue = trim(category) +'--'+ trim(value);
		
		if( !HManager.has(fullValue) ){
			HManager.page = 1;
			HManager.add(fullValue).disposeVar('page');
			addCategory( trim(category), trim(value));
			gwtHistoryReceiver( HManager.hash );
		}
		event.stopPropagation();
	});
	
	
	$("#filtrobox input").keypress(function(e) {
	    if(e.keyCode == 13) {
			var value = $("#filtrobox input").val(),
				fullValue = value;
			
			if( !HManager.has(fullValue) ){
				HManager.page = 1;
				HManager.add(fullValue).disposeVar('page');				
				addCategory('query',value);
				gwtHistoryReceiver( HManager.hash );
			}
	    }
	});
	
	$("#filtrobox a").click(function() {
		var value = $("#filtrobox input").val(),
			fullValue = value;
		
		if( !HManager.has(fullValue) ){
			HManager.page = 1;
			HManager.add(fullValue).disposeVar('page');
			addCategory('query', value);
			gwtHistoryReceiver( HManager.hash );
		}
	});
	
	
	$("#cajalista ul ul li").not(".hay-mas").click(function() {
		var value = $(this).children(".text").html(),
			category = $(this).parent().prev().html(),
			fullValue = trim(category) +'--'+ trim(value),
			urlExpr = /^http:\/\/(?:[\w-\.]+)\/([\w-]+)\//i,
			mode = urlExpr.exec( location.href );
		
		if( /([\d\s]+)-([\s\d]+)/.test(value) ){
			value = value.replace(/\s+/g,'');
			fullValue = trim(category) +'--'+ trim(value);
		}
		
		//agregando cuatrienio activo
		if(mode[1] && mode[1] == 'congresistas' && $(this).index("#cajalista ul ul li") !== 0 && !window.$tagWasPut){
			$("#cajalista ul ul li:first").not(".hay-mas").click();
			window.$tagWasPut = 1;
		}
		
		if( !HManager.has(fullValue) ){
			HManager.page = 1;
			HManager.add(fullValue).disposeVar('page');
			addCategory( trim(category) , trim(value));
			gwtHistoryReceiver( HManager.hash );
		}		
    });
	
	
	$('.tag-busqueda .close').live('click', function(){
		var $parent = $(this).parent(),
			cat_e = $parent.data("category"),
			val_e = $parent.data("value"),
			toDelete = '',
			allVars = null;
		$parent.hide('fast',function(){
			$(this).prev().hide('fast', function(){
				$(this).remove();
			});
			$(this).remove();
		});
		
		if(cat_e == 'query'){
			toDelete = val_e;
		}
		else{
			toDelete = trim(cat_e) +'--'+ trim(val_e);
		}
		
		Pagination.disable(1);
		
		HManager.dispose( toDelete ).disposeVar('page');
		
		delete HManager.categories[ slugify(trim(cat_e)) ];
		
		gwtHistoryReceiver( HManager.hash );
		return false;
	});
	
	/**
	 * Temporalmente agregamos los controles
	 * Luego se renderiza desde la template directamente
	 */
	(function(){
		
		var controls = '<div class="pagination-controls" style="right: 5px; bottom: -31px;">';
		controls += '<ul>';
		controls += '<li id="pag-spinner"><span></span></li>';
		controls += '<li id="pag-pause"><a href="#" class="pag-pressed"><span id="pag-indicator"></span>Detener carga autom&aacute;tica</a></li>';
		controls += '<li class="pag-separator"><span></span></li>';
		controls += '<li id="pag-stop"><a href="#">Volver a paginaci&oacute;n</a></li>';
		controls += '<li class="pag-separator"><span></span></li>';
		controls += '<li id="pag-top"><a href="#" class="go-to-top"></a></li>';
		controls += '</ul>';
		controls += '</div>';
		
		$(document.body).append(controls);
		
		$('#pag-pause a').click(function(){
			if( !this.$action ){
				Pagination.pause();
				$(this).html('<span id="pag-indicator"></span>Continuar carga autom&aacute;tica').removeClass('pag-pressed');
				this.$action = 1;
			}
			else{
				Pagination.enable();
				$(this).html('<span id="pag-indicator"></span>Detener carga autom&aacute;tica').addClass('pag-pressed');
				this.$action = 0;
				$(window).trigger('livescroll');
			}
			return false;
		});
		
		$('#pag-stop a').click(function(){
			Pagination.enable();
			Pagination.disable(1);
			gwtHistoryReceiver( HManager.hash );
			return false;
		});
	})();
});

function cargarReporteComposicion(elem,grupo){
	if($(elem).hasClass("active")){
		return false;
	}
	$("ul.reportes-lista li").removeClass("active");
	$(elem).addClass("active");
	$("#contenedor-reporte iframe").attr("src","/api/composicion/pie/?group_by="+ grupo +"&height=284&width=446");
}
function cargarReporteComposicionTipo(elem,grupo,tipo){
	if($(elem).hasClass("active")){
		return false;
	}
	$("ul.reportes-lista li").removeClass("active");
	$(elem).addClass("active");
	$("#contenedor-reporte iframe").attr("src","/api/composicion/"+tipo+"/?group_by="+grupo+"&height=284&width=446");
}

function smartPaginationGenerator() {
	var numeroactual = parseInt(presentPage), 
		$letra = '',
		domPaginasDisponibles = $("p.letra .paginas-disponibles").html(''),
		anchors = null;
	
	for(var i = 1; i <= 5; i++ ){
		domPaginasDisponibles.append( ('<a>'+ i +'</a>&nbsp;') );
	}
	
	if(numeroactual > 9 && numeroactual < totalpags-9){
		domPaginasDisponibles.append( $("<span/>").html("...") ).append(" ");
		for ( var a = numeroactual-3; a <= numeroactual+3; a++) {
			$letra = $("<a/>").html(a);
			if(a == 1){
				$letra.addClass("active");
			}
			domPaginasDisponibles.append($letra).append(" ");
		}
		domPaginasDisponibles.append( $("<span/>").html("...") ).append(" ");
	}else if(numeroactual < totalpags-10){
		for(var i = 6; i <= 10; i++){
			domPaginasDisponibles.append( ('<a>'+ i +'</a>&nbsp;') )
		}
		domPaginasDisponibles.append('<span>...</span>&nbsp;');	
	}else{
		domPaginasDisponibles.append('<span>...</span>&nbsp;');
		for ( var a = totalpags-10; a <= totalpags-6; a++) {
			domPaginasDisponibles.append('<a>'+ a +'</a>&nbsp;');
		}
	}
	for ( var a = totalpags-5; a <= totalpags; a++) {
		domPaginasDisponibles.append('<a>'+ a +'</a>&nbsp;');
	}
	
	anchors = domPaginasDisponibles.children('a');
	
	for ( var e = 0; e < anchors.length; e++) {
		if($(anchors[e]).text()==presentPage){
			$(anchors[e]).addClass("active");
		}
	}
}


function doit(hs){
	//si viene el hash vacio y no se ha cargado por primera vez la pagina
	//evita que se ejecute
	if( hs === '' && !HManager.loaded){
		HManager.loaded = true;
		return false;
	}
	
	var cat = '',
		val = '',
		parts = null,
		page = '';
	
	HManager.categories = {};
	HManager.hash = hs.replace('#', '');
	hs = HManager.getVar('q');
	
	$(".block-tags .content-block").empty();
	for(var i = 0, n = hs.length; i < n; i++){
		parts = hs[i].split('--');
		
		val = $('#obj_'+ parts[1]).text();
		cat = $('#obj_'+ parts[1]).parent().parent().prev().html();
		
		if( $('#obj_'+ parts[1]).attr('category') ){
			cat = $('#obj_'+ parts[1]).attr('category');
		}
		
		if( cat === ''){
			cat = parts[1];
			val = parts[2];
		}
		
		if(!cat ){
			cat = 'query';
			val = hs[i];
		}
		
		if(val != ''){
			
			if( /([\d\s]+)-([\s\d]+)/.test(val) ){
				val = val.replace(/\s+/g,'');
			}
			
			addCategory(cat, val);
		}
	}

	page = HManager.getVar('page');
	
	if(hs === ''){
		if(page === ''){
			HManager.page = 'A';
		}
		else{
			HManager.page = page;
		}
	}
	else{
		if(page === ''){
			HManager.page = 1;
		}
		else{
			HManager.page = page;
		}
	}
	presentPage = HManager.page;
	sendCategories();
	return true;
}


function addCategory(category, value){	
	var tags = $(".tag-busqueda"),
		curCategory = '',
		curValue = '';
	
	$("#contenedor-reporte").slideUp("fast").fadeOut("normal");
	
	HManager.categories[ slugify( trim(category) ) ] = slugify(trim(value));
	if(category == 'query') {
		HManager.categories[ slugify(category) ] = slugify(value).replace(/-/g,"+");
	}
	
	//Si ya existe entre los tags de busqueda
	for ( var i = 0, n = tags.length; i < n; i++ ) {
		curCategory = $(tags[i]).data("category");
		curValue = $(tags[i]).data("value");
		
		if(curCategory == 'query' && category == 'query'){
			HManager.dispose( curValue );
		}
		
		if( slugify( trim(curCategory) ) == slugify( trim(category) ) ){
			HManager.dispose( trim(curCategory)+'--'+trim(curValue) ).categories[ slugify( trim(curCategory) ) ] = slugify(trim(value));
			$(tags[i]).data("value", value).attr("title", value).find('.value').text( value.substring(0, 15) );
			return true;
		}
	}
	
	var $plusTag = $("<span/>").addClass("tag-plus").hide(), //+
		$tag = $("<span/>").addClass("tag-busqueda").attr("title", value), //tag en si
		$valTag = $("<span/>").addClass("value").html( value.substring(0,15) ), //el value
		$rightTag = $("<span/>").addClass("right"),//borde derecho
		$closeTag = $("<span/>").addClass("close").html("x").attr("title", "Quitar: "+ category);//Close X
	
	$tag.append($valTag).append($rightTag).append($closeTag).hide().data("category",category).data("value",value);
	
	if(category == 'query'){
		$(".block-tags .content-block").prepend($plusTag).prepend($tag);
	}else{
		$(".block-tags .content-block").append($plusTag).append($tag);
	}
	
	if( tags.length >= 1 ){
		$plusTag.show();
	}
	
	$tag.fadeIn();
}

function sendCategories(){
	var searchTmpl  = "/%1%/search/%1%/?%2%",
		urlExpr = /^http:\/\/(?:[\w-\.]+)\/([\w-]+)\//i,
		mode = urlExpr.exec( location.href ),
		cats = [],
		hCats = HManager.categories,
		prefix = '',
		withException = false,
		periodo = ''; 
	
	if(mode[1] == 'votaciones' && hCats['comision'] && hCats['camara']){
		delete hCats['camara'];
	}
	
	
	
	for(var i in hCats){
		if(i === 'query'){
			//Se cambio a peticion de julian
			cats.push( hCats[i]/*+"%7E+"*/+"+" );
			
			if( hCats['cuatrienio'] ){
				periodo = hCats['cuatrienio'];
			}
			else{
				periodo = '2010-2014';
			}
		}
		else{
			if(i !== 'cuatrienio' && mode[1] === 'congresistas'){
				//withException = true;
				if( hCats['cuatrienio'] ){
					hCats[i] += '-cuatrienio-'+hCats['cuatrienio'];
					periodo = hCats['cuatrienio'];
				}
				else{
					hCats[i] += '-cuatrienio-2010-2014';
					periodo = '2010-2014';
				}
			}
			
			cats.push( i+'-'+hCats[i] );
		}
	}
	
	if( mode[1] ){
		
		switch( mode[1] ){
			case 'congresistas':
				//prefix = 'es_congresista+';
//				if(!withException){
//					prefix += 'cuatrienio-2006-2010+'; 
//				}
			break;
			case 'candidatos':
				prefix = 'es_candidato+';
			break;
		}
		 
		if( HManager.excModes[ mode[1] ] && cats.length === 0 ){
			prefix = '%20';
			if(HManager.page === 'A'){
				presentPage = HManager.page = 1;
			}
		}
		
		if( abcdario.indexOf(HManager.page) != -1 && !HManager.excModes[ mode[1] ] ){
			searchTmpl = "/%1%/ajax/%1%/%2%/".replace(/%2%/g, HManager.page );
		}
		else{
			
			searchTmpl = searchTmpl.replace(/%2%/g, 'q='+ prefix + cats.join(HManager.separator));
			if(HManager.page > 1){
				searchTmpl +='&page='+	HManager.page;		
			}
		}
		
		searchTmpl = searchTmpl.replace(/%1%/g, mode[1]);
		
		if(periodo != ''){
			searchTmpl += '&periodo='+periodo;			
		}
		
		sendCategories.searchURL = searchTmpl;
		
		$.get(searchTmpl, null, function(r){
			Pagination.xhr();
			
			pushToList(r, HManager.appendMode);
			return true;
		});
	}
	
	return true;
}



function pushToList( result, mode){	
	$("#congresistas-reportebase").slideUp();
	var array_elementos = [],
		$list = $("#list-container .lista1"),
		$avaliablePages = $("p.letra .paginas-disponibles"),
		docFragment = pagesFragment = document.createDocumentFragment();
	
	mode = mode || pushToList.REPLACE;
	
	if( $.isArray(result) ){
		array_elementos = result;
	}else{		
		array_elementos = result[ 'elementos' ];
	}
	
	
	if( resetPagination ){
		$avaliablePages.empty();
		if(result.pags){
			HManager.avaliablePages = result.pags;
			$("p.letra .label").html("B&uacute;squeda por P&aacute;gina: ");
			if( result.pags < 20 ){
				modeSmartPagination = false;
				for ( var a = 1, n = result.pags; a <= n; a++) {
					var $letra = $("<a/>").html(a);
					
					if(a == 1 && HManager.page <= 1){
						$letra.addClass("active");
					}
					
					if(a == HManager.page){
						$letra.addClass("active");						
					}
					
					pagesFragment.appendChild($letra.get(0));
					pagesFragment.appendChild(document.createTextNode(" "));
				}
				
				$avaliablePages.append(pagesFragment);
			}else{
				modeSmartPagination = true;
				totalpags = result.pags;
				smartPaginationGenerator();
			}
		}else{
			modeSmartPagination = false;
			$("p.letra .label").html("B&uacute;squeda por Letra: ");
			presentPage = '1';
			totalpags = 0;
			
			for ( var a = 0, n = abcdario.length; a < n; a++) {
				var $letra = $("<a/>").html(abcdario.substring(a, a+1));

				if(a == abcdario.indexOf(HManager.page)){
					$letra.addClass("active");						
				}else if( a == 0 ){
					$letra.addClass("active");
				}		
				
				pagesFragment.appendChild( $letra.get(0) );
				pagesFragment.appendChild( document.createTextNode(" ") );				
			}
			
			$avaliablePages.append(pagesFragment);
		}
	}
	
	resetPagination = true;
	
	if(! array_elementos){
		return;
	}


	if( mode === pushToList.REPLACE ){
		$list.hide().empty();
	}
	
	if(array_elementos.length == 0){
		if( mode === pushToList.REPLACE ){
			$list.html('<li style="text-align: center;">Sin Resultados</li>');
		}
		jQuery(window).trigger('livescroll');
	}

	
	for ( var i = 0, len = array_elementos.length; i < len; i++) {
		docFragment.appendChild( $("<li />").append( funcion_crear_elemento_lista( array_elementos[i] ) ).get(0) );
	}
	
	$list.append(docFragment).fadeIn();
	$list.find("> li:odd").addClass("marcado");
	
	if(calculateBars){
		calculateBars();
	}
	
	//mostrando el boton de exportar
	$('#export_button').removeClass('hidden').attr('href', sendCategories.searchURL + '&export=true');
	
	if(HManager.hash == ''){
		$('#export_button').addClass('hidden');
	}
	
	docFragment = null;
	pagesFragment = null;
}

pushToList.APPEND = 1;
pushToList.REPLACE = 2;

function calculateBars( obj ){
	var $ctx = $('.lista1 .voto-ciudadano');
	
	$ctx.each(function(){
		var $n = $('.posicion-contra', this),
			$p = $('.posicion-favor', this),	
			pp = parseInt( $p.find('> .positivo').html() ),
			pn = parseInt( $n.find('> .negativo').html() ),
			$ppLICollection = $p.find('> ul > li'),
			$pnLICollection = $n.find('> ul > li');
		
		pn = Math.round( (20 * pn) / 100 );
		pp = Math.round( (20 * pp) / 100 );
		
		for(var i = 0, len = pp ; i < len; i++){
			$ppLICollection[i].className = 'c';
		}
		
		for(i = ($pnLICollection.length - 1), len = i - pn; i > len; i--){
			$pnLICollection[i].className = 'c';
		}		
	});
}
