﻿function openWindow(obj, w, h, s, r) {
    var href;
    if (obj && obj.href) {
        href = obj.href;
    } else if (obj) {
        href = obj.toString();
    } else {
        return;
    }
    var q = window.open(href, '_blank', 'width=' + w + ',height=' + h + ',scrollbars=' + (s ? 'yes' : 'no') + ',resizable=' + (r ? 'yes' : 'no'));
    q.focus();
}
//We don't use target=_blank, instead we assign a class of external and wire up a handler
//Ideally this should read a cookie to determine if the user wants to allow external windows
function wireExternal() {
    if (!document.getElementsByTagName) return;
    var links = document.getElementsByTagName('a');
    for (var i = 0; i < links.length; i++) {
        if (links[i].className && links[i].className.indexOf('external') >= 0) {
            links[i].target = '_blank';
        }
    }
}

function makeAllLinksAbsolute() {
    if (!document.getElementsByTagName) return;
    var Anchors = document.getElementsByTagName('a');
    if (!Anchors || Anchors.length == 0) return;
    for (var i = 0; i < Anchors.length; i++) {
        if ((Anchors[i].className && Anchors[i].className.indexOf('noabs') >= 0) || (Anchors[i].href && Anchors[i].href == '#')) {

        } else {
            Anchors[i].href = relLinkToAbs(Anchors[i].href, document.location.href);
            //alert(Anchors[i].href);
        }
    }
}

//http://www.phpied.com/relative-to-absolute-links-with-javascript/
function relLinkToAbs(link, host) {
    var lparts = link.split('/');
    if (/mailto:|http:|https:|ftp:|#/.test(lparts[0])) {
        // already abs, return
        return link;
    }

    var i, hparts = host.split('/');
    if (hparts.length > 3) {
        hparts.pop(); // strip trailing thingie, either scriptname or blank 
    }

    if (lparts[0] === '') { // like "/here/dude.png"
        host = hparts[0] + '//' + hparts[2];
        hparts = host.split('/'); // re-split host parts from scheme and domain only
        delete lparts[0];
    }

    for (i = 0; i < lparts.length; i++) {
        if (lparts[i] === '..') {
            // remove the previous dir level, if exists
            if (typeof lparts[i - 1] !== 'undefined') {
                delete lparts[i - 1];
            } else if (hparts.length > 3) { // at least leave scheme and domain
                hparts.pop(); // stip one dir off the host for each /../
            }
            delete lparts[i];
        }
        if (lparts[i] === '.') {
            delete lparts[i];
        }
    }

    // remove deleted
    var newlinkparts = [];
    for (i = 0; i < lparts.length; i++) {
        if (typeof lparts[i] !== 'undefined') {
            newlinkparts[newlinkparts.length] = lparts[i];
        }
    }

    return hparts.join('/') + '/' + newlinkparts.join('/');
}

//Called on window load
function loadFunctions() {
    wireExternal();
    makeAllLinksAbsolute();
}
window.onload = loadFunctions;
