/* 
* All scripts (c)2009 ZNA 
* Authors: Gie Spaepen, Wim Meerschman
*/

////////////////////////////////////////////////////////////////////////////////
// COOKIES
////////////////////////////////////////////////////////////////////////////////
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);
}

function PrintPage() {
    window.print();
}

function ReloadPage() {
    window.location.reload();
}

function GetEmailLink() {
    var link = arguments[0] + "@" + arguments[2];
    var subject = (arguments.length == 3) ? "?subject=" + arguments[3] : "";
    document.write("<a hre" + "f=ma" + "ilto:" + user + "@" + host + subject + ">" + link + "</a>");
}

function ForwardEmail() {
    var url = "mai" + "lt" + "o:" + arguments[0] + "@" + arguments[1];
    if (arguments.length == 3)
        url += "?subject=" + arguments[2];
    window.location.href = url;
}

function SavePage() {
    //make sure it is not added twice
    if (location.href.match("savePage=false")) {
        location.href = location.href.replace("savePage=false", "savePage=true");
    }
    else {
        if (location.href.match("savePage=true")) {
            //do nothing, it is already in the url
        }
        else {
            location.href = location.href + "?savePage=true";
        }
    }
}

function DoNotSavePage() {
    if (location.href.match("savePage=true")) {
        location.href = location.href.replace("savePage=true", "savePage=false");
    }
    else {
        if (location.href.match("savePage=false")) {
            //do nothing, it is already in the url
        }
        else {
            location.href = location.href + "?savePage=false";
        }
    }
}

//Check if the page is saved by the user, update the status if needed
function UpdatePageSaveButtons() {
    //No asmx call is needed when th url contains explicitly the parameter "savePage" for saving or not saving the page
    if (!location.href.match("savePage")) {
        //an asmx call is executed to see if the page is saved in the session of the user
        jQuery.ajax({ type: "POST",
            url: "/Webservices/MyHandout.asmx/IsPageSaved",
            dataType: "xml",
            data: "currentUrl=" + window.location.pathname,
            processData: false,
            error: function(XMLHttpRequest, textStatus, errorThrown) { ajaxError(XMLHttpRequest, textStatus, errorThrown); },
            success: function(xml) { RetrievingPageStatusFinished(xml); }
        });
    }
}

function RemoveSavedPage(url) {
    //an asmx call is executed to remove the current page from the session of the user
    jQuery.ajax({ type: "POST",
        url: "/Webservices/MyHandout.asmx/RemoveSavedPage",
        dataType: "xml",
        data: "currentUrl=" + url,
        processData: false,
        error: function(XMLHttpRequest, textStatus, errorThrown) { ajaxError(XMLHttpRequest, textStatus, errorThrown); },
        success: function(xml) { RemovingPageFinished(xml); }
    });
}

function RemovingPageFinished(xml) {
    //Nothing to do
}

function RetrievingPageStatusFinished(xml) {
    // parse the xmldocument, it is of the format:
    //<?xml version="1.0" encoding="utf-8"?>
    //<boolean xmlns="http://www.zna.be/">false</boolean>
    pageSaveStatus = xml.getElementsByTagName("boolean").item(0).firstChild.nodeValue;
    if (pageSaveStatus == "true") {
        jQuery("div.undoSavedPage").show();
        jQuery("div.savePage").hide();
    }
    else {
        jQuery("div.undoSavedPage").hide();
        jQuery("div.savePage").show();
    }
}

function ajaxError(xmlObj, textStatus, errorThrown) {
    // Comment out for live environments
    //alert("(Ajax error: " + textStatus + ")");
}

////////////////////////////////////////////////////////////////////////////////
// POPUP SEARCH
////////////////////////////////////////////////////////////////////////////////
//Popup search vars
var psMinLength = 3;
var psTypeDelay = 1000;
var psTypeInterval;
var psSearchAsynck = true;
var psCleanableChars = ["'", "-", "/", "*"];
var psSearchService = "/Webservices/instantsearch.asmx/FastSearch";
var psSearchResults = "";
var psResultHeight = 18;
var psNumResults = 0;
var psSearchListStyle = "searchresult";
var psAllData = { "PageType": "", "Title": "Toon alle resultaten", "Score": "0", "URL": "javascript:GotoSearchResultsFromForm()" };
var psEmptyData = '[{"PageType":"","Title":"Aan het zoeken (minst. 3 tekens)","Score":"0","URL":"#"}]';
var psErrorData = '[{"PageType":"","Title":"Fout bij zoeken","Score":"0","URL":"#"}]';

//Clear search field
function cleanSearch(q) {
    for (i = 0; i < psCleanableChars.length; i++) {
        q = q.replace(psCleanableChars[i], "");
    }
    return q;
}

//Process the dataresults as a JSON object with some
//XML contamination
function processSearchResults(data) {
    //Clean XML from data
    data = data.replace('<?xml version="1.0" encoding="utf-8"?>', '');
    data = data.replace('<string xmlns="http://www.zna.be/">', '');
    data = data.replace('</string>', '');
    //Evaluate data
    data = eval(data);
    //Add all data line
    if (data.length > 1) data[data.length] = psAllData;
    //Set length
    psNumResults = data.length
    //Loop through results
    psSearchResults = "";
    for (i = 0; i < psNumResults; i++) {
        divClass = "score" + data[i].Score + " " + (((i % 2) == 1) ? "altrow" : "");
        spanClass = data[i].PageType;
        psSearchResults += "<div class='" + divClass + "'><span class='" + spanClass + "'><a href='" + data[i].URL + "'>" + data[i].Title + "</a></span></div>";
    }
    //Open box
    jQuery("#popupsearch").animate({ height: (psNumResults * psResultHeight) + "px" }, "fast");
    jQuery("#popupsearch").html(psSearchResults);
}

//Perform the search based on a string
function performSearch(q) {
    //Clean q
    q = cleanSearch(q);
    //Perform search
    jQuery.ajax({ type: "POST",
        url: psSearchService,
        dataType: "text",
        data: "q=" + q,
        processData: false,
        error: function(XMLHttpRequest, textStatus, errorThrown) { ajaxError(XMLHttpRequest, textStatus, errorThrown); },
        success: function(xml) { processSearchResults(xml); }
    });
}

//Do the popup search
function popupSearch(formEl) {
    if (formEl.value.length > psMinLength) {
        //Reduce the number of counts
        clearInterval(psTypeInterval);
        psTypeInterval = setTimeout("performSearch('" + formEl.value + "')", psTypeDelay);
    }
    else if (formEl.value.length == 0) {
        jQuery('#popupsearch').animate({ height: "0px" }, "fast");
    }
    else {
        processSearchResults(psEmptyData);
    }
}

function OnEnter(event, method, args) {
    //Only do something when enter is pressed
    var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
    if (keyCode == 13) {
        try
		{ method(args); }
        catch (e) { }
        return false;
    }
    return true;
}

function OnEscape(event, method, args) {
    //Only do something when enter is pressed
    var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
    if (keyCode == 27) {
        try
		{ method(args); }
        catch (e) { }
        return false;
    }
    return true;
}

function GotoSearchResults(args) {
    location.href = searchResultPage + "?q=" + encodeURIComponent(args.value);
}

function GotoSearchResultsWithDepartmentsOnly(args) {
    location.href = "?searchText=" + encodeURIComponent(args.value) + "&filter=Department";
}

function GotoSearchResultsFromForm() {
    value = jQuery('#popupsearchfield').attr('value');
    location.href = searchResultPage + "?searchText=" + encodeURIComponent(value);
}


////////////////////////////////////////////////////////////////////////////////
// STRETCHBOX PART
////////////////////////////////////////////////////////////////////////////////
//StretchBox Vars
var sbIDPrefix = "sb";
var stretchBoxes = new Array();
var stretchBoxCounter = 0;
var stretchBoxTitlePrefix = "_";
var stretchBoxCookiePrefix = document.URL + '_';

//SelectorBox Vars
var scIDPrefix = "sc";
var selectorBoxes = new Array();
var selectorBoxCounter = 0;
var selectorBoxMaxLineItems = 5;
var currentSelectorBoxID = "";

//Detect if it is safe to animate the panels
function UnsafeStretchBoxAnim() {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(navigator.userAgent) != null) {
            return true;
            //return (parseFloat(RegExp.$1) > 6) ? false : true;
        }
        else return true;
    }
    else return false;
}

////////////////////////////////////////////////////////////////////////////////
// COVER FUNCTIONS & POPUP
////////////////////////////////////////////////////////////////////////////////
//Popup
function ShowPopup(url) {
    //Parameters
    params = 'width=' + screen.width;
    params += ', height=' + screen.height;
    params += ', top=0, left=0'
    params += ', fullscreen=yes';
    //Open popup
    popupWin = window.open(url, 'popupWindow', params);
    if (window.focus) {popupWin.focus(); }
    //return false;
}

//Show the cover
function ShowCover(width, height) {
    //Basic values
    if (width == null) width = 400;
    if (height == null) height = 400;
    //Top and left params
    ctop = (jQuery(window).height() - height) / 2;
    cleft = (jQuery(window).width() - width) / 2;
    //Scroll to top
    location.href = "#top";
    //Set css
    jQuery("#cover").css({ 'height':jQuery(document).height() + 'px'});
    jQuery("#cover > .container").css({ 'width': width + 'px', 'top': ctop + 'px' });
    jQuery("#cover > .container").css({ 'height': height + 'px', 'left': cleft + 'px' });
    jQuery("#covercontent").css({ 'height': (height - 20) + 'px' });
    //Show loader
    ToggleLoader(true);
    //Fade in
    if (UnsafeStretchBoxAnim()) {
        jQuery("#cover").css('display', 'block');
        //Show container
        jQuery("#cover > .container").css('display', 'block');
    }
    else jQuery("#cover").fadeIn("def", function() { jQuery("#cover > .container").css('display', 'block'); });
}

//Hide the cover
function HideCover() {
    //Remove covercontent
    jQuery('#covercontent').html(" <!-- -->");
    // Hide container
    jQuery("#cover > .container").css('display', 'none');
    //Hide cover
    if (UnsafeStretchBoxAnim()) jQuery("#cover").css('display', 'none');
    else jQuery("#cover").fadeOut("def");
}

//Toggle visibility of the loader icon
function ToggleLoader(show) {
    if (show) jQuery("#containericon").css('display', 'block');
    else jQuery("#containericon").css('display', 'none');
}

//Show iframe in cover
function ShowIFrameCover(url) {
    //Show cover
    ShowCover(600, 400);
    //Show iframe
    html = "<iframe src='" + url + "' onload='ToggleLoader(false)' frameborder='0'></iframe>";
    jQuery('#covercontent').html(html);
}

function ShowIFrameCoverDimensioned(url, width, height) {
    //Show cover
    ShowCover(width, height);
    //Show iframe
    html = "<iframe src='" + url + "' onload='ToggleLoader(false)' frameborder='0'></iframe>";
    jQuery('#covercontent').html(html);
}

////////////////////////////////////////////////////////////////////////////////
// DOCUMENT PREPARATION
////////////////////////////////////////////////////////////////////////////////
jQuery(document).ready(
    function() {
        //Close all elements of a stretchbox
        //Will be deprecated by CSS adaptions
        //jQuery('.stretchbox>.body>.content').hide();
        //Assign animations
        jQuery('.stretchbox>.body>.title').click(
            function() {
                tempId = jQuery(this).attr('id');
                stretchBoxes[tempId] = !stretchBoxes[tempId];
                if (UnsafeStretchBoxAnim()) { jQuery(this).next('div').toggle(); return false; }
                else { jQuery(this).next('div').slideToggle('normal'); return false; }
            }
        );
        jQuery('.stretchbox>.header>.title').click(
            function() {
                tempId = jQuery(this).attr('id');
                stretchBoxes[tempId] = !stretchBoxes[tempId];
                if (UnsafeStretchBoxAnim()) { jQuery(this).parent().next('div').toggle(); return false; }
                else { jQuery(this).parent().next('div').slideToggle('normal'); return false; }
            }
        );

        //Assign IDs to the body and the content tags
        //in the Stretchbox if undefined
        jQuery('.stretchbox>.header>.title').each(
            function() {
                if (jQuery(this).attr('id') == '') {
                    tempId = stretchBoxTitlePrefix + sbIDPrefix + stretchBoxCounter;
                    stretchBoxes[tempId] = (jQuery(this).css("display") == "block") ? true : false;
                    stretchBoxCounter++;
                    jQuery(this).attr('id', tempId);
                }
            }
        );
        jQuery('.stretchbox>.body>.title').each(
            function() {
                if (jQuery(this).attr('id') == '') {
                    tempId = sbIDPrefix + stretchBoxCounter;
                    stretchBoxes[tempId] = (jQuery(this).next().css("display") == "block") ? true : false;
                    stretchBoxCounter++;
                    jQuery(this).attr('id', tempId);
                }
            }
        );
        loadStretchBoxState();
        jQuery('body').attr('onUnLoad', 'saveStretchBoxState()');

        //initialize SelectorBoxes
        jQuery('.selectorbox').each(
            function() {
                if (jQuery(this).attr('id') == '') {
                    tempId = scIDPrefix + selectorBoxCounter;
                    selectorBoxes[tempId] = { selectors: new Array(), items: new Array() };
                    currentSelectorBoxID = tempId;
                    selectorBoxCounter++;

                    jQuery(this).attr('id', tempId);
                    //Get selectors
                    jQuery('.body>.title', this).each(
                        function() {
                            sel = jQuery(this).attr("selector");
                            selectorBoxes[currentSelectorBoxID].selectors[sel] = "valid";
                            selectorBoxes[currentSelectorBoxID].items[jQuery(this).attr('id')] = sel;
                        }
                    )
                }
                //Populate badge
                var selectorItems = 0;
                for (key in selectorBoxes[jQuery(this).attr('id')].selectors) {
                    selectorItems++;
                }
                badge = "<span style='font-weight:normal'>Selecteer: </span>";
                if (selectorItems > 1) {
                    if (selectorItems < selectorBoxMaxLineItems) badge = "<span style='font-weight:normal'>Selecteer: </span>";
                    else {
                        badge = "<span style='font-weight:normal'><a style='color:white;font-weight:bolder;text-decoration:none;' href='javascript:showSelectList(\"" + jQuery(this).attr('id') + "\")'><img src='/App/img/arrowWhiteDoubleDown.gif' alt='-' /> Selecteer</a> </span>";
                        badge += "<br/><div id='" + jQuery(this).attr('id') + "_select' class='selectmenu'>";
                    }
                    for (key in selectorBoxes[jQuery(this).attr('id')].selectors) {
                        keyString = (key.toString().length > 20) ? key.toString().substring(0, 20) + "..." : key;
                        if (selectorItems >= selectorBoxMaxLineItems) badge += "<img alt='-' src='/App/img/arrowWhiteSingle.gif'/>";
                        badge += "<a style='color:white;text-decoration:none;padding:4px;' href='javascript:querySelectorBox(\"" + jQuery(this).attr('id') + "\",\"" + key + "\")'>" + keyString + "</a> ";
                        if (selectorItems >= selectorBoxMaxLineItems) badge += "<br/>";
                    }
                    if (selectorItems >= selectorBoxMaxLineItems) badge += "<img alt='-' src='/App/img/arrowWhiteSingle.gif'/>";
                    badge += "<a style='color:white;text-decoration:none;padding:4px;' href='javascript:querySelectorBox(\"" + jQuery(this).attr('id') + "\",\"*\")'>Alles</a>";
                    if (selectorItems >= selectorBoxMaxLineItems) badge += "</div>";
                    jQuery('.body>.badge', this).html(badge);
                }
                else
                    jQuery('.body>.badge, this').css('display', 'none');
            }
        )

        //Initialize submenu navigation bar
        jQuery('#menunavigation>div').hover(
            function() { jQuery(this).removeClass("off"); jQuery(this).addClass("on"); },
            function() { jQuery(this).removeClass("on"); jQuery(this).addClass("off"); }
        );

        //Consultationtable setup
        jQuery('.timetable>.blockcaption').each(
            function() {
                //Position element
                prevPos = jQuery(this).prev().position();
                jQuery(this).css('left', prevPos.left + 'px');
                jQuery(this).css('top', (prevPos.top + 17) + 'px');
                //Assign Mousefunctions
                jQuery(this).prev().mouseover(function() { jQuery(this).next().show('fast'); });
                jQuery(this).prev().mouseout(function() { jQuery(this).next().hide('fast'); });
            }
        );
        //PopupSearch setup, not always there
        try {
            searchfieldPos = jQuery('#popupsearchfield').offset();
            jQuery('#popupsearch').css('left', (searchfieldPos.left - 180) + 'px');
            //jQuery('#popupsearch').css('top',(searchfieldPos.top + 20) + 'px');
            jQuery('body').click(function() { jQuery('#popupsearch').animate({ height: "0px" }, "fast"); });
        }
        catch (err) { }

    }
);
function toggleStretchBoxState(jqObj) {
    //TODO
}

//Query selector box
function querySelectorBox(id, selector) {
    //Hide list if needed
    jQuery("#" + id + "_select").hide('fast');
    items = selectorBoxes[id].items;
    for (key in items) {
        if ((items[key] == selector || selector == '*')) {
            if (!stretchBoxes[key]) {
                stretchBoxes[key] = !stretchBoxes[key];
                if (UnsafeStretchBoxAnim()) jQuery("#" + key).next('div').toggle();
                else jQuery("#" + key).next('div').slideToggle('normal');
            }
        }
        else {
            if (stretchBoxes[key]) {
                stretchBoxes[key] = !stretchBoxes[key];
                if (UnsafeStretchBoxAnim()) jQuery("#" + key).next('div').toggle();
                else jQuery("#" + key).next('div').slideToggle('normal');
            }
        }
    }
}

//Show subselect
function showSelectList(id) {
    jQuery("#" + id + "_select").show('slow');
}

//Save the current open/close state of the stretchboxes upon
//leaving the page
function saveStretchBoxState() {
    for (id in stretchBoxes) {
        try {
            CreateCookie(stretchBoxCookiePrefix + id, stretchBoxes[id], 2);
        }
        catch (e) { }
    }
}

//Load the open/close state of the stretchboxes upon
//loading the page
function loadStretchBoxState() {
    //Then load the cookies if any
    for (id in stretchBoxes) {
        cookieVal = ReadCookie(stretchBoxCookiePrefix + id);
        if (cookieVal == "true") {
            stretchBoxes[id] = true;
            if (id.indexOf(stretchBoxTitlePrefix) != -1) jQuery("#" + id).parent().next('div').css("display", "block");
            else jQuery("#" + id).next('div').css("display", "block");
        }
        else if (cookieVal == "false") {
            stretchBoxes[id] = false;
            if (id.indexOf("!") != -1) jQuery("#" + id).next('div').css("display", "none");
            else jQuery("#" + id).next('div').css("display", "none");
        }
    }
}

//Functino used by the medical component
//Fast Search function
function fastSearch(q) {
    q = q.toLowerCase();
    if (q.length > 2) {
        //Build regex
        var rxp = new RegExp("^.*" + q + ".*$", "i");
        var results = new Array();
        resultHTML = "";
        //Search
        for (i = 0; i < data.length; i++) {
            match = rxp.exec(data[i].department);
            if (match != null) {
                results[results.length] = data[i];
            }
        }
        //Build results
        if (results.length == 0) resultHTML = "<li>" + noResultsString + "</li>";
        else {
            for (i = 0; i < results.length; i++) {
                //replace search string and capitalize it
                department = results[i].department.toLowerCase().replace(q, "<strong>" + q + "</strong>");
                department = department.charAt(0).toUpperCase() + department.substring(1);
                resultHTML += "<li><a href='" + results[i].url + "'>" + department + "</a></li>";
            }
        }
        //Set
        jQuery("#fastsearchresult").html(resultHTML);
    }
    else {
        jQuery("#fastsearchresult").html("<li>" + startString + "</li>");
    }
}

