﻿// åäö

function helpWithFormattingTags(event, textarea) {
	event = event || window.event;
	var char = String.fromCharCode(event.charCode ? event.charCode : event.keyCode);
	var key = event.keyCode ? event.keyCode : event.which;

	var validTags = [ "b", "B", "i", "I", "u", "U" ];
	if (char == ">" && textarea.value.length >= 2) {
		for (tag in validTags) {
			var caretPosition = getCaretPosition(textarea);
			if (caretPosition >= 2 && textarea.value.substr(caretPosition-2, 2) == "<"+validTags[tag]) {
				textarea.value =
					textarea.value.substr(0, caretPosition) +
					"></" + validTags[tag] + ">" +
			        textarea.value.substr(caretPosition);
				setCaretPosition(textarea, caretPosition+1);
				event.returnValue = false;
				return cancel(event);
			}
		}
	}
	else if (key == 8 && textarea.value.length >= 7) { // backspace
		for (tag in validTags) {
			var caretPosition = getCaretPosition(textarea);
			if (caretPosition >= 3 && textarea.value.substr(caretPosition-3, 7) == "<"+validTags[tag]+"></"+validTags[tag]+">") {
				textarea.value =
			        textarea.value.substr(0, caretPosition-3) +
			        textarea.value.substr(caretPosition+4);
				setCaretPosition(textarea, caretPosition-3);
				return cancel(event);
			}
		}
	}

	function cancel(event) {
		if (event.preventDefault) {
		    event.preventDefault() ;
		}
		if (event.stopPropagation) {
		    event.stopPropagation() ;
		}
		event.returnValue = false;
		return false ;
	}

	function getCaretPosition(el) {
		if (!(typeof(el.selectionStart) == "undefined")) {
			return el.selectionStart;
		}
		if (document.selection && document.selection.createRange) {
			var range = document.selection.createRange();
			if (range && range.duplicate && range.moveToElementText && range.setEndPoint) {
				var dummyRange = range.duplicate();
				dummyRange.moveToElementText(el);
				dummyRange.setEndPoint("EndToEnd", range);
				return dummyRange.text.length - range.text.length;
			}
		}
		return null;
	}

	function setCaretPosition(el, position) {
		if (el.setSelectionRange) {
			el.setSelectionRange(position, position);
			return true;
		}
		if (el.createTextRange) {
			var range = el.createTextRange();
			if (range && range.collapse && range.moveStart && range.moveEnd && range.select) {
				range.collapse(true);
				range.moveStart("character", position);
				//range.moveEnd("character", position);
				range.select();
				return true;
			}
		}
		return false;
	}
}

function getRequestObject() {
	try {
		var req;
		if (XMLHttpRequest) {
			req = new XMLHttpRequest();

		}
		else if (ActiveXObject) {
			req = new ActiveXObject("Microsoft.XMLHTTP");
		}
		return req;
	}
	catch (e) {
		return null;
	}
}

function loadThumbs(direction, from, entryCount) {
	var req = getRequestObject();
	if (!req) return;
	req.open('GET', '/fotodagbok/thumbnails/?direction='+direction+"&refEntryId="+from+"&entryCount="+entryCount, true);
	req.onreadystatechange = function() {
		if (req.readyState == 4 && req.status == 200) {
			document.getElementById("thumbContainer").innerHTML = req.responseText;
			if (document.getElementById("thumbHeadScript")) {
				eval(document.getElementById("thumbHeadScript").innerHTML);
				return;
			}
			var thumbHeadingInterval = setInterval(
				function() {
					if (document.getElementById("thumbHeadScript")) {
						clearInterval(thumbHeadingInterval);
						eval(document.getElementById("thumbHeadScript").innerHTML);
					}
				},
				20
			);
		}
	}
	req.send(null);
}

function submitCommentByAjax() {
	var req = getRequestObject();
	if (!req) return true;
	try {
		req.open("POST", "/fotodagbok/kommentera/ajax/", true);
		req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		req.onreadystatechange = function() {
			if (req.readyState == 4 && req.status == 200) {
				setCommentFormEnabled(true); // FF 1.5 persists it's javascript state, so when we reload the page
				clearCommentForm();          // the form will stay filled in and inactive unless we do this
				document.getElementById("commentContainer").innerHTML = req.responseText;
				if (document.getElementById("commentHeadScript")) {
					eval(document.getElementById("commentHeadScript").innerHTML);
				}
				else {
					var thumbHeadingInterval = setInterval(
						function() {
							if (document.getElementById("commentHeadScript")) {
								clearInterval(thumbHeadingInterval);
								eval(document.getElementById("commentHeadScript").innerHTML);
							}
						},
						20
					);
				}
			}
			if (req.readyState == 4) {
				setCommentFormEnabled(true);
				document.getElementsByTagName("body")[0].style.cursor = "auto";
			}
		}
		req.send(getCommentFormQueryString());
		setCommentFormEnabled(false);
		document.getElementsByTagName("body")[0].style.cursor = "wait";
	}
	catch(e) {}
	return false;

	function getCommentFormQueryString() {
		var qs = "";
		qs += "entry=" + document.getElementById("entry").value + "&";
		qs += "hash=" + document.getElementById("hash").value + "&";
		qs += "name=" + fixForRequest(document.getElementById("name").value) + "&";
		qs += "url=" + fixForRequest(document.getElementById("url").value) + "&";
		qs += "commenttext=" + fixForRequest(document.getElementById("commenttext").value);
		if (document.getElementById("nospam")) {
			qs += "&nospam=true";
		}
		return qs;

		function fixForRequest(text) {
			return escape(text).replace(/\+/g, "%2B");
		}
	}
}

function setCommentFormEnabled(status) {
	document.getElementById("name").disabled =
    document.getElementById("url").disabled =
    document.getElementById("commenttext").disabled =
    document.getElementById("submit").disabled =
    !status;
}

function clearCommentForm() {
	document.getElementById("name").value =
    document.getElementById("url").value =
    document.getElementById("commenttext").value = "";
}
