//connect-lite

//begin queueManager.js
function ms_QueueManager() {

    // INTERNAL VARS
    var queue = [];
    var queueCurrentItem = null;
    var iframeDivId = '';
    var iframeId = '';
    var iframeBlankUrl = '';
    var isIframeReady = false;
    var isQueueRunning =  false;
    var requestMade = false;
    var waitingForResponse = false;
    
    // TIMERS
    var blankIframeTimer = null;
    var requestTimer = null;
    
    // COUNTERS
    var queuePosition = -1;
    var iframeTimeoutCounter = 0;
    var requestTimeoutCounter = 0;
    
    // CONSTANTS
    var TIMEOUT = 50; // in miliseconds
    var REQUEST_TIMEOUT = 10; // in seconds
    
    this.init = function(divId, blankUrl) {
		document.write('<div id="'+divId+'" style="position:absolute; bottom:0; left: -700px;"></div>');
        iframeDivId = divId;
        iframeId = divId+'_iframe';
        iframeBlankUrl = blankUrl;
        REQUEST_TIMEOUT = REQUEST_TIMEOUT * 1000; // set time to be in seconds
    }

    this.addRequest = function(queueItem) {
        queue[queue.length] = queueItem;
        if(isQueueRunning == false) {
            isQueueRunning = true;
            processQueue();
        }
    }
    
    this.requestReceived = function() {
        waitingForResponse = false;
        clearWaitForRequest();
        destroyIframe();
        processQueue();
    }
    
    var processQueue = function() {
        queuePosition++;
        if (queuePosition >= queue.length) {
            resetQueue(); // we have reached the end of the queue
        } else { // this is a new request to be made
            queueCurrentItem = queue[queuePosition];
            createIframe();
        }
    }
    
    var createIframe = function() {
		isIframeReady = false;
		//$(iframeDivId).innerHTML = '<iframe name="'+iframeId+'" id="'+iframeId+'" style="width: 100px; height: 100px; border: solid 1px blue;"></iframe>';
		//$(iframeId).src = iframeBlankUrl;
	  var thebody = document.getElementsByTagName("body")[0];
      var tempIFrame=document.createElement('iframe');
      tempIFrame.setAttribute('id',iframeId);
      tempIFrame.setAttribute('name',iframeId);
      tempIFrame.style.position='absolute';
      tempIFrame.style.bottom='0';
      tempIFrame.style.left='-600px';
	  //tempIFrame.src=iframeBlankUrl;
      thebody.appendChild(tempIFrame);
	  frames[iframeId].location.replace(iframeBlankUrl);
      //return false;
	  waitForRequest('iframe');


   }
    
    var destroyIframe = function() {
        $(iframeDivId).innerHTML = '';
		x = window.frames[iframeId];
		x.document.body.innerHTML = ""; 
    }
    
    var resetQueue = function() {
        isQueueRunning = false;
        destroyIframe();
        queue = [];
        queuePosition = -1;
        queueItem = null;
    }
    
    var doGet = function() {
        waitingForResponse = true;
        var url = makeQueryString(queueCurrentItem);
        frames[iframeId].location.replace(url);
        waitForRequest('get');
    }
    
    var doPost = function() {
        var html = drawForm(queueCurrentItem, 'msHiddenIframeForm');
        var iframeWin = getIframeWindow();
        waitingForResponse = true;
        iframeWin.document.body.innerHTML = html;
        iframeWin.document.getElementById('msHiddenIframeForm').submit();
        waitForRequest('post');
    }
    
    var waitForRequest = function(type) {
        switch(type) {
            case "post":
                if(waitingForResponse == false) {
                    clearWaitForRequest();
                    processQueue();
                    return;
                }
                break;
            case "get":
                if(waitingForResponse == false) {
                    clearWaitForRequest();
                    processQueue();
                    return;
                }
                break;
            case "blankForPost":
                if(isIframeReady == true) {
                    clearWaitForRequest();
                    doPost();
                    return;
                }
                break;
            case "iframe":
                if(isIframeReady == true) {
                    clearWaitForRequest();
                    if(queueCurrentItem.method == 'post') {
                        doPost();
                    } else {
                        doGet();
                    }
                    return;
                }
                break;
        }
        if((requestTimeoutCounter * TIMEOUT) >= REQUEST_TIMEOUT) {
            clearWaitForRequest();
            requestFailed(type);
            return;
        } else {
            requestTimeoutCounter++;
            requestTimer = setTimeout(function timeoutWaitForRequest() { waitForRequest(type) }, TIMEOUT);
        }
    }
    
    var clearWaitForRequest = function() {
        clearTimeout(requestTimer);
        requestTimeoutCounter = 0;
    }
    
    var requestFailed = function(type) {
        destroyIframe();
        var response = {};
        response['errors'] = ['request timed out'];
        eval(queueCurrentItem.params.callback + '(response);');
        processQueue();
    }
    
    var makeQueryString = function(queueItem) {
        var queryString = '';
        queryString += queueItem.url;
        if(queueItem.params.len > 0) {
            queryString += '?';
            var i = 0;
            for(key in queueItem.params) {
                if(key != 'len') {
                    queryString += key + '=' + escapeParam(queueItem.params[key]);
                    if(i < (queueItem.params.len - 1)) queryString += '&';
                }
                i++;
            }
        }
        return queryString;
    }
    
    var escapeParam = function(param) {
        return escape(param).replace(/\+/g, '%2b');
    }
    
    var drawForm = function(queueItem, formId) {
        var html = '';
        for(key in queueItem.params) {
            html += '<input type="hidden" name="'+key+'" value="'+queueItem.params[key]+'"/>';
        }
        html = '<form id="'+formId+'" method="'+queueItem.method+'" action="'+queueItem.url+'">' + html + '</form>';
        return html;
    }

    var getIframeWindow = function() {
        var r = $(iframeId).contentWindow || $(iframeId).contentDocument;
        return r;
    }
    
    this.setIframeReady = function() {
		isIframeReady = true;
    }
}

function ms_QueueItem(inUrl, inMethod) {
    
    var url = inUrl;
    var method = inMethod;
    var params = {};
    
    this.addParam = function(key, value) {
        params[key] = value;
    }
    
    this.getQueueItem = function() {
        var i=0;
        for(key in params) {
            i++;
        }
        params['len'] = i;
        return {
            "url": url,
            "method": method,
            "params": params
        };
    }
}
//end queueManager.js

//begin queueConfig.js
/* FIREBUG */
if (!window.console || !console.firebug) {
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
    "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];

    window.console = {};
    for (var i = 0; i < names.length; ++i)
        window.console[names[i]] = function() {}
}

/* URLs */
var ms_documentDomain = 'cnn.com';
var ms_baseStandard = 'http://audience.cnn.com/services/cnn/';
var ms_baseSecure = 'https://audience.cnn.com/services/cnn/';
var ms_echoURL = 'http://audience.cnn.com/services/cnn/echo.api';
var ms_blankURL = 'http://audience.cnn.com/services/cnn/blank.api?callback=msQueueManager.setIframeReady';
/*
var ms_documentDomain = 'cnn.com';
var ms_baseStandard = 'http://aud-ite.cnn.com/services/cnn/';
var ms_baseSecure = 'http://aud-ite.cnn.com/services/cnn/';
var ms_echoURL = 'http://aud-ite.cnn.com/services/cnn/echo.api';
var ms_blankURL = 'http://aud-ite.cnn.com/services/cnn/blank.api?callback=msQueueManager.setIframeReady';
*/

/* GLOBAL VARS */
var msIframeDiv = 'cnnConnectMsIframe';
var msQueueManager = null;

/* STORAGE */
var msStorage = {};

/* START APP */
document.domain = ms_documentDomain; // document domain always needs to be set to root
msQueueManager = new ms_QueueManager(); // create global queue manager instance

/* GLOBAL METHODS */
function ms_isLoggedIn() {
    var authid = allCookies[ 'authid' ] || null;
	if(authid==null) return false;
    else return true;
}

function ms_isNull(thisObj) {
   return (thisObj != 'undefined' && thisObj != null) ? false : true;
}

function ms_getEmails(view) {
    var queueItem = new ms_QueueItem(ms_baseStandard+'user.api', 'get');
    queueItem.addParam('action', 'getEmails');
    queueItem.addParam('callback', view);
    var queueItemObj = queueItem.getQueueItem();
    msQueueManager.addRequest(queueItemObj);
}

function ms_uiGetEmails(jsonResponse) {
    msQueueManager.requestReceived(); // lets iJax know it can process the next request
    var error = (typeof jsonResponse.errors == 'undefined') ? false : true;
    if(error == false) {
        // update ui for successful
        msStorage.emails = jsonResponse.emails;
        var confirm = true;
		$('cnnConnectBreakNewsEmails').style.display = 'block';
        for(var i=0; i<jsonResponse.emails.length; i++) {
            if(jsonResponse.emails[i].isPrimary == 'true' && jsonResponse.emails[i].status != 'confirmed') { confirm = false; }
        }
        if(confirm == false) {
            $('cnnConnectWelcomeNotConfirmed').style.display = 'block';
			$('cnnConnectBreakNewsEmails').style.display = 'none';
        }
    } else {
        // update ui for errors
    }
}

window.msReload = function() {
    if(window.location.href.indexOf('?') > -1) {
        window.location.href = window.location.href.substr(0, window.location.href.indexOf('?'));
    } else {
        window.location.href = window.location.href;
    }
}

function utilSelectOption(selectBox, value) {
    for(var i=0; i<selectBox.options.length; i++) {
        if(selectBox.options[i].value == value) {
            selectBox.selectedIndex = i;
            return;
        }
    }
}

function utilGetSelectValue(selectBox) {
    return selectBox.options[selectBox.selectedIndex].value;
}

/* VALIDATION */
function validateEmail(elementValue) {
    var emailPattern = /^([a-zA-Z0-9_\.\'\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    return emailPattern.test(elementValue); 
}

/* INIT */

function ms_init() {
   // ms_getEmails('ms_uiGetEmails');
    //ms_initAlert();
    //ms_initOverlay();
    //ms_initNewsletter();
	checkUrlForParams();
    //ms_initProfile();
}
function ms_initProfile() {
    if(ms_isLoggedIn() == true) {
        //if(typeof(msStorage.confirmProfileEmail) == 'undefined') { msStorage.confirmProfileEmail = []; }
        //ms_getEmails('ms_uiGetEmailsProfile');
        //ms_getProfile('ms_uiGetProfile');
		/*var cstate = gup('profile');
		(cstate === 'subscribe') ? '' : */
		//
		//newuser = false;
		//createLoginIframe();
    } else {
    }
}

//TODO: move this to the new domready load
Event.observe(window, "load", function() { ms_init(); });
//end queueConfig.js

//begin user.js
/* LOAD */
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); }

function ms_initOverlay() {
    checkUrlForParams();
    generateCaptchaImage();
    if(ms_isLoggedIn() == true) {
        //$('cnnWelcomeLoggedIn').style.display = 'block';
        //$('cnnWelcomeLoggedOut').style.display = 'none';
    } else {
        //$('cnnWelcomeLoggedIn').style.display = 'none';
        //$('cnnWelcomeLoggedOut').style.display = 'block';
    }
}

/* FORM */

function cnn_formConnectLogin(formId) {
    var email = $(formId).email.value;
    var password = $(formId).password.value;

    // client-side validation
    var pass = true;
    var errorText = 'Registration isn\'t complete without your ';
    var validationErrors = [];
    if(validateEmail(email) == false) {
        pass = false;
        validationErrors[validationErrors.length] = 'e-mail address';
		//$(formId).email.value = 'E-mail';
		$('psigninp2_email').addClassName('redtexterror');
		$(formId).email.className = 'redinput_error';
    }
    if(password == '') {
        pass = false;
		$('psigninp2_password').addClassName('redtexterror');
        validationErrors[validationErrors.length] = 'password';
		//$(formId).password.value = 'Password';
		$(formId).password.className = 'redinput_error';
    }
    if(pass) { 
        ms_doLogin(email, password, 'ms_uiDoLogin');
    } else {
        cnnConnectOverlayLoginValidationError('clear');
		if(validationErrors.length == 2) {
            cnnConnectOverlayLoginValidationError('add', 'We need your ' + validationErrors[0] + ' and ' + validationErrors[1] + ' to log in.');
        } else {
			if(validationErrors[0] == 'e-mail address' && validateEmail(email) == false && email != ''){
				cnnConnectOverlayLoginValidationError('add', 'You entered an invalid e-mail address.');
			} else if (validationErrors[0] == 'e-mail address' && email == '') {
				cnnConnectOverlayLoginValidationError('add', 'We need your ' + validationErrors[0] + ' to log in.');
			} else {
            cnnConnectOverlayLoginValidationError('add', 'We need your ' + validationErrors[0] + ' to log in.');
			}
        }
        cnnConnectOverlayLoginValidationError('show');
    }
}

function clearInputErrors() {
	$('cnnOverlayEmail1l').removeClassName('redinput_error');
	$('cnnOverlayEmail1l').value = '';
	$('cnnOverlayPwd').removeClassName('redinput_error');
	$('cnnOverlayPwd').value = '';
	$('psigninp2_email').removeClassName('redtexterror');
	$('psigninp2_password').removeClassName('redtexterror');
	$('cnnConnectLoginErrors').update('');
	$('cnnConnectLoginErrors').hide();
 }

var newuser = false;
function ms_formRegister(formId) {
	newuser = true;
    var email = $(formId).email.value.trim();
    var password = $(formId).password.value;
    var screenname = $(formId).screenName.value.trim();
    //show the screenname with spaces removed.
    $(formId).screenName.value = screenname;

    var captcha = $(formId).captcha.value;
	//if form is submitted the user agrees to the privacy policy
    var privacy = 'domestic_version';
    var newsletters = '';
    if($(formId).specialOffers.checked == true) {
        newsletters = 'member_services';
    }
  
    // client-side validation
    var pass = true;
    var errorText = 'A required field is missing! Registration isn\'t complete without your ';
    var validationErrors = [];
    if(email == '' || validateEmail(email) == false) {
        pass = false;
        validationErrors[validationErrors.length] = 'e-mail address';
        cnnConnectOverlayRegisterError('email');
    } else {
		$('cnnConnectFormRegister').email.className = 'cnnConnectFormbg1 cnn_connectoverlay_email2';
		$('signup_email').previous('p').removeClassName('redtexterror');
	}
    if(password == '') {
        pass = false;
        validationErrors[validationErrors.length] = 'password';
        cnnConnectOverlayRegisterError('password');
    } else if (password.length < 6 || password.indexOf(' ') != -1 || password.length > 10) {
        pass = false;
        cnnConnectOverlayRegisterError('password');
        cnnConnectOverlayError('errorText', 'You entered an invalid password.');
        return;
    } else {
		$('cnnConnectFormRegister').password.className = 'cnnConnectFormbg2 cnn_connectoverlay_password2';
		$('signup_password').previous('p').removeClassName('redtexterror');
	}
    var screenNamePattern = /^\w+$/;
    if(screenname == '') {
        pass = false;
        validationErrors[validationErrors.length] = 'screen name';
        cnnConnectOverlayRegisterError('screenName');
    } else if (screenname.length < 3) {
        pass = false;
        cnnConnectOverlayRegisterError('screenName');
        cnnConnectOverlayError('errorText', 'The screen name that you entered is too short.');
		//$('cnnConnectFormRegister').screenName.className = 'cnnConnectFormbgnone cnn_connectoverlay_screenname cnnredtxt redtexterror';
        return;
    } else if (screenname.length > 12) {
        pass = false;
        cnnConnectOverlayRegisterError('screenName');
        cnnConnectOverlayError('errorText', 'Your screen name must be 3-12 characters; numbers and letters only.');
        return;
    } else if (screenNamePattern.test(screenname) == false) {
        pass = false;
        cnnConnectOverlayRegisterError('screenName');
        cnnConnectOverlayError('errorText', 'Your screen name includes invalid characters.');
        return;
    } else {
	    $('cnnConnectFormRegister').screenName.className = 'cnnConnectFormbg3 cnn_connectoverlay_screenname';
		$('signup_screenname').previous('p').removeClassName('redtexterror');
	}
    if(captcha == '') {
        pass = false;
        validationErrors[validationErrors.length] = 'security word';
        cnnConnectOverlayRegisterError('captcha');
    } else {
	    $('cnnConnectFormRegister').captcha.className = 'cnnConnectFormbg4 cnn_connectoverlay_enterit';
		$('signup_kaptcha_p1').removeClassName('redtexterror');
	}
    /*if(privacy == 'no') {
        pass = false;
        validationErrors[validationErrors.length] = 'Privacy Policy';
    }*/
    if(pass == true) {
	   ms_doRegister(email, password, screenname, captcha, privacy, newsletters, 'ms_uiDoRegister');
    } else {
        switch (validationErrors.length) {
            case 1:
				if(validationErrors[0] == 'e-mail address' && validateEmail(email) == false && email != ''){
					errorText = 'You entered an invalid e-mail address.';
				} else if (validationErrors[0] == 'e-mail address' && email == '') {
				    errorText += validationErrors[0];
				}
                break;
            case 2:
                errorText += validationErrors[0] + ' and ' + validationErrors[1];
                break;
            default:
                for(var i=0; i<validationErrors.length; i++) {
                    errorText += (i == (validationErrors.length -1)) ? 'and ' + validationErrors[i] + '.' : validationErrors[i] + ', ';
                }
                break;
        }
        cnnConnectOverlayError('errorText', errorText);
    }
}

function ms_formResetUserPassword(formId) {
    var email = $(formId).email.value;
    if(validateEmail(email) == false) {
        //Check and resubmit your e-mail address, it does not match our records.
        cnnConnectOverlayForgotValidationError('clear');
        cnnConnectOverlayForgotValidationError('add', 'You must enter your e-mail address to reset your password.');
        cnnConnectOverlayForgotValidationError('show');
    } else {
        ms_resetUserPassword(email, 'ms_uiResetUserPassword');
    }
}

function ms_formSetUserPassword(formId) {
    var email = $(formId).email.value;
    var resetCode = $(formId).resetCode.value;
    var newPassword = $(formId).newPassword.value;
    //var confirmNewPassword = $(formId).confirmNewPassword.value;
    //a temporary fix to the redesign of reset without a confirmation box
	var confirmNewPassword = newPassword;
	
    // client-side validation
    var pass = true;
    var errorText = 'Reset Password isn\'t complete without your ';
    var validationErrors = [];
    if(validateEmail(email) == false || email == 'Email Address') {
        pass = false;
        validationErrors[validationErrors.length] = 'e-mail address';
        cnnConnectOverlayResetError('email');
    } else {
		$('new_password_email').previous('p').removeClassName('redtexterror');
		$('cnnConnectFormReset').email.className = 'cnn_connectoverlay_email3 cnnredtxt';
	}
    if(resetCode == '' || resetCode == 'Reset Code') {
        pass = false;
        validationErrors[validationErrors.length] = 'reset code';
        cnnConnectOverlayResetError('resetCode');
    } else {
		$('reset_code').previous('p').removeClassName('redtexterror');
		$('cnnConnectFormReset').resetCode.className = 'cnn_connectoverlay_password3 cnnredtxt';
	}
    if(newPassword == '' || newPassword == 'New Password') {
        pass = false;
        validationErrors[validationErrors.length] = 'new password';
        cnnConnectOverlayResetError('newPassword');
    } else {
		$('new_password').previous('p').removeClassName('redtexterror');
		$('cnnConnectFormReset').newPassword.className = 'cnn_connectoverlay_password4 cnnredtxt';
	}
    /*if(confirmNewPassword == '' || confirmNewPassword == 'Confirm New Password') {
        pass = false;
        validationErrors[validationErrors.length] = 'password confirmation';
        cnnConnectOverlayResetError('confirmNewPassword');
    }*/
    if(pass == true) {
        ms_setUserPassword(resetCode, email, newPassword, confirmNewPassword, 'ms_uiSetUserPassword');
    } else {
        cnnConnectOverlayResetValidationError('clear');
        switch (validationErrors.length) {
            case 1:
                errorText += validationErrors[0] + '.';
                break;
            case 2:
                errorText += validationErrors[0] + ' and ' + validationErrors[1] + '.';
                break;
            default:
                for(var i=0; i<validationErrors.length; i++) {
                    errorText += (i == (validationErrors.length -1)) ? 'and ' + validationErrors[i] + '.' : validationErrors[i] + ', ';
                }
                break;
        }
        cnnConnectOverlayResetValidationError('add', errorText);
        cnnConnectOverlayResetValidationError('show');
    }
}

/* API */

function ms_doLogout() {
    CNN_removeCookie('the_forum', '/', 'cnn.com');
    CNN_removeCookie('authid', '/', 'cnn.com');
    CNN_removeCookie('authpass', '/', 'cnn.com');
    CNN_removeCookie('displayname', '/', 'cnn.com');
    CNN_removeCookie('firstName', '/', 'cnn.com');
	//alert('reload from doLogout');
    window.msReload();
    var queueItem = new ms_QueueItem(ms_baseStandard+'logout.api', 'post');
    queueItem.addParam('callback', 'ms_uiDoLogout');
    var queueItemObj = queueItem.getQueueItem();
    msQueueManager.addRequest(queueItemObj);
	//frames['bialogin_iframe'].location.replace('http://cnn.disq.us/saml/cnn/logout');
	//this needs to change
	document.location = 'http://www.disqus.com/saml/cnn/logout/?target=' + document.location;
}

function ms_doLogin(email, password, view) {
    var queueItem = new ms_QueueItem(ms_baseStandard+'login.api', 'post');
    queueItem.addParam('email', email);
    queueItem.addParam('password', password);
    queueItem.addParam('echourl', ms_echoURL);
    queueItem.addParam('callback', view);
    var queueItemObj = queueItem.getQueueItem();
    msQueueManager.addRequest(queueItemObj);
}

function createLoginIframe() {
	var divId = 'disqus_login';
	iframeDivId = divId;
	iframeId = divId+'_iframe';
	//iframeBlankUrl = ms_baseStandard + 'gsso?assertionConsumerUrl=http://www.disqus.com/saml/cnn/postback/&target=' + document.location;
	//this is a  hardcoded disqus call to audience
	var disqusCallBackPath = location.href;
	disqusCallBackPath = disqusCallBackPath.split('/');
	disqusCallBackPath = 'http://' + disqusCallBackPath[2] + '/.element/ssi/www/misc/3.0/connect/connect-disqus-target.html';
	iframeBlankUrl = ms_baseStandard + '/gsso?assertionConsumerUrl=http://www.disqus.com/saml/cnn/postback/&target=' + disqusCallBackPath;
	var thebody = document.getElementsByTagName("body")[0];
	var tempIFrame=document.createElement('iframe');
	tempIFrame.setAttribute('id',iframeId);
	tempIFrame.setAttribute('name',iframeId);
	tempIFrame.style.position='absolute';
	tempIFrame.style.bottom='0';
	tempIFrame.style.left='-600px';
	thebody.appendChild(tempIFrame);
	frames[iframeId].location.replace(iframeBlankUrl);
}

function ms_doRegister(email, password, screenname, captcha, privacy, newsletters, view) {    
    var queueItem = new ms_QueueItem(ms_baseStandard+'register.api', 'post');
    queueItem.addParam('email', email);
    queueItem.addParam('password', password);
    queueItem.addParam('displayname', screenname);
    queueItem.addParam('kaptcha', captcha);
    queueItem.addParam('privacy', privacy);
    queueItem.addParam('newsletters', newsletters);
    queueItem.addParam('echourl', ms_echoURL);
    queueItem.addParam('callback', view);
	if(location.hostname.indexOf('edition') != -1){
	queueItem.addParam('pid', 'intl.default');
	};
    var queueItemObj = queueItem.getQueueItem();
    msQueueManager.addRequest(queueItemObj);    
}

function ms_resetUserPassword(email, view) {
    var queueItem = new ms_QueueItem(ms_baseStandard+'passwordRecovery.api', 'post');
    queueItem.addParam('action', 'sendResetPasswordCode');
    queueItem.addParam('email', email);
    queueItem.addParam('callback', view);
    var queueItemObj = queueItem.getQueueItem();
    msQueueManager.addRequest(queueItemObj);
}

function ms_setUserPassword(resetCode, email, password, confirmPassword, view) {
    var queueItem = new ms_QueueItem(ms_baseStandard+'passwordRecovery.api', 'post');
    queueItem.addParam('action', 'changePassword');
    queueItem.addParam('email', email);
    queueItem.addParam('resetCode', resetCode);
    queueItem.addParam('password', password);
    queueItem.addParam('confirmPassword', confirmPassword);
    queueItem.addParam('callback', view);
    var queueItemObj = queueItem.getQueueItem();
    msQueueManager.addRequest(queueItemObj);
}

function ms_sendConfirmEmailAgain(email, view) {
    var queueItem = new ms_QueueItem(ms_baseStandard+'emailConfirm.api', 'post');
    queueItem.addParam('action', 'resendEmailConfirmation');
    queueItem.addParam('email', email);
    queueItem.addParam('callback', view);
    var queueItemObj = queueItem.getQueueItem();
    msQueueManager.addRequest(queueItemObj);
}

/* RESPONSE */

function ms_uiDoLogout(jsonResponse) {
    msQueueManager.requestReceived(); // lets iJax know it can process the next request
    var error = (typeof jsonResponse.errors == 'undefined') ? false : true;
    if(error == false) {
        // update ui for successful
		CNN_updateHeaderOptions();
		//alert('reload from uiDoLogout');
        window.msReload();
    } else {
        // update ui for errors
		//alert('reload from uiDoLogoutElse');
        window.msReload();
    }
}


function ms_uiDoLogin(jsonResponse) {
    msQueueManager.requestReceived(); // lets iJax know it can process the next request
    var error = (typeof jsonResponse.errors == 'undefined') ? false : true;
    if(error == false) {
        // update ui for successful
        $('profile_overlaybg').hide();
		$('profile_signin_overlay').hide();
		CNN_updateHeaderOptions();
        createLoginIframe();
    } else {
        // update ui for errors
        cnnConnectOverlayLoginValidationError('clear');
        cnnConnectOverlayLoginValidationError('add', 'Your email address or password doesn\’t match our records. Please try again.');
        cnnConnectOverlayLoginValidationError('show');
    }
}

function ms_uiDoRegister(jsonResponse) {
    msQueueManager.requestReceived(); // lets iJax know it can process the next request
    var error = (typeof jsonResponse.errors == 'undefined') ? false : true;
    if(error == false) {
        // update ui for successful
		closeOverlay('profile_signup_overlay');
		//show registration confirmation
		showOverlay('profile_followtopic11_overlay');
    } else {
        cnnConnectOverlayError('clearErrorText');
        for(var i=0; i<jsonResponse.errors.length; i++) {
            switch (jsonResponse.errors[i]) {
                case 'email address not available':
                    cnnConnectOverlayRegisterError('email');
                    cnnConnectOverlayError('addErrorText', 'That e-mail address is already taken.<br/>');
                    break;
                case 'missing email address':
                    cnnConnectOverlayRegisterError('email');
                    cnnConnectOverlayError('addErrorText', 'You forgot to enter your e-mail address.<br/>');
                    break;
                case 'bad email address':
                    cnnConnectOverlayRegisterError('email');
                    cnnConnectOverlayError('addErrorText', 'You entered an invalid e-mail address.<br/>');
                    break;
                case 'missing password':
                    cnnConnectOverlayRegisterError('password');
                    cnnConnectOverlayError('addErrorText', 'You forgot to enter your password.<br/>');
                    break;
                case 'bad password':
                    cnnConnectOverlayRegisterError('password');
                    cnnConnectOverlayError('addErrorText', 'You entered an invalid password.<br/>');
                    break;
                case 'missing screen name':
                    cnnConnectOverlayRegisterError('screenName');
                    cnnConnectOverlayError('addErrorText', 'You forgot to enter your screen name.<br/>');
                    break;
                case 'screen name not available':
                    cnnConnectOverlayRegisterError('screenName');
                    cnnConnectOverlayError('addErrorText', 'That screen name is already taken. Please choose another.<br/>');
                    break;
                case 'missing captcha':
                    cnnConnectOverlayRegisterError('captcha');
                    cnnConnectOverlayError('addErrorText', 'You forgot to type in the security word in the grey box.<br/>');
                    break;
                case 'bad captcha':
                    cnnConnectOverlayRegisterError('captcha');
                    cnnConnectOverlayError('addErrorText', 'You entered the security word in the grey box incorrectly.<br/>');
                    break;
                case 'missing privacy policy':
                    cnnConnectOverlayError('addErrorText', 'You must agree to the privacy policy.<br/>');
                    break;
                default:
                    break;
            }
        }
        cnnConnectOverlayError('showErrorText');
    }
}

function ms_uiResetUserPassword(jsonResponse) {
    msQueueManager.requestReceived(); // lets iJax know it can process the next request
    var forgotFormId = 'cnnConnectFormForgot';
    var resetFormId = 'cnnConnectFormReset';
    var error = (typeof jsonResponse.errors == 'undefined') ? false : true;
    var html = '';
    if(error == false) {
        // update ui for successful
        cnnConnectOverlayUpdate('forgot2reset');
    } else {
        cnnConnectOverlayForgotValidationError('clear');
        cnnConnectOverlayForgotValidationError('add', 'Your e-mail address doesn\'t match our records. Please try again.');
        cnnConnectOverlayForgotValidationError('show');
    }
}

function ms_uiSetUserPassword(jsonResponse) {
    msQueueManager.requestReceived(); // lets iJax know it can process the next request
    var error = (typeof jsonResponse.errors == 'undefined') ? false : true;
    if(error == false) { 
        // update ui for successful
        //cnnConnectOverlayUpdate('reset2login');
        cnnConnectOverlayUpdate('reset2loginsuccess');
    } else {
        cnnConnectOverlayResetValidationError('clear');
        for(var i=0; i<jsonResponse.errors.length; i++) {
            switch (jsonResponse.errors[i]) {
                case 'missing email address':
                    cnnConnectOverlayResetError('email');
                    cnnConnectOverlayResetValidationError('add', 'You forgot to enter your e-mail address.<br/>');
                    break;
                case 'profile not found':
                    cnnConnectOverlayResetError('email');
                    cnnConnectOverlayResetValidationError('add', 'Your e-mail address or reset code doesn\'t match our records. Please try again.<br/>');
                    break;
                case 'missing new password':
                    cnnConnectOverlayResetError('newPassword');
                    cnnConnectOverlayResetValidationError('add', 'You forgot to enter your new password.<br/>');
                    break;
                case 'missing confirm new password':
                    cnnConnectOverlayResetError('confirmNewPassword');
                    cnnConnectOverlayResetValidationError('add', 'You forgot to confirm your new password.<br/>');
                    break;
                case 'confirm password did not match':
                    cnnConnectOverlayResetError('newPassword');
                    cnnConnectOverlayResetError('confirmNewPassword');
                    cnnConnectOverlayResetValidationError('add', 'Your passwords do not match.<br/>');
                    break;
                case 'reset code has expired':
                    cnnConnectOverlayResetError('resetCode');
                    cnnConnectOverlayResetValidationError('add', 'Your reset code has expired. <a href="javascript: void(0);" onclick="closeOverlay(\'profile_forgotpass2_overlay\');showOverlay(\'profile_forgotpass_overlay\');">Send another e-mail</a> with an updated link and reset code to reset your password.<br/>');
                    break;
                default:
					cnnConnectOverlayResetError('default');
					cnnConnectOverlayResetValidationError('add', 'We\'re sorry! This service is temporarily unavailable. Please try again soon.');
                    break;
            }
        }
        cnnConnectOverlayResetValidationError('show');
    }
}

function ms_uiSendConfirmEmailAgain(jsonResponse) {
    msQueueManager.requestReceived(); // lets iJax know it can process the next request
    var error = (typeof jsonResponse.errors == 'undefined') ? false : true;
    if(error == false) {
        // update ui for successful
    } else {
    }
}

/* GUI */

function cnnConnectOverlayUpdate(option) {
    /*  use this function when you need multiple view changes to occur
        otherwise just call the single functions directly */
        
    switch (option) {
        case "login2forgot":
            cnnConnectOverlayResetGetEmailFromLogin();
            cnnConnectOverlayHideLogin();
            cnnConnectOverlayShowForgot();
            cnnConnectOverlayClearLogin();
            break;
        case "forgot2reset":
            cnnConnectOverlayHideForgot();
            cnnConnectOverlayGetEmailFromForgot();
            cnnConnectOverlayClearForgot();
            cnnConnectOverlayShowReset();
            break;
        case "all2login":
            cnnConnectOverlayHideForgot();
            cnnConnectOverlayHideReset();
            cnnConnectOverlayClearRegister();
            cnnConnectOverlayShowLogin();
            break;
        case "forgot2login":
            cnnConnectOverlayHideForgot();
            cnnConnectOverlayShowLogin();
            cnnConnectOverlayClearForgot();
            break;
        case "reset2login":
            cnnConnectOverlayHideReset();
            cnnConnectOverlayLoginShowText1();
            cnnConnectOverlayShowLogin();
            cnnConnectOverlayClearReset();
            break;
        case "2resetWithCode":
            cnnConnectOverlayShowResetWithPasscode('test1@test.com', 'asdf');
            cnnConnectOverlayHideLogin();
            cnnConnectOverlayShowReset();
            break;
        case "forgot2resetWithoutCode":
            cnnConnectOverlayShowMsg2();
            cnnConnectOverlayHideForgot();
            cnnConnectOverlayShowReset();
            break;
        case "reset2loginsuccess":
            cnnConnectOverlayHideReset();
            cnnConnectOverlayLoginShowText2();
            cnnConnectOverlayShowLogin();
            cnnConnectOverlayClearReset();
            break;
    }
}

function cnnConnectOverlayShowOverlay() {
    $('cnnConnectOverlayBox').show();
}

function cnnConnectOverlayHideOverlay() {
	cnnConnectOverlayUpdate("all2login");
    $('cnnConnectOverlayBox').hide();
}

function cnnConnectOverlayShowLogin() {
    //$('cnnConnectLoginContainer').show();
	showOverlay('profile_signin_overlay');
}

function cnnConnectOverlayHideLogin() {
    //$('cnnConnectLoginContainer').hide();
	closeOverlay('profile_signin_overlay');
}

function cnnConnectOverlayClearLogin() {
    cnnConnectOverlayLoginShowText1();
    $('cnnConnectLoginErrors').hide();
    $('cnnConnectFormLogin').email.value = '';
    $('cnnConnectFormLogin').password.value = '';
    $('cnnConnectFormLogin').email.className = 'cnnConnectFormbg5 cnn_connectoverlay_email';
    $('cnnConnectFormLogin').password.className = 'cnnConnectFormbg6 cnn_connectoverlay_password';
	$('psigninp2_email').removeClassName('redtexterror');
	$('psigninp2_password').removeClassName('redtexterror');
}

function cnnConnectOverlayLoginShowText1() {
    //$('cnnConnectLoginText2').hide();
    //$('cnnConnectLoginText1').show();
}

function cnnConnectOverlayLoginShowText2() {
    //$('cnnConnectLoginText1').hide();
    //$('cnnConnectLoginText2').show();
}

function cnnConnectOverlayLoginValidationError(type, text) {
    switch (type) {
        case "clear":
            $('cnnConnectLoginErrors').hide();
            $('cnnConnectLoginErrors').innerHTML = '<br/>';
			$('cnnConnectFormLogin').email.removeClassName('redinput_error');
			$('cnnConnectFormLogin').password.removeClassName('redinput_error');
			$('psigninp2_email').removeClassName('redtexterror');
			$('psigninp2_password').removeClassName('redtexterror');
            break;
        case "add":
			$('psigninp2_email').addClassName('redtexterror');
			$('psigninp2_password').addClassName('redtexterror');
            $('cnnConnectLoginErrors').innerHTML += text;
            break;
        case "show":
            $('cnnConnectFormLogin').email.className = 'redinput_error';
            $('cnnConnectFormLogin').password.className = 'redinput_error';
            //$('cnnConnectFormLogin').password.value = 'Password';
            //$('cnnConnectFormLogin').password.type = 'text';
			//$('psigninp2_email').className = 'psigninp2 redtexterror';
			//$('psigninp2_password').className = 'psigninp2 redtexterror';
            $('cnnConnectLoginErrors').className = 'redtexterror';
			$('cnnConnectLoginErrors').show();
            break;
    }
}

function cnnConnectOverlayShowForgot() {
    //$('cnnConnectForgotContainer').show();
	showOverlay('profile_forgotpass_overlay');
}

function cnnConnectOverlayHideForgot() {
    //$('cnnConnectForgotContainer').hide();
	closeOverlay('profile_forgotpass_overlay');
}

function cnnConnectOverlayClearForgot() {
    $('cnnConnectForgotErrors').hide();
    $('cnnConnectFormForgot').email.value = '';
    $('cnnConnectFormForgot').email.className = 'cnnConnectFormbg5 cnn_connectoverlay_email';
}

function cnnConnectOverlayForgotShowErrors() {
    $('cnnConnectFormForgot').email.className = 'cnn_connectoverlay_email cnnredtxt redinput_error';
    $('cnnConnectForgotErrors').className = 'redtexterror';
	$('forgotpass_email').addClassName('redtexterror');
	$('cnnConnectForgotErrors').show();
}

function cnnConnectOverlayResetGetEmailFromLogin() {
    if($('cnnConnectFormLogin').email.value != '') {
        $('cnnConnectFormForgot').email.value = $('cnnConnectFormLogin').email.value;
        $('cnnConnectFormForgot').email.className = 'cnnConnectFormbgnone cnn_connectoverlay_email';
    }
}

function cnnConnectOverlayForgotValidationError(type, text) {
    switch (type) {
        case "clear":
			$('forgotpass_email').removeClassName('redtexterror');
            $('cnnConnectForgotErrors').hide();
            $('cnnConnectForgotErrors').innerHTML = '<br/>';
            break;
        case "add":
			$('forgotpass_email').addClassName('redtexterror');
            $('cnnConnectForgotErrors').innerHTML += text;
            break;
        case "show":
            $('cnnConnectFormForgot').email.className = 'cnn_connectoverlay_email cnnredtxt redinput_error';
            $('cnnConnectForgotErrors').className = 'redtexterror';
			$('forgotpass_email').addClassName('redtexterror');
			$('cnnConnectForgotErrors').show();
            break;
    }
}

function cnnConnectOverlayShowReset() {
    //$('cnnConnectResetContainer').show();
	showOverlay('profile_forgotpass2_overlay');
}

function cnnConnectOverlayHideReset() {
    closeOverlay('profile_forgotpass2_overlay');
}

function cnnConnectOverlayClearReset() {
    
    //$('cnnConnectFormReset').email.value = 'Email Address';
    //$('cnnConnectFormReset').resetCode.value = 'Reset Code';
    //$('cnnConnectFormReset').newPassword.value = 'New Password';
    //$('cnnConnectFormReset').confirmNewPassword.value = 'Confirm New Password';
    
    //$('cnnConnectFormReset').newPassword.type = 'text';
    //$('cnnConnectFormReset').confirmNewPassword.type = 'text';
    
    //$('cnnConnectFormReset').email.className = 'cnngraytxt cnn_connectoverlay_email3';
    //$('cnnConnectFormReset').resetCode.className = 'cnngraytxt cnn_connectoverlay_password3';
    //$('cnnConnectFormReset').newPassword.className = 'cnngraytxt cnn_connectoverlay_password4';
    //$('cnnConnectFormReset').confirmNewPassword.className = 'cnngraytxt cnn_connectoverlay_password5';
    
//    $('cnnConnectResetText1').hide();
//    $('cnnConnectResetText2').hide();
    
    cnnConnectOverlayResetValidationError('clear');
}

function cnnConnectOverlayGetEmailFromForgot() {
    $('cnnConnectFormReset').email.value = $('cnnConnectFormForgot').email.value;
    $('cnnConnectFormReset').email.className = 'cnnblacktxt cnn_connectoverlay_email3';
	showOverlay('profile_forgotpass2_overlay');
    cnnConnectOverlayShowMsg1()
}

function cnnConnectOverlayShowResetWithPasscode(email, resetCode) {
    $('cnnConnectFormReset').email.value = email;
    $('cnnConnectFormReset').email.className = 'cnnblacktxt cnn_connectoverlay_email3';
    $('cnnConnectFormReset').resetCode.value = resetCode;
    $('cnnConnectFormReset').resetCode.className = 'cnnblacktxt cnn_connectoverlay_password3';
    cnnConnectOverlayShowMsg2()
}

function cnnConnectOverlayShowMsg1() {
    //$('cnnConnectResetText1').show();
	showOverlay('profile_forgotpass2_overlay');
}

function cnnConnectOverlayShowMsg2() {
    //$('cnnConnectResetText2').show();
	showOverlay('profile_forgotpass2_overlay');
}

function cnnConnectOverlayResetValidationError(type, text) {
    switch (type) {
        case "clear":
            $('cnnConnectResetErrors').hide();
            $('cnnConnectResetErrors').innerHTML = '<br/>';
            break;
        case "add":
            $('cnnConnectResetErrors').innerHTML += text;
            break;
        case "show":
			$('cnnConnectResetErrors').className = 'redtexterror';
            $('cnnConnectResetErrors').show();
            break;
    }
}

function cnnConnectOverlayResetError(field) {
    switch (field) {
        case "email":
            $('cnnConnectFormReset').email.className = 'cnn_connectoverlay_email3 cnnredtxt redinput_error';
			$('new_password_email').previous('p').addClassName('redtexterror');
            break;
        case "resetCode":
            $('cnnConnectFormReset').resetCode.className = 'cnn_connectoverlay_password3 cnnredtxt redinput_error';
			$('reset_code').previous('p').addClassName('redtexterror');
            break;
        case "newPassword":
            $('cnnConnectFormReset').newPassword.className = 'cnn_connectoverlay_password4 cnnredtxt redinput_error';
			$('new_password').previous('p').addClassName('redtexterror');
            break;
        case "confirmNewPassword":
            $('cnnConnectFormReset').confirmNewPassword.className = 'cnn_connectoverlay_password5 cnnredtxt redinput_error';
            break;
		default:
			$('new_password_email').previous('p').addClassName('redtexterror');
			$('cnnConnectFormReset').email.className = 'cnn_connectoverlay_email3 cnnredtxt redinput_error';
			$('reset_code').previous('p').addClassName('redtexterror');
			$('cnnConnectFormReset').resetCode.className = 'cnn_connectoverlay_password3 cnnredtxt redinput_error';
			$('new_password').previous('p').addClassName('redtexterror');
			$('cnnConnectFormReset').newPassword.className = 'cnn_connectoverlay_password4 cnnredtxt redinput_error';
			break;
    }
}

function cnnConnectOverlayShowRegister() {
    $('cnnConnectResetContainer').show();
}

function cnnConnectOverlayHideRegister() {
    $('cnnConnectResetContainer').hide();
}

function cnnConnectOverlayClearRegister() {
    $('cnnConnectFormRegister').email.value = '';
    $('cnnConnectFormRegister').password.value = '';
    $('cnnConnectFormRegister').screenName.value = '';
    $('cnnConnectFormRegister').captcha.value = '';
    
    $('cnnConnectFormRegister').email.className = 'cnnConnectFormbg1 cnn_connectoverlay_email2';
    $('cnnConnectFormRegister').password.className = 'cnnConnectFormbg2 cnn_connectoverlay_password2';
    $('cnnConnectFormRegister').screenName.className = 'cnnConnectFormbg3 cnn_connectoverlay_screenname';
    $('cnnConnectFormRegister').captcha.className = 'cnnConnectFormbg4 cnn_connectoverlay_enterit';
	
	$('signup_email').previous('p').removeClassName('redtexterror');
	$('signup_password').previous('p').removeClassName('redtexterror');
	$('signup_screenname').previous('p').removeClassName('redtexterror');
	$('signup_kaptcha_p1').removeClassName('redtexterror');

    //$('cnnConnectFormRegister').privacyPolicy.checked = false;
    //$('cnnConnectFormRegister').breakingNewsAlerts.checked = false;
    //$('cnnConnectFormRegister').specialOffers.checked = true;
    
    $('cnnConnectRegisterErrors').hide();
    
    generateCaptchaImage();
}

function cnnConnectOverlayError(error, errorMessage) {
    switch(error) {
        case "email":
            if($('cnnConnectFormRegister').email.value != '') $('cnnConnectFormRegister').email.className = 'cnnConnectFormbgnone cnn_connectoverlay_email2 cnnredtxt redinput_error';
			break;
        case "password":
            if($('cnnConnectFormRegister').password.value != '') $('cnnConnectFormRegister').password.className = 'cnnConnectFormbgnone cnn_connectoverlay_password2 cnnredtxt redinput_error';
			break;
        case "errorText":
            $('cnnConnectRegisterErrors').hide();
            $('cnnConnectRegisterErrors').innerHTML = errorMessage;
			$('cnnConnectRegisterErrors').className = 'redtexterror';
            $('cnnConnectRegisterErrors').show();
            break;
        case "clearErrorText":
            $('cnnConnectRegisterErrors').hide();
			$('cnnConnectRegisterErrors').className = '';
            $('cnnConnectRegisterErrors').innerHTML = '';
            break;
        case "addErrorText":
            $('cnnConnectRegisterErrors').innerHTML += errorMessage;
			$('cnnConnectRegisterErrors').className = 'redtexterror';
            break;
        case "showErrorText":
			$('cnnConnectRegisterErrors').className = 'redtexterror';
            $('cnnConnectRegisterErrors').show();
            break;
    }
}

function cnnConnectOverlayRegisterError(field) {
    switch (field) {
        case "email":
            $('cnnConnectFormRegister').email.className = 'cnnConnectFormbgnone cnn_connectoverlay_email2 cnnredtxt redinput_error';
			$('signup_email').previous('p').addClassName('redtexterror');
			//$('cnnConnectFormRegister').email.value = '* E-mail';
            break;
        case "password":
            $('cnnConnectFormRegister').password.className = 'cnnConnectFormbgnone cnn_connectoverlay_password2 cnnredtxt redinput_error';
			$('signup_password').previous('p').addClassName('redtexterror');
			//$('cnnConnectFormRegister').password.type = 'text';
            //$('cnnConnectFormRegister').password.value = '* Password (Make it 6-10 characters, and don\'t use spaces)';
            break;
        case "screenName":
            $('cnnConnectFormRegister').screenName.className = 'cnnConnectFormbgnone cnn_connectoverlay_screenname cnnredtxt redinput_error';
			$('signup_screenname').previous('p').addClassName('redtexterror');
            //$('cnnConnectFormRegister').screenName.value = '* Screen Name (Select one with 3-12 characters; number and letters only)';
            break;
        case "captcha":
            $('cnnConnectFormRegister').captcha.className = 'cnnConnectFormbgnone cnn_connectoverlay_enterit cnnredtxt redinput_error';
			$('signup_kaptcha_p1').addClassName('redtexterror');
			$('cnnConnectRegisterErrors').className = 'redtexterror';
            //$('cnnConnectFormRegister').captcha.value = '* Type what you see in the grey box';
            break;
    }
}
function getRandomId() {
	var randomId = Math.round(Math.random()*9999999999);
	return randomId;
}
function generateCaptchaImage() {
    var randKaptchaId = getRandomId();
	$('cnnConnectCaptchaImage').src= ms_baseStandard + "kaptcha?challenge_id=" + randKaptchaId;
	$('cnnConnectCaptchaImage').width= '200';
	$('cnnConnectCaptchaImage').height= '50';
}

function showToggleOverlay() {
    var divId = 'cnnConnectOverlayBox';
    if($(divId).style.display == 'none') {
        $(divId).style.display = 'block';
        centerDivOfPage('cnnConnectOverlayBox');
        cnnConnectOverlayClearLogin();
    } else {
        $(divId).style.display = 'none';
    }
}

function checkUrlForParams() {
    if(location.href.indexOf("code=") != -1) {
        var queryVars = location.href.toQueryParams();
        cnnConnectOverlayShowResetWithPasscode(queryVars.email, queryVars.code);
        cnnConnectOverlayHideLogin();
        cnnConnectOverlayShowReset();
        //showToggleOverlay();
    } else if(location.href.indexOf('emailConfirmed=success') > -1) {
        // add for successful confirmation of email
        showOverlayMessage(1);
        //showToggleOverlay();
    } else if(location.href.indexOf('emailConfirmed=error') > -1) {
        showOverlayMessage(2);
    }
}

function showOverlayMessage(option) {

    if(option == 'hide') {
        $('cnnConnectMessageContent').innerHTML = '';
        $('cnnConnectMessageContainer').style.display = 'none';
    } else {
    
        var overlayMessage = [];
        
        // thank you for registering
        if(typeof(msStorage.profile) == 'undefined') {
            overlayMessage[0] = '<h1>Thanks! You are a CNN.com member</h1>';        
        } else {
            if(msStorage.profile.firstName != '') {
                overlayMessage[0] = '<h1>Thanks, <span id="cnnConnectThankYouName">'+msStorage.profile.firstName+'</span>! You are a CNN.com member</h1>';        
            } else if(msStorage.profile.screenName != '') {
                overlayMessage[0] = '<h1>Thanks, <span id="cnnConnectThankYouName">'+msStorage.profile.screenName+'</span>! You are a CNN.com member</h1>';
            } else {
                overlayMessage[0] = '<h1>Thanks! You are a CNN.com member</h1>';
            }
        }

        overlayMessage[0] += '<p class="connectptxt3">You are ready to participate in all activities and conversations on this site. Enjoy!</p>';

        overlayMessage[0] += '<p class="connectptxt4"><div class="cnnConnectReturnLink" onclick="window.msReload();">Go to Your Profile Page</div></p>';
	
	    // thank you for confirming your e-mail address
	    overlayMessage[1] = '<h1>Thank you for confirming your email address.</h1>';
	    overlayMessage[1] += '<p class="connectptxt3">You are ready to participate in all activities and conversations on this site. Enjoy!</p>';
	    if(ms_isLoggedIn() == true) {
	        overlayMessage[1] += '<p class="connectptxt4"><div class="cnnConnectReturnLink" onclick="window.msReload();">Go to Your Profile Page</div></p>';
        }
	
	    // problem confirming your e-mail address
	    overlayMessage[2] = '<h1>There was an error confirming your e-mail address.</h1>';
	    if(ms_isLoggedIn() == true) {
	        overlayMessage[2] += '<p class="connectptxt3">In order to correct this problem, please resend your confirmation e-mail by <a href="javascript:void(0);" onclick="showOverlayMessage(\'hide\');showToggleProfile();">going to Your Profile Page</a>.';
        } else {
            overlayMessage[2] += '<p class="connectptxt3">In order to correct this problem, please resend your confirmation e-mail by logging in and then going to edit my details.';
        }
	    
        $('cnnConnectMessageContainer').style.display = 'block';
	    $('cnnConnectMessageContent').innerHTML = overlayMessage[option];
	    centerDivOfPage('cnnConnectMessageContainer');
	
	}

}
function disqusConnectStatus(errors){
	//this is placed into the connect-disqus-target.html file
	if(errors === false){
		window.msReload();
	} else {
		//TODO: there was a problem connecting to disqus but we will reload anyway with an alert
		//alert('You have been signed into CNN but our commenting service did not respond. You may experience issues leaving comments. Please wait a moment, sign out and try signing in again.');
		window.msReload();
	}
}



//end user.js

//begin overlay.js
//all this code is a mess and needs refactoring
function closeOverlay(divid) { 
	$('profile_overlaybg').hide();
	$(divid).hide();
}

function showOverlay(divid) {
	var vp_height =  document.viewport.getHeight();
	var vp_width =  document.viewport.getWidth();
	var html_height = Math.max(
					document.documentElement["clientHeight"],
					document.body["scrollHeight"],
					document.documentElement["scrollHeight"],
					document.body["offsetHeight"],
					document.documentElement["offsetHeight"]
				);
	var html_width = Math.max(
					document.documentElement["clientWidth"],
					document.body["scrollWidth"],
					document.documentElement["scrollWidth"],
					document.body["offsetWidth"],
					document.documentElement["offsetWidth"]
				);
	var overlay_height = (html_height > vp_height) ? html_height : vp_height;
	var overlay_width = (html_width > vp_width) ? html_width : vp_width;
	
	//detecting for certain overlays
	switch(divid){
		case 'profile_signup_overlay': generateCaptchaImage(); break;
		default: //nothing yet;
	};
	
	if (divid == 'profile_signin_overlay' ) { clearInputErrors(); }
	
	$('profile_overlaybg').setStyle({ width: overlay_width + 'px', height: overlay_height + 'px' });
	$('profile_overlaybg').show();	
	$(divid).show();
	centerDivOfPage(divid);
	globalDiv = divid;
	Event.observe(window, 'resize', function(){
		centerDivOfPage(globalDiv);
	});
}

function showOrHide(divid) { 
	$(divid).toggleClassName('displayon');
}

function hideDiv(divid) {
	$(divid).hide();
}

function getScrollOffset() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}

function centerDivOfPage(divid){
	var scrollOffset = 	getScrollOffset();
	var divWidth = $(divid).getWidth();
	var divHeight = $(divid).getHeight();
	var vpHeight =  document.viewport.getHeight();
	var vpWidth =  document.viewport.getWidth();
	var htmlHeight = Math.max(
					document.documentElement["clientHeight"],
					document.body["scrollHeight"],
					document.documentElement["scrollHeight"],
					document.body["offsetHeight"],
					document.documentElement["offsetHeight"]
				);
	var htmlWidth = Math.max(
					document.documentElement["clientWidth"],
					document.body["scrollWidth"],
					document.documentElement["scrollWidth"],
					document.body["offsetWidth"],
					document.documentElement["offsetWidth"]
				);
	var overlayHeight = (htmlHeight > vpHeight) ? htmlHeight : vpHeight;
	var overlayWidth = (htmlWidth > vpWidth) ? htmlWidth : vpWidth;
	//set overlay width
	$('profile_overlaybg').setStyle({ width: overlayWidth + 'px', height: overlayHeight + 'px' });
	//to position the overlay
	var scrollOffsetY = scrollOffset[1];
	var divLeft = Math.floor((vpWidth / 2) - (divWidth / 2));
	//middle of viewport is going to be offsetX + vpHeight - (divHeight / 2);
	var divTop = Math.floor((scrollOffsetY + (vpHeight / 2)) - (divHeight / 2));
	//test if it is being set off the page
	if((divTop + divHeight) > htmlHeight){
		divTop = ((htmlHeight - divHeight) - 100);
	}
	//pushed off top or off left?
	divTop = (divTop <= 110) ? 110 : divTop;
	divLeft = (divTop <= 9) ? 10 : divLeft;
	$(divid).style.top = divTop + 'px';
	$(divid).style.left = divLeft + 'px';
}
//end overlay.js

function stringTrim(strToTrim) {
	return(strToTrim.replace(/^\s+|\s+$/g, ''));
}

function submitenter(myfield,e){
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;
	if (keycode == 13) {
		$('cnnConnectFormLogin').email.value = stringTrim($('cnnConnectFormLogin').email.value);
		cnn_formConnectLogin('cnnConnectFormLogin');		
		return false;
   } else {
		return true;
   }
}


// begin header updater
var allCookies = CNN_getCookies();
function CNN_updateHeaderOptions(){

	//format url
	var cnnHostName = document.location.hostname;
	if(cnnHostName.indexOf('ireport') > -1){
		cnnHostName = 'www.cnn.com';
	};
	var cnnHostNameArray = cnnHostName.split('.');
	if(cnnHostNameArray[0] == 'newspulse'){
		cnnHostNameArray.splice(0, 1);
	}
	cnnHostName = cnnHostNameArray.join('.');
	
	if(ms_isLoggedIn() == true){
		var html = '<ul>';
		var cnnUserName = (!allCookies.displayname || allCookies.displayname === 'undefined' || allCookies.displayname === '') ? 'My Profile' : allCookies.displayname + '\'s profile';
		html += '<li><a href="http://' + cnnHostName + '/profile/" title="">' + cnnUserName + '</a></li>';
		html += '<li class="no-border no-pad-right"><a href="javascript:void(0)" onclick="ms_doLogout();return false;" title="">Log out</a></li>';
		html += '</ul>';
		$('hdr-auth').innerHTML = html;
	} else {
		var html = '<ul>';
		html += '<li><a href="javascript: void(0)" onclick="showOverlay(\'profile_signup_overlay\');return false;" title="">Sign up</a></li>';
		html += '<li class="no-border no-pad-right"><a href="javascript: void(0);" onclick="showOverlay(\'profile_signin_overlay\');return false;" title="">Log in</a></li>';
		html += '</ul>';
		$('hdr-auth').innerHTML = html;
	}
};
//function for disqus
function onUserInfoLoadComplete(disqusObj){
//do something with the disqus obj?
}


//run once on page load
$(document).observe('dom:loaded', function(){
	//all connect button events should be dropped in here
	//these will be integrated into a config array in the future rewrite of MS
	//	$('button_id').observe('click', function(){
	//		action
	//	});
	CNN_updateHeaderOptions();
/*
	$('cnnConnectFormForgot').observe('keypress', function(event){
		if(event.keyCode == Event.KEY_RETURN) {
			ms_formResetUserPassword('cnnConnectFormForgot');
			Event.stop(event);
		}
	});
	$('cnnConnectFormReset').observe('keypress', function(event){
		if(event.keyCode == Event.KEY_RETURN) {
			ms_formSetUserPassword('cnnConnectFormReset');
			Event.stop(event);
		}
	});
	$('cnnConnectFormRegister').observe('keypress', function(event){
		if(event.keyCode == Event.KEY_RETURN) {
			ms_formRegister('cnnConnectFormRegister')
			Event.stop(event);
		}
	});
	$('cnnConnectFormLogin').observe('keypress', function(event){
		if(event.keyCode == Event.KEY_RETURN) {
			$('cnnConnectFormLogin').email.value = stringTrim($('cnnConnectFormLogin').email.value);
			cnn_formConnectLogin('cnnConnectFormLogin');
			Event.stop(event);
		}
	});
*/
});
// end header updater