﻿jQuery(document).ready(function() {
    jQuery.expr[':'].externallink = function(obj) {
        if (bEmailMsg == true) {
            return obj.href.match(/^mailto\:/) || !IsApprovedURL(obj.href);
        }
        else {
            return !IsApprovedURL(obj.href);
        }
    };
    
    jQuery('a:externallink').addClass('externallink');
    
    jQuery('.externallink').click(function() {
        var strLink = jQuery(this).attr('href');
        var strTarget = jQuery(this).attr('target');
        jQuery(this).ShowExtLinkDialog(strLink, strTarget, externalLinksConfig);
        return false;
    });

    jQuery.fn.ShowExtLinkDialog = function(strLink, strTarget, options) { 
        // setup default options
        var config = {
            linkMsg: '',
            emailMsg: '',
            customMsgs: [],
            bShowLink: false,
            bFormatLink: true,
            bModal: true,
            title: 'Leave this website?',
            width: 400,
            height: '\'auto\'',
            okText: 'Ok',
            bShowCancel: true,
            cancelText: 'Cancel',
            bCloseOnEsc: true,
            bShowTitleBarX: false
        };

        var options = jQuery.extend(config, options);
        
        if ((strTarget == '') || (strTarget == undefined)) {
            strTarget = '_self';
        }

        var isMailto = (strLink.match(/^mailto\:/)) ? true : false;
        var dialogMsg = (isMailto == true) ? config.emailMsg : config.linkMsg;

        // get custom message for link
        if (config.customMsgs != '') {
            for (var i = 0; i < config.customMsgs.length; i++) {
                if (strLink.toString().indexOf(config.customMsgs[i][0]) != -1) {
                    dialogMsg = config.customMsgs[i][1];
                }
            }
        }    
        
        // format message
        var displayedLink = '';
        if (config.bShowLink == true) {
            displayedLink = strLink;
            
            if (isMailto == true) {
                // remove "mailto:"
                displayedLink = displayedLink.replace(/mailto:/, '');
            }
            else {
                // remove "ftp://", "http://", "https://", etc
                displayedLink = displayedLink.replace(/(\w)*:(\/){2}/, '')
            }
            
            // strip path, querystring and anything else off the end
            if (config.bFormatLink == true) {
                displayedLink = StripUrlEnd(displayedLink, /(\?|\/|\#)/);
            }
        }
        
        dialogMsg = dialogMsg.replace(/\[link\]/, displayedLink);
        
        // set up buttons
        var dialogButtons = {};
        dialogButtons[config.okText] = function() {
            jQuery(this).dialog('close').remove();
            if (isMailto == true) {
                location.href = strLink;
            }
            else {
                window.open(strLink, strTarget);
            }
        };
        if (config.bShowCancel == true) {
            dialogButtons[config.cancelText] = function() {
                jQuery(this).dialog('close').remove();
                return false;
            };
        }
        
        jQuery(dialogMsg).dialog({
            modal: config.bModal,
            autoOpen: true,
            closeOnEscape: config.bCloseOnEsc,
            title: config.title,
            width: config.width,
            height: config.height,
            buttons: dialogButtons
        });
        
        // hide the 'x' in the right corner. it bypasses the button functionality
        if (config.bShowTitleBarX == false) {
            jQuery('.ui-dialog-titlebar-close').remove();
        }
    };    
});

function OpenExternalLink(strURL, strTarget) {
    if (IsApprovedURL(strURL)) {
        window.open(strURL, strTarget);
        return false;
    }
    else {
        jQuery(this).ShowExtLinkDialog(strURL, strTarget, externalLinksConfig);
        return false;
    }
}

function JumpMenu(targ, selObj, restore) {
	var strURL = selObj.options[selObj.selectedIndex].value;

    OpenExternalLink(strURL, targ);
	
	if (restore) {
		selObj.selectedIndex = 0;
	}
}

// for backwards compatibility
function MM_jumpMenu(targ, selObj, restore) {
    JumpMenu(targ, selObj, restore);
}

function IsApprovedURL(strURL) {
    strURL = strURL.toLowerCase();
    if (strURL.indexOf('http:') > -1 || strURL.indexOf('https:') > -1) {
        if (IsInDomainList(approvedDomains, strURL)) {
	        return true;
        }
    }
    else {
        return true;
    }
    return false;
};

function IsInDomainList(strDomainList, strURL) {
    if (strDomainList != '') {
        var arrDomainList = strDomainList.toLowerCase().split(';');
        for (var i = 0; i < arrDomainList.length; i++) {
	        if (strURL.indexOf(arrDomainList[i]) != -1) {
		        return true;
	        }
        }
    }
    return false;
}

function StripUrlEnd(strUrl, re) {
    var index = strUrl.search(re);
    if (index >= 0) {
        return strUrl.substring(0, index);
    }
    return strUrl;
}

