var skynetSetHomepage = function() {
    var homepageToSet = 'http://' + location.hostname + '/';
    var cookieName = 'skynethpset';
    var cookieValue = '';
    var cookieCreationDate = '';
    var cookieLifeTimeInSeconds = 31536000;
    var timeToShowNextSetHomePageRequestInSeconds = 2592000;
    var cookieDomain = '.skynet.be';
    var cookieNoAction = 'NoAction';
    var cookieHomepageAccepted = 'HomePageSet';
    var cookieHomepageNotAccepted = 'HomePageNotSet';
    var cookieFromSplashPage = 'FromSplashPage';
    var userAgent = null;
    var userAgentVersion = null;
    var userAgentsActivatedList = ['msie'];
    var userInteractionsBoxId = null;
    var overlayId = 'setAsHomePageRequest';
    var bottomoverlayId = 'setAsHomePageRequestBottom';
    var referringPage = document.referrer;
    var referringDomain = null;
    var referringDomainActivatedList = [['google','q']];
    var referringQueryKeywords = ['skynet'];

    var init = function() {
        getUserAgent();
        getUserAgentVersion();
        checkCookieExistOrSetCookie();

        //referringPage = "http://www.google.be/search?q=skynet.be&ie=skynet&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a";
        detectReferringDomain();

        if(!isHomePage(homepageToSet)) {
            if(cookieValue === cookieFromSplashPage) {
                userInteractionsBoxId = overlayId;
                doAjaxAndDisplayOverlay();
            }

            else if(cookieValue == cookieNoAction || cookieValue == cookieHomepageAccepted) {
                if(isReferrerActivatedForCampaign())
                {
                    userInteractionsBoxId = overlayId;
                    doAjaxAndDisplayOverlay();
                }
            }

            else if(cookieValue === cookieHomepageNotAccepted) {
                if($j('#contestRequestBottom').length == 0) {
	            	if(calculateDifferenceBetweenCurrentTimeAndCookieCreationTimeInSeconds() > timeToShowNextSetHomePageRequestInSeconds)
	                {
	                    userInteractionsBoxId = bottomoverlayId;
	                    doAjaxAndDisplayBottom();
	                }
                }
            }

        }
    };

    var doAjaxAndDisplayBottom = function() {
        $j.get('/ajax/sethomepagerequestbottom', {}, setupbottomcontentFromAjaxResult);
    };

    var setupbottomcontentFromAjaxResult = function(result) {
        if(result !== '') {
            $j('body').append(result);
            setupUserActionsBottom();
        }
    };


    var getUserAgent = function() {
        for(var i in $j.browser){
            if(i != 'version' && (typeof $j.browser[i] == 'boolean')) {
                if($j.browser[i] === true) {
                    userAgent = i;
                    break;
                }
            }
        }
    };

    var getUserAgentVersion = function() {
        userAgentVersion = $j.browser.version;
    };




    var checkCookieExistOrSetCookie = function() {
        if(!checkIfCookieExist()) {
            setCookieNoUserAction();
        }
    };

    var checkIfCookieExist = function() {
        var cookieValueRaw = getCookie();
        if(cookieValueRaw === '') {
            return false;
        } else {
            explodeCookieValueRaw(cookieValueRaw);
            return true;
        }
    };

    var explodeCookieValueRaw = function(rawValue) {
        var cookieExploded = rawValue.split(';');
        cookieValue = cookieExploded[0];
        cookieCreationDate = cookieExploded[1];
    };

    var setCookieHomepageAccepted = function() {
        setCookie(cookieHomepageAccepted);
    };

    var setCookieHomepageNotAccepted = function() {
        setCookie(cookieHomepageNotAccepted);
    };

    var setCookieNoUserAction = function() {
        setCookie(cookieNoAction);
    };

    var setCookie = function(val) {
        cookieValue = val;
        cookieCreationDate = getCurrentEpochTime();
        $j.cookie(cookieName, cookieValue+';'+cookieCreationDate, cookieLifeTimeInSeconds, '/', cookieDomain);
    };

    var getCookie = function() {
        return $j.cookie(cookieName);
    };


    var getCurrentEpochTime = function() {
        date = new Date();
        epoch = date.getTime();
        return epoch;
    };

    var calculateDifferenceBetweenCurrentTimeAndCookieCreationTimeInSeconds = function() {
        return Math.floor((getCurrentEpochTime() - cookieCreationDate)/1000);
    };

    var isBrowserActivatedForCampaign = function() {
        for(var i=userAgentsActivatedList.length -1; i >= 0; i--) {
            if(userAgent == userAgentsActivatedList[i]) {
                return true;
            }
        }
        return false;
    };

    var isBrowserVersionActivatedForCampaign = function() {
        if(userAgent === 'msie' && userAgentVersion < 7) {
            return false;
        }
        return true;
    };




    var doAjaxAndDisplayOverlay = function() {
        $j.get('/ajax/sethomepagerequest', {}, setupOverlaycontentFromAjaxResult);
    };

    var setupOverlaycontentFromAjaxResult = function(result) {
        if(result !== '') {
            $j('body').append(result);
            displayOverlay();
            setupUserActionsTop();
        }
    };

    var displayOverlay = function() {
        $j('#'+userInteractionsBoxId).dialog({
            resizable: false,
            height: 275,
            width: 400,
            bgiframe: true, // to fix the IE6 bug that shows select trough Overlays
            modal: true,
            overlay: { backgroundColor: '#000', opacity: 0.4 } ,
            open: function() {
                $j('.ui-resizable-handle').remove();
            }
        });
        $j('div.ui-dialog-titlebar').remove();
    };

    var setupUserActionsTop = function() {
        $j('#'+userInteractionsBoxId).find('.submitBtn').click(userActionAcceptTop);
        $j('#'+userInteractionsBoxId).find('.nonAsHPFr, .nonAsHPNl').click(userActionDenyTop);
        $j('#'+userInteractionsBoxId).find('.shpClose').click(userActionCloseTop);
    };

    var setupUserActionsBottom = function() {
        $j('#'+userInteractionsBoxId).find('.submitBtn').click(userActionAcceptBottom);
        $j('#'+userInteractionsBoxId).find('.shpClose').click(userActionDenyBottom);
    };

    var userActionAccept = function() {
        removeOverlay();
        setCookieHomepageAccepted();
        setHomePage();
        skynet_event('popmakethishompage', 'click', 'yes');
    };

    var userActionAcceptTop = function() {
        userActionAccept();
        skynet_event('popmakethishompage', 'click', 'yes');
    };

    var userActionAcceptBottom = function() {
        userActionAccept();
        skynet_event('bottommakethishompage', 'click', 'yes');
    };

    var userActionDeny = function() {
        removeOverlay();
        setCookieHomepageNotAccepted();
    };

    var userActionDenyTop = function() {
        userActionDeny();
        skynet_event('popmakethishompage', 'click', 'no');
    };

    var userActionDenyBottom = function() {
        userActionDeny();
        skynet_event('bottommakethishompage', 'click', 'no');
    };

    var userActionCloseTop = function() {
        userActionDeny();
        skynet_event('popmakethishompage', 'click', 'close');
    };

    var removeOverlay = function() {
        $j("#"+userInteractionsBoxId).dialog('destroy').remove();
    };

    var setHomePage = function() {
        if(userAgent == 'msie') {
            setHomePageForIE();
        } else {
            setHomePageForOtherThanIE();
        }
    };

    /**
    * Check if the url is the current browser homepage
    *
    * This function may return true only if the
    * document.documentElement.addBehavior is an existing function and
    * the url is on the page domain (this is a security feature)
    */
    var isHomePage = function(url) {
        if (document.documentElement.addBehavior != undefined) {
            document.documentElement.addBehavior('#default#homePage');
            return document.documentElement.isHomePage(url);
        }
        // we return true for other browsers because we don't have the good layout yet
        return true;
    }

    var setHomePageForIE = function() {
        document.body.style.behavior='url(#default#homepage)';
        document.body.setHomePage(homepageToSet);
    };

    var setHomePageForOtherThanIE = function() {
    };

    var detectReferringDomain = function() {
        if(referringPage !== null) {
            var regex = new RegExp('^http:\/\/(www)?[a-z0-9.-]+', 'i');
            var Domain = referringPage.match(regex);
            if(Domain !== null) {
                referringDomain = Domain[0];
            }
        }
    };

    var isReferrerActivatedForCampaign = function() {
        if(referringDomain !== null) {
            for (var i=referringDomainActivatedList.length -1; i >= 0; i--) {
                var domainSetup = referringDomainActivatedList[i];
                if(isAllowedReferrer(domainSetup[0]) && isAllowedReferrerQuery(domainSetup[1])) {
                    return true;
                }
            }
        } else {
            return true;
        }
        return false;
    };

    var isAllowedReferrer = function(domain) {
        var regex = new RegExp(domain, 'i');
        var domainIsAllowed = referringDomain.match(regex);
        if(domainIsAllowed !== null) {
            return true;
        }
        return false;
    };

    var isAllowedReferrerQuery = function(queryParam) {
        if(queryParam === undefined) {
            return true;
        } else {
            var regex = new RegExp(referringQueryKeywords.join('|'), 'i');
            var queryIsAllowed = getQueryParam(queryParam).match(regex);
            if(queryIsAllowed !== null) {
                return true;
            }
        }
        return false;
    };

    var getQueryParam = function(name) {
        nameEscaped = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
        var regexPattern = "[\\?&]"+nameEscaped+"=([^&#]*)";
        var regex = new RegExp( regexPattern );
        var results = regex.exec(referringPage);
        if( results == null ) {
            return "";
        } else {
            return results[1];
        }
    }

    init();
};

$j(document).ready(function() {
	var dateStart = Date.UTC(2009,9,28);
	var dateEnd = Date.UTC(2009,9,30);
	var dateToday = new Date();	
	if (window.showBottomOverlay == undefined && (dateToday.getTime() < dateStart || dateToday.getTime() > dateEnd)) {
		var skynetSetHomepageInstance = new skynetSetHomepage();
	}	
});
