dojo.provide("mod.login.login");
dojo.require("mod.common.init");
dojo.require("dojo.cookie");

dojo.require("dojox.io.proxy.xip");
dojo.config["xipClientUrl"] = "/Content/js/dojo-release-1.1.0rc2-src/dojox/io/proxy/xip_client.html";
dojox.io.proxy.xip.xipClientUrl = dojo.config["xipClientUrl"];

dojo.declare("mod.login.login", [mod.common.init], {


    ScriptName: /login.js/,

    NEED_UPDATE_TOKEN_AFTER_LOGIN: true,
    REDIRECT_TO_MAN: false,

    _executeArgs: function(json) {
        if (!json) {
            json = this.JsonArgs;
        }


        var literals = json["literals"];
        // Transform literals into name/values pair array
        if (literals && literals[0] != null && literals[0].__type == "literal:#SFMediaPortal.Services") {
            dojo.forEach(literals,
			function(oneEntry, index) {
			    literals[oneEntry.Name] = oneEntry.Value;
			    literals[index] = null;
			}
		 );
        }

        var loginContainer = dojo.byId("login_container");
        var isLoggedIn = (json.state == "loggedin");
        if (loginContainer) {
            if (isLoggedIn) {
                var name = (json["username"]) ? (json["username"]) : (dojo.cookie("UserId"));
                if (name.length > 25)
                    name = name.substring(0, 25) + "...";
                loginContainer.innerHTML = "<span id=\"usernameLabel\">" + name + " (<span id=\"accountLabel\">"
													+ literals["myAccount"] + "</span>)</span><span id=\"logoutLabel\" class=\"boldYellow\">"
													+ literals["logOut"] + "</span><div id=\"loginTopDivider\" class=\"loginSeparator\"></div><span id=\"filmsLabel\" class=\"largeBoldYellow\">"
													+ literals["myFilms"] + "</span><span id=\"tvLabel\" class=\"largeBoldYellow\">"
													+ literals["tvMode"] + "</span><div id=\"loginBottomDivider\" class=\"loginSeparator\"></div><div id=\"loginCart\"></div><span id=\"cartLabel\" class=\"boldYellow\">"
													+ literals["cart"] + "<span id=\"cartNumber\"> (" + json["itemsincart"] + ")</span></span>"
            										+ "<a class='loginHelpMain' href=\"javascript:(window.location.href  = createUrl('/help.mvc', false))\" onmouseout=\"UnTip()\" onmouseover=\"javascript:Tip('" + literals["help_balloon"] + "');\">"
													+ "<span id=\"helpLabel\" class=\"boldYellow\">" + literals["help"] + "</span></a>";
                //													+ "<div id=\"loginQuestionMark\"></div><a href=\"#\" onclick=\"GetPageContent('\/help.mvc');\" onmouseout=\"UnTip()\" onmouseover=\"Tip('HELP ME!!!');\"><span id=\"helpLabel\" class=\"boldYellow\">" + literals["help"] + "</span></a>";



                var CountryId = dojo.cookie("CountryId") ? dojo.cookie("CountryId") : json["country"];
                this._drawFlags(loginContainer, CountryId);

                var logoutLink = dojo.byId("logoutLabel");
                dojo.connect(logoutLink, "onclick", this, "logoutClicked");

                //My account is only available when logged in.
                var myaccountLink = dojo.byId("accountLabel");
                dojo.connect(myaccountLink, "onclick", this, "myAccountClicked");

                //My films is only available when logged in.
                var myFilmsLink = dojo.byId("filmsLabel");
                dojo.connect(myFilmsLink, "onclick", this, "myFilmsClicked");

                //TV Mode is only available when logged in.
                // DISABLE UNTILL 10FT IS Ready
                /*if (navigator.userAgent.indexOf("Media Center PC") > 0) {
                var tvModeLink = dojo.byId("tvLabel");
                dojo.connect(tvModeLink, "onclick", this, "GoToTVModeClicked");
                tvModeLink.style.display = "block";
                tvModeLink.style.visibility = "visible";

                } else {*/
                var tvModeLink = dojo.byId("tvLabel");
                tvModeLink.style.display = "none";
                tvModeLink.style.visibility = "hidden";

                /*}*/

                // if user language different from the current one, set new language
                //alert(dojo.cookie("LanguageId")+", new:"+json["language"]);
                if (json["language"] != dojo.cookie("LanguageId")) {
                    dojo.cookie("LanguageId", json["language"], { path: "/" });
                    // Reload page
                    window.location.reload(true);

                }

                var subscribeNewsletter = dojo.byId("subscribeNewsletter");
                if (subscribeNewsletter) {
                    subscribeNewsletter.style.display = "none";
                }
            }
            else {
                try {

                    loginContainer.innerHTML = "<span id=\"loginLabel\">" + literals["logIn"]
														+ "</span><span id=\"memberLabel\">" + literals["member"]
														+ "</span><input id=\"usernameInput\" class=\"shadedTextBox\"></input><input id=\"passwordInput\" type=\"password\" class=\"shadedTextBox\" onfocus=\"this.value = '';\" onblur=\"if (this.value == '') {this.value = '*******';};\"></input>"
														+ "<div id=\"loginArrow\"></div><span id=\"cartLabel\" class=\"boldYellow\">"
														+ literals["cart"] + "<span id=\"cartNumber\"> (" + json["itemsincart"] + ")</span></span>"
														+ "<a class='loginHelpMain' href=\"javascript:(window.location.href  = createUrl('/help.mvc', false))\" onmouseout=\"UnTip()\" onmouseover=\"javascript:Tip('" + literals["help_balloon"] + "');\">"
														+ "<span id=\"helpLabel\" class=\"boldYellow\">" + literals["help"] + "</span></a>"
														+ "<span id=\"forgotLabel\">" + literals["forgotPassword"] + "</span>"
                }
                catch (ex) {
                    alert(ex);
                }

                var CountryId = dojo.cookie("CountryId") ? dojo.cookie("CountryId") : json["country"];
                this._drawFlags(loginContainer, CountryId);

                var loginArrow = dojo.byId("loginArrow");
                dojo.connect(loginArrow, "onclick", this, "loginClicked");
                var usernameBox = dojo.byId("usernameInput");
                var passwordBox = dojo.byId("passwordInput");
                usernameBox.setAttribute("defaultValue", literals["usernameLiteral"]);
                passwordBox.setAttribute("defaultValue", literals["password"]);
                usernameBox.value = (dojo.cookie("Email")) ? (dojo.cookie("Email")) : (usernameBox.getAttribute("defaultValue"));
                passwordBox.value = passwordBox.getAttribute("defaultValue");
                dojo.connect(usernameBox, "onfocus", this, "textboxFocused");
                dojo.connect(usernameBox, "onblur", this, "textboxBlurred");
                //dojo.connect(passwordBox, "onfocus", this, "textboxFocused");
                //dojo.connect(passwordBox, "onblur", this, "textboxBlurred");
                dojo.connect(passwordBox, "onkeypress", this, "passKeyPressed");

                //Register is only available when not logged.
                var registerLink = dojo.byId("memberLabel");
                dojo.connect(registerLink, "onclick", this, "registerClicked");

                //forgot passwrd is only available when not logged.
                var forgotPass = dojo.byId("forgotLabel");
                dojo.connect(forgotPass, "onclick", this, "forgotPassClicked");

                var subscribeNewsletter = dojo.byId("subscribeNewsletter");
                if (subscribeNewsletter) {
                    subscribeNewsletter.style.display = "block";
                }
            }

            //Help is available to both anonymous and logged in user.
            var helpLink = dojo.byId("helpLabel");
            dojo.connect(helpLink, "onclick", this, "helpClicked");

            //Shopping cart is available to both anonymous and logged in user.
            var cartBox = dojo.byId("loginCart");
            var cartNo = dojo.byId("cartLabel");
            //dojo.connect(cartBox, "onclick", this, "displayCartClicked");
            if (json["itemsincart"] > 0) {
                dojo.connect(cartNo, "onclick", this, "displayCartClicked");
                dojo.cookie("CartItemCount", json["itemsincart"], { expires: 7, path: "/" });
            }
            else {
                dojo.cookie("CartItemCount", null, { expires: -1, path: "/" });
            }

        }
    },

    loginClicked: function(e) {

        this.REDIRECT_TO_MAN = true;
        var usernameBox = dojo.byId("usernameInput");
        var passwordBox = dojo.byId("passwordInput");
        if (usernameBox) {
            if (usernameBox.value && usernameBox.value != usernameBox.getAttribute("defaultValue")
					&& passwordBox.value && passwordBox.value != "") {
                var user = usernameBox.value;
                var pass = passwordBox.value;
                var cartID = dojo.cookie("CartId");
                var languageID = dojo.cookie("LanguageId");
                // clean up cached Login data
                dojo.cookie("_LoginDataCached", null, { expires: -1, path: "/" });

                // Call Login Service
                var timeout = 200000;
                var load = dojo.hitch(this, this._onXhrPostLoadLogin);
                var error = dojo.hitch(this, this._onXhrPostError);

                var urlForLogin = createUrl("/services/UserStatus.svc/json/Login", USESSL);
                dojo.xhrPost({
                    iframeProxyUrl: USESSL ? createUrl("/Content/js/dojo-release-1.1.0rc2-src/dojox/io/proxy/xip_server.html", USESSL)
                                                   : null,
                    url: urlForLogin,
                    handleAs: "json",
                    content: { "user": user, "pass": pass, "userid": "", "cartid": cartID, "languageid": languageID },
                    timeout: timeout,
                    load: load,
                    error: error
                });


            }
            else {
                alert(this.JsonArgs["literals"]["loginWarning"]);
            }
        }
    },



    passKeyPressed: function(e) {
        //13 is the ASCII standard code for enter/return
        if (e.keyCode == 13) {
            this.loginClicked(e);
            return true;
        }
    },

    redirectToLogout: function(response, ioArgs) {
        dojo.cookie("SessionId", null, { expires: -1, path: "/" });
        dojo.cookie("CartId", null, { expires: -1, path: "/" });
        dojo.cookie("UserId", null, { expires: -1, path: "/" });
        dojo.cookie("CartItemCount", null, { expires: -1, path: "/" });
        window.location = createUrl("/home.mvc/logout", false);
    },

    onClickWrapper: function(redirectUrl) {
        // clean up cached Login data
        dojo.cookie("_LoginDataCached", null, { expires: -1, path: "/" });

        var cartID = dojo.cookie("CartId");
        var languageID = dojo.cookie("LanguageId");
        var userId = dojo.cookie("UserId");
        var sessionId = dojo.cookie("SessionId");
        var operatorId = dojo.cookie("10ftOperatorId");

        if (userId && userId != "") {
            // Call Login Service
            var timeout = 200000;
            var load = dojo.hitch(this, this._onXhrPostLoad);
            var redirectToLogout = dojo.hitch(this, this.redirectToLogout);
            var textToJson = dojo.hitch(this, this._parseJson);

            dojo.xhrGet({
                url: "/services/UserStatus.svc/json/GetStatus?user=" + userId + "&session=" + sessionId + "&language=" + languageID + "&sOperator=" + operatorId + "&cartid=" + cartID + "&random=" + Math.random() * 10000,
                handleAs: "text",
                timeout: timeout,
                load: function(response, ioArgs) {
                    var r = textToJson(response);
                    if (r && r.d && r.d.state == "loggedin") {
                        window.location = redirectUrl;
                    }
                    else {
                        redirectToLogout(response, ioArgs);
                    }
                },
                error: function(response, ioArgs) {
                    redirectToLogout(response, ioArgs);
                }
            });
        }
        else {
            this.redirectToLogout(null, null);
        }

    },

    refreshSession: function(userId) {
        // clean up cached Login data
        dojo.cookie("_LoginDataCached", null, { expires: -1, path: "/" });

        if (userId && userId != "") {
            var cartID = dojo.cookie("CartId");
            var languageID = dojo.cookie("LanguageId");

            // Call Login Service
            var timeout = 200000;
            var load = dojo.hitch(this, this._onXhrPostLoad);
            var error = dojo.hitch(this, this._onXhrPostError);

            // this token is updated on server side on Registration controller in RegisterUser method 
            // after successfull registration user
            // in all other case it must be updatable.
            this.NEED_UPDATE_TOKEN_AFTER_LOGIN = true;
            var urlForLogin = createUrl("/services/UserStatus.svc/json/Login", USESSL);
            dojo.xhrPost({
                iframeProxyUrl: USESSL ? createUrl("/Content/js/dojo-release-1.1.0rc2-src/dojox/io/proxy/xip_server.html", USESSL)
                                                   : null,
                url: urlForLogin,
                handleAs: "json",
                content: { "userid": userId, "cartid": cartID, "languageid": languageID },
                timeout: timeout,
                load: load,
                error: error
            });

        }
        else {
            alert(this.JsonArgs["literals"]["loginWarning"]);
        }

    },

    _onXhrPostLoadLogin: function(response, ioArgs) {
        if (response && response.d) {
            var errorLabel = dojo.byId("ErrorLabel");
            if (errorLabel && response && response.d) {
                var status = response.d.status;
                if (status == "OK") {
                    errorLabel.outerText = "";
                    errorLabel.style.visibility = "hidden";
                }
            }
        }
        this._onXhrPostLoad(response, ioArgs);
    },

    _onXhrPostLoad: function(response, ioArgs) {
        //debugger;
        //response = this._parseJson(response);
        if (response && response.d) {
            var status = response.d.status;
            var sessionID = response.d.sessionid;
            var userID = response.d.userid;
            var userEmail = response.d.email;
            var userType = response.d.usertype;
            var cartId = response.d.cartid;
            if (status == "INVALID") {
                alert(this.JsonArgs["literals"]["loginErrorInvalid"]);
                return;
            }
            else if (status != "OK") {
                alert(this.JsonArgs["literals"]["loginErrorException"]);
                return;
            }


            var loginContainer = dojo.byId("login_container");
            var newLocation = "";
            if (loginContainer) {
                var manCrmId = this.JsonArgs["literals"]["ManCrmId"];
                var manUri = this.JsonArgs["literals"]["ManUri"];

                var ticketString = "";
                if (typeof response.d.ticket != "undefined") {
                    ticketString = "&Ticket=" + response.d.ticket;
                }
                manUri = "man.sfanytime.cmp.entriq.net";
                var iframeUrl = "http://" + manUri + "/services/LoginUser?SessionId=" + sessionID + "&CrmId=" + manCrmId + ticketString + "&ReturnUrl=" + document.location;
                var loginUserIFrame = dojo.byId("LoginUserIFrame");
                if (loginUserIFrame) {
                    if (LoginUserIFrame.parentNode) {
                        try { LoginUserIFrame.parentNode.removeChild(LoginUserIFrame); } catch (e) { }
                    }
                }

                var iframe = '<iframe id="LoginUserIFrame" src="' + iframeUrl + '" style="height: 1px;width: 1px" scrolling="no"></iframe>';
                //loginContainer.innerHTML += iframe;
                newLocation = iframeUrl;

            }
            // else OK, Add cookies and refresh

            // Set sessionID cookie value, expires when browser closes
            dojo.cookie("SessionId", sessionID, { path: "/" }); // , {expires: 0} FF bug, disapears right away
            dojo.cookie("UserType", userType, { path: "/" }); // , {expires: 0} FF bug, disapears right away
            dojo.cookie("UserId", userID, { expires: 7, path: "/" }); // 7 days
            dojo.cookie("Email", userEmail, { expires: 7, path: "/" });

            if (typeof response.d.ticket != "undefined") {
                dojo.cookie("Ticket", response.d.ticket, { expires: 7, path: "/" });
            }
            if ((typeof response.d.token != "undefined") && this.NEED_UPDATE_TOKEN_AFTER_LOGIN) {
                dojo.cookie("Token", response.d.token, { expires: 7, path: "/" });
            }

            dojo.cookie("10ftSessionId", sessionID, { expires: 7, path: "/" }); // 7 days

            if (cartId != null)
                dojo.cookie("CartId", cartId, { expires: 7, path: "/" });

            // Add MAN cookie
            var manvalue = "SessionId=" + sessionID + "&" +
								"Ticket=" + response.d.ticket + "&" +
								"CrmId=" + response.d.crmid + "&" +
								"UserId=" + userID + "&" +
								"AccountId=&" +
								"AgentHost=" + response.d.agenthost + "&" +
								"AgentId=" + response.d.agentid + "";
            dojo.cookie("MAN", manvalue, { expires: new Date(response.d.expires), path: "/" }); // 7 days


            //Write it to the Flash BAKER
            try {
                FlashCookieBaker.write("MAN", manvalue);
            } catch (e) {
            }

            // Reload control state
            if (this.REDIRECT_TO_MAN) {
                window.location.href = newLocation;
            }
            else {
                this._reload();
            }


        }
        else {
            alert(this.JsonArgs["literals"]["loginErrorException"]);
        }
        this.NEED_UPDATE_TOKEN_AFTER_LOGIN = true;
    },

    _onXhrPostError: function(response, ioArgs) {

        this.NEED_UPDATE_TOKEN_AFTER_LOGIN = true;
        alert(this.JsonArgs["literals"]["loginErrorException"]);
    },

    logoutClicked: function(e) {
        var cartID = dojo.cookie("CartItemCount");
        // clean up cached Login data
        dojo.cookie("_LoginDataCached", null, { expires: -1, path: "/" });

        if (cartID > 0) {
            var answer = confirm(this.JsonArgs["literals"]["CompletePurchase"]);
            if (answer) {
                window.location = createUrl("/Purchase.mvc/Index", true);
            }
            else {
                dojo.cookie("SessionId", null, { expires: -1, path: "/" });
                dojo.cookie("CartId", null, { expires: -1, path: "/" });
                dojo.cookie("UserId", null, { expires: -1, path: "/" });
                dojo.cookie("CartItemCount", null, { expires: -1, path: "/" });
                window.location = createUrl("/home.mvc/logout", false);
            }
        }
        else {
            dojo.cookie("SessionId", null, { expires: -1, path: "/" });
            dojo.cookie("CartId", null, { expires: -1, path: "/" });
            dojo.cookie("UserId", null, { expires: -1, path: "/" });
            dojo.cookie("CartItemCount", null, { expires: -1, path: "/" });
            window.location = createUrl("/home.mvc/logout", false);
        }

        // TODO: make Ajax work
        //GetPageContent("") ;
        //this._reload();
    },

    textboxFocused: function(e) {
        var box = (e.srcElement) ? (e.srcElement) : (e.target);
        if (box) {
            var defaultValue = box.getAttribute("defaultValue");
            if (box.value == defaultValue) {
                box.value = "";
            }
        }
    },

    textboxBlurred: function(e) {
        var box = (e.srcElement) ? (e.srcElement) : (e.target);
        if (box) {
            if (!box.value) {
                box.value = box.getAttribute("defaultValue");
            }
        }
    },

    flagClicked: function(e) {
        var flag = (e.srcElement) ? (e.srcElement) : (e.target);

        if (flag) {
            dojo.cookie("_LoginDataCached", null, { expires: -1, path: "/" });
            // Get language Code
            var languageCode = flag.getAttribute("languageCode");
            // Set new Language cookie value
            dojo.cookie("LanguageId", languageCode, { path: "/" });
            // Redirect back to main page
            window.location = createUrl("/", false);
        }
    },

    helpClicked: function(e) {
        window.location = createUrl("/Help.mvc", false);
    },

    displayCartClicked: function(e) {
        window.location = createUrl("/Purchase.mvc/Index", USESSL);
    },

    myAccountClicked: function(e) {
        this.onClickWrapper(createUrl("/MyAccount.mvc/Index", USESSL));
    },

    myFilmsClicked: function(e) {
        this.onClickWrapper(createUrl("/MyFilms.mvc/Index", false));
    },

    GoToTVModeClicked: function(e) {
        var wmc = (/Media Center PC/.test(navigator.userAgent));
        if (wmc || dojo.isFF) {
            this.onClickWrapper(createUrl("/Home.mvc/RunMediaCenter", false));
        }
        else {
            alert(MCEDISABLEMESSAGE);
        }
    },

    registerClicked: function(e) {
        window.location = createUrl("/Registration.mvc/Index", USESSL);
    },

    forgotPassClicked: function(e) {
        window.location = createUrl("/Registration.mvc/ForgotPassword", USESSL);
    },

    _reload: function() {
        // clean up cached Login data
        dojo.cookie("_LoginDataCached", null, { expires: -1, path: "/" });

        var argsNew = this.initialArgs;
        var userID = dojo.cookie("UserId");
        var sessionID = dojo.cookie("SessionId");
        var operatorID = dojo.cookie("OperatorId"); // operator
        var languageID = dojo.cookie("LanguageId"); // language 

        var cartID = dojo.cookie("CartId"); // cart
        var cartItemCount = dojo.cookie("CartItemCount")

        var rand_no = Math.random();

        // Remove initial user and session params
        argsNew["dataPath"] = argsNew["dataPath"].substring(0, argsNew["dataPath"].indexOf("?"));
        // Add current user and session params
        argsNew["dataPath"] = argsNew["dataPath"] + "?user=" + userID + "&session=" + sessionID + "&language=" + languageID + "&sOperator=" + operatorID + "&cartid=" + cartID + "&random=" + rand_no;
        if (cartItemCount > 0)
            argsNew["dataPath"] = argsNew["dataPath"] + "&itemsincart=" + cartItemCount;

        this._processArgs(argsNew);
        //window.location = location.href;
    },

    _drawFlags: function(loginContainer, country) {


        // if not Finland
        if (country == null || country.toLowerCase() != "fi")
            return;

        loginContainer.innerHTML += "<div id=\"swedishFlag\"></div><div id=\"finlandFlag\"></div>";
        var flagElementSV = dojo.byId("swedishFlag");
        dojo.connect(flagElementSV, "onclick", this, "flagClicked");
        flagElementSV.setAttribute("languageCode", "sv");



        var flagId = "finlandFlag";
        var flagCode = "fi";
        var flagElement = dojo.byId(flagId);
        dojo.connect(flagElement, "onclick", this, "flagClicked");
        flagElement.setAttribute("languageCode", flagCode);

    }

});

var vLoginInstance  = null ;

function login_startup()
{
    this.vLoginInstance = new mod.login.login();
    mod.login.login.LoginInstance = this.vLoginInstance ;
}

/*jQuery(window).load(function() {
    this.login_startup();
});*/
