
var DisclaimerPopup = new Class(
{
    initialize: function()
    {
        DisclaimerPopup.Counter = DisclaimerPopup.Counter || 0;
        this.id = DisclaimerPopup.Counter++;
        this.queue = [ ];
       
        var me = this;
        Window.onDomReady(function()
        {
            me.container = me.addMarkup();
            me.showFromQueue();
        });
    },
    
    addMarkup: function()
    {
        this.container = $(document.createElement("div"));
        this.container.innerHTML = this.markup.replace(/#{ID}/g, this.id);
        document.body.appendChild(this.container);
        $("modal_mask" + this.id).setOpacity(0.6);
        $("modal_mask" + this.id).style.display = "none";
        this.reposition();
        window.addEvent("resize", this.reposition.bind(this));
    },
    
    hide: function()
	{
		$("modal_mask" + this.id).style.display = "none";
		$("disclaimer_popup" + this.id).style.visibility = "hidden";
		$("disclaimer_content" + this.id).style.visibility = "hidden";
		$("disclaimer_frame" + this.id).src = "";
		$("disclaimer_cancel" + this.id).onclick = function() { };
		$("disclaimer_accept" + this.id).onclick = function() { };
        this.showFromQueue();
	},
    
    showFromQueue: function()
    {
        if(this.queue && this.queue.length > 0)
        {
            var options = this.queue.shift();
            this.show(options);
        }
    },
    
    showOnLoad: function(options)
    {
        this.queue.push(options);
    },
    
    show: function(options)
	{
		options.onAccept = options.onAccept || function() { };
		options.onCancel = options.onCancel || function() { };
		
		var me = this;
		$("disclaimer_frame" + this.id).src = options.url
		$("disclaimer_cancel" + this.id).onclick = function()
		{
			me.hide();
			options.onCancel();
		};
		
		$("disclaimer_accept" + this.id).onclick = function()
		{
			me.hide();
			options.onAccept();
		};
		
        if(options.className)
        {
            $("disclaimer_popup" + this.id).className += (" " + options.className);
        }
        
		$("disclaimer_popup" + this.id).style.visibility = "visible";
		$("disclaimer_content" + this.id).style.visibility = "visible";
		if(options.modal) { $("modal_mask" + this.id).style.display = "block"; }
	},
    
    reposition: function()
	{
		// reposition popup
		var popup = $("disclaimer_popup" + this.id);
		popup.style.left = Math.max(10, document.documentElement.scrollLeft + 
			(this.getViewportWidth() / 2) - (popup.offsetWidth / 2)) + "px";
		popup.style.top = Math.max(10, document.documentElement.scrollTop + 
			(this.getViewportHeight() / 2) - (popup.offsetHeight / 2)) + "px";
			
		// reposition modal mask
		var mask = $("modal_mask" + this.id);
		mask.style.width = Math.max(this.getViewportWidth(), document.body.scrollWidth) + "px";
		mask.style.height = Math.max(this.getViewportHeight(), document.body.scrollHeight) + "px";
	},
    
    getViewportHeight: function()
	{
		if(window.innerHeight!=window.undefined) return window.innerHeight;
		if(document.compatMode=='CSS1Compat') return document.documentElement.clientHeight;
		if(document.body) return document.body.clientHeight; 
		return window.undefined; 
	},

	getViewportWidth: function() 
	{
		if(window.innerWidth!=window.undefined) return window.innerWidth; 
		if(document.compatMode=='CSS1Compat') return document.documentElement.clientWidth; 
		if(document.body) return document.body.clientWidth; 
		return window.undefined; 
	},
    
    markup: 
	'<div id="modal_mask#{ID}" class="modal_mask"></div>' +
	'<div id="disclaimer_popup#{ID}" class="disclaimer_popup">' + 
		'<div id="disclaimer_content#{ID}" class="disclaimer_content">' +
			'<iframe id="disclaimer_frame#{ID}" class="disclaimer_frame" frameborder="0" src="" ' +
				'style="border:none;"></iframe>' +
			'<div class="buttons">' +
				'<a id="disclaimer_accept#{ID}" class="disclaimer_accept" href="#"></a>' +
				'<a id="disclaimer_cancel#{ID}" class="disclaimer_cancel" href="#"></a>' +
			'</div>' +
		'</div>' +
	'</div>'
});


/* ------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------- */


var SiteDisclaimer = new Class(
{
    initialize: function()
	{
		var me = this;
		window.onDomReady(function()
		{
			var links = $$("a");
			for(var i=0;i<links.length;i++) 
			{
				if(links[i].hasClass("remote"))
				{
					links[i].onclick = me.remote.bind(me).pass(links[i]);
				}
				else if(links[i].hasClass("switch"))
				{
					links[i].onclick = me.switchRegion.bind(me).pass(links[i]);
				}
			}
		});
	},
    
    require: function(region)
	{
		if(Cookie.get("LMI_" + region + "_SITE_DISCLAIMER"))
		{
			return;
		}
		
        var language = Cookie.get("LMI_LANG") || false;
        var userType = Cookie.get("LMI_USERTYPE") || null;
//        var disclaimerURL = (window.base_url ? window.base_url : "/") +
//			(language ? (language + "/") : "") + 
//            "disclaimer/" + 
//            (userType ? userType.replace(/\s/g, "_").toLowerCase() + ".aspx" : "");
			
		var disclaimerURL = (window.base_url ? window.base_url : "/") +
			(language ? (language + "/") : "") + 
            "disclaimer/index.aspx" ;
            
        Disclaimer.showOnLoad(
		{ 
			modal: true,
			url: disclaimerURL, 
			onCancel: function() { window.location = base_url + "about.aspx"; },
			onAccept: function()
			{
				Cookie.set("LMI_" + region + "_SITE_DISCLAIMER", "yes", 
					{ path: "/", duration: false });
			}
		});
	},
    
    switchRegion: function(link)
	{
		var href = link.getAttribute("href");
		Disclaimer.show(
        { 
            modal: true, 
            url: "/leaving.aspx", 
            className: "proceed", 
            onAccept: function() { window.location = href; }
        });
		
		return false;
	},
    
    remote: function(link)
	{
		var info = link.getAttribute("rel").split("\\");
		var redirect = link.getAttribute("rev");
		var persistent = link.hasClass("persist");
		var destination = link.getAttribute("href");
		var region = info[0];
		var language = (info.length > 2) ? info[1] : null;
		var userType = (info.length > 2) ? info[2] : 
            (info.length > 1 ? info[1] : null);
		var localhost = window.location.toString().match(/^([A-Z]+:\/\/[^\/]+)/i);
        var host = link.href.match(/^([A-Z]+:\/\/[^\/]+)/i);
        var receiverURL = (host ? host[1] : "") + "/index.aspx?" +
            (userType ? ("userType=" + encodeURIComponent(userType) + "&") : "") +
			(redirect ? ("url=" + encodeURIComponent(redirect) + "&") : "") +
			(language ? ("language=" + language + "&") : "") +
			"disclaimer=true";			
		var disclaimerURL = (host ? host[1] : "") +
			(language ? ("/" + language) : "") +
			"/disclaimer/" +
            (userType ? (userType.replace(/\s/g, "_").toLowerCase() + ".aspx") : "");	
		
		// show popup
		var showDisclaimer = function()
		{
			Disclaimer.show({ modal: true, url: disclaimerURL, onAccept: function()
			{
			    if(persistent)
			    {
				    Cookie.set("LMI_REGION", region, { path: "/", duration: 9999 }); 
				    Cookie.set("LMI_" + region + "_SITE_DISCLAIMER", "yes", { path: "/", duration: false });
				    if(language) { Cookie.set("LMI_LANG", language, { path: "/", duration: 9999 }); }
				    if(userType) { Cookie.set("LMI_USERTYPE", userType, { path: "/", duration: 9999 }); }
				}
			
				window.location = receiverURL;
			}});
		};
		
		if(!localhost || !host || localhost[1] == host[1])
		{
			showDisclaimer();
		}
		else
		{
			Disclaimer.show({ modal: true, url: "/leaving.aspx", className: "proceed", onAccept: function()
			{
				showDisclaimer();
			}});
		}
		
		return false;
	},
    
    acceptTerms: function(url)
    {
         Cookie.set("LMI_SITE_DISCLAIMER", "yes", { path: "/", duration: false });
         if(url)
         {
            window.location = url;
         }
         else
         {
            window.location = "/";
         }  
         
         return false;
    }
});


/* ------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------- */


var Disclaimer = new DisclaimerPopup();
var SiteDisclaimer = new SiteDisclaimer();
