/**
 * Obtener un elemento por su class
 */
function getElementsByClassName(oElm, strTagName, strClassName) {
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}

/*
 * Cerrar extendnav
 */
function closeExtendnav(opentab) {
	if (opentab != "mastiendas") {
		$("#mastiendas").slideUp(250);
		$("#nav ul li a#tiendas").attr("class","");
	}
	else if (opentab != "iniciarsesion") {
		$("#iniciarsesion").slideUp(250);
		$("#nav ul li a#login").attr("class","");	
	}
}


/*
 * Muestra o oculta las tiendas
 */
function toggleTiendas() {
	closeExtendnav("mastiendas");
	$("#mastiendas").slideToggle(250);

	if ($("#nav ul li a#tiendas").attr("class") == "selected") {
		$("#nav ul li a#tiendas").attr("class","");
	}
	else {
		$("#nav ul li a#tiendas").attr("class","selected");
		$('html, body').animate({scrollTop:0}, 300); 
	}
}

/*
 * Muestra o oculta iniciar sesión
 */
function toggleIniciarSesion() {
	closeExtendnav("iniciarsesion");
	$("#iniciarsesion").slideToggle(250);
	
	if ($("#nav ul li a#login").attr("class") == "selected") {
		$("#nav ul li a#login").attr("class","");
	}
	else {
		$("#nav ul li a#login").attr("class","selected");
		$('html, body').animate({scrollTop:0}, 300);
		setTimeout("$('#j_username').focus()", 250);
	}
}

/*
 * Comprobar que el value de un formulario no esta vacio
 */
function checkValueNotBlank(valor, ident) {
	if (valor != "") {
		document.getElementById(ident).innerHTML = ''
	}
}

/*
 * Mostrar una capa
 */
function mostrar(id) {
	$("#"+id).show()
}

/*
 * Ocultar una capa
 */
function ocultar(id) {
	$("#"+id).hide()
}

/*
 * Toggle una capa
 */
function toggle(id) {
	$("#"+id).toggle()
}

/**
 * Buscador
 */
function buscador(principal, buscarprograma, linkImagen) {
	$(document).ready(function() {
		$("#buscarheaderInput").autocomplete(
		    // rest url
		    buscarprograma
		   , { dataType:"json"
			   , minChars: 2
			   , width: 345
			   , selectFirst: false
			   , scrollHeight : "auto"
			   , matchContains: "nombre"
			   , autoFill: false
			   , max: "4"
			   , formatItem: function(row, position, max, search){
				   	var ofertas = "";
				   	if (row.ofertas == 1) {
				   		ofertas = '<span class="porpromociones"><img src="http://cuestamenos.com/images/porpromociones.png" />&nbsp;'+row.ofertas+' promoción</span>';
				   	}
				   	else if (row.ofertas > 1) {
				   		ofertas = '<span class="porpromociones"><img src="http://cuestamenos.com/images/porpromociones.png" />&nbsp;'+row.ofertas+' promociones</span>';
				   	}

				   	var nombre = row.nombre;
				   	if (row.nombre.length > 19)
				   		nombre = row.nombre.substring(0, 19)+'...';

				   	return '<span style="height: 30px;" class="titulo"><img src="'+linkImagen+'/'+row.idh+'" /></span><span style="width: 178px;" class="descripcion2"><span class="nombretienda">'+nombre+'</span>'+row.descripcion.substring(0, 50)+'...</span><span class="ganancias"><span class="pormi"><img class="tooltip" src="http://cuestamenos.com/images/pormi.png" />&nbsp;'+row.comision+'</span><span class="pormisamigos"><img class="tooltip" src="http://cuestamenos.com/images/pormisamigos.png" />&nbsp;'+row.comisionamigo+'</span>'+ofertas+'</span>';
			   	}
		   	   , parse: function(data){
	   		   		var acd = new Array();
	   		   			for(var i=0;i<data.length;i++){
	   		   				acd[acd.length] = { data:data[i], value:data[i].nombre, result:data[i].nombre };
	   		   			}
	   		   			return acd;
     			}
		   }
		).result(function(event, item) {
			location.href = principal + "buscar/" + item.permalink + "/ver";
		});
	});
}
function buscadorgrande(principal, buscarprograma, linkImagen) {
	$(document).ready(function() {
		$("#buscarProductoFormInput").autocomplete(
		    // rest url
		    buscarprograma
		   , { dataType:"json"
			   , minChars: 2
			   , width: 623
			   , selectFirst: false
			   , scrollHeight : "auto"
			   , matchContains: "nombre"
			   , autoFill: false
			   , max: "3"
			   , formatItem: function(row, position, max, search){
				   	var ofertas = "";
				   	if (row.ofertas == 1) {
				   		ofertas = '<span class="porpromociones"><img src="http://cuestamenos.com/images/porpromociones.png" />&nbsp;'+row.ofertas+' promoción</span>';
				   	}
				   	else if (row.ofertas > 1) {
				   		ofertas = '<span class="porpromociones"><img src="http://cuestamenos.com/images/porpromociones.png" />&nbsp;'+row.ofertas+' promociones</span>';
				   	}
				   	return '<span style="height: 30px;" class="titulo"><img src="'+linkImagen+'/'+row.idh+'" /></span><span style="width: 478px;" class="descripcion2"><span class="nombretienda">'+row.nombre+'</span>'+row.descripcion.substring(0, 150)+'...</span><span class="ganancias"><span class="pormi"><img class="tooltip" src="http://cuestamenos.com/images/pormi.png" />&nbsp;'+row.comision+'</span><span class="pormisamigos"><img class="tooltip" src="http://cuestamenos.com/images/pormisamigos.png" />&nbsp;'+row.comisionamigo+'</span>'+ofertas+'</span>';
		   		}
		   	   , parse: function(data){
	   		   		var acd = new Array();
	   		   			for(var i=0;i<data.length;i++){
	   		   				acd[acd.length] = { data:data[i], value:data[i].nombre, result:data[i].nombre };
	   		   			}
	   		   			return acd;
     			}
		   }
		).result(function(event, item) {
			location.href = principal + "buscar/" + item.permalink + "/ver";
		});
	});
}
/*
 * Buscador Productos
 */
function buscadorheader() {
	 var buscarHeader = $("#buscarheaderForm").attr("action");
	 $("#buscarheaderForm").attr("action", buscarHeader + "/" + $("#buscarheaderInput").val());
	 $("#buscarheaderForm").submit();
}
function buscadorproductoform() {
	 var buscarProducto = $("#buscarProductoForm").attr("action");
	 $("#buscarProductoForm").attr("action", buscarProducto + "/" + $("#buscarProductoFormInput").val());
	 $("#buscarProductoForm").submit();
}
function buscadorProductos(paginaTienda, paginaPromocion, paginaProducto){
    if (!paginaTienda) {
        paginaTienda = "1";
    }
    if (!paginaPromocion) {
        paginaPromocion = "1";
    }
	if (!paginaProducto) {
		paginaProducto = 1;
	}
    var buscarProducto = $("#buscarProducto").attr("action");
    $("#buscarProducto").attr("action", buscarProducto + "/" + $("#buscarProductoInput").val() + "/" + paginaTienda + "," + paginaPromocion + "," + paginaProducto);
    $("#buscarProducto").submit();
}

function buscadorPromociones(paginaPromocion){
	if (!paginaPromocion) {
		paginaPromocion = 1;
	}
    var buscarPromocion = $("#buscarPromocion").attr("action");
    var orden = "";
    if ($("#orden").val() != "") {
        orden = $("#orden").val() + "/";
    }
    $("#buscarPromocion").attr("action", buscarPromocion + "/" + orden + paginaPromocion);
    $("#buscarPromocion").submit();
}

function filtraCategoria1(filtro, paginaTienda){
	$("#vfc1").attr("value", filtro);
	$("#vfc2").attr("value", "");
	$("#vft").attr("value", "");
	if (!paginaTienda) {
		paginaTienda = 1
	}
    buscadorProductos(paginaTienda, 1);
}

function filtraCategoria2(filtro1, filtro2, paginaTienda){
	$("#vfc1").attr("value", filtro1);
	$("#vfc2").attr("value", filtro2);
	$("#vft").attr("value", "");
	if (!paginaTienda) {
		paginaTienda = 1
	}
    buscadorProductos(paginaTienda, 1);
}

function filtraTienda(filtro, paginaTienda){
	$("#vft").attr("value", filtro);
	if (!paginaTienda) {
		paginaTienda = 1
	}
	buscadorProductos(paginaTienda, 1);
}

function limpiaFiltroCategoria(paginaTienda) {
	$("#vfc1").attr("value", "");
	$("#vfc2").attr("value", "");
	$("#nfc").attr("value", "");
	$("#vft").attr("value", "");
	$("#rdesde").attr("value", "");
	$("#rhasta").attr("value", "");
    $("#o1").attr("value", "");
    $("#o2").attr("value", "");
	if (!paginaTienda) {
		paginaTienda = 1
	}
    buscadorProductos(paginaTienda, 1);
}

function limpiaFiltroTienda(paginaTienda) {
	$("#vft").attr("value", "");
	$("#rdesde").attr("value", "");
	$("#rhasta").attr("value", "");
	if (!paginaTienda) {
		paginaTienda = 1
	}
    buscadorProductos(paginaTienda, 1);
}

function seleccionaOrden(opcion, paginaTienda, paginaPromocion) {
	switch(opcion) {
	case '1':
		$("#o1").attr("value", "precio");
		$("#o2").attr("value", "asc");
		break;
	case '2':
		$("#o1").attr("value", "precio");
		$("#o2").attr("value", "desc");
		break;
	case '3':
		$("#o1").attr("value", "nombre");
		$("#o2").attr("value", "asc");
		break;
	case '4':
		$("#o1").attr("value", "nombre");
		$("#o2").attr("value", "desc");
		break;
	default:
		$("#o1").attr("value", "relevancia");
		$("#o2").attr("value", "desc");
		break;
	}
	if (!paginaTienda) {
		paginaTienda = 1
	}
	buscadorProductos(paginaTienda, paginaPromocion, 1);
}

function filtraCategoria1Promociones(filtro){
	$("#valorFiltroCategoria1").attr("value", filtro);
	$("#valorFiltroCategoria2").attr("value", "");
	$("#valorFiltroTienda").attr("value", "");

    buscadorPromociones(1);
}

function filtraCategoria2Promociones(filtro1, filtro2){
	$("#valorFiltroCategoria1").attr("value", filtro1);
	$("#valorFiltroCategoria2").attr("value", filtro2);
	$("#valorFiltroTienda").attr("value", "");

    buscadorPromociones(1);
}

function filtraTiendaPromociones(filtro){
	$("#valorFiltroTienda").attr("value", filtro);

    buscadorPromociones(1);
}

function limpiaFiltroCategoriaPromociones() {
	$("#valorFiltroCategoria1").attr("value", "");
	$("#valorFiltroCategoria2").attr("value", "");
	$("#valorFiltroTienda").attr("value", "");

    buscadorPromociones(1);
}

function limpiaFiltroTiendaPromociones() {
	$("#valorFiltroTienda").attr("value", "");

    buscadorPromociones(1);
}

/*
 * Cambiar la imagen de un elemento HTML
 */
function changeImage(ident, image, alt) {
	$(ident).attr('src', image).attr('alt', alt);
}

/*
 * Leer más
 */
function leerMas(elem) {
	$(elem).parent().parent().find('.leermasextracto').hide();
	$(elem).parent().parent().find('.leermascompleto').show();
}

/*
 * Auth por AJAX
 */
function authAjax(url, failmsg) {
	jQuery.ajax(
	{
		type:'POST',
		async:false,
		url:url,
		data:jQuery('#ajaxLoginForm').serialize(),
		success:
			function(data,textStatus){
				window.location.reload()
			},
		error:
			function(XMLHttpRequest,textStatus,errorThrown){
				jQuery('#loginMessage').html(failmsg);
			}
	});
}

/*
 * Reemplazar Banderas
 */
function replaceFlags(elem) {
    $(elem).replaceText( /\(AR\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/AR.png" />' );
    $(elem).replaceText( /\(BO\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/BO.png" />' );
    $(elem).replaceText( /\(BR\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/BR.png" />' );
    $(elem).replaceText( /\(CH\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/CH.png" />' );
    $(elem).replaceText( /\(CO\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/CO.png" />' );
    $(elem).replaceText( /\(CR\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/CR.png" />' );
    $(elem).replaceText( /\(CU\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/CU.png" />' );
    $(elem).replaceText( /\(DO\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/DO.png" />' );
    $(elem).replaceText( /\(EC\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/EC.png" />' );
    $(elem).replaceText( /\(ES\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/ES.png" />' );
    $(elem).replaceText( /\(GT\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/GT.png" />' );
    $(elem).replaceText( /\(HN\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/HN.png" />' );
    $(elem).replaceText( /\(HT\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/HT.png" />' );
    $(elem).replaceText( /\(MX\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/MX.png" />' );
    $(elem).replaceText( /\(NI\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/NI.png" />' );
    $(elem).replaceText( /\(PA\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/PA.png" />' );
    $(elem).replaceText( /\(PE\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/PE.png" />' );
    $(elem).replaceText( /\(PY\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/PY.png" />' );
    $(elem).replaceText( /\(SV\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/SV.png" />' );
    $(elem).replaceText( /\(UY\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/UY.png" />' );
    $(elem).replaceText( /\(VE\)/, '<img class="bandera" src="http://cuestamenos.com/images/flags/VE.png" />' );
}

/**
 * Infinite Carousel
 */
jQuery.fn.infiniteCarousel = function () {

    function repeat(str, num) {
        return new Array( num + 1 ).join( str );
    }
  
    return this.each(function () {
        var $wrapper = $('> div', this).css('overflow', 'hidden'),
            $slider = $wrapper.find('> ul'),
            $items = $slider.find('> li'),
            $single = $items.filter(':first'),
            
            singleWidth = $single.outerWidth(), 
            visible = Math.ceil($wrapper.innerWidth() / singleWidth), // note: doesn't include padding or border
            currentPage = 1,
            pages = Math.ceil($items.length / visible);            


        // 1. Pad so that 'visible' number will always be seen, otherwise create empty items
        if (($items.length % visible) != 0) {
            $slider.append(repeat('<li class="empty" />', visible - ($items.length % visible)));
            $items = $slider.find('> li');
        }

        // 2. Top and tail the list with 'visible' number of items, top has the last section, and tail has the first
        $items.filter(':first').before($items.slice(- visible).clone().addClass('cloned'));
        $items.filter(':last').after($items.slice(0, visible).clone().addClass('cloned'));
        $items = $slider.find('> li'); // reselect
        
        // 3. Set the left position to the first 'real' item
        $wrapper.scrollLeft(singleWidth * visible);
        
        // 4. paging function
        function gotoPage(page) {
            var dir = page < currentPage ? -1 : 1,
                n = Math.abs(currentPage - page),
                left = singleWidth * dir * visible * n;
            
            $wrapper.filter(':not(:animated)').animate({
                scrollLeft : '+=' + left
            }, 500, function () {
                if (page == 0) {
                    $wrapper.scrollLeft(singleWidth * visible * pages);
                    page = pages;
                } else if (page > pages) {
                    $wrapper.scrollLeft(singleWidth * visible);
                    // reset back to start position
                    page = 1;
                } 

                currentPage = page;
            });                
            
            return false;
        }
        
        $wrapper.after('<a class="arrow back">&lt;</a><a class="arrow forward">&gt;</a>');
        
        // 5. Bind to the forward and back buttons
        $('a.back', this).click(function () {
            return gotoPage(currentPage - 1);                
        });
        
        $('a.forward', this).click(function () {
            return gotoPage(currentPage + 1);
        });
        
        // create a public interface to move to a specific page
        $(this).bind('goto', function (event, page) {
            gotoPage(page);
        });
    });  
};


/**
* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+
* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
* 
* @param  f  onMouseOver function || An object with configuration options
* @param  g  onMouseOut function  || Nothing (use configuration options object)
* @author    Brian Cherne <brian@cherne.net>
*/
hoverIntent = (function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY;};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev]);}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev]);};var handleHover=function(e){var p=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget;while(p&&p!=this){try{p=p.parentNode;}catch(e){p=this;}}if(p==this){return false;}var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);}if(e.type=="mouseover"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob);},cfg.timeout);}}};return this.mouseover(handleHover).mouseout(handleHover);};})(jQuery);
