﻿CB.AJAX.Login = function () {
    //can you spell hack?
    // we need this for stupid IE crap so that we can get rid of global variable
    // AJAXLogin is a common control, so its impossible for us to know when it will overlap a DDL.
    // if it does overlap a ddl in IE, then the ddl will shine through
    // so, controls that use this control tell us which divs to hide and then show again once we are done
    // thankfully IE7 fixed this bug, so please remove this hack once IE6 is used less.
    var arrayDDLsToHide = [];
         
    // handles the return signal from the AJAX page
    function handleLoginResponse(success, responseText){
        var div,divKnown,hyperlink,welcome;
        if(success){
            if(responseText == "SITEDOWN"){
                CB.AJAX.Login.siteDownAP.show();
            }
            else if(responseText == "FAILURE"){
                CB.AJAX.Login.loginAP.show(null, {keepCurrentValues:true});
                CB.e('loginFailureDiv').style.display = 'block';
                CB.e('loginIntroDiv').style.display = 'none';
            }
            else{    // SUCCESS
               CB.AJAX.Login.onLoginSuccess();
	           
               // flag control to remember that user has been authenticated
               CB.e(CB.AJAX.Login.Prefix + 'hdn_auth').value = "True";
	           
               // modifying login header to show the user email and logout hyperlink just as if it were done by
               // page posting
               div = CB.e('_ctl0_pnlSign');
               if(div !== null){
                    divKnown = CB.e('_ctl0_lblWelcome');	                
                    if(divKnown !== null){
                        div.innerHTML = responseText.split("SUCCESS;")[1] + "&nbsp;&nbsp;" + div.innerHTML;
                        hyperlink = CB.e('_ctl0_cblSignInKnown');
                        welcome = CB.e('_ctl0_lblWelcome');
                        welcome.innerHTML = "";
                        hyperlink.innerHTML = "Sign Out &gt;&gt;";
                        hyperlink.href = hyperlink.href.replace("/share/login.aspx", "/share/logout.aspx");
	                    
                    }	                               
               }
            }
        }
        else{
            CB.AJAX.Login.siteDownAP.show();
        }
    }
    
    function baseOnLoginSucces(){
        CB.AJAX.hidePopups();
    }
    
    function baseOnClose(){
        CB.AJAX.hidePopups();
    }
    
    return {
        onLoginSuccess: function () {},
        onClose: function () {},
        Prefix: '',
        login:function(){
            var data = "UserEmail=" + CB.e(CB.AJAX.Login.Prefix + 'loginEmail').value;
	        data += "&UserPassword=" + CB.e('loginPW').value;
	        if(CB.e('JobSeekerLogin1_cbsys_login_rememberme').checked === true){
	            data += "&RememberUser=True";    // "True" or "False"
            }
            else{
                data += "&RememberUser=False";
            }
    	    
            if (CB.e(CB.AJAX.Login.Prefix + 'loginEmail').value.length > 0 && CB.e('loginPW').value.length > 0) {
                CB.AJAX.Login.authorizingAP.show();
	            CB.AJAX.submitCallback(data, "Login.aspx", handleLoginResponse, true);
	        } 
	        else {
                CB.e('loginFailureDiv').style.display = 'block';
                CB.e('loginIntroDiv').style.display = 'none';
            }
            
        },
        loginOnShow:function(options){
            if (options) {
                if (!options.keepCurrentValues) {
                    if (options.introHTML && options.introHTML !== '') {CB.e('loginIntroDiv').innerHTML = options.introHTML;}
                    else {CB.e('loginIntroDiv').innerHTML = CB.AJAX.Login._introHTML;}
                    
                    if (options.registerURL && options.registerURL !== '') {CB.e(CB.AJAX.Login.Prefix + 'cbAJAXRegisterLink').href = options.registerURL + '&forgetMe=true';}
                    else {CB.e(CB.AJAX.Login.Prefix + 'cbAJAXRegisterLink').href = CB.AJAX.Login._registerURL;}
                    
                    if (options.onLoginSuccessHandler) {CB.AJAX.Login.onLoginSuccess = options.onLoginSuccessHandler;}
                    else {CB.AJAX.Login.onLoginSuccess = baseOnLoginSuccess;}
            
                    if (options.onCloseHandler) {CB.AJAX.Login.onClose = options.onCloseHandler;}
                    else {CB.AJAX.Login.onClose = baseOnClose;}
                    
                    if (options.siteDownHTML && options.siteDownHTML !== '') {CB.e('siteDownMsg').innerHTML = options.siteDownHTML;}
                    else {CB.e('siteDownMsg').innerHTML = CB.AJAX.Login._siteDownHTML;}
                    
                    //if (options.arrayDDLsToHide){alert(options.arrayDDLsToHide);arrayDDLsToHide = options.arrayDDLsToHide;}
                    //else {arrayDDLsToHide = [];}
                } 
            }
            else {
                CB.e('loginIntroDiv').value = _introHTML;
                CB.e(CB.AJAX.Login.Prefix + 'cbAJAXRegisterLink').href = _registerURL;
                CB.AJAX.Login.onLoginSuccess = baseOnLoginSuccess;
                CB.AJAX.Login.onClose = baseOnClose;
                CB.e('siteDownMsg').innerHTML = _siteDownHTML;
                //arrayDDLsToHide = [];
            }
            
            CB.AJAX.Login.defaultOnShow();

            CB.e('loginFailureDiv').style.display = 'none';
        },
        defaultOnHide:function(){
            // IE hack for the job results search form.  If we don't do this, the freshness ddl shines through.  thanks IE!
            if (CB.Window.ie){
                var i=0;
                for (i; i < arrayDDLsToHide.length; i++){
                    arrayDDLsToHide[i].style.visibility = 'visible';
                }
            }
        },
        defaultOnShow:function(options){
            // IE hack for the job results search form.  If we don't do this, the freshness ddl shines through.  thanks IE!
            if (CB.Window.ie6){
                var i=0;
                for (i; i < arrayDDLsToHide.length; i++){
                    arrayDDLsToHide[i].style.visibility = 'hidden';
                }
            }
        },
        isLoggedIn: function () {
            return (CB.e(CB.AJAX.Login.Prefix + 'hdn_auth').value == "True");
        },
        initializePopups:function (){
            CB.AJAX.Login.loginAP = CB.object(CB.AJAX.Popup);
            CB.AJAX.Login.loginAP.initialize(CB.e('login'));
            CB.AJAX.Login.loginAP.onShow = CB.AJAX.Login.loginOnShow;
            CB.AJAX.Login.loginAP.onHide = this.defaultOnHide;
            // hide and close don't mean the same thing, so an onHide won't work here
            CB.AJAX.Login.loginAP.close = function(){
                        CB.AJAX.Login.loginAP.hide();
                        CB.AJAX.Login.onClose();
                    };

            CB.AJAX.Login.siteDownAP = CB.object(CB.AJAX.Popup);
            CB.AJAX.Login.siteDownAP.initialize(CB.e('siteDown'));
            CB.AJAX.Login.siteDownAP.onShow = this.defaultOnShow;
            CB.AJAX.Login.siteDownAP.onHide = this.defaultOnHide;

            CB.AJAX.Login.authorizingAP = CB.object(CB.AJAX.Popup);
            CB.AJAX.Login.authorizingAP.initialize(CB.e('authorizing'));
            CB.AJAX.Login.authorizingAP.onShow = this.defaultOnShow;
            CB.AJAX.Login.authorizingAP.onHide = this.defaultOnHide;
            
            // setup the password textbox to receive an enter keypress and then submit the form
            CB.Textbox.setupTextbox(CB.e('loginPW'),function(){CB.e(CB.AJAX.Login.Prefix + 'btn_AJAXLogin').click();});
            arrayDDLsToHide = document.getElementsByTagName('select');
        }
    };
}();
