var photoOffset=0;

var editCommentId = 0;
var editCommentHTML = "";

var deleteCommentId = 0;
var modCommentId = 0;
var demodCommentId = 0;

var userLoggedIn = false;

var reactionForm;

var warningDialog = false;
var errorDialog = false;

var enableFullAjax = true;
var usedAjaxNavigation = false;

function CheckDelete(url) {
	if (confirm("Are you sure?")) {
		window.open(url,"_self");
	}
}

function trim(value) {
  value = value.replace(/^\s+/,'');
  value = value.replace(/\s+$/,'');
  return value;
}

function openWindow(url) {
	//window.open(url,"nood_comment","height=400,width=500,top=100,left=100,location=no,menubar=no,toolbar=no");
}

function drawWarning(text, element) {
    if (warningDialog == false) {
        warningDialog = document.createElement('div');
        warningDialog.className = 'warning';
    }
    warningDialog.innerHTML = text;
    element.insertBefore(warningDialog, element.firstChild);
}

function drawError(text, element) {
    if (errorDialog == false) {
        errorDialog = document.createElement('div');
        errorDialog.className = 'error';
    }
    errorDialog.innerHTML = text;
    element.insertBefore(errorDialog, element.firstChild);
    /*var wrnel = document.createElement('div');
    wrnel.className = 'error';
    wrnel.innerHTML = text;
    element.insertBefore(wrnel, element.firstChild);*/
}

function postAddComment(obj) {
    if (trim(document.getElementById("comment").value).length == 0) {
        alert("Je hebt geen reactie ingegeven!");
    } else {
        var poststr = "comment=" + encodeURI(trim( document.getElementById("comment").value )) +
                "&parentId=" + encodeURI( document.getElementById("parentId").value ) +
                "&level=" + encodeURI( document.getElementById("level").value ) +
                "&itemId=" + encodeURI( document.getElementById("itemId").value );
        if (userLoggedIn == false) {
            poststr += "&name=" + encodeURI(trim( document.getElementById("comment-name").value )) +
                "&code=" + encodeURI(trim( document.getElementById("comment-code").value ));
        }
        makePOSTRequest('ajax/comment/index.php?action=add', poststr, handleAddComment);
    }
}

function postEditComment(obj) {
    if (trim(document.getElementById("comment").value).length == 0) {
        alert("Je hebt geen reactie ingegeven!");
    } else {
        var poststr = "comment=" + encodeURI(trim( document.getElementById("comment").value )) +
                "&commentId=" + encodeURI( document.getElementById("commentId").value );
        makePOSTRequest('ajax/comment/index.php?action=edit', poststr, handleEditComment);
    }
}

function postDeleteComment(commentId) {
    var poststr = "commentId=" + encodeURI(commentId);
    makePOSTRequest('ajax/comment/index.php?action=delete', poststr, handleDeleteComment);
}

function postModerateComment(obj) {
    if (trim(document.getElementById("moderated").value).length == 0) {
        alert("Je hebt geen reden ingegeven!");
    } else {
        var poststr = "moderated=" + encodeURI(trim( document.getElementById("moderated").value )) +
                "&commentId=" + encodeURI( document.getElementById("commentId").value ) +
                "&level=" + encodeURI( document.getElementById("level").value ) +
                "&itemId=" + encodeURI( document.getElementById("itemId").value );
        makePOSTRequest('ajax/comment/index.php?action=moderate', poststr, handleModerateComment);
    }
}

function postDemoderateComment(itemId, commentId, level) {
    var poststr = "commentId=" + encodeURI( commentId ) +
            "&level=" + encodeURI( level ) +
            "&itemId=" + encodeURI( itemId );
    makePOSTRequest('ajax/comment/index.php?action=demoderate', poststr, handleDemoderateComment);
}


function handleAddComment (xmlHttp) {
    if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
            var element = document.createElement('div');
            element.innerHTML = xmlHttp.responseText;
            reactionForm.parentNode.insertBefore(element.firstChild, reactionForm);
            clearForms();

        } else if (xmlHttp.status == 412) {
            // Draw error box
            drawError(xmlHttp.responseText, document.getElementById('comment-form'));
        }
    }
}

function handleEditComment (xmlHttp) {
    if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
            editCommentHTML = xmlHttp.responseText;
            clearForms();
        } else if (xmlHttp.status == 412) {
            drawError(xmlHttp.responseText, document.getElementById('comment-form'));
        } else if (xmlHttp.status == 403) {
            drawError(xmlHttp.responseText, document.getElementById('comment-form'));
        }
    }
}

function handleDeleteComment (xmlHttp) {
    if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
            var commentElement = document.getElementById('comment-' + deleteCommentId);
            
            commentElement.parentNode.removeChild(commentElement);
        } else if (xmlHttp.status == 412) {
            drawError(xmlHttp.responseText, document.getElementById('comment-form'));
        } else if (xmlHttp.status == 403) {
            drawError(xmlHttp.responseText, document.getElementById('comment-form'));
        }
    }
}

function handleModerateComment (xmlHttp) {
    if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
            var commentElement = document.getElementById('comment-' + modCommentId);
            commentElement.parentNode.removeChild(commentElement);
            var element = document.createElement('div');
            element.innerHTML = xmlHttp.responseText;
            reactionForm.parentNode.insertBefore(element, reactionForm);
            clearForms();

        } else if (xmlHttp.status == 412) {
            // Draw error box
            drawError(xmlHttp.responseText, document.getElementById('comment-form'));
        } else if (xmlHttp.status == 403) {
            drawError(xmlHttp.responseText, document.getElementById('comment-form'));
        }
    }
}

function handleDemoderateComment (xmlHttp) {
    if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
            clearForms();
            var commentElement = document.getElementById('comment-' + demodCommentId);
            commentElement.parentNode.insertBefore(reactionForm, commentElement.nextSibling);
            commentElement.parentNode.removeChild(commentElement);
            var element = document.createElement('div');
            element.innerHTML = xmlHttp.responseText;
            reactionForm.parentNode.insertBefore(element, reactionForm);
            demodCommentId = 0;

        } else if (xmlHttp.status == 412) {
            // Draw error box
            drawError(xmlHttp.responseText, document.getElementById('comment-form'));
        } else if (xmlHttp.status == 403) {
            drawError(xmlHttp.responseText, document.getElementById('comment-form'));
        }
    }
}

function initReactionForm() {
    reactionForm = document.createElement('div');
    reactionForm.style.margin = "10px 0 10px 0";
}

function updateReactionForm(itemId, parentId, level) {
    var txtOffline = '';
    if (userLoggedIn == false) {
        txtOffline = '<p><span class="formlabel"><label for="comment-name">Naam:</label></span>' +
        '<span class="formelement"><input type="text" name="name" id="comment-name" value="" /></span></p>' +
        '<p><span class="formlabel"><label for="comment-code">Code:</label></span>' +
        '<span class="formelement"><img src="security-image.php" title="Captcha" /></span></p>' +
        '<p><span class="formlabel">Type code over:</span>' + 
        '<span class="formelement"><input id="comment-code" type="text" name="code" /></span></p>';
    }
    reactionForm.style.visibility = "visible";
    reactionForm.innerHTML = 
    '<div style="margin-left: ' + Math.min(level*20,80) + 'px;">' +
    '<form method="post" id="comment-form" action="javascript:postAddComment(document.getElementById(\'comment-form\'))" >' +
    txtOffline +
    '<textarea id="comment" style="width:100%" name="comment" class="standard"></textarea>' +
	'<input type="hidden" id="parentId" name="parentId" value="' + parentId + '" />' +
    '<input type="hidden" id="itemId" name="itemId" value="' + itemId +'" />' +
    '<input type="hidden" id="level" name="level" value="' + level +'" />' +
	'<p class="buttons"><input type="submit" name="addcomment" value="Toevoegen" class="button" /><input type="button" onclick="clearForms()" value="Annuleren" class="button" /></p>' +
    '</form></div>';
}

function updateModerationForm(itemId, commentId, level) {
    modCommentId = commentId;
    reactionForm.style.visibility = "visible";
    reactionForm.style.marginLeft = Math.min(level*20,80) + "px";
    reactionForm.innerHTML = 
    '<form method="post" id="comment-form" action="javascript:postModerateComment(document.getElementById(\'comment-form\'))" >' +
    '<p><label for="moderated">Geef een reden:</label></p>' +
    '<textarea id="moderated" name="moderated" class="standard"></textarea>' +
	'<input type="hidden" id="commentId" name="parentId" value="' + commentId + '" />' +
    '<input type="hidden" id="itemId" name="itemId" value="' + itemId +'" />' +
    '<input type="hidden" id="level" name="level" value="' + level +'" />' +
	'<p class="buttons"><input type="submit" name="moderate" value="Modereer reactie" class="button" /><input type="button" onclick="clearForms()" value="Annuleren" class="button" /></p>' +
    '</form>';
}

function editReactionForm(element, commentId) {
    editCommentId = commentId;
    var text = element.textContent;
    editCommentHTML = element.innerHTML;
    var form =
    '<form method="post" id="comment-form" action="javascript:postEditComment(document.getElementById(\'comment-form\'))" >' +
    '<textarea id="comment" style="width:100%" name="comment" class="standard">' + text + '</textarea>' +
	'<input type="hidden" id="commentId" name="commentId" value="' + commentId + '" />' +
	'<p class="buttons"><input type="submit" name="editcomment" value="Bewerken" class="button" /><input type="button" onclick="clearForms()" value="Annuleren" class="button" /></p>' +
    '</form>';
    element.innerHTML = form;
}

function editComment(commentId) {
    clearForms();
    var commentEl = document.getElementById('comment-' + commentId);
    commentEl = commentEl.lastElementChild;
    editReactionForm(commentEl, commentId);
}

function moderateComment(itemId, commentId, level) {
    clearForms();
    
    var commentNode = document.getElementById('comment-' + commentId);
    updateModerationForm(itemId, commentId, level);
    commentNode.parentNode.insertBefore( reactionForm, commentNode.nextSibling );
}

function viewComment(itemId, commentId, level) {
    var commentNode = document.getElementById('moderated-' + commentId);
    if (commentNode.style.visibility == "hidden") {
        commentNode.style.visibility = "visible";
        commentNode.style.margin = "10px 0";
    } else {
        commentNode.style.visibility = "hidden";
        commentNode.style.margin = "0";
    }
}

function demoderateComment(itemId, commentId, level) {
    if (confirm("Zeker dat je deze reactie opnieuw zichtbaar wilt maken?")) {
        demodCommentId = commentId;
        postDemoderateComment(itemId, commentId, level);
    }
}

function deleteComment(commentId) {
    clearForms();
    if (confirm("Zeker dat je deze reactie wilt verwijderen?")) {
        deleteCommentId = commentId;
        postDeleteComment(commentId);
    }
}

function addComment(itemId,parentId,level) {
    clearForms();
    var commentNode = document.getElementById('comment-' + parentId);
    updateReactionForm(itemId,parentId,level);
    if (level > 0)
        commentNode.parentNode.insertBefore( reactionForm, commentNode.nextSibling );
    else
        commentNode.parentNode.insertBefore( reactionForm, commentNode );
}

function cancelEditComment() {
    var commentEl = document.getElementById('comment-' + editCommentId);
    commentEl = commentEl.lastElementChild;
    commentEl.innerHTML = editCommentHTML;
    editCommentId = 0;
    editCommentHTML = "";
}

function cancelAddComment() {
    reactionForm.innerHTML = "";
    reactionForm.style.visibility = "hidden";
    reactionForm.style.margin = "10px 0 10px 0";
    reactionForm.style.marginLeft = "0";
}

function clearForms() {
    if (editCommentId > 0)
        cancelEditComment();
    cancelAddComment();
}

function increaseOffset() {
    photoOffset++;
    updateImages();
}

function decreaseOffset() {
    photoOffset--;
    if (photoOffset < 0)
        photoOffset = 0;
    updateImages();
}

function updateImages() {
    var photoScroller;
	if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        photoScroller=new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        // code for IE6, IE5
        photoScroller=new ActiveXObject("Microsoft.XMLHTTP");
    } 
    photoScroller.onreadystatechange=function() {
        
        if (photoScroller.readyState == 4) {
          document.getElementById("photo-scroll").innerHTML = photoScroller.responseText;
        }
        changeLinks(document.getElementById("photo-scroll"));
    }
    photoScroller.open("GET","ajax/photo/index.php?offset=" + photoOffset,true);
    photoScroller.send(null);
}

function initLogin() {
    var req = getXMLHttpRequestObject();
    req.onreadystatechange=function() {
        if (req.readyState == 4) {
            if (eval(req.responseText))
                userLoggedIn = true;
            else
                userLoggedIn = false;
        }
    }
    req.open("GET","ajax/login/index.php",true);
    req.send(null);
}

function getXMLHttpRequestObject() {
    var xhttp;
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xhttp=new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        // code for IE6, IE5
        xhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    return xhttp;
}
    
function makePOSTRequest(url, parameters, callback) {
    var http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
     http_request = new XMLHttpRequest();
     if (http_request.overrideMimeType) {
        // set type accordingly to anticipated content type
        //http_request.overrideMimeType('text/xml');
        http_request.overrideMimeType('text/html');
     }
    } else if (window.ActiveXObject) { // IE
     try {
        http_request = new ActiveXObject("Msxml2.XMLHTTP");
     } catch (e) {
        try {
           http_request = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {}
     }
    }
    if (!http_request) {
     alert('Cannot create XMLHTTP instance');
     return false;
    }

    http_request.onreadystatechange = function() { callback(http_request) };
    http_request.open('POST', url, true);
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", parameters.length);
    http_request.setRequestHeader("Connection", "close");
    http_request.setRequestHeader("Accept-Encoding", "deflate");
    http_request.send(parameters);
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

function browserCheck() {
    if (BrowserDetect.browser == "An unknown browser" 
        || (BrowserDetect.browser == "Explorer" && BrowserDetect.version < 7)) {
        var el = document.createElement('div');
        el.className = 'error';
        el.innerHTML = 'De browser die je gebruikt (' + BrowserDetect.browser + ' ' + BrowserDetect.version + '), wordt niet ondersteund op deze site. Hierdoor is de gebruikerservaring gelimiteerd en kan de site mogelijk verkeerd weergegeven zijn. Update je huidige browser of installeer een modernere browser (wij raden <a href="www.getfirefox.com/">Mozilla Firefox</a> aan). Kun je geen recentere browser installeren? Gebruik de <a href="http://www.denooduitgang.be/old/">oude versie</a> van deze site.';
        var contel = document.getElementById('content-module');
        contel.insertBefore(el, contel.firstChild);
    //} else if (BrowserDetect.browser != "Explorer") {
        // Ajaxify entire webapp
        //changeLinks(document.getElementById('body'));
    }
}

function changeLinks(rootElement) {
    if (enableFullAjax == true) {
        var links = rootElement.getElementsByTagName('a');
        for (var i=0; i < links.length; i++) {
            var url = links[i].getAttribute("href");
            if (url[0] == '?') {
                links[i].setAttribute("href","javascript:ajaxRequest('" + url + "')");
            }
        }
    }
}

function loadTextareas(rootElement) {
    var textareas = rootElement.getElementsByTagName('textarea');
    for (var i=0; i < textareas.length; i++) {
        if (textareas[i].className == "fckeditor") {
            // Replace with FCKeditor
            var sBasePath = './editor/';
            var oFCKeditor = new FCKeditor( textareas[i].name ) ;
            oFCKeditor.BasePath	= sBasePath ;
            oFCKeditor.Height	= 500 ;
            oFCKeditor.ReplaceTextarea() ;
        }
    }
}

function ajaxRequest(url) {
    usedAjaxNavigation = true;
    var req = getXMLHttpRequestObject();
    req.onreadystatechange=function() {
        var rootEl = document.getElementById('content-module');
        rootEl.innerHTML = req.responseText;
        initReactionForm();
        changeLinks(rootEl);
        loadTextareas(rootEl);
        }
    req.open("GET","ajaxRequest.php" + url,true);
    req.send(null);
    window.location.hash = url;
}

function init() {
   // quit if this function has already been called
   if (arguments.callee.done) return;

   // flag this function so we don't do the same thing twice
   arguments.callee.done = true;

   // create the "page loaded" message
   initReactionForm();
   //initLogin();
   updateImages();
   loadTextareas(document.getElementById('content-module'));
   changeLinks(document.getElementById('body'));
   browserCheck();
   if (window.location.hash.length > 0 && window.location.hash.charAt(1) == "?" && usedAjaxNavigation == false) {
    ajaxRequest(window.location.hash.substring(1));
   }
};

