var oCAC;

$(document).ready( function() {
	oCAC = new ControlAccesoContenidos();
	$("a.accesogratuito").live("click", function() {
		oCAC.registroYacceso($(this).parent());

		return false;
	});

	$("a.accesoconcreditos").live("click", function() {
		var c = $(this).parent().attr("c");

		if (confirm(replace(oCAC.texto_confirmarcompra, "_COSTE_", c))) {
			oCAC.registroYacceso($(this).parent());
		}

		return false;
	});
});

function ControlAccesoContenidos() {
	this.hoy = "";
	this.activado = false;
	this.idc = 0;
	this.creditosDisponibles = new Array();	//Se almacenan los créditos disponibles de un cliente
	this.tiempoRefresco = 10;
	this.idIR = -1; //Guarda el identificador del intervalo de refresco del sistema de créditos

	/********************************************************* Diccionario ************************************************************************/
	this.texto_confirmarcompra = "El coste de acceso a este artículo es de _COSTE_ crédito(s). ¿Desea continuar?";
	this.texto_registroYacceso_ko = "Algún problema impidió llevar a cabo el acceso a la ficha.\nRecargue la página y vuelva a intentarlo";
	this.texto_registroYacceso_accesodenegado = "Acceso denegado";
	this.texto_enlaceNada = '';
	this.texto_enlaceAccesoYaAdquirido = 'Acceder al contenido (ya adquirido)';
	this.texto_enlaceAccesoIlimitado = 'Acceder al contenido (Coste: _COSTE_ / dispones de créditos ilimitados)';
	this.texto_enlaceAccesoGratuito = 'Acceder al contenido';
	this.texto_enlaceAccesoConCreditos = 'Acceder al contenido (coste:: _COSTE_ / dispones de _DISPONIBLE_ créditos)';
	this.texto_enlaceAccesoCompraCreditos = 'No dispones de créditos suficientes para acceder al contenido (coste: _COSTE_ / dispones de _DISPONIBLE_ créditos). Quizás te ineterese adquirir créditos extras mediante nuestros packs. <a href="#" class="pedidocreditos">Comprar packs</a>';
	this.texto_enlaceAccesoPorLogin = 'Acceder al contenido (necesitarás identificarte)';
	this.texto_enlaceAccesoSuscripcionSuscriptor = 'Ninguna de tus suscripciones permite el acceso al contenido. Quizás te interese adquirir créditos extras mediante nuestros packs. <a href="#" class="accesocompracreditos">Comprar packs</a>.';
	this.texto_enlaceAccesoSuscripcionNoSuscriptor = 'El contenido solo es accesible para clientes suscriptores. <a href="#" class="pedidosuscripcion">Suscríbete a alguna de nuestras revistas</a> o <a href="#" class="accesocompracreditos">adquiere alguno de nuestros packs de créditos</a>.';
	
	/*********************************************************** Metodos **************************************************************************/
	this.activar = function () {
				//Para que el sistema funcione, primero debe activarse.
				this.activado = true;
				
				this.inicializarRefrescoCreditos();
			};
	this.inicializarRefrescoCreditos = 	function () {
							//Se programa el sistema para que refresque el sistema de créditos cada X minutos
							/*
							this.detenerRefrescoCreditos();
							this.idIR = setInterval("oCAC.refrescarSistemaDeCreditos()", 60000*this.tiempoRefresco);
							setTimeout("oCAC.detenerRefrescoCreditos()", 3600000); //Si se pasa más de 60 minutos en esta página se deja de refrescar.
							*/
							this.refrescarSistemaDeCreditos();
						}
;
	this.detenerRefrescoCreditos = function () {
						if (this.idIR!=-1) clearInterval(this.idIR);
						this.idIR = -1;
					};
	this.activarCliente = 	function (idc) {
					//Cuando el usuario está autenticado, debe ser notificado al sistema para que cargue los créditos disponibles
					this.idc = idc;
					this.cargarCreditosDisponiblesDeCliente(); //Proceso asíncrono... cuando estén los datos cargados se podrá calcular el acceso a los contenidos
					if (this.activado) {
						this.mensajeRecalculando();
						setTimeout("oCAC.inicializarRefrescoCreditos();", 5000);
					}
					//alert(idc);
				};
	this.cargarCreditosDisponiblesDeCliente = function () {
							//Se cargan los créditos disponibles del cliente. No hace falta refrescarlo durante la sesión
							$.ajax({
									cache: false,
									type: "POST",
									url: "/creditos/ajax_creditosdisponibles.asp?cache="+this.hoy+Math.random(),
									data: "",
									success: function(h){
										var i;
										var j=0;
										var tmp1;
										var tmp2;

										oCAC.creditosDisponibles = new Array();
										if (h.length>0) {
											tmp1 = h.split("|");
											for (i=0; i<tmp1.length; i++) {
												if (tmp1[i].length>0) {
													tmp2 = tmp1[i].split(";");
													oCAC.creditosDisponibles[j] = new Object;
													oCAC.creditosDisponibles[j].idPack = tmp2[0];
													oCAC.creditosDisponibles[j].disponible = tmp2[1];
													j++;
												}
											}
										}
										oCAC.refrescarSistemaDeCreditos();
									},
									error: function (XMLHttpRequest, textStatus, errorThrown) {
										//alert("Error:<br/>" + XMLHttpRequest.responseText);
										//$("#mensaje").html("Error:<br/>" + XMLHttpRequest.responseText);
									}
							});
						}
;
	this.mensajeRecalculando = 	function () {
						//Mientras otro proceso no reescriba el contenido en esta capa, mostrará el mensaje "Recalculando..."
						$("div.accesoContenidos").each( function() {
							$(this).html('<img src="/images/ajax-loader.gif?" border="0">');
						});
					}
;
	this.refrescarSistemaDeCreditos = function () {
						//Es la función que determinará que enlae debe ponerse en cada bloque de producto, en función del coste y disponibilidad
						if (this.activado) {
							//TODO
							//if (this.idc>0) this.cargarCreditosDisponiblesDeCliente();
							//Por cada bloque...
							var listado=""
							$("div.accesoContenidos").each( function() {
								var a = $(this);
								var idtipo = a.attr("idt");
								var id = a.attr("id");
								var idpack = a.attr("idp");
								var coste = a.attr("c");
								var disponible;

								//Se consulta el coste del crédito si el cliente está autenticado y el coste es positivo, por si a pasado a ser gratuito
//								if (oCAC.idc>0 && coste > 0) {
//									listado+=idtipo + ";" + id + "|";
//								} else {
									if (coste == 0 && oCAC.idc == 0) {
										//Acceso gratuito al contenido solo si esta autenticado
										$(this).html(oCAC.ponerEnlaceAccesoPorLogin(idtipo, id));
									} else if (coste == 0 && oCAC.idc > 0) {
										//Acceso gratuito al contenido solo si esta autenticado
										$(this).html(oCAC.ponerEnlaceAccesoGratuito());
									} else if (coste == 255) {
										//No se permite acceso al contenido
										$(this).html(oCAC.ponerEnlaceNada());
									} else if (oCAC.idc == 0) {
										//Si no está autenticado, primero debe hacerlo
										$(this).html(oCAC.ponerEnlaceAccesoPorLogin(idtipo, id));
									} else {
										//Se comprueba si tiene posiblidad de acceder o no
										disponible = oCAC.disponibilidadDeCreditosParaAcceder(idpack, coste);

										a.html("");
										if (disponible > 0)
											a.append(oCAC.ponerEnlaceAccesoConCreditos(disponible, coste));
										else if (disponible == 0)
											a.append(oCAC.ponerEnlaceAccesoCompraCreditos(disponible, coste));
										else
											a.append(oCAC.ponerEnlaceAccesoSuscripcion(disponible, coste));
									}
//								}
								
							});
/*							
							//alert(listado);
							if (listado != "") {
								$.ajax({
									cache: false,
									type: "POST",
									url: "/creditos/ajax_costecreditoproducto.asp?cache="+oCAC.hoy+Math.random(),
									data: "listado=" + listado + "&idc=" + oCAC.idc,
									success: function(h){
										//Por cada uno devuelto (formato: idtipo ; id ; c)
										a.attr("c", parseInt(h));
										var coste = parseInt(h);
										var idtipo = a.attr("idt");
										var id = a.attr("id");
										var idpack = a.attr("idp");

										if (coste == 0) {
											//Acceso gratuito al contenido
											a.html(oCAC.ponerEnlaceYaAdquirido());
										} else if (coste == 255) {
											//No se permite acceso al contenido
											a.html(oCAC.ponerEnlaceNada());
										} else {
											//Se comprueba si tiene posiblidad de acceder o no
											disponible = oCAC.disponibilidadDeCreditosParaAcceder(idpack, coste);

											if (disponible > 0)
												a.html(oCAC.ponerEnlaceAccesoConCreditos(disponible, coste));
											else if (disponible == 0)
												a.html(oCAC.ponerEnlaceAccesoCompraCreditos(disponible, coste));
											else
												a.html(oCAC.ponerEnlaceAccesoSuscripcion(disponible, coste));
										}

									},
									error: function (XMLHttpRequest, textStatus, errorThrown) {
										alert("Error:\n[" + idtipo + ";" + id + ";" + oCAC.idc + "]\n" + XMLHttpRequest.responseText);
										//$("#mensaje").html("Error:<br/>" + XMLHttpRequest.responseText);
									}
								});
							}
*/							
						} else {
							//Si no está activo, los accesos se anulan
							$("div.accesoContenidos").each( function() {
								$(this).html(oCAC.ponerEnlaceNada());
							});
						}
					};

	this.disponibilidadDeCreditosParaAcceder = function(idpack, coste) {
							//Calcula la disponibilidad de créditos de un pack en función del coste del producto
							var i;
							var d = -1;
							//alert(idpack + ";" + coste);
							if (this.creditosDisponibles.length>0) {
								if (idpack != 100) {
									//Se busca primero en el pack específico
									for (i=0; i<this.creditosDisponibles.length && d<0; i++) {
										//alert(this.creditosDisponibles[i].idPack + ";" + this.creditosDisponibles[i].disponible);
										if (this.creditosDisponibles[i].idPack == idpack && (this.creditosDisponibles[i].disponible<0 || this.creditosDisponibles[i].disponible >= coste)) {
											//if (this.creditosDisponibles[i].disponible==-1)
											if (this.creditosDisponibles[i].disponible<0)
												d = 999;
											else
												d = this.creditosDisponibles[i].disponible;
										}
									}
								}
								//Se busca en el pack genérico
								if (d<0) {
									for (i=0; i<this.creditosDisponibles.length && d<0; i++) {
										if (this.creditosDisponibles[i].idPack == 100 && (this.creditosDisponibles[i].disponible<0 || this.creditosDisponibles[i].disponible >= coste)) {
											//if (this.creditosDisponibles[i].disponible==-1)
											if (this.creditosDisponibles[i].disponible<0)
												d = 999;
											else
												d = this.creditosDisponibles[i].disponible;
										}
									}
								}

								//Si finaliza devolviendo -1 significará que ninguno de sus packs permite el acceso
							} else {
								d = -900; //Solo puede suceder si no es suscriptor
							}

							return d;
						};
	
	this.registroYacceso =	function (a) {
					var idtipo = a.attr("idt");
					var id = a.attr("id");
					var cc = a.attr("cc");
			//alert("idt=" + idtipo + "&id=" + id + "&cc=" + cc + "&idc=" + this.idc);
					$.ajax({
							cache: false,
							type: "POST",
							url: "/creditos/ajax_registrar.asp",
							data: "idt=" + idtipo + "&id=" + id + "&cc=" + cc + "&idc=" + this.idc + "&cache" + this.hoy+Math.random(),
							success: function(h){
								if (h=="ok") {
									switch(idtipo) {
									case "3":
										window.open ("/creditos/ficha_articulo.asp?id=" + id, "hProd", "width=800,height=600,scrollbars=1");
										break;
									}
									//Por último, se refresca el contenido
									a.attr("c", "0");
									oCAC.cargarCreditosDisponiblesDeCliente();
									oCAC.refrescarSistemaDeCreditos();

								} else if (h=="ko") {
									alert(oCAC.texto_registroYacceso_ko  );
									//alert("idt=" + idtipo + "&id=" + id + "&cc=" + cc + "&idc=" + this.idc);
								} else {
									alert(oCAC.texto_registroYacceso_ko + " - " + h);
								}
							},
							error: function (XMLHttpRequest, textStatus, errorThrown) {
								//alert("Error:<br/>" + XMLHttpRequest.responseText);
								//$("#mensaje").html("Error:<br/>" + XMLHttpRequest.responseText);
							}
					});
				}

	this.ponerEnlaceNada = 			function () {
							return '' + this.texto_enlaceNada + '';
						};
	this.ponerEnlaceYaAdquirido = 		function () {
							return '' + this.texto_enlaceAccesoYaAdquirido + '';
						};
	this.ponerEnlaceAccesoGratuito =  	function () {
							return '<a href="#" class="accesogratuito">' + this.texto_enlaceAccesoGratuito + '</a>';
						};
	this.ponerEnlaceAccesoConCreditos = 	function (disponible, coste) {
							if(disponible==999) { return '<a href="#" class="accesoconcreditos">' + replace(this.texto_enlaceAccesoIlimitado, "_COSTE_", coste) + '</a>'; }
							else { return '<a href="#" class="accesoconcreditos">' + replace(replace(this.texto_enlaceAccesoConCreditos, "_COSTE_", coste), "_DISPONIBLE_", disponible) + '</a>'; }
						};
	this.ponerEnlaceAccesoCompraCreditos = 	function (disponible, coste) {
							return '' + replace(replace(this.texto_enlaceAccesoCompraCreditos, "_COSTE_", coste), "_DISPONIBLE_", disponible) + '';
						};
	this.ponerEnlaceAccesoPorLogin = 	function () {
							return '<a href="#" class="usuario_identificacion">' + this.texto_enlaceAccesoPorLogin + '</a>';
						};
	this.ponerEnlaceAccesoSuscripcion = 	function (disponible, coste) {
							if (disponible==-900)
								return '' + this.texto_enlaceAccesoSuscripcionNoSuscriptor + '';
							else
								return '' + this.texto_enlaceAccesoSuscripcionSuscriptor + ' (' + coste + ')';
						};
}

