
$.InfoMineUserCookie = {
	init: function(initData){
		if(initData)$.extend(this.data,initData); 
	},
	getCookie:	function(){
		var results = document.cookie.match ( '(^|;) ?' + this.data.cookieName + '=([^;]*)(;|$)' );
		return (results?decodeURIComponent( results[2] ):null);
	},
	getCookieValue: function( key ){
		var r = null;
		var cookie = this.getCookie();
		if(cookie){
			var results = cookie.match(new RegExp('(^|&)'+key+'=([^&]*)(&|$)','i'));
			r=(results?results[2]:null);
		}
		return r;
	},
	setCookieValue: function( key, value ){
		var r = false;
		var cookie = this.getCookie();
		if(cookie){
			var v = this.getCookieValue(key);
			if(v){
				cookie = cookie.replace((new RegExp('('+key+'\=)'+v,'i')), '$1'+encodeURIComponent(value));
				document.cookie = (this.data.cookieName + '=' + cookie + '; path=' + this.data.cookiePath + '; domain=' + this.data.cookieDomain);
			}else{
				document.cookie = (this.data.cookieName + '=' + cookie + '&' + key + '=' + encodeURIComponent(value) + '; path=' + this.data.cookiePath + '; domain=' + this.data.cookieDomain);
			}
			r = true;
		}
		return r;
	},
	deleteCookie: function(){
	  var cookieDate = new Date(); 
	  cookieDate.setFullYear(2000);
	  document.cookie = (this.data.cookieName + '=; expires=' + cookieDate.toGMTString() + '; path=' + this.data.cookiePath + '; domain=' + this.data.cookieDomain);
	  return true;
	},
	data:	{
				cookieName: 'InfomineSubscriptionUserInfo',
				cookiePath: '/',
				cookieDomain: '.infomine.com'
			}
};

$.InfoMineUserState={
    siteHost: window.location.host.toLowerCase(),
    sitePremiumHost: window.location.host.toLowerCase().indexOf('premium')==0?window.location.host.toLowerCase():'premium.'+window.location.host.toLowerCase().replace(/(www|local|technology)\./ig,''),
    sitePublicHost: window.location.host.toLowerCase().indexOf('premium')==0?window.location.host.toLowerCase().replace(/premium\.(?=infomine)/i,'www.').replace(/premium\./i,''):window.location.host.toLowerCase(),
    data: {
        isSignIn: (window.location.host.toLowerCase().indexOf('premium')==0),
        stateButtonID: 'signinbtn',
        signOutCheckDelayInterval: 100,
        reloadOnSignIn: false,
        onSignInCallback: null,
        onSignOutCallback: null,
        win: window
    },
    init: function (initData) {
        if(initData) $.extend(this.data,initData);
        this.hostMatch();
        this.setState(this.isUserSignIn());
        //this.data.win = ((this.data.isInFrame && window.parent!=window)?window.parent:window);
    },
    isOnPremium: function () { return (this.siteHost.indexOf('premium')==0); },
    onSignInStateChange: function (callback) {
        $.getJSON('http://'+this.sitePublicHost+'/signinstate.asp?jsoncallback=?',callback);
    },
    isUserSignIn: function () {
        var r=false;
        var hostname=$.InfoMineUserCookie.getCookieValue('HostName');
        r=(hostname!=null&&hostname.indexOf(this.sitePremiumHost)>=0);
        return r;
    },
    signIn: function () {
        var isSignIn=this.isUserSignIn();
        if(isSignIn==this.data.isSignIn) {
            if(isSignIn) {
                this.signOut();
            } else { this.backgroundSignIn(); }
        } else {
            this.setState(isSignIn);
            if(this.isOnPremium()&!isSignIn) this.signOutCheck();// page is in premium domain but user has sign out
        }
    },
    //This function is used in the signout.aspx only
    backgroundSignOut: function (uid) {
        //Keep the user name stays in the login popup in IE
        if(!$.browser.msie) uid=' ';
        $.ajax({
            url: 'http://'+this.sitePremiumHost+'/registrant/SignInState.ashx',
            async: true,
            dataType: 'jsonp',
            type: 'GET',
            username: uid,
            password: ' '
            //			error: function(req, textStatus, errorThrown){
            ////				this is the function it would call if sign out success
            ////				because the GET request would return 401 which is an error
            //			},
            //				success: function (data, textStatus){
            //					//when user still having access to a premium page, that means the logout is failed.
            //				}
        });
        if(!$.browser.opera) $.InfoMineUserCookie.deleteCookie();
    },
    signOut: function () {
        $('#signoutframe').remove();
        $('#'+this.data.stateButtonID+':eq(0)').parent().append('<iframe id="signoutframe" width="0" height="0" frameborder="0" onload="$.InfoMineUserState.signOutCheck();" src="http://'+this.sitePremiumHost+'/subscribe/signout.aspx"></iframe>');
    },
    //by default "delayed" is null/false 
    signOutCheck: function (delayed) {
        if($.browser.safari&&!delayed) {
            //delay for safari (chrome) browsers because they need time to fire the onload event in the signout iframe
            this.data.win.setTimeout(function () { $.InfoMineUserState.signOutCheck(true); },this.data.signOutCheckDelayInterval);
        } else {
            if(this.isUserSignIn()) {
                alert('Your browser does not support this feature.\nPlease close your browser to sign out.');
            } else {
                $('iframe#signoutframe').remove();
                if(this.data.onSignOutCallback) this.data.onSignOutCallback();
                if(this.isOnPremium()) {
                    this.data.win.location='http://'+this.sitePublicHost;
                } else {
                    this.setState(false);
                    this.data.win.location.reload();
                }
            }
        }
    },
    backgroundSignIn: function () {
        $.getJSON('http://'+this.sitePremiumHost+'/registrant/SignInState.ashx?jsoncallback=?',
			function (data) {
			    if(data) {
			        //Sign-in Success
			        $.InfoMineUserCookie.setCookieValue('HostName',data.HostName);
			        $.InfoMineUserState.setState(true);
			        if($.InfoMineUserState.data.onSignInCallback) $.InfoMineUserState.data.onSignInCallback(data);
			        if($.InfoMineUserState.data.reloadOnSignIn) $.InfoMineUserState.data.win.location.reload();
			    }
			});
    },
    setState: function (stateData) {
        var onPremium=this.isOnPremium();
        this.data.isSignIn=(stateData||onPremium); //if the page is on premium, it should never show 'Sign In'
        //Drop cookie HostName value if page is on premium and user did not sign-in using the button
        if(onPremium) $.InfoMineUserCookie.setCookieValue('HostName',this.siteHost);//if the page is on premium, it should never show 'Sign In'
        $('#'+this.data.stateButtonID+':eq(0)').text(this.data.isSignIn?'Sign Out':'Sign In');
    },
    hostMatch: function () {
        var rhost="www.infomine.com";
        var host=window.location.host.toLowerCase();
        if(host.indexOf('premium')==0) {
            switch(host) {
                case "premium.africa.infomine.com":
                case "premium.argentina.infomine.com":
                case "premium.australia.infomine.com":
                case "premium.brasil.infomine.com":
                case "premium.chile.infomine.com":
                case "premium.coal.infomine.com":
                case "premium.europe.infomine.com":
                case "premium.gold.infomine.com":
                case "premium.mexico.infomine.com":
                case "premium.peru.infomine.com":
                case "premium.russia.infomine.com":
                    rhost=host.Replace("premium.","");
                    break;
            }
            this.sitePremiumHost=host;
            this.sitePublicHost=rhost;
        } else {
            switch(host) {
                case "africa.infomine.com":
                case "argentina.infomine.com":
                case "australia.infomine.com":
                case "brasil.infomine.com":
                case "chile.infomine.com":
                case "coal.infomine.com":
                case "europe.infomine.com":
                case "gold.infomine.com":
                case "mexico.infomine.com":
                case "peru.infomine.com":
                case "russia.infomine.com":
                    rhost="premium."+host;
                    break;
                default:
                    rhost="premium.infomine.com";
                    break;
            }
            this.sitePremiumHost=rhost;
            this.sitePublicHost=host;
        }
    }
};
$(function(){$.InfoMineUserState.init();});

