// Client JavaScripts used by   0.6.0312

// Get element set by CSS selector
// Copied from the source code of Nifty Corners: http://pro.html.it/esempio/nifty/
function getElementsBySelector(selector)
{
	var i;
	var s = [];
	var selid = "";
	var selclass = "";
	var tag = selector;
	var objlist = [];
	if(selector.indexOf(" ") > 0) { // descendant selector like "tag#id tag"
		s = selector.split(" ");
		var fs = s[0].split("#");
		if(fs.length == 1) return objlist;
		return document.getElementById(fs[1]).getElementsByTagName(s[1]);
	}
	if(selector.indexOf("#") > 0) { // id selector like "tag#id"
		s = selector.split("#");
		tag = s[0];
		selid = s[1];
	}
	if(selid != "") {
		objlist.push(document.getElementById(selid));
		return objlist;
	}
	if(selector.indexOf(".") > 0) { // class selector like "tag.class"
		s = selector.split(".");
		tag = s[0];
		selclass = s[1];
	}
	var v = document.getElementsByTagName(tag); // tag selector like "tag"
	if(selclass == "") return v;
	for(i = 0; i < v.length; i++) {
		if(v[i].className == selclass) objlist.push(v[i]);
	}
	return objlist;
}

// Multi-purpose validating
function Validator(formObj, validationType, validationValue, errorMessage)
{
	this.Target = formObj;
	this.Type = validationType;
	this.Value = validationValue;
	this.ErrorMessage = errorMessage;
	this.IsValid = false;
}
Validator.prototype.Validate = function() {
	switch(this.Type)
	{
		case "Required":
			if(this.Target.value == null || this.Target.value == "")
				this.IsValid = false;
			else
				this.IsValid = true;
			break;
		case "Equals":
			if(this.Target.value == this.Value)
				this.IsValid = true;
			else
				this.IsValid = false;
			break;
		case "Matches":
			if(this.Target.value != "") {
				var regEx = new RegExp(this.Value, "");
				if(regEx.test(this.Target.value))
					this.IsValid = true;
				else
					this.IsValid = false;
			} else {
				this.IsValid = true;
			}
			break;
		case "NotMatches":
			if(this.Target.value != "") {
				var regEx = new RegExp(this.Value, "");
				if(regEx.test(this.Target.value))
					this.IsValid = false;
				else
					this.IsValid = true;
			} else {
				this.IsValid = true;
			}
			break;
		case "LessThan":
			if(this.Target.value != "") {
				if(this.Target.value.length < this.Value)
					this.IsValid = true;
				else
					this.IsValid = false;
			} else {
				this.IsValid = true;
			}
			break;
		case "MoreThan":
			if(this.Target.value != "") {
				if(this.Target.value.length > this.Value)
					this.IsValid = true;
				else
					this.IsValid = false;
			} else {
				this.IsValid = true;
			}
			break;
	}
}

function ValidatorSet()
{
	this.Validators = new Array();
	this.ErrorMessage = "";
}
ValidatorSet.prototype.AddValidator = function(validator) {
	this.Validators[this.Validators.length] = validator;
}
ValidatorSet.prototype.AllValid = function() {
	var res = true;
	for(var i = 0; i < this.Validators.length; i++) {
		this.Validators[i].Validate();
		if(!this.Validators[i].IsValid) {
			this.ErrorMessage += this.Validators[i].ErrorMessage;
			res = false;
		}
	}
	return res;
}

// Validating functions based on specific pages
// Validating methods related to posting comments
function ValidateCommentForm()
{
	var c = document.getElementById("txtCmtContent");
	var n = document.getElementById("txtCmtName");
	var e = document.getElementById("txtCmtEMail");
	var l = document.getElementById("txtCmtLink");
	
	var validatorSet = new ValidatorSet();
	validatorSet.AddValidator(new Validator(c, "Required", "", "* Por favor, escriba a la observación！\n"));
	validatorSet.AddValidator(new Validator(n, "NotMatches", "[^\\u4E00-\\u9FA0a-zA-Z0-9._ ]", "* Además de los nombres no pueden contener chino, letras, números, palabras, fuera de la caja, y pone de relieve los caracteres!\n"));
	validatorSet.AddValidator(new Validator(e, "Matches", "\\S+[@]{1}\\S+[.]{1}\\w+", "* Por favor, introduzca el formato correcto de la dirección de correo electrónico！\n"));
	validatorSet.AddValidator(new Validator(l, "Matches", "http://\\S+[.]{1}\\S+", "* Por favor, introduzca el formato correcto de la dirección del sitio web!\n"));
	if(!validatorSet.AllValid())
	{
		alert(validatorSet.ErrorMessage);
		return false;
	}
	DisableButton("btnPostComment");
	return true;
}

// Validating methods related to sending private messages
function ValidateSendPMForm()
{
	var n = document.getElementById("txtPMSenderName");
	var t = document.getElementById("txtPMTitle");
	var e = document.getElementById("txtPMSenderEMail");
	var c = document.getElementById("txtPMContent");

	var validatorSet = new ValidatorSet();
	validatorSet.AddValidator(new Validator(t, "Required", "", "* Por favor, escriba el título en el Mensajes！\n"));
	validatorSet.AddValidator(new Validator(n, "NotMatches", "[^\\u4E00-\\u9FA0a-zA-Z0-9._ ]", "* Además de los nombres no pueden contener chino, letras, números, palabras, fuera de la caja, y pone de relieve los caracteres!\n"));
	validatorSet.AddValidator(new Validator(e, "Matches", "\\S+[@]{1}\\S+[.]{1}\\w+", "* Por favor, introduzca el formato correcto de la dirección de correo electrónico!\n"));
	validatorSet.AddValidator(new Validator(c, "LessThan", "1024", "*Mensajes contenido límite en 1024 caracteres, o Changhuaduanshui a ser enviada.\n"));
	if(!validatorSet.AllValid())
	{
		alert(validatorSet.ErrorMessage);
		return false;
	}
	DisableButton("btnSendPM");
	return true;
}

// Validating methods related to logging in as a friend
function ValidateFLForm()
{
	var p = document.getElementById("txtFriendPwd");
	
	var validatorSet = new ValidatorSet();
	validatorSet.AddValidator(new Validator(p, "Required", "", "* Por favor, introduzca una contraseña amigo！"))
	if(!validatorSet.AllValid())
	{
		alert(validatorSet.ErrorMessage);
		return false;
	}
	DisableButton("btnFrLgn");
	return true;
}

// Validating methods related to tag query
function ValidateTagQueryForm()
{
	// 比较独特，就不用通用验证类了吧
	var q = document.getElementById("txtTagQuery").value;
	if(q == "") {
		alert("Tag Buscar condiciones no puede estar vacío！");
		return false;
	}
	if(/[^\u4E00-\u9FA0a-zA-Z0-9._\+\| ]/.test(q)) {
		alert("Tag Buscar condiciones no puede contener Además de chino, letras, números, palabras, espacios, bajos y la lógica de búsqueda de símbolos los caracteres! ");
		return false;
	}
	if(q.indexOf("+") >= 0 && (q.indexOf("|") >= 0 || q.indexOf(" ") >= 0)) {
		alert("Lo sentimos, pero no apoyo 'y' y 'o' lógica, al mismo tiempo, satisfacer la búsqueda, sólo utilizan una lógica.");
		return false;
	}
	return true;
}

function DisableButton(buttonId)
{
	var b = document.getElementById(buttonId);
	if(b != null)
		b.disabled = true;
}

// 文本框获取焦点
function SetFocus(textBoxId)
{
	var t = document.getElementById(textBoxId);
	if(t != null)
		t.focus();
}

// 自动缩小图片
function ResizeImages()
{
	var limitedWidth = 640; // 这个 skin 所规定的最宽图片尺寸
	if(screen.width > 1024)
		limitedWidth = 800;
	var imgs = getElementsBySelector("img.ubbLimitedWidth");
	if(imgs.length >= 1) {
		for(var i = 0; i < imgs.length; i++) {
			if(imgs[i].width > limitedWidth) {
				imgs[i].width = limitedWidth;
				imgs[i].alt = "Pulsa aquí para ver el tamaño original de imagen";
				imgs[i].style.cursor = "hand";
				imgs[i].onclick = function() {
					window.open(this.src);
				}
			}
		}
	}
}

// CSS styles switch
function setActiveStyleSheet(title)
{
	var i, a, main;
	if(title) {
		for(i = 0; (a = document.getElementsByTagName('link')[i]); i++) {
			if(a.getAttribute('rel').indexOf('style') != -1 && a.getAttribute('title')) {
				a.disabled = true;
				if(a.getAttribute('title') == title)
					a.disabled = false;
			}
		}
	}
}

function getActiveStyleSheet()
{
	var i, a;
	for(i = 0; (a = document.getElementsByTagName('link')[i]); i++) {
		if(a.getAttribute('rel').indexOf('style') != -1 && a.getAttribute('title') && !a.disabled)
			return a.getAttribute('title');
	}
	return null;
}
