﻿var switching = false;
var jvHistory = new History();
var _gaq; //var for Mac Analytics

jvHistory.RegisterPage(document.location.pathname + document.location.search);

getStartMethod = function(startMethod, startPageMethod) {
    return function() {
        if (startMethod) {
            try {
                eval(startMethod + "();");
            } catch (e) { }
        }

        if (startPageMethod) {
            try {
                eval(startPageMethod + "();");
            } catch (e) { }
        }
    }
}

getPostRenderMethod = function(prsdUrl) {
    return function() {
        if (prsdUrl.Anchor) {
            scrollToAnchor(prsdUrl.Anchor);
        }
    }
}

function GoToPage(url, switchMethod) {
    var req = getXmlHttp();
    var prsdUrl = parseUrlAnchor(url);
    var strUrl = appendQueryString(prsdUrl.Url, new Array("n=y", "mhsh=" + masterHash));
    var currentUrl = jvHistory.GetCurrent();

    if (currentUrl)
        if (currentUrl.toLowerCase() == prsdUrl.Url.toLowerCase())
            return false;

    if (req) {
        if (!switching) { //If the page is not already loading another page
            switching = true;
            req.onreadystatechange = function() {
                if (req.readyState == 4) {
                    // only if "OK"
                    if (req.status == 200) {
                        var html = req.responseText;
                        var rpHeader = req.getResponseHeader('replace');
                        var titleHeader = req.getResponseHeader('doctitle');

                        //Register current page in history
                        jvHistory.RegisterPage(prsdUrl.Url);
                        googlePageTrack(prsdUrl.Url);

                        if (rpHeader == 'some') {
                            var startMethod = req.getResponseHeader('startmethod');
                            var startPageMethod = req.getResponseHeader('startpagemethod');
                            showSome(html, prsdUrl.Url, titleHeader, getStartMethod(startMethod, startPageMethod), getPostRenderMethod(prsdUrl), switchMethod);
                        }
                        else {
                            masterHash = req.getResponseHeader('newmaster');
                            var startMethod = req.getResponseHeader('startmethod');
                            var startPageMethod = req.getResponseHeader('startpagemethod');
                            showFull(html, prsdUrl.Url, titleHeader, getStartMethod(startMethod, startPageMethod), getPostRenderMethod(prsdUrl), switchMethod);
                        }
                    } else if (req.status == 404) {
                        alert("The page could not be found on the server.");
                        switching = false;
                    } else if (req.status == 500) {
                        alert("The server encountered an internal error trying to load this page.");
                        switching = false;
                    } else {
                        alert("There was a problem loading this page:\n" + req.statusText);
                        switching = false;
                    }
                }
            }
            req.open("GET", strUrl, true);
            req.send(null);
        }
        return false;
    } else {
        return true;
    }
}

function getXmlHttp() {
    var xmlhttp = false;
    try {
        xmlhttp = new XMLHttpRequest();
    }
    catch (e) {
        try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e) {
            try {
                xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e1) {
                xmlhttp = false;
            }
        }
    }

    return xmlhttp;
}

function appendQueryString(url, queryParameters) {
    var i;
    var buffer = new Array();
    var hshSplit = String(url).split('#');
    var fullPage = String(hshSplit.shift());

    buffer.push(fullPage);
    if (fullPage.indexOf('?') >= 0)
        buffer.push('&');
    else
        buffer.push('?');

    buffer.push(queryParameters.join('&'));

    for (i = 0; i < hshSplit.length; i++) {
        buffer.push('#');
        buffer.push(hshSplit[i]);
    }

    return buffer.join('');
}

function parseUrlAnchor(url) {
    var urlParts = String(url).split('#');

    if (urlParts.length > 1) {
        if (urlParts[1].length > 0) {
            return new parsedUrl(urlParts[0], urlParts[1]);
        }
        else {
            return new parsedUrl(urlParts[0], false);
        }
    } else {
        return new parsedUrl(urlParts[0], false);
    }
}

function parsedUrl(url, anchor){
    this.Url = url;
    this.Anchor = anchor;
}

function showSome(html, url, doctitle, startMethod, postRenderMethod, switchMethod) {
    var dv = document.createElement('DIV');
    var content = getElementByClassName('main');
    var currentPage = content.getElementsByTagName('DIV')[0];

    document.location.hash = "!" + url;

    dv.innerHTML = html;
    dv.className = 'holdsContent';
    dv.style.opacity = 0;
    dv.style.filter = "alpha(opacity=0)";

    content.appendChild(dv);
    if (startMethod) {
        startMethod();
    }

    if (switchMethod)
        setTimeout(switchMethod(currentPage, dv, 100, 0, doctitle, postRenderMethod), 30);
    else
        setTimeout(fadeInOut(currentPage, dv, 100, 0, doctitle, postRenderMethod), 30);
}

function showFull(html, url, doctitle, startMethod, postRenderMethod, switchMethod) {
    var dv = document.createElement('DIV');
    var content = document.getElementById('root');
    var currentPage = content.getElementsByTagName('DIV')[0];

    document.location.hash = "!" + url;

    dv.innerHTML = html;
    dv.className = 'root';
    dv.style.opacity = 0;
    dv.style.filter = "alpha(opacity=0)";

    content.appendChild(dv);

    if (startMethod) {
        startMethod();
    }

    if (switchMethod)
        setTimeout(switchMethod(currentPage, dv, 100, 0, doctitle, postRenderMethod), 30);
    else
        setTimeout(fadeInOut(currentPage, dv, 100, 0, doctitle, postRenderMethod), 30);
}

fadeInOut = function(oldControl, newControl, oldOpacity, newOpacity, doctitle, finalDelegate) {
    return function() {
        //document.title = 'old opacity: ' + oldOpacity + ', new opacity: ' + newOpacity;
        if (oldOpacity > 0) {
            oldOpacity -= 6;

            oldControl.style.opacity = (oldOpacity / 100);
            oldControl.style.filter = "alpha(opacity=" + oldOpacity + ")";

            setTimeout(fadeInOut(oldControl, newControl, oldOpacity, newOpacity, doctitle, finalDelegate), 30);
        } else if (newOpacity < 100) {
            newOpacity += 4;

            newControl.style.opacity = (newOpacity / 100);
            newControl.style.filter = "alpha(opacity=" + newOpacity + ")";

            if (oldControl) {
                oldControl.parentNode.removeChild(oldControl);

                //trigger jQuery ready event
                try {
                    $(document).trigger("ready");
                } catch (e) {
                }

                if (finalDelegate)
                    finalDelegate();
            }

            setTimeout(fadeInOut(null, newControl, oldOpacity, newOpacity, doctitle, finalDelegate), 30);
        } else {
            newControl.style.opacity = 1;
            newControl.style.filter = "";

            if (doctitle)
                if (doctitle.length > 0)
                document.title = doctitle;

            changeLinks();

            switching = false;
        }
        //document.title = 'old: ' + oldOpacity + ', new: ' + newOpacity;
    }
}

directSwitch = function(oldControl, newControl, oldOpacity, newOpacity, doctitle, finalDelegate) {
    return function() {
        if (oldControl)
            oldControl.parentNode.removeChild(oldControl);

        newControl.style.opacity = 1;
        newControl.style.filter = "";

        if (doctitle)
            if (doctitle.length > 0)
            document.title = doctitle;

        changeLinks();

        //trigger jQuery ready event
        try {
            $(document).trigger("ready");
        } catch (e) {
        }

        if (finalDelegate)
            finalDelegate();

        switching = false;
    }
}

function checkRedirect() {
    var redir = String(document.location.hash);

    if (redir.substr(0, 2) == '#!')
        document.location = redir.substr(2, redir.length - 2);
}

function getElementByClassName(className) { //limited to divs for performance
    var divs = document.getElementsByTagName('DIV');

    for (var i = 0; i < divs.length; i++) {
        var dvClassName = String(divs[i].className);
        if (dvClassName == className)
            return divs[i];
        if (dvClassName.indexOf(' ' + className) >= 0)
            return divs[i];
        if (dvClassName.indexOf(className + ' ') >= 0)
            return divs[i];
    }
}

/* Scroll to anchor */
function scrollToAnchor(anchor) {
    var aname = String(anchor).toLowerCase();
    var anchors = document.getElementsByTagName('A');
    var ctlAnchor = null;

    for (var i = 0; i < anchors.length; i++) {
        if (String(anchors[i].name).toLowerCase() == aname) {
            ctlAnchor = anchors[i];
            break;
        }
    }
    if (ctlAnchor) {
        findScrollingContainer(ctlAnchor);
    }
}

function findScrollingContainer(ctlAnchor) {
    var tmpNode = ctlAnchor.parentNode;

    if (tmpNode) {
        while (tmpNode.parentNode) {
            if (isScrolling(tmpNode)) {
                doScrollIntoView(tmpNode, ctlAnchor);
                break;
            }
            tmpNode = tmpNode.parentNode;
        }
    }
}

function isScrolling(objContainer) {
    var cst = objContainer.scrollTop;
    var scrolling;
    
    objContainer.scrollTop = 0;
    objContainer.scrollTop++;

    scrolling = objContainer.scrollTop != 0;
    
    
    objContainer.scrollTop = cst;

    return scrolling;
}

function doScrollIntoView(scrollingObject, anchor) {
    var containerPosition = scrollingObject.style.position;
    var top;

    // Making sure that this object will be registered as the proper offsetParent
    scrollingObject.style.position = 'relative';
    top = GetNonZeroOffset(anchor, scrollingObject);

    //And resetting it to whatever it was.
    scrollingObject.style.position = containerPosition;

    try { //Try and see if I can scroll the jScrollpane to show the anchor
        $('.flexcroll')[0].scrollTo(top);
    } catch (e) {
        scrollingObject.scrollTop = top;
    }
}

function GetNonZeroOffset(ctl, scrollingParent) {
    //I need this silly function because webKit
    //won't return a proper offsetTop value for my anchor.

    if (false && (ctl.offsetTop > 0)) { //debug set FF
        return ctl.offsetTop;
    } else {
        //Crazy stuff: block display would go to a new line
        //This works now, but once webkit start working properly
        //I'm absolutely ditching this code
        ctl.style.display = 'inline-block';
        ctl.style.verticalAlign = 'top';
        ctl.style.width = '20px';
        ctl.style.height = '20px';
        ctl.style.float = 'left';
        var tmpOffset = ctl.offsetTop;
        ctl.style.display = 'none';

        return tmpOffset;
    }
}

/* Verify links */

function changeLinks() {
    var aTags = document.getElementsByTagName("a");

    for (var i = 0; i < aTags.length; i++) {
        var linkje = getFullLink(aTags[i].href);
        var pad = document.location.pathname;

        if (dynamifyLink(linkje)) {
            if (!aTags[i].onclick) {
                aTags[i].onclick = function() {
                    return GoToPage(getFullLink(this.href));
                };
            }
        }
    }
}

function dynamifyLink(link) {
    if (link.length == 0) return false;
    if (link.substring(0, 11) == "javascript:") return false;
    if (link.substring(0, 8) == "https://") return false;
    if (link.substring(0, 7) == "http://") return false;
    if (link.substring(0, 6) == "ftp://") return false;
    //problem: Russell website only uses anchors in jvscript scrollable areas
    //go and dynamify them anyway, solves problem of scrolling main area
    //if (link.substring(0, 1) == "#") return false;

    return true;
}

function getFullLink(currentLink) {
    var href = String(currentLink.toLowerCase());
    var slIdx = href.lastIndexOf('/');
    var hsIdx = href.lastIndexOf('#');
    var currentPage = getCurrentPageName();

    if ((hsIdx >= 0) && (href.lastIndexOf(currentPage) >= 0)) {
        return currentLink.substr(hsIdx);
    } else {
        var currentDomain = document.location.hostname + (document.location.port != 80 ? (document.location.port != '' ? ':' + document.location.port : '') : '');
        var stripped = href.replace(new RegExp('http:\\/\\/' + currentDomain, 'i'), '');
        if (hsIdx == (currentLink.length - 1))
            stripped = stripped.substr(0, stripped.length - 1);

        return stripped;
    }
}

function getCurrentPageName() {
    var urlParts = String(document.location).split(/\//g);
    var fullPage = String(urlParts.pop());
    return fullPage.split(/#/g).shift();
}

/* Ugly Dreamweaver functions - Raaah! */

function MM_swapImgRestore() { //v3.0
    var i, x, a = document.MM_sr; for (i = 0; a && i < a.length && (x = a[i]) && x.oSrc; i++) x.src = x.oSrc;
}
function MM_preloadImages() { //v3.0
    var d = document; if (d.images) {
        if (!d.MM_p) d.MM_p = new Array();
        var i, j = d.MM_p.length, a = MM_preloadImages.arguments; for (i = 0; i < a.length; i++)
            if (a[i].indexOf("#") != 0) { d.MM_p[j] = new Image; d.MM_p[j++].src = a[i]; }
    }
}

function MM_findObj(n, d) { //v4.01
    var p, i, x; if (!d) d = document; if ((p = n.indexOf("?")) > 0 && parent.frames.length) {
        d = parent.frames[n.substring(p + 1)].document; n = n.substring(0, p);
    }
    if (!(x = d[n]) && d.all) x = d.all[n]; for (i = 0; !x && i < d.forms.length; i++) x = d.forms[i][n];
    for (i = 0; !x && d.layers && i < d.layers.length; i++) x = MM_findObj(n, d.layers[i].document);
    if (!x && d.getElementById) x = d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
    var i, j = 0, x, a = MM_swapImage.arguments; document.MM_sr = new Array; for (i = 0; i < (a.length - 2); i += 3)
        if ((x = MM_findObj(a[i])) != null) { document.MM_sr[j++] = x; if (!x.oSrc) x.oSrc = x.src; x.src = a[i + 2]; }
}

function MM_showHideLayers() { //v9.0
    var i, p, v, obj, args = MM_showHideLayers.arguments;
    for (i = 0; i < (args.length - 2); i += 3)
        with (document) if (getElementById && ((obj = getElementById(args[i])) != null)) {
        v = args[i + 2];
        if (obj.style) { obj = obj.style; v = (v == 'show') ? 'visible' : (v == 'hide') ? 'hidden' : v; }
        obj.visibility = v;
    }
}

var prvId = "";
var prvCtl = null;

function ShowDiv(divId) {
    if (prvId != "") {
        document.getElementById(prvId).style.display = "none";
    }
    document.getElementById(divId).style.display = "block";
    prvId = divId;
}

function ChangeProductImg(ctl, img) {
    if (prvCtl) {
        prvCtl.className = '';
    }
    document.getElementById("ProductImg").src = "../images/medium/" + img;
    ctl.className = 'selected';
    prvCtl = ctl;
}

/* Little shoplocator function */

function GoShopLocator(page) {
    var ddlLand;
    var selects = document.getElementsByTagName('select');
    var i;

    for (i = 0; i < selects.length; i++)
        if (String(selects[i].name).indexOf('Country') >= 0)
        ddlLand = selects[i];

    if (ddlLand)
        GoToPage(page + "?land=" + ddlLand.value);
}

/* 
Javascript history
Just a wrapper around an array, nothing as complicated as an actual cache or anything.
*/

function History() {
    var arrPages = new Array();

    this.RegisterPage = function(url) {
        if (arrPages[arrPages.length - 1] != url) // Also keeps going History.Back() from being added.
            arrPages.push(url);
    }

    this.Back = function() {
        if (arrPages.length > 1) {
            arrPages.pop();
            var url = arrPages[arrPages.length - 1];

            GoToPage(url, directSwitch);
        } else {
            history.go(-1);
        }
    }

    this.GetCurrent = function() {
        if (arrPages.length > 0) {
            return arrPages[arrPages.length - 1];
        }
        return false;
    }
}

function submitForm(berichtid, actionpage, successmethod, errormethod) {
    if (document.getElementById(berichtid).value == "") {
        alert('Please fill out all formfields!');
        return false;
    } else {
        var message = getFormData();
        var req = getXmlHttp();

        if (req) {
            req.open("POST", actionpage, true);
            req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            req.setRequestHeader('charset', 'latin1');
            req.onreadystatechange = function() {
                if (req.readyState == 4) {
                    if (req.status == 200) {
                        successmethod();
                    }
                    else {
                        errormethod();
                    }
                }
            }

            try {
                req.send(message);
            }
            catch (e) {
                errormethod();
            }
       
        } else {
            return "Could not create any XMLHTTP object";
        }
    } 
}

function getFormData() {
    var inputs = document.getElementsByTagName("input");
    var selects = document.getElementsByTagName("select");
    var textareas = document.getElementsByTagName("textarea");

    var values = new Object();
    var buffer = new Array();
    var i;

    //radio    
    //checkbox
    //image
    //submit
    //other (text, ...)
    for (i = 0; i < inputs.length; i++) {
        if (inputs[i].checked || (inputs[i].type.toLowerCase() != "radio" && inputs[i].type.toLowerCase() != "check" && inputs[i].type.toLowerCase() != "image" && inputs[i].type.toLowerCase() != "submit" && inputs[i].name != "__VIEWSTATE")) {
            var name = inputs[i].name;
            if (values[name]) {
                values[name] += "," + escape(inputs[i].value);
            }
            else {
                values[name] = escape(inputs[i].value);
            }
        }
    }
    
    for (i = 0; i < selects.length; i++) {
        var name = selects[i].name;
        if (values[name]) {
            values[name] += "," + escape(selects[i].value);
        }
        else {
            values[name] = escape(selects[i].value);
        }
    }

    for (i = 0; i < textareas.length; i++) {
        var name = textareas[i].name;
        if (values[name]) {
            values[name] += "," + escape(textareas[i].value);
        }
        else {
            values[name] = escape(textareas[i].value);
        }
    }

    for (var naam in values) {
        buffer.push(naam + "=" + values[naam]);
    }

    return buffer.join("&");
}

getContactSuccess = function(url) {
    return function() {
        GoToPage(url);
    }
}

function contactSuccess() {
    GoToPage("/Pages/success.aspx");
}

function contactError() {
    alert("Er heeft zich een fout voorgedaan bij het verzenden van uw gegevens!");
}

/* Image preloader */

doPreLoad = function(images, index) {
    return function() {
        var img = new Image();
        var i = index;

        if (i < images.length) {
            img.src = images[i];
            
            if (img.complete) {
                i++;
                window.setTimeout(doPreLoad(images, i), 150);
            } else {
                i++;
                img.onload = function() {
                    window.setTimeout(doPreLoad(images, i), 150);
                };

                img.onerror = function() {
                    window.setTimeout(doPreLoad(images, i), 150);
                };
            }
        }
    }
}

function preLoadImages(images) {
    var loadFunction = doPreLoad(images, 0);

    loadFunction();
}

function googlePageTrack(pagina) {
    _gaq = _gaq || [];

    _gaq.push(['_setAccount', 'UA-17948961-1']);

    if (pagina) {
        _gaq.push(['_trackPageview', pagina]);
    } else {
        _gaq.push(['_trackPageview']);
    }
}

/* Lightbox effect */

function showOverlay() {
    var overlay = document.getElementById('lightboxOverlay');

    overlay.style.display = '';
}

function hideLightbox() {
    var overlay = document.getElementById('lightboxOverlay');
    var iframe = document.getElementById('lightboxFrame');

    overlay.style.display = 'none';
    iframe.style.display = 'none';
}

function showIframe() {
    var iframe = document.getElementById('lightboxFrame');

    iframe.style.display = '';
}

function showPageIframe(url) {
    var iframe = document.getElementById('lightboxIframe');

    iframe.src = url;

    showOverlay();
    showIframe();
}

