var Valoracion = Class.create({
	initialize: function(id, params) {
		if(!Object.isElement(params.stars)) {
			return;
		}
		this.cntStars = params.stars;		
		this.cntValor = params.valor || null;
		this.cntVotos = params.votos || null;
		
		this.srcStarM = params.starM || '/images/azul/estrella_media.png';
		this.srcStarG = params.starG || '/images/azul/estrella_gris.png';
		this.srcStarF = params.starF || '/images/azul/estrella_azul.png';
		
		this.url = params.url || '/comunidad/azul/votar_interna.php';
		this.params = params.params ? $H(params.params) : $H({ 'id': id });
		
		this.img = this.cntStars.select('img');

		var h = [];
		this.bak = this.img.pluck('src');
		for ( var i = 0, l = this.img.length; i < l; i++) {
			h.push(this.img[i].on('mousemove', this.show.bind(this, i)));
			h.push(this.img[i].on('mouseout', this.restore.bind(this)));
			h.push(this.img[i].on('click', this.vote.bind(this, i, h)));
		}
	},
	show: function(n, ev, el) {
		var ancho = el.getDimensions().width;
		var pos = el.cumulativeOffset().left;
		
		for (i = 0; i < n; i++) {
			this.img[i].src = this.srcStarF;
		}
		
		for (i = n, s = this.img.length; i < s; i++) {
			this.img[i].src = this.srcStarG;
		}

		this.img[n].src = (ev.pointerX() < pos + (ancho / 2)) ? this.srcStarM : this.srcStarF;
		return;
	},
	restore: function(ev, el) {
		var pos = el.cumulativeOffset();
		var dim = el.getDimensions();
		var y = ev.pointerY();
		var x = ev.pointerX();
		if((el == this.img.last() && x >= (pos.left + dim.width)) || (el == this.img.first() && x <= pos.left) || y >= (pos.top + dim.height) || y <= pos.top) {
			for(var i = 0,l = this.img.length; i<l; i++) {
				this.img[i].src = this.bak[i];
			}
		}
	},
	vote: function(i, h, ev, el) {
		var pos = el.cumulativeOffset().left;
		var ancho = el.getDimensions().width;
		var v = (i + ((ev.pointerX() <= pos + (ancho / 2)) ? 0.5 : 1));
		h.invoke('stop');
		this.params.set('valor', v);
		new Ajax.Request(this.url,
				{	
					method: 'get',
					parameters: this.params,
					onSuccess: function(t) {
						var json = t.responseText.evalJSON();
						if('error' in json) {
							for(var i = 0,l = this.img.length; i<l; i++) {
								this.img[i].src = this.bak[i];
							}
							alert(json.error);
						}
						else
						if('valoracion' in json) {
							v = json.valoracion;
							if(this.cntValor) {
								this.cntValor.update(v*json.factor);
							}
							
							if(this.cntVotos) {
								this.cntVotos.update(json.votos + ' votos');
							}

							var floor = Math.floor(v);
							
							for (i = 0; i < floor; i++) this.img[i].src = this.srcStarF;
							
							for (i = floor, s = this.img.length; i < s; i++) this.img[i].src = this.srcStarG;

							if((v - floor) > 0) {
								this.img[floor].src = (v - floor) <= 0.5 ? this.srcStarM : this.srcStarF;
							}
						}
						else {
							if(confirm('Debes ser usuario de la comunidad para poder votar. ¿Quieres registrarte?')) {
								window.location.href = '/comunidad/acceso.php';
							}
							else {
								h.invoke('start');
							}
						}
					}.bind(this)
				}
		);
	}
});


var Uploader = Class
.create( {
	initialize : function() {
/*				this.iframe = new Element('iframe', {
			style : 'display: none', src: "about:blank"
		});

		this.iframe.writeAttribute("name", this.iframe.identify());
		$$('body').first().insert(this.iframe);*/
	this.iframe = $('iframeUpload');
	},
	submit : function(f) {
		if(this.iframe) {
			f.writeAttribute("target", this.iframe.identify());
			f.submit();
			new PeriodicalExecuter(this.handleUpload.curry(this.iframe), 1);
		}
	},
	handleUpload : function(iframe) {
		// Obtenemos el body del iframe, para Firefox o IE, aquí no
		// podemos ser agnósticos
	var b = Object.isUndefined(iframe.document) ? iframe.contentDocument.body
			: window.frames[iframe.identify()].document.body;
	var str = b.innerHTML;
	if (!str.blank()) {
		var json = str.evalJSON();
		b.innerHTML = '';
		this.stop();
		if (json.cod != 0) {
			if (json.cod == 2) {
				json.msj = 'Debes ser usuario de la comunidad para poder introducir contenido. Regístrate y/o accede con tu usuario.';
			}

			alert('Error: '+json.msj);
		} else {
			alert(json.msj);
			var h = document.location.href;
			document.location.href = h.replace(/^(.*)\/\d+$/, '$1');
		}
	}
}

});

function moderar(ruta) {
	var div = $('moderacion');

	new Ajax.Request('/comunidad/php/moderacion.php?accion=moderar&' + $H( {
		'ruta' : ruta
	}).toQueryString(), {
		onComplete : function(t) {
			$$('div.cntRightInterna, div#texto').invoke('hide');
			var m = $('mod');
			m.insert({after: t.responseText});
			m.hide();
		}
	});
}

function swapDivs(div, callback) {
	var dest = $('divvisible');
	var origen = Object.isElement(div) ? div : $(div);
	dest.update(origen.innerHTML);

	if (Object.isFunction(callback)) {
		callback();
	}
}

function compruebaDRS() {
	if ($('dr1') == null && $('dr2') == null && $('dr3') == null) {
		return true;
	}

	var regex = /^\d+\.\d+$/;
	if (regex.test($F('dr1')) && regex.test($F('dr2')) && regex.test($F('dr3'))) {
		var regex = /^\d+\.1$/;
		if (regex.test($F('dr1')) && regex.test($F('dr2'))
				&& regex.test($F('dr3'))) {
			return confirm("Los destinos relacionados coinciden con los valores por defecto (por ej.: \"1.1\", \"2.1\" y \"3.1\"). \n¿Es correcto?");
		}

		return true;
	}

	return false;
}

function aplicar(op) {
	if (op == 0
			&& !confirm('¿Estas seguro de querer rechazar los cambios? Si aceptas se borrarán para siempre.')) {
		return;
	}

	if (op == 1) {
		if (!compruebaDRS()) {
			alert("Por favor, comprueba los destinos relacionados.");
			return;
		}

		if (!confirm('Los cambios se van a publicar. ¿Estas seguro?')) {
			return;
		}
	}

	$('moderacion').request(
			{
				parameters : {
					'op' : op
				},
				onCreate : function() {
					var div = $$('.diff_moderacion #divspinner').first();
					div.update(new Element('img', {
						src : "/comunidad/images/spinner_peq.gif",
						alt : "Cargando..."
					}));
					$$('.diff_moderacion #divspinner').first().show();
				},
				onSuccess : function(t) {
					$$('.diff_moderacion #divspinner').first().update(
							t.responseText);

					if (op == 1) {
						alert('Cambios aplicados con éxito');
						window.location.reload();
					} else {
						alert('Cambios rechazados con éxito');

						if ($F('accion') == 'validar') {
							window.location.href = '/comunidad';
						} else {
							window.location.reload();
						}
					}
				},
				on500 : function(t) {
					$$('.diff_moderacion #divspinner').first().update(
							'¡¡ERROR!! ' + t.responseText);
				}
			});

}

function cartaTextoRedactar(title) {
	var url = '/comunidad/includes/editarInterna.php';
	var myAjax = new Ajax.Request(url, {
		parameters : {
			txt : title
		},
		method : 'post',
		onComplete : function(t) {
			var div = new Element('div');
			div.update(t.responseText);
			$$('#cntCentro > :not(ul.menuInterna)').invoke('remove');
			$('cntCentro').insert({bottom: div});
			$$('body').first().scrollTo();
		}
	});

}

function anyadeAmigo(idAmigo) {
	var urlAddAmigo = '/comunidad/php/addamigo.php';
	new Ajax.Request(urlAddAmigo, {
	        method: 'get',
	        parameters: { id: idAmigo, accion: 'add' },
	        onSuccess: function(t) {
	        	alert(t.responseText.stripTags().unescapeHTML());
	        },
	        onFailure: function(t) {
		        alert(t.statusText.stripTags().unescapeHTML());
	        }
	    });
};


function send(id, asunto, contenido) {
	id += "";
	if(id.blank()){
		alert("Debe elegir un destinatario");
		return false;
	}
	if($F(asunto).blank()){
		alert("Debe escribir un asunto.");
		return false;
	}
	if($F(contenido).blank() || $F(contenido) == 'Escribe tu mensaje...'){
		alert("Escriba algun mensaje.");
		return false;
	}

	send.handler.stop();
	var url = '/comunidad/php/mensajes.php';
	var myAjax = new Ajax.Request(url, {
        method: 'post',
        parameters: {'accion': 'send', 'idDest': id, 'asunto': $F(asunto), 'contenido': $F(contenido)},
        onLoading: function() {
        	asunto.disable(); contenido.disable()
        },
        onComplete: function(t){
			if (!t.responseText.blank()) {
				alert(t.responseText.stripTags().unescapeHTML());
			}
			else {
				alert('¡Enviado!');
			}
			
			Dialog.closeInfo();
			showModal.modalWin = null;
        },
        onFailure: function(t) {
        	alert(t.statusText.stripTags().unescapeHTML());
		}
	});
	return true;
};

function showModal(id) {
	if(showModal.modalWin != null) return;
	Window.keepMultiModalWindow=false;
	var fCerrar = function() {
		showModal.modalWin = null;
		return true;
	};

	showModal.modalWin = Dialog.info('ventanamodal'+(showModal.count++), 
			{
				className: "alert", 
				width:400, height:175, 
				destroyOnClose: true, 
				minimizable: false, 
				maximizable: false, 
				showEffect: Element.show
				
			}
	);
	showModal.modalWin.setCloseCallback(fCerrar);
	var div = new Element('div', {className: 'modal', style: 'display: none'});
	var cerrar = new Element('a', {className: 'btnCerrar', href: 'javascript:Dialog.closeInfo()'}).update('cerrar');
	var enviar = new Element('a', {className: 'btnEnviar', href: 'javascript:void(0)'}).update('enviar');
	var asunto = new Element('input', {className: 'asunto', type: 'text', value: 'Mensaje privado', maxlength: 255});
	var texto = new Element('textarea', {className: 'texto', rows: 6}).update('Escribe tu mensaje...');
	texto.store('tocado', false)
	asunto.store('tocado', false)
	var fTocado = function(ev) {
		Event.stop(ev);
		if(!this.retrieve('tocado')) {
			this.store('tocado', true);
			this.setValue('');
		}
	}
	texto.on('focus', fTocado.bindAsEventListener(texto));
	asunto.on('focus', fTocado.bindAsEventListener(asunto));
	
	div.insert(cerrar).insert(enviar).insert(asunto).insert(texto).insert(cerrar).insert(enviar);
	$$('body').first().insert(div);
	
	send.handler = enviar.on('click', send.curry(id, asunto, texto));

	showModal.modalWin.setContent(div.identify()); showModal.modalWin.showCenter(false, 200);
	return showModal.modalWin;
};

function reportarContenido(ev, idReporte, idUsuario, idMedia) {
	Event.stop(ev);
	var url = '/comunidad/php/reportarElemento.php';
	var pars = {idUsuario:idUsuario, idReporte: idReporte};
	if(confirm('¿Quieres avisar a un moderador de que este contenido es inapropiado?')) {
		new Ajax.Request(url, {
		     method: 'get',
		     parameters: pars,
		     onComplete: function() {
				this.update('Reportado como inapropiado');
				alert('Gracias por ayudar a mantener la comunidad, tu reporte ha sido enviado a un moderador.');
		    }.bind(this)
		});
	}
}

showModal.count = 0;
showModal.modalWin = null;

