/*****INITIAL DECLARATIONS *****/
/*
	MENUTAB-ITEM CONSTRUCTOR
*/
function menuTabItem(rName, rImgId, rState, rWidth, rColor, rFile, rSidebar, rShowStep) {
	if (rShowStep == null) {
		rShowStep = false;
	}
	this.name = rName;
	this.imgId = rImgId;
	this.state = rState;
	this.width = rWidth;
	this.done = false;
	this.currentIntervalId = "";
	this.color = rColor;
	this.file = rFile;
	this.sidebar = rSidebar;
	this.showStep = rShowStep;
}
/*
	Create Instances of MENUTAB-ITEM
*/
var menuTabs = new Array();
menuTabs[0] = new menuTabItem("Inicio", "img_inicio", "deselected", 112, "Black", "php/inicio.php", "php/sidebar.php?content[0]=stats&content[1]=archieves&content[2]=poll");
menuTabs[1] = new menuTabItem("Juegos", "img_juegos", "deselected", 209, "Blue", "php/juegos.php", "php/sidebar.php?content[0]=adventures");
menuTabs[2] = new menuTabItem("Herramientas", "img_herramientas", "deselected", 175, "Red", "php/herramientas.php", "php/sidebar.php?content[0]=archieves");
menuTabs[3] = new menuTabItem("Proyectos", "img_proyectos", "deselected", 145, "Brown", "php/proyectos.php", "php/sidebar.php?content[0]=archieves");
menuTabs[4] = new menuTabItem("Info", "img_info", "deselected", 145, "Yellow", "php/info.php", "php/sidebar.php?content[0]=stats");
menuTabs[5] = new menuTabItem("Settings", "img_settings", "deselected", 131, "White", "php/users/settings.php", "php/sidebar.php", true);

/*
	Selecting the correct item
*/
var path = location.href;
var selectedItem = path.substring(path.lastIndexOf('?')+1, path.length);

if (selectedItem > -1 && selectedItem < 5) {
	menuTabs[selectedItem].state = "selected";
} else {
	menuTabs[0].state = "selected";
}

/*
	SET POSITION & INTERVAL VALUES
*/
var deselectInterval = 1;
var deselectFactor = 15;
var deselectLimit = 12;

var selectableInterval = 1;
var selectableFactor = 30;

var selectLimit = 20;

var delayInterval = 300;

/*
	OnLoadTools
*/
var onLoadEventTracker = "";
var wasLogged = "";
var currentFile = "";

//Simple Safari detection, will fix soon
if (navigator.userAgent.indexOf('Safari') != -1) {
	deselectInterval = 8;
	selectableInterval = 12;
}

/*
	FUNCTION: INITIATE SITE
*/
function init() {
	fill('php/users/index.php', 'profile_content');
	createMenuObjectsFromTabs();
	menuTabItemSyncAll();
}
function createMenuObjectsFromTabs() {
	var menuObjects = "";
	menuObjects += "<br />" + "\n";
	for (var i = 0;i < menuTabs.length;i++) {
		menuObjects += "<a href=" + '"' + "javascript:switchSelectedItem(menuTabs[" + i + "]";
		if (menuTabs[i].showStep == true) {
			menuObjects += ", '" + menuTabs[i].name + "'";
		}
		menuObjects += ");" + '"';
		menuObjects += " onmouseover=" + '"' + "javascript:menuTabItemTrySelectable(menuTabs[" + i + "]);" + '"';
		menuObjects += " onmouseout=" + '"' + "javascript:menuTabItemMouseOut(menuTabs[" + i + "], false);" + '"';
		menuObjects += " >";
		menuObjects += "<img id=" + '"'+ menuTabs[i].imgId + '"';
		menuObjects += " src=" + '"images/tab' + menuTabs[i].name + '.png"';
		menuObjects += " onmouseover=" + '"' + "javascript:menuTabItemTrySelectable(menuTabs[" + i + "]);" + '"';
		menuObjects += " onmouseout=" + '"' + "javascript:menuTabItemTryDeselect(menuTabs[" + i + "]);" + '"';
		menuObjects += " />";
		menuObjects += "</a>";
		menuObjects += "<br />";
		menuObjects += "\n";
	}
	element('menu').innerHTML = menuObjects;
}

/*****END OF INITIAL DECLARATIONS *****/
/*****HELPER FUNCTIONS *****/
/*
	Helps shorten file size by calling a shorter function
	for document.getElementById (well, at least it looks
	nicer).
*/
function element(id) {
	return document.getElementById(id);
}
/*
	Gets the "left" property of a MENUTAB-ITEM
*/
function getMenuTabItemLeft(tabItem) {
	var itemLeft = element(tabItem.imgId).style.left;
	if (itemLeft == "") {
		element(tabItem.imgId).style.left = "0px";
		itemLeft = element(tabItem.imgId).style.left;
	}
	
	itemLeft = itemLeft.split("px");
	itemLeft = itemLeft[0];
	return itemLeft*1;
}
/*
	Sets the "left" property of a MENUTAB-ITEM
*/
function setMenuTabItemLeft(tabItem, value) {
	element(tabItem.imgId).style.left = value + "px";
}
/*
	Gets the MENUTAB-ITEM deselect limit
*/
function getMenuTabItemDeselectLimit(tabItem) {
	return (-1*(tabItem.width - deselectLimit));
}
/*
	Gets the selected MENUTAB-ITEM
*/
function getMenuTabItemSelected() {
	for (var i = 0; i < menuTabs.length; i++) {
		if (menuTabs[i].state == "selected") {
			return menuTabs[i];
		}
	}
}
function getMenuTabIndexSelected() {
	for (var i = 0; i < menuTabs.length; i++) {
		if (menuTabs[i].state == "selected") {
			return i;
		}
	}
}
/*
	DeSelects all of the non-selected MENUTAB-ITEMs
*/
function menuTabItemDeselectDeselected() {
	for (var i = 0; i < menuTabs.length; i++) {
		if (menuTabs[i].state != "selected") {
			menuTabs[i].state = "deselected";
		}
	}
	menuTabItemSyncAll();
}
/*
	Tries to hide all "selectable" item
*/
function menuTabItemHideSelectable() {
	for (var i = 0; i < menuTabs.length; i++) {
		if (menuTabs[i].state == "selectable") {
			menuTabItemTryDeselect(menuTabs[i]);
		}
	}
}
/*
	Syncronizes all of the MENUTAB-ITEMS
*/
function menuTabItemSyncAll() {
	for (var i = 0; i< menuTabs.length;i++) {
		menuTabItemSync(menuTabs[i])
	}
	switchSelectedItem(getMenuTabItemSelected(), '', true);
}
/*
	Deselects all of the MENUTAB-ITEMS excepting the one sent to the function
*/
function menuTabItemDeselectSelectables(exception) {
	for (var i = 0; i < menuTabs.length; i++) {
		if (menuTabs[i] != exception) {
			menuTabItemTryDeselect(menuTabs[i]);
		}
	}
}
/*****END OF HELPER FUNCTIONS *****/
/*****CALLER FUNCTIONS *****/
function menuTabItemSync(tabItem) {
	if (tabItem.state == "deselected") {		
		menuTabItemTryDeselect(tabItem);
	} else 	if (tabItem.state == "selectable") {		
		menuTabItemTrySelectable(tabItem);
	} else if (tabItem.state == "selected") {
		menuTabItemTrySelected(tabItem);
	}
}

function menuTabItemTryDeselect(tabItem) {
	if (tabItem.state != "selected") {
		if (tabItem.currentIntervalId != "") {
			clearInterval(tabItem.currentIntervalId);
		}
		if ( getMenuTabItemLeft(tabItem) > getMenuTabItemDeselectLimit(tabItem) ) {
			tabItem.currentIntervalId = setInterval(function() { menuTabItemHide(tabItem) }, deselectInterval);
		}
	}
}

function menuTabItemTrySelectable(tabItem) {
	menuTabItemDeselectSelectables(tabItem);
	if (tabItem.state != "selected") {
		if (tabItem.currentIntervalId != "") {
			clearInterval(tabItem.currentIntervalId);
		}
		if ( getMenuTabItemLeft(tabItem) < 0 ) {
			tabItem.currentIntervalId = setInterval(function() { menuTabItemSelectable(tabItem) }, selectableInterval);
		}
	}
}

function menuTabItemMouseOut(tabItem, show) {
	if (tabItem.currentIntervalId != "") {
		menuTabItemTryDeselect(tabItem);
	}
}

function menuTabItemTrySelected(tabItem) {
	if (tabItem.currentIntervalId != "") {
		clearInterval(tabItem.currentIntervalId);
	}
	tabItem.currentIntervalId = "";
	menuTabItemSelect(tabItem);
}

/*****END OF CALLER FUNCTIONS *****/
/*
	Hides a MENUTAB-ITEM
*/
function menuTabItemHide(tabItem) {
	var itemLeft = getMenuTabItemLeft(tabItem);
	if ( itemLeft-deselectFactor >= getMenuTabItemDeselectLimit(tabItem) ) {
		setMenuTabItemLeft(tabItem, itemLeft-deselectFactor);
	} else {
		setMenuTabItemLeft(tabItem, getMenuTabItemDeselectLimit(tabItem));
		tabItem.state = "deselected";
		clearInterval(tabItem.currentIntervalId);
		tabItem.currentIntervalId = "";
	}
}
/*
	Shows a MENUTAB-ITEM
*/
function menuTabItemSelectable(tabItem) {
	var itemLeft = getMenuTabItemLeft(tabItem);
	if ( itemLeft+selectableFactor <= 0 ) {
		setMenuTabItemLeft(tabItem, itemLeft+selectableFactor);
	} else {
		setMenuTabItemLeft(tabItem, 0);
		tabItem.state = "selectable";
		clearInterval(tabItem.currentIntervalId);
		tabItem.currentIntervalId = "";
	}
}
/*
	Selects a MENUTAB-ITEM
*/
function menuTabItemSelect(tabItem) {
	setMenuTabItemLeft(tabItem, 0-selectLimit);
	tabItem.state = "selected";
}
/*
	Switches between MENUTAB-ITEMs
*/
function switchSelectedItem(tabItem, name, follow) {
	if (follow == null) {
		follow = true;
	}
	var previous = getMenuTabItemSelected();
	if (previous != tabItem) {
		if (previous != null) {
			menuTabItemSelectable(previous);
			menuTabItemTryDeselect(previous);
		}
	}
	menuTabItemSelect(tabItem);
	element("pageBorderTop").src = "images/divTop" + tabItem.color + ".png";
	if (follow == true) {
		fill(tabItem.file, "content", name);
	}
	if (tabItem.sidebar != null) {
		fill(tabItem.sidebar, "sidebar_content");
	}
	backButton = new step(tabItem.name, tabItem.file, true);
	stairs.splice(0, stairs.length);
	syncSteps();
}
//AJAX File:
var stairs = new Array();
var backButton;

function confirmRegisterBack() {
	for (var i = 0; i < stairs.length; i++) {
		if (stairs[i].address == backButton.address) {
			return "";
		}
	}
	registerBack();
}

function registerBack() {
	addStep(backButton);
}

function step(rName, rAddress, rState) {
	this.name = rName;
	this.address = rAddress;
	this.on = rState;
}

function ajaxObject() {
	var request = null;
	if(window.XMLHttpRequest){
		request = new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		request = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		element("content").innerHTML = "Lo sentimos, su browser no soporta ajax.  Por favor descargue un browser mas actualizado.  <br />Gracias";
	}
	return request;
}

function sendPostParameters(request, params) {
	request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	request.setRequestHeader("Content-length", params.length);
	request.setRequestHeader("Connection", "close");
	request.send(params);
}

function fill(file, place, name, method, params) {
	if (method == null || params == null) {
		method = "GET";
	}
	var request = ajaxObject();
	
	request.onreadystatechange = function() {
		if(request.readyState == 4) {
			try {
				if (place == "profile_content") {
					setOnLoadActualizer();
				}
				element(place).innerHTML = request.responseText;

			} catch(exception) {
				alert("Error: "+place);
			}
			document.body.style.cursor = 'auto';
			if (place == "content") {
				window.scrollTo(window.scrollX,0);
				currentFile = file;
				if (name != undefined && name != "") {
					addStep(new step(name, file, false));
				}
			}
		}
	}
	request.open (method, file, true);
	if (method == "GET") {
		request.send (null);
	} else if (method == "POST") {
		sendPostParameters(request, params);
	}
	document.body.style.cursor = 'wait';
}

function setOnLoadActualizer() {
	if (element("isLogged")) {
		wasLogged = element("isLogged").value;
		element("isLogged").value = "";
	}
	if (onLoadEventTracker != "") {
		clearInterval(onLoadEventTracker);
	}
	onLoadEventTracker = setInterval(function() { onLoadEvent() }, 10);
}

function onLoadEvent() {
	if (element("isLogged") && element("isLogged") != "")  {
		clearInterval(onLoadEventTracker);
		onLoadEventTracker = "";
		var index = getMenuTabIndexSelected();
		if (index != 1 && wasLogged != "" && wasLogged != element("isLogged").value ==true) {	
			fill(currentFile, "content");
			if (index == 0) {
				fill(menuTabs[index].sidebar, "sidebar_content");
			}
		}
	}
}

function switchForm(id) {
	for (i=0;i<document.post_form.categories.length;i++){
		if (document.post_form.categories.options[i].selected==false){
			try {
				element(document.post_form.categories.options[i].id + "_form").style.display = "none";
			} catch (e) {
			}
		}
	}
	element(id).style.display = "inline";
}
function addStep(step) {
	if (stairs.length == 0 || stairs[stairs.length-1] != step) {
		stairs.splice(stairs.length, 0, step)
		syncSteps();
	}
}
function removeLastStep() {
	removeStep(stairs.length);
}
function removeStep(i) {
	stairs.splice(i,1);
	syncSteps();
}
function syncSteps() {
	var stairDiagram = "<div class='header'>";
	for (i=0;i<stairs.length;i++) {
		if (i != stairs.length-1){
			stairs[i].on = true;
		} else {
			stairs[i].on = false;
		}
		if (stairs[i].on == true) {
			stairDiagram += "<a href=" + '"' + "javascript:landOn(" + i + ");" + '"' + " >";
		}
		stairDiagram += stairs[i].name;
		if (stairs[i].on == true) {
			stairDiagram += "</a>";
		}
		if (i != stairs.length-1){
			stairDiagram += " > ";
		}
	}
	stairDiagram += "</div>";
	element('stairs').innerHTML = stairDiagram;
	if (stairs.length > 0) {
		element('stairs').style.display = "block";
	} else {
		element('stairs').style.display = "none";
	}
}
function landOn(stepNumber) {
	stairs.splice(stepNumber + 1, (((stairs.length-1) - stepNumber)+1));
	fill(stairs[stepNumber].address, 'content');
	if (stairs[stepNumber].address == backButton.address && backButton.name != "Settings") {
		stairs.splice(stepNumber, stairs.length);
	}
	syncSteps();
}
function confirmDestroy(name) {
	return confirm("Are you sure you want to destroy '" + name + "' ?");
}
function changeSourceById(id, src) {
	element(id).src = src;
}
function peekABooComment(commentId) {
	if (element(commentId).style.display != "none" && element(commentId).style.display != "") {
		element(commentId).style.display = "none";
	} else {
		element(commentId).style.display = "inline";
	}
}
function peekABooArchieves(commentId) {
	var previousYear = element("selected_year").value;
	if (element(commentId).style.display == "block" || element(commentId).style.display == "") {
		element(commentId).style.display = "none";
		element("selected_year").value = "";
	} else {
		element(commentId).style.display = "block";
		if (previousYear != "") {
			element(previousYear).style.display = "none";
		}
		element("selected_year").value = commentId;
	}	
}
function addTextTableRow(tablename) {
	var table = element(tablename+"_text_table");
	var lastRow = table.rows.length -2;
	var newRow = table.insertRow(lastRow);
	
	var nameCell = newRow.insertCell(0);
	var nameInput = document.createElement('INPUT');
	nameInput.type = "TEXT";
	nameInput.name = "posts_" + tablename + "_text_name";
	nameInput.setAttribute ("CLASS", "inputText");
	nameCell.appendChild(nameInput);
}
function addLinksTableRow(tablename) {
	var table = element(tablename+"_links_table");
	var lastRow = table.rows.length -2;
	var newRow = table.insertRow(lastRow);
	
	var nameCell = newRow.insertCell(0);
	var nameInput = document.createElement('INPUT');
	nameInput.type = "TEXT";
	nameInput.name = "posts_" + tablename + "_links_name";
	nameInput.setAttribute ("CLASS", "inputText");
	nameCell.appendChild(nameInput);
	
	var linkCell = newRow.insertCell(1);
	var linkInput = document.createElement('INPUT');
	linkInput.type = "TEXT";
	linkInput.name = "posts_" + tablename + "_links_link";
	linkInput.setAttribute ("CLASS", "inputText");
	linkCell.appendChild(linkInput);
	
}
function addShotsTableRow(tablename) {
	var table = element(tablename + "_screenshots_table");
	var lastRow = table.rows.length -2;
	var newRow = table.insertRow(lastRow);
	
	var linkCell = newRow.insertCell(0);
	var linkInput = document.createElement('INPUT');
	linkInput.type = "TEXT";
	linkInput.name = "posts_" + tablename + "_shots_link";
	linkInput.setAttribute ("CLASS", "inputText");
	linkCell.appendChild(linkInput);
	
}
function destroyAdminTableRow(id) {
	var table = element(id);
	if (table.rows.length > 4) {
		table.deleteRow(table.rows.length-3);
	}
}
function getToolLinksString() {
	var postString = "";
	if (document.post_form.posts_tools_links_name) {
		if (document.post_form.posts_tools_links_name.length == undefined) {
			postString = "&posts_tools_links_name[0]=" + document.post_form.posts_tools_links_name.value;
			postString += "&posts_tools_links_link[0]=" + document.post_form.posts_tools_links_link.value;
		} else if (document.post_form.posts_tools_links_name.length > 1) {
			for (var i = 0; i < document.post_form.posts_tools_links_name.length; i++) {
				postString += "&posts_tools_links_name[" + i + "]=" + document.post_form.posts_tools_links_name[i].value;
				postString += "&posts_tools_links_link[" + i + "]=" + document.post_form.posts_tools_links_link[i].value;
			}
		}
	}
	return postString;
}
function getToolShotsString() {
	var postString = "";
	if (document.post_form.posts_tools_shots_link) {
		if (document.post_form.posts_tools_shots_link.length == undefined) {
			postString = "&posts_tools_shots_link[0]="  + document.post_form.posts_tools_shots_link.value;
		} else if (document.post_form.posts_tools_shots_link.length > 1) {
			for (var i = 0; i < document.post_form.posts_tools_shots_link.length; i++) {
				postString += "&posts_tools_shots_link[" + i + "]=" + document.post_form.posts_tools_shots_link[i].value;
			}
		}
	} 
	return postString;
}
function getProjectShotsString() {
	var postString = "";
	if (document.post_form.posts_projects_shots_link) {
		if (document.post_form.posts_projects_shots_link.length == undefined) {
			postString = "&posts_projects_shots_link[0]="  + document.post_form.posts_projects_shots_link.value;
		} else if (document.post_form.posts_projects_shots_link.length > 1) {
			for (var i = 0; i < document.post_form.posts_projects_shots_link.length; i++) {
				postString += "&posts_projects_shots_link[" + i + "]=" + document.post_form.posts_projects_shots_link[i].value;
			}
		}
	}
	return postString;
}
function getAdventuresTextString() {
	var postString = "";
	if (document.post_form.posts_adventures_text_name) {
		if (document.post_form.posts_adventures_text_name.length == undefined) {
			postString = "&posts_adventures_text_name[0]=" + document.post_form.posts_adventures_text_name.value;
		} else if (document.post_form.posts_adventures_text_name.length > 1) {
			for (var i = 0; i < document.post_form.posts_adventures_text_name.length; i++) {
				postString += "&posts_adventures_text_name[" + i + "]=" + document.post_form.posts_adventures_text_name[i].value;
			}
		}
	}
	return postString;
}
function getPollsTextString() {
	var pollsString = "";
	if (document.polls_form.posts_polls_options_text_name) {
		if (document.polls_form.posts_polls_options_text_name.length == undefined) {
			pollsString = "&options[0]=" + document.polls_form.posts_polls_options_text_name.value;
		} else if (document.polls_form.posts_polls_options_text_name.length > 1) {
			for (var i = 0; i < document.polls_form.posts_polls_options_text_name.length; i++) {
				pollsString += "&options[" + i + "]=" + document.polls_form.posts_polls_options_text_name[i].value;
			}
		}
	}
	return pollsString;
}
function switchCommentButtons(postid, prefix) {
	var antiPrefix;
	if (prefix == "answer") {
		antiPrefix = "comment";
	} else {
		antiPrefix = "answer";
	}
	element(antiPrefix + "_button_" + postid).style.display = "none";
	element(prefix + "_button_" + postid).style.display = "inline";
}
this.onload = function() {
	init();
};
//Gaming Functions
function setGameKey(key) {
	if (element("isLogged").value == "true") {
		fill("php/users/pointsManager.php", "profile_content", "", "POST", "key=" + key);
	} 
}
function setGamePoints(codeNumber, points, postId, newKey) {
	if (element("isLogged").value == "true") {
		fill("php/users/pointsManager.php", "profile_content", "", "POST", "codeNumber="+codeNumber+"&points="+points + "&postId=" + postId + "&key=" + newKey);
	}	 
}
//Poll Functions
function getCheckedValue() {
	var poll_options = document.poll.poll_options;
	for (var i = 0; i < poll_options.length; i++) {
		if (poll_options[i].checked == true) {
			return poll_options[i].value;
		}
	}
}