/*
	Generally usable javascript functions
*/

// Deprecated
function setContent(elementIDStr, contentStr) {
	if (document.getElementById(elementIDStr)) {
		document.getElementById(elementIDStr).innerHTML = contentStr;
	}
}


function confirmUrl(messageStr, urlStr) {
	if (confirm(messageStr)) {
		location.href = urlStr;
	}
}


function spotImageView(image) {
	var imagepath = image.split("/");
	var imagefile = imagepath[imagepath.length - 1];
	var imageLargeElement = document.getElementById("spotViewImageLarge");
	
	if (imageLargeElement.hasChildNodes()) {
		imageLargeElement.removeChild(imageLargeElement.firstChild);
	}
	
	var imageViewLarge = document.createElement("img");
	imageViewLarge.setAttribute("src", cfgImagesPath + imagefile);
	
	imageLargeElement.appendChild(imageViewLarge);
	
	if (imageViewLarge.width > cfgImagesMaxWidth) {
		imageViewLarge.setAttribute("width", cfgImagesMaxWidth);
	}
}


function register() {
	success = false;
	
	if (document.getElementById("regPassword1") && document.getElementById("regPassword2")) {
		pass1 = document.getElementById("regPassword1");
		pass2 = document.getElementById("regPassword2");
		
		if (pass1.value.length < 6) {
			alert("Lösenordet måste vara minst 6 tecken.");
		} else {
			if (pass1.value != pass2.value) {
				alert("Skriv in samma lösenord två gånger.");
			} else {
				success = true;
			}
		}
	}
	
	if (success) {
		pass1.value = SHA256(pass1.value);
		pass2.value = SHA256(pass2.value);
		return true;
	} else {
		return false;
	}
}


function account() {
	success = 0;
	//alert("js is evil");
	if (document.getElementById("password0") && document.getElementById("password1") && document.getElementById("password2")) {
		pass0 = document.getElementById("password0");
		pass1 = document.getElementById("password1");
		pass2 = document.getElementById("password2");
		
		if (pass0.value != "") {
		
			if (pass1.value.length < 6) {
				alert("Lösenordet måste vara minst 6 tecken.");
			} else {
				if (pass1.value != pass2.value) {
					alert("Skriv in samma lösenord två gånger.");
				} else {
					success = 1;
				}
			}
		} else {
			success = 2;
		}
	}
	
	if (success > 0) {
		if (success == 1) {
			pass0.value = SHA256(pass0.value);
			pass1.value = SHA256(pass1.value);
			pass2.value = SHA256(pass2.value);
		}
		return true;
	} else {
		return false;
	}
}


/*
	Clear dynamic content

function clearContent() {
	mainElements.dynamic.removeChild(mainElements.wrapper);
	mainElements.wrapper = document.createElement("div");
	mainElements.dynamic.appendChild(mainElements.wrapper);
}


/*
	Clear login form
*/
function clearLogin() {
	mainElements.login.removeChild(mainElements.loginWrapper);
	mainElements.loginWrapper = document.createElement("div");
	mainElements.login.appendChild(mainElements.loginWrapper);
}



/*
	String trimming
*/
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g, "");
};



/*
	Element class manipulation, openjs.com
*/
function hasClass(ele,cls) {
	return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}
function addClass(ele,cls) {
	if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}
function removeClass(ele,cls) {
	if (hasClass(ele,cls)) {
		var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
		ele.className=ele.className.replace(reg,' ');
	}
}


/*
	Make an element visible by CSS
*/
function show(element) {
	removeClass(element, "hide");
}

/*
	Make an element hidden by CSS
*/
function hide(element) {
	addClass(element, "hide");
}


/*
	Log out user
*/
function logout() {
	if (sessionID = readCookie("auth")) {
		GDownloadUrl("auth.xml.php?mode=logout", function(data, responseCode) {
			
		});
	}
	
	clearContent();
	menu();
	clearMessages();
	setMessage("Du är nu utloggad");
}


/*
	Loop method, runs every hour and checks if user is still loggen in server side
*/
function loggedCheck() {
	GDownloadUrl("auth.xml.php?mode=check", function(data, responseCode) {
		if (responseCode == 200) {
			var authXml = GXml.parse(data);
			var messages = authXml.documentElement.getElementsByTagName("message");
			for (var i = 0; i < messages.length; i++) {
				if (messages[i].getAttribute("id") == "userid" && parseInt(messages[i].getAttribute("id")) == 0) {
					window.location.reload();
					break;
				}
			}
		}
	});
	window.setTimeout("loggedCheck()", 3600*1000);
}


/*
	Unused, I think...
*/
function getAuthData() {
	var userData = new Object();
	userData.userID = 0;
	userData.username = "";
	userData.realname = "";
	userData.email = "";
	userData.group = 0;
	
	if (sessionID = readCookie("auth")) {
		GDownloadUrl("auth.xml.php?mode=check", function(data, responseCode) {
			if (responseCode == 200) {
				var authXml = GXml.parse(data);
				var messages = authXml.documentElement.getElementsByTagName("message");
				for (var i = 0; i < messages.length; i++) {
					if (messages[i].getAttribute("id") == "userid") {
						userData.userID = messages[i].getAttribute("id");
					} else if (messages[i].getAttribute("id") == "username") {
						userData.username = messages[i].getAttribute("id");
					} else if (messages[i].getAttribute("id") == "realname") {
						userData.realname = messages[i].getAttribute("id");
					} else if (messages[i].getAttribute("id") == "email") {
						userData.email = messages[i].getAttribute("id");
					} else if (messages[i].getAttribute("id") == "group") {
						userData.group = messages[i].getAttribute("id");
					}
				}
			}
			return userData;
		});
	} else {
		return userData;
	}
}


/*
	Set an error/warning/success/info message visible to user
*/
function setMessage(textStr, typeStr) {
	typeStr = typeStr || "i";
	switch (typeStr) {
		case "e":
		messageErrorElement.innerHTML = textStr;
		show(messageErrorElement);
		break;
		case "w":
		messageWarningElement.innerHTML = textStr;
		show(messageWarningElement);
		break;
		case "s":
		messageSuccessElement.innerHTML = textStr;
		show(messageSuccessElement);
		break;
		default:
		messageInfoElement.innerHTML = textStr;
		show(messageInfoElement);
	}
}


/*
	Clear all messages visible to user
*/
function clearMessages() {
	setMessage("", "e");
	setMessage("", "w");
	setMessage("", "i");
	setMessage("", "s");
	
	addClass(messageErrorElement, "hide");
	addClass(messageWarningElement, "hide");
	addClass(messageInfoElement, "hide");
	addClass(messageSuccessElement, "hide");
}


/*
	Clear specific message by type
*/
function clearMessage(typeStr) {
	switch (typeStr) {
		case "e":
		messageErrorElement.innerHTML = '';
		hide(messageErrorElement);
		break;
		case "w":
		messageWarningElement.innerHTML = '';
		hide(messageWarningElement);
		break;
		case "s":
		messageSuccessElement.innerHTML = '';
		hide(messageSuccessElement);
		break;
		default:
		messageInfoElement.innerHTML = '';
		hide(messageInfoElement);
	}
}


/*
	Is the needle in the haystack?
*/
function inArray(needleStr, haystackArr) {
	resultBool = false;
	for (var i = 0; i < haystackArr.length; i++) {
		if (haystackArr[i] == needleStr) {
			resultBool = true;
			break;
		}
	}
	return resultBool;
}

/*
	Remove a needle from haystack
*/
function arrayRemove(needleStr, haystackArr) {
	for (var i = 0; i < haystackArr.length; i++) {
		if (haystackArr[i] == needleStr) {
			haystackArr.splice(i, 1);
		}
	}
}





/*
	General cookie methods
	Quirksmode.org 
*/

function createCookie(name, value, days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
		var expires = "; expires=" + date.toGMTString();
	}
	else {
		var expires = "";
	}
	document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i = 0; i < ca.length; i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name, "", -1);
}



/*
	Read a page's GET URL variables and return them as an associative array.
	snipplr.com
*/
function getUrlVars()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');

    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }

    return vars;
}

