﻿//ver 6.2 (contains new boolean functions for clarity and jquery hasAttribute) + console logging
// added getLinkerUrl and trackPageView wrappers w/ try-catch + 

//mh jquery implementation of formerly itHappened() function    
function stripUrl(inStrip) {
    try {
        inStrip = inStrip.replace(/http:/gi, '');
        inStrip = inStrip.replace(/https:/gi, '');
        inStrip = inStrip.replace(/www./gi, '');
        inStrip = inStrip.replace(/&/gi, '_');
        inStrip = inStrip.replace(/#/gi, ''); //remove hashes
        inStrip = inStrip.replace(/\/\//gi, ''); //remove slashes
        return inStrip;
    } catch (Error) {
        logMe('stripUrl err');
        return "";
    }
}

function contains(haystack, needle) {
    return haystack.indexOf(needle) > -1;
}

function doesNotContains(haystack, needle) {
    return haystack.indexOf(needle) == -1;
}

function isJsLink(url) {
    return contains(url, 'javascript:');
}

function isMailToLink(url) {
    return contains(url, 'mailto:');
}

//multiple booking domain version - supports a comma delimited string in the #Booking_Domain_Input
function isBookingDomainLink(hostname) {
    hostname = stripUrl(hostname);
    logMe("isBookingDomainLink, hostname stripped: " + hostname);
    return contains(jQuery('#Booking_Domain_Input').val(), hostname);
} 

function isInternalRelativeLink(url) {
    return doesNotContains(url, ':');
}

function isExternalLinkButNotBookingDomain(url) {
    url = stripUrl(url);
    return (doesNotContains(url, location.hostname) && (!isBookingDomainLink(url)));
}

function isSameHostname(hostname) {
    return hostname == location.hostname;
}

//this shows in firebug or ies console if active
function logMe(str) {
    if (window.console && window.console.log) {
        window.console.log(str);
    }
}

//mh wrapping 
function trackPageview(page) {
    try {
        pageTracker._trackPageview(page);
    } catch (Error) {
        _gaq.push(['_trackPageview', page]);

        logMe('gaq.push _trackPageview');
    }
}

function getLinkerUrl(url) {
    try {
        //synchronous version
        return pageTracker._getLinkerUrl(url);
    } catch (Error) {
        try {
            //asynch version
            var tracker = _gaq._getAsyncTracker();
            logMe(tracker._getLinkerUrl(url));
            return tracker._getLinkerUrl(url);
        } catch (newGoogleError) {
            //in case google fails entirely - just return the url so it doesnt fail as undefined
            return url;
        }
    }
}


jQuery(document).ready(function() {

    jQuery('a[href], area[href]').click(function() {
        var url = jQuery(this).attr('href');
        var hostname = jQuery(this).attr('hostname');

        logMe('current hostname: ' + location.hostname + ' -> destination hostname: ' + hostname);

        if (isSameHostname(hostname)) {
            logMe('isSameHostname');
            return true;
        }
        
        if (isJsLink(url)) {
            logMe('isJsLink');
            return true;
        }

        if (isMailToLink(url)) {
            trackPageview('/mailto/' + stripUrl(url));
            logMe('isMailToLink');
            return true;
        }

        if (isBookingDomainLink(hostname)) {

            trackPageview('/outgoing/check-availability');

            //for reservation links that open in pop-up windows, can put params in rel attribute                
            if (jQuery(this).hasClass("popup")) {
                var popup_params = 'resizable,scrollbars,width=1020,height=600,top=800,left=800';
                //pull popup parameters from forms' rel attribute
                if (jQuery(this).attr('rel') != undefined) {
                    popup_params = jQuery(this).attr('rel');
                }
                window.open(getLinkerUrl(url), '', popup_params);
                return false;
            }

            //sets getLinkerUrl href here
            jQuery(this).attr('href', getLinkerUrl(url));
            logMe('isBookingDomainLink');
            return true;
        }

        if (isInternalRelativeLink(url)) {
            logMe('isInternalRelativeLink');
            return true;
        }

        //if the hostname is not in the href url (external links)
        if (isExternalLinkButNotBookingDomain(url)) {
            logMe('isExternalLinkButNotBookingDomain');
            //Regular External Links are no longer tagged as outgoing
            // trackPageview('/outgoing/' + stripUrl(url));
            return true;
        }

        logMe('is Returning true by default - absolute internal links');
        return true;

    });
});
//end ready
