/**
 * AJAX HANDLING
 */
var AJAX_CALL_TIMEOUT = 30000; //30 seconds
var KEY_AJAX_FEEDBACK = 'ajaxfbk';
var ajaxXmlHttp = null;
var ajaxIsBusy = false;
var ajaxTimeOutFunctionID = 0;
var ajaxModuleInProgress= '';
var lastAjaxResult = '';
var maxRetry = 3;

function makeAjaxCall(ajaxModule, parameters, callBackFunction) {
    if (!ajaxIsBusy) {
        ajaxIsBusy = true;
        ajaxModuleInProgress = ajaxModule;
        if (callBackFunction == null) {
            callBackFunction = "genericAjaxCallBackFunction";
        }
        var random = Math.floor(Math.random() * 999999); //use a random number in the url to avoid internet explorer caching problems
        var uAjax = "module=" + encodeURIComponent(ajaxModule) + "&rand=" + random
            + "&callback=" + encodeURIComponent(callBackFunction);
        if (parameters) {
            uAjax += "&" + parameters;
        }
        var url = "ajax";
        if (window.XMLHttpRequest) {
            ajaxXmlHttp = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            ajaxXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            ajaxIsBusy = false;
            ajaxModuleInProgress='';
            showMessagePopup("Sorry, je browser ondersteunt geen AJAX technologie.");
            return;
        }
        if (ajaxXmlHttp) {
            ajaxTimeOutFunctionID = window.setTimeout('processAjaxTimeout()', AJAX_CALL_TIMEOUT);
            ajaxXmlHttp.onreadystatechange = processAjaxCallback;
            ajaxXmlHttp.open("POST", url, true);
            ajaxXmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
            ajaxXmlHttp.send(uAjax);
        }
    } else {
        //display error message
        showMessagePopup("De browser is al bezig met gegevens ophalen.","Fout");
    }
}

function processAjaxCallback() {
	if (ajaxXmlHttp.readyState == 4) {
		ajaxIsBusy = false;
		ajaxModuleInProgress='';
		if (ajaxXmlHttp.status == 200) {
			retry = 0;
			lastAjaxResult = ajaxXmlHttp.responseText; //this can either be a function or an object! when it is a function it is called directly
			var resultObj = eval(lastAjaxResult);
			cancelAjaxCall();
			if (resultObj) {
				if (resultObj.error) {
					showMessagePopup("Er is een fout opgetreden: <br/>" + resultObj.error, "Fout");
                                        
				} else {
					if (resultObj.callback.match(/^[a-zA-Z]+$/)) {
						eval(resultObj.callback)(resultObj);
					}
				}
			} else {
				showMessagePopup("Er is een fout opgetreden: <br/>" + lastAjaxResult, "Fout");
			}
		}
	}
}

function genericAjaxCallBackFunction(resultObj) {
    showMessagePopup(resultObj.result, "pulpfictie");
}

function processAjaxTimeout() {
    if (!ajaxIsBusy) {
        cancelAjaxCall();
        showMessagePopup("Kan de webserver niet bereiken.", "Fout");
    }
}

function cancelAjaxCall() {
    if (ajaxXmlHttp != null) {
        if (ajaxXmlHttp.readyState == 0 || ajaxXmlHttp.readyState == 4) {
            //do nothing, just reset the timer
        } else {
            ajaxXmlHttp.abort();
        }
    }
    window.clearTimeout(ajaxTimeOutFunctionID); //always clear the timeout
    ajaxIsBusy = false;
    ajaxModuleInProgress='';
}

function getFormData(form) {
    var parameters = new Array();
    var elements = form.elements;
    for(var i = 0; i < elements.length; i++) {
        var e = elements[i];
        if (e.type != null) {
	        if ((e.type == "checkbox" || e.type == "radio")) {
	            //only selected and not disabled checkboxes (but always checked db collection checkboxes)
	            if (e.checked && (!e.disabled || e.name == "search_records")) {
	                parameters.push(e.name + "=" + encodeURIComponent(e.value));
	            }
	        } else if (e.type == "select-multiple") {
	        	for (var j = 0; j < e.length; j++) {
	        		if (e.options[j].selected) {
	        			parameters.push(e.name + "=" + encodeURIComponent(e.options[j].value));
	        		}
	        	}
	        } else if (e.value.length > 0) {
	            parameters.push(e.name + "=" + encodeURIComponent(e.value));
	        }
	     }
    }
    return parameters.join('&');
}


function showMessagePopup(message, title) {
    document.getElementById('messagePopUpHeader').innerHTML = title;
	document.getElementById('messagePopUpContent').innerHTML = message;
    var messagePopup = document.getElementById('messagePopUp');
    messagePopup.style.display = 'block';
    var blanket = document.getElementById('blanket');
    blanket.style.display = 'block';
}

function closeMessagePopup() {
    var messagePopup = document.getElementById('messagePopUp');
    messagePopup.style.display = 'none';
    var newPostDiv = document.getElementById('newPostDiv');
    if (newPostDiv.style.display != 'block') {
        var blanket = document.getElementById('blanket');
        blanket.style.display = 'none';
    }
}

function moreLess(number) {
    var summaryDiv = document.getElementById('postSummary' + number);
    var fullTextDiv = document.getElementById('postFullText' + number);
    var moreLessImg = document.getElementById('postMoreLessImg' + number);

    if (summaryDiv.style.display == 'none') {
        summaryDiv.style.display = 'inline';
        fullTextDiv.style.display = 'none';
        moreLessImg.src = "images/pf_plus.png";
        moreLessImg.title = "Toon de gehele tekst";
    } else {
        summaryDiv.style.display = 'none';
        fullTextDiv.style.display = 'inline';
        moreLessImg.src = "images/pf_min.png";
        moreLessImg.title = "Toon alleen de eerste regels";
    }
}

function showNewPost() {
    document.getElementById('newPostNickName').value = '';
    document.getElementById('newPostEmail').value = '';
    document.getElementById('newPostCity').value = '';
    document.getElementById('newPostContent').value = '';
    var blanket = document.getElementById('blanket');
    blanket.style.display = 'block';
    var newPostDiv = document.getElementById('newPostDiv');
    newPostDiv.style.display = 'block';
}

function closeNewPost() {
    var newPostDiv = document.getElementById('newPostDiv');
    newPostDiv.style.display = 'none';
    var blanket = document.getElementById('blanket');
    blanket.style.display = 'none';
}

function submitNewStory() {
    //validatie
    var hasError = false;
    var newPostNickName = document.getElementById('newPostNickName');
    if (newPostNickName.value == null || newPostNickName.value.length < 1) {
        showMessagePopup("Vul je nickname in", "Fout");
        hasError = true;
    }
    var newPostEmail = document.getElementById('newPostEmail');
    if (newPostEmail.value == null || newPostEmail.value.length < 1) {
        showMessagePopup("Vul je e-mailadres in", "Fout");
        hasError = true;
    }
    var newPostCity = document.getElementById('newPostCity');
    if (newPostCity.value == null || newPostCity.value.length < 1) {
        showMessagePopup("Vul je woonplaats in", "Fout");
        hasError = true;
    }
    var newPostGender = document.getElementById('newPostGender');
    if (newPostGender.value == null || newPostGender.value.length < 1) {
        showMessagePopup("Vul je geslacht in", "Fout");
        hasError = true;
    }
    var newPostContent = document.getElementById('newPostContent');
    if (newPostContent.value == null || newPostContent.value.length < 1) {
        showMessagePopup("Vul je pulpfictietekst in", "Fout");
        hasError = true;
    }
    var newPostConditionsOk = document.getElementById('newPostConditionsOk');
    if (!newPostConditionsOk.checked) {
        showMessagePopup("Je moet akkoord gaan met de gebruiksvoorwaarden van Pulpfictie", "Fout");
        hasError = true;
    }
    if (!hasError) {
        var form = document.getElementById('newPostForm');
        var parameters = getFormData(form);
        makeAjaxCall("newpost", parameters, "genericAjaxCallBackFunction");
        closeNewPost();
    }
}

function voteUp(id) {
    var linkUp = document.getElementById("voteUp" + id);
    var linkDown = document.getElementById("voteDown" + id);
    linkUp.href = "javascript:alreadyVoted(" + id + ")";
    linkDown.href = "javascript:alreadyVoted(" + id + ")";
    makeAjaxCall("vote", "type=top&id=" + id, "voteAjaxCallback");
}

function voteDown(id) {
    var linkUp = document.getElementById("voteUp" + id);
    var linkDown = document.getElementById("voteDown" + id);
    linkUp.href = "javascript:alreadyVoted(" + id + ")";
    linkDown.href = "javascript:alreadyVoted(" + id + ")";
    makeAjaxCall("vote", "type=bad&id=" + id, "voteAjaxCallback");
}

function alreadyVoted(id) {
    showMessagePopup("Je hebt al een stem uitgebracht voor deze PF.", "pulpfictie");
}

function voteAjaxCallback(result) {
    var id = result.id;
    var badcount = result.badcount;
    var topcount = result.topcount;
    var badCountSpan = document.getElementById('badcount' + id);
    var topCountSpan = document.getElementById('topcount' + id);
    badCountSpan.innerHTML = badcount;
    topCountSpan.innerHTML = topcount;
}

function searchInputOnFocus() {
    var searchInput = document.getElementById("searchInput");
    if (searchInput.value == "zoek op tekst of naam") {
        searchInput.value = "";
        searchInput.className = "searchInputFocused";
    }
}

function toggleSizeSelector() {
    var sizeSelectorDiv = document.getElementById("sizeSelectorDiv");
    var selectorDiv = document.getElementById("sizePopupSelectorDiv");
    if (selectorDiv.style.display == "none") {
        selectorDiv.style.display = "block";
//        selectorDiv.style.x = sizeSelectorDiv.style.x + 150;
//        selectorDiv.style.y = sizeSelectorDiv.style.y;
    } else {
        selectorDiv.style.display = "none";
    }
}

function bodyOnClick() {
    var selectorDiv = document.getElementById("sizePopupSelectorDiv");
    if (selectorDiv != null) {
        if (selectorDiv.style.display != "none") {
            selectorDiv.style.display = "none";
        }
    }
}
