var ie = navigator.userAgent.toLowerCase().indexOf("msie") != -1;
document.getElementById = ie ? document.all : document.getElementById;
window.XMLHttpRequest = window.XMLHttpRequest ? window.XMLHttpRequest : function() { return window.ActiveXObject && (new ActiveXObject(navigator.userAgent.toLowerCase().indexOf("msie 5") != -1 ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP")) };

/* HttpResquest functions */
function asyncHttpRequest(method, url, params, recvFunction) {
	var httpRequest = new XMLHttpRequest();
	httpRequest.open(method, url + ((params && method.toLowerCase() == 'get') ? '?' + params : ''), true);
	httpRequest.onreadystatechange = function() {
		if (httpRequest.readyState == 4) {
			if (recvFunction.length == 2) {
				var responseHeaders = httpRequest.getAllResponseHeaders();
				recvFunction(httpRequest.responseText, responseHeaders.split(responseHeaders.indexOf("\r\n") != -1 ? "\r\n" : "\n"));
			}
			else recvFunction(httpRequest.responseText);
		}
	}
	if (method.toLowerCase() == 'post')
		httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	httpRequest.send(params);
}
function loadContentAsync(container_id, method, url, params) {
	var recvFunction = function(responseText) {
		document.getElementById(container_id).innerHTML = responseText;
		showMainLoader(false);
	}
	showMainLoader(true);
	asyncHttpRequest(method, url, params, recvFunction);
}

function loadContentAsync2(method, url, params) {
	var recvFunction = function(responseText) {
		//document.getElementById(container_id).innerHTML = responseText;
		showMainLoader(false);
	}
	showMainLoader(true);
	asyncHttpRequest(method, url, params, recvFunction);
}



function formSubmitAsync(form, sendFunction, recvFunction) {
	if (!form.method || !form.action) {
		alert("Check the form '" + form.name + "'");
		return;
	}
	var params = '';
	for (var i = 0; i < form.elements.length; i++)
		params += (i == 0 ? '' : '&') + form.elements[i].name + '=' + form.elements[i].value;
	sendFunction && sendFunction();
	asyncHttpRequest(form.method, form.action, params, recvFunction);
}

/* Login functions */
function asyncLogin() {
	var loginInfo = document.getElementById('loginInfo');
	var iTextEmail = document.loginForm.email;
	var iTextPass = document.loginForm.pass;
	if (iTextEmail.isEmpty) {
		loginInfo.innerHTML = 'You must specifies the user name';
		return false;
	}
	if (iTextPass.isEmpty) {
		loginInfo.innerHTML = 'You must specifies the password';
		return false;
	}
	var loader = document.getElementById('onLogin');
	var recvFunction = function(responseText, responseHeaders) {
		var authResponse = '';
		for (var i = 0; i < responseHeaders.length; i++)
			if (responseHeaders[i].substr(0, 13) == 'Auth-Response')
				authResponse = responseHeaders[i].substr(15, responseHeaders[i].length - 15);
		document.getElementById('loginControls').style.display = authResponse == 'welcome' ? 'none' : 'block';
		loginInfo.innerHTML = responseText;
		loader.style.display = 'none';
		iTextPass.value = '';
		iTextPass.isEmpty = true;
		if (authResponse == 'welcome' && document.loginForm.cbRemember.checked) {
			writeCookie("sUser", iTextEmail.value, 24 * 7); // Expire in 7 days
		}
	}
	loginInfo.innerHTML = "Authenticating...";
	loader.style.display = 'block';
	asyncHttpRequest('post', 'login.php', "e=" + iTextEmail.value + "&p=" + iTextPass.value, recvFunction);
	return true;
}
function readCookie(name) {
	var cookieValue = "";
	var search = name + "=";
	if (document.cookie.length > 0) { 
		offset = document.cookie.indexOf(search);
		if (offset != -1) { 
			offset += search.length;
			end = document.cookie.indexOf(";", offset);
			if (end == -1) end = document.cookie.length;
			cookieValue = unescape(document.cookie.substring(offset, end))
		}
	}
	return cookieValue;
}
function writeCookie(name, value, hours) {
	var expire = "";
	if (hours) {
		expire = new Date((new Date()).getTime() + hours * 3600000);
		expire = "; expires=" + expire.toGMTString();
	}
	document.cookie = name + "=" + escape(value) + expire;
}

/* Menu functions */
function changeMenuState(itemId) {
	var items = document.getElementsByName('menuItem');
	for (var i=0; i < items.length; i++) {
		var currItem = items[i];
		if (itemId == currItem.id) {
			currItem.className = "active";
			currItem.hideFocus = true;
		}
		else currItem.className = "normal";
	}
}
function menu_onClick(itemId, pId) {
	changeMenuState(itemId);
	loadContentAsync('menuinfo', 'get', 'content.menu.php', 'm=' + itemId + '&n=' + pId);
	loadContentAsync('info', 'get', 'content.php', 'm=' + itemId + '&n=' + pId);
}

function menu_onClick3(itemId, pId) {
	changeMenuState('oferta');
	loadContentAsync('menuinfo', 'get', 'content.menu.php', 'm=' + itemId + '&n=' + pId);
	loadContentAsync('info', 'get', 'content.php', 'm=' + itemId + '&n=' + pId);
}

function menu_onClick2(itemId, pId) {
	changeMenuState(itemId);
	loadContentAsync('mainContent', 'get', 'admin.content.php', 'm=' + itemId + '&pag=' + pId);
}
/* Submenu functions */
function changesubMenuState(itemId) {
	var items = document.getElementsByName('submenuItem');
	for (var i=0; i < items.length; i++) {
		var currItem = items[i];
		if (itemId == currItem.id) {
			currItem.className = "active";
			currItem.hideFocus = true;
		}
		else currItem.className = "normal";
	}
}
function submenu_onClick(itemId, pMove, pMinYear, pMaxYear, pShowYear) {
	changesubMenuState(itemId);
	loadContentAsync('info', 'get', 'content.php', 'm=' + itemId + '&n=' + pMove + '&o=' + pMinYear + '&p=' + pMaxYear + '&q=' + pShowYear);
}

/* Menu productos functions */
function submenuproductos_onClick(itemId, pId, pSId) {
	loadContentAsync('info', 'get', 'content.php', 'm=' + itemId + '&n=' + pId + '&o=' + pSId);
}

/* Loader functions */
function setLoaderText(loaderId, maxLength) {
	var loader = document.getElementById(loaderId);
	var newText = loader.originalText;
	for (var i = 0; i <= loader.level; i++)
		newText += '.';
	loader.innerHTML = newText;
	loader.level = (loader.level + 1) % maxLength;
}
/*function setLoaderText(loaderId, maxLength) {
	var loader = document.getElementById(loaderId);
	var newText = ' ' + loader.originalText + ' ';
	loader.level += loader.direction;
	loader.direction = loader.level == 1 ? 1 : (loader.level == maxLength ? -1 : loader.direction);
	var colons = '';
	for (var i = 0; i < loader.level / 2 - (loader.level % 2); i++)
		colons += ':';
	var dot = loader.level % 2 ? '.' : '';
	newText = dot + colons + newText + colons + dot;
	loader.innerHTML = newText;

	var newText = ' ' + loader.originalText + ' ';
	var symbols = ['-'];
	var colons = '';
	for (var i = 0; i < loader.level / symbols.length - (loader.level % symbols.length != 0); i++)
		colons += symbols[symbols.length - 1];
	//var lastChar = symbols[loader.level % symbols.length];
	var lChar = loader.direction == 1 ? '&lt;' : '&gt;';
	var rChar = loader.direction == 1 ? '&gt;' : '&lt;';
	//newText = lastChar + colons + newText + colons + lastChar;
	newText = lChar + colons + newText + colons + rChar;
	loader.innerHTML = newText;
	loader.direction = loader.level == 1 ? 1 : (loader.level == (maxLength * symbols.length) ? -1 : loader.direction);
	loader.level += loader.direction;
}*/
function showMainLoader(show) {
	var loader = document.getElementById('mainLoader');
	loader.style.display = show ? 'block' : 'none';
/*	if (show) {
		mainLoader.style.display = 'block';
		mainLoader.level = 0;
		mainLoader.direction = 1;
		if (typeof mainLoader.originalText == 'undefined')
			mainLoader.originalText = mainLoader.innerHTML;
		mainLoader.intervalID = ie ? setInterval("setLoaderText('mainLoader', 10)", 500) : setInterval(setLoaderText, 500, 'mainLoader', 10);
		return;
	}
	mainLoader.style.display = 'none';
	mainLoader.intervalID && clearInterval(mainLoader.intervalID);*/
}

/* iText functions */
function iTextInit(iTextId, emptyText) {
	var iText = document.getElementById(iTextId);
	iText.onfocus = iTextFocusEvent;
	iText.onblur = iTextBlurEvent;
	iText.onkeypress = iTextKeyPressEvent;
	iText.className = 'iText empty';
	iText.emptyText = emptyText;
	iText.value = emptyText;
	iText.isEmpty = true;
}
function iTextFocusEvent(e) {
	if (!this.isEmpty) return;
	this.className = 'iText';
	this.value = '';
}
function iTextBlurEvent(e) {
	this.isEmpty = this.value.length == 0;
	if (!this.isEmpty) return;
	this.className = 'iText empty';
	this.value = this.emptyText;
}
function iTextKeyPressEvent(e) {
	this.isEmpty = this.value.length == 0;
}

/* ToolTip functions */
function Point(x, y) {
	this.x = x;
	this.y = y;
}
function setToolTip(elem, text, className, followMouse, position) {
	if (elem.getAttribute('title')) {
		elem.orgTitle = elem.getAttribute('title');
		elem.removeAttribute('title');
	}
	if (elem.onmousemove != mouseMoveToolTipEvent) {
		elem.orgMouseMove = elem.onmousemove;
		elem.orgMouseOver = elem.onmouseover;
		elem.orgMouseOut = elem.onmouseout;
		elem.onmousemove = mouseMoveToolTipEvent;
		elem.onmouseover = mouseOverToolTipEvent;
		elem.onmouseout = mouseOutToolTipEvent;
	}
	elem.toolTipText = text;
	elem.followMouse = followMouse;
	elem.toolTipPosition = position;
	var toolTip = document.getElementById('toolTip');
	toolTip.className = className;
	toolTip.coord = new Point(-500, -500);
	elem.toolTip = toolTip;
}
function removeToolTip(elem) {
	if (!elem.toolTip) return;
	elem.toolTip.style.display = 'none';
	elem.toolTip.coord.x = -500;
	elem.toolTip.coord.y = -500;
	elem.toolTip = null;
	elem.orgMouseMove = elem.orgMouseOver = elem.orgMouseOut = null;
	elem.onmousemove = elem.onmouseover = elem.onmouseout = null;
	elem.toolTipText = elem.followMouse = elem.toolTipPosition = null;
	if (elem.orgTitle) {
		setAttribute(elem, 'title', elem.orgtitle);
		elem.orgTitle = null;
	}
}
function mouseMoveToolTipEvent(e) {
	this.orgMouseMove && this.orgMouseMove(e);
	var toolTip = this.toolTip;
	if (!this.followMouse && (toolTip.coord.x != -500 || toolTip.coord.y != -500))
		return;
	if (!e) e = window.event;
	if (e.pageX || e.pageY) {
		toolTip.coord.x = e.pageX;
		toolTip.coord.y = e.pageY;
	}
	else if (e.clientX || e.clientY) {
		if (document.documentElement.scrollTop) {
			toolTip.coord.x = e.clientX + document.documentElement.scrollLeft;
			toolTip.coord.y = e.clientY + document.documentElement.scrollTop;
		}
		else {
			toolTip.coord.x = e.clientX + document.body.scrollLeft;
			toolTip.coord.y = e.clientY + document.body.scrollTop;
		}
	}
	var xInc = 0;
	var yInc = 0;
	switch (this.toolTipPosition) {
		case 'right':
			xInc = 15;
			break;
		case 'bottom':
			yInc = 20;
			break;
		default:
			xInc = 15;
			yInc = 20;
	}
	toolTip.style.left = (toolTip.coord.x += xInc) + 'px';
	toolTip.style.top = (toolTip.coord.y += yInc) + 'px';
}
function mouseOverToolTipEvent(e) {
	this.orgMouseOver && this.orgMouseOver(e);
	this.toolTip.innerHTML = this.toolTipText;
	this.toolTip.style.display = 'block';
}
function mouseOutToolTipEvent(e) {
	this.orgMouseOut && this.orgMouseOut(e);
	var toolTip = this.toolTip;
	toolTip.style.display = 'none';
	toolTip.coord.x = -500;
	toolTip.coord.y = -500;
}

/* SimpleDictionary */
function SimpleDictionary() {
	this.keys = new Array();
	this.values = new Array();
	this.length = 0;
	this.addItem = function(key, value) {
		this.keys.push(key);
		this.values.push(value);
		this.length++;
	}
	this.removeItem = function(key) {
		for (var i = 0; i < this.length; i++)
			if (this.keys[i] == key) {
		 		this.keys.splice(i, 1);
		 		this.values.splice(i, 1);
				this.length--;
				return true;
		}
		return false;
	}
	this.getValue = function(key) {
		for (var i = 0; i < this.length; i++)
			if (this.keys[i] == key) {
				return this.values[i];
		}
		return null;
	}
	this.toString = function() {
		var string = "dictionary {\r\n";
		for (var i = 0; i < this.length; i++)
			string += (i == 0 ? '' : "\r\n") + this.keys[i] + '=>' + this.values[i];
		return string + "\r\n}";
	}
}

/* Language functions */
function changeLanguage(newLang) {
	var recvFunction = function(responseText) {
		showMainLoader(false);
		var langDict = new SimpleDictionary();
		var lines = responseText.split('|');
		for (var i = 0; i < lines.length; i++) {
			var dItem = lines[i].split('=>');
			langDict.addItem(dItem[0], dItem[1]);
		}
		var elems = document.getElementsByTagName('*');
		for (var i = 0; i < elems.length; i++) {
			var elem = elems[i];
			var lkey = elem.getAttribute('lkey');
			if (lkey) {
				if (elem.tagName.toLowerCase() == 'title')
					document.title = langDict.getValue('title');
				else if (elem.tagName.toLowerCase() == 'span')
					elem.innerHTML = langDict.getValue(lkey);
				else if (elem.className.substr(0, 5) == 'iText')
					iTextInit(elem.id, langDict.getValue(lkey));
				else elem.value = langDict.getValue(lkey);
			}
		}
	}
	showMainLoader(true);
	asyncHttpRequest('get', 'lang.php', 'lang=' + newLang, recvFunction);
}

/* Validate functions */
var emailRE = /^([\w+-]+(\.[\w+-]+)*)@([\w+-]+(\.[\w+-]+)*\.[a-zA-Z]{2,})$/;
var onlyLettersRE = /[a-zA-Z]*$/;
var onlyNumbersRE = /^\d*$/;
var onlyIntNumbersRE = /^[0-9]*$/;
var alphaNumericalRE = /^\w*$/;
var phoneRE = /^[\d\s-\(\)]*$/;
function validateElement(elem, mark) {
	var vtag = elem.getAttribute('vtag');
	if (!vtag) return true;
	var vtags = vtag.split(';');
	for (var i = 0; i < vtags.length; i++) {
		var keyValue = vtags[i].split(':');
		switch (keyValue[0]) {
			case 'email':
				if (emailRE.test(elem.value)) continue;
				mark && markError(elem, 'La direcci&oacute;n de correo no es v&aacute;lida');
				return false;
			case 'password':
				if (elem.value.length >= 6) continue;
				mark && markError(elem, 'La contraseña debe tener al menos 6 caracteres');
				return false;
			case 'no-null':
				if (elem.value.length > 0) continue;
				mark && markError(elem, elem.tagName.toLowerCase() == 'select' ? 'Debe seleccionar una opci&oacute;n' : 'Debe llenar este campo');
				return false;
			case 'alphanumerical':
				if (alphaNumericalRE.test(elem.value)) continue;
				mark && markError(elem, 'Solo debe escribir letras y/o n&uacute;meros');
				return false;
			case 'only-letters':
				if (onlyLettersRE.test(elem.value)) continue;
				mark && markError(elem, 'Solo debe escribir letras');
				return false;
			case 'only-numbers':
				if (onlyNumbersRE.test(elem.value)) continue;
				mark && markError(elem, 'Solo debe escribir n&uacute;meros');
				return false;
			case 'only-intnumbers':
				if (onlyIntNumbersRE.test(elem.value)) continue;
				mark && markError(elem, 'Solo debe escribir n&uacute;meros enteros');
				return false;
			case 'no-zero':
				if (Number(elem.value) != 0) continue;
				mark && markError(elem, 'Debe escribir un n&uacute;mero distinto de cero');
				return false;
			case 'positive':
				if (!isNaN(elem.value) && (Number(elem.value) > 0)) continue;
				mark && markError(elem, 'Debe escribir un n&uacute;mero positivo');
				return false;
			case 'min':
				var minValue = Number(keyValue[1]);
				if (!isNaN(elem.value) && (Number(elem.value) >= minValue)) continue;
				mark && markError(elem, 'Debe escribir un número mayor que ' + minValue.toString());
				return false;
			case 'max':
				var maxValue = Number(keyValue[1]);
				if (!isNaN(elem.value) && (Number(elem.value) <= maxValue)) continue;
				mark && markError(elem, 'Debe escribir un n&uacute;mero menor que ' + maxValue.toString());
				return false;
			case 'min-length':
				var minLength = Number(keyValue[1]);
				if (elem.value.length >= minLength) continue;
				mark && markError(elem, 'Debe escribir al menos ' + minLength.toString() + ' caracteres');
				return false;
			case 'max-length':
				var maxLength = Number(keyValue[1]);
				if (elem.value.length <= maxLength) continue;
				mark && markError(elem, 'Debe escribir a lo sumo ' + maxLength.toString() + ' caracteres');
				return false;
			case 'phone':
				if (phoneRE.test(elem.value)) continue;
				mark && markError(elem, 'N&uacute;mero de tel&eacute;fono no v&aacute;lido');
				return false;
		}
	}
	mark && unmarkError(elem);
	return true;
}
function elemIsShown(elem) {
	return elem && elem.style && elem.style.display != 'none' && elem.style.visibility != 'collapse' && elem.style.visibility != 'hidden' && (elem.style.display.length > 0 || !(ie ? elem.parentElement : elem.parentNode) || elemIsShown(elem.parentNode));
}
function validateForm(form) {
	var formIsOk = true;
	for (var i = 0; i < form.elements.length; i++) {
		var elem = form.elements[i];
		if (elemIsShown(elem) && !validateElement(elem, true))
			formIsOk = false;
	}
	return formIsOk;
}
function markError(elem, errorText) {
	setToolTip(elem, errorText, 'toolTip error', false, 'right');
	if (elem.className.indexOf('errorMarked') == -1)
		elem.className += elem.className.length > 0 ? ' errorMarked' : 'errorMarked';
}
function unmarkError(elem) {
	elem.className = elem.className.replace(elem.className.indexOf(' ') != -1 ? ' errorMarked' : 'errorMarked', '');
	removeToolTip(elem);
}
function setAttribute(elem, attrName, attrValue) {
	if (elem.getAttribute(attrName)) {
		elem.setAttribute(attrName, attrValue);
		return;
	}
	var newAttr = document.createAttribute(attrName);
	newAttr.nodeValue = attrValue;
	elem.setAttributeNode(newAttr);
}

