/* LOAD */

function ms_initNewsletter() {
    if(ms_isLoggedIn() == true) {
       if(typeof(msStorage.confirmNewsletter) == 'undefined') { msStorage.confirmNewsletter = []; }
        
		
		//ms_getNewsletters('ms_uiGetNewsletters');
		
				var obj = {
					params: {

					},
					onSuccess: function(response){
						console.log(response);
						ms_uiGetNewsletters(response.responseJSON);
						
					}
		};
		Member.getActiveAndPendingNewsletters(obj);
		
		/*
        $('cnnNewsletterHeadlineLoggedIn').style.display = 'block';
        $('cnnNewsletterHeadlineLoggedOut').style.display = 'none';
        $('cnnNewsletterViewLoggedIn').style.display = 'block';
		*/
    } else {
        /*$('cnnNewsletterHeadlineLoggedIn').style.display = 'none';
        $('cnnNewsletterHeadlineLoggedOut').style.display = 'block';
        $('cnnNewsletterViewLoggedIn').style.display = 'none';
        $('cnnConnectNewsletterLoading').hide();
        $('cnnConnectNewsletterContainer').show();*/
    }
}

/* FORM */
function ms_formAddNewsletter(formId) {
    var email = $(formId).email.value;
    var newsletter = $(formId).newsletter.value;
    ms_addNewsletter(email, newsletter, 'ms_uiAddNewsletter');
}

function ms_formUpdateNewsletter(formObj, status){
	var emails = [];
	var emailsConfirmed = [];
	var emailsUnconfirmed = [];
	var newsAction = '';
	(status == 'sub') ? newsAction = 'subscribe' : newsAction = 'unsubscribe'; 	

	if(typeof(formObj.email) == 'string'){
		//one item checked
		emails.push(formObj.email);
	} else if (typeof(formObj.email) == 'object'){
		//an array is returned with a list of selected emails
		emails = formObj.email;
	} else {
		//pull from storage - nothing specific so use primary
		for(i=0; i<msStorage.emails.length; i++){
			if(msStorage.emails[i].isPrimary == 'true'){
			emails.push(msStorage.emails[i].email);
			}
		}
	}

	for(i=0;i<msStorage.emails.length;i++){
		for(j=0;j<emails.length;j++){
			if(emails[j] == msStorage.emails[i].email && msStorage.emails[i].status == 'confirmed'){
				emailsConfirmed.push(emails[j]);
			} else if (emails[j] == msStorage.emails[i].email && msStorage.emails[i].status == 'unconfirmed'){
				emailsUnconfirmed.push(emails[j]);
			}
		}
	}
	
	for(i=0; i<emailsConfirmed.length; i++){
		if(status == 'sub'){
			ms_addNewsletter(emailsConfirmed[i], formObj.newsletter, 'ms_uiAddNewsletter');
		} else {
			ms_removeNewsletter(emailsConfirmed[i], formObj.newsletter, 'ms_uiRemoveNewsletter')
		}
	};
	
	//better error msg
	
}
/* API */

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

function ms_addNewsletter(email, newsletter, view) {
    var queueItem = new ms_QueueItem(ms_baseStandard+'newsletters.api', 'post');
    queueItem.addParam('action', 'addNewsletter');
    queueItem.addParam('email', email);
    queueItem.addParam('newsletter', newsletter);
    queueItem.addParam('callback', view);
    var queueItemObj = queueItem.getQueueItem();
    msQueueManager.addRequest(queueItemObj);
}

function ms_removeNewsletter(email, newsletter, view) {
    var queueItem = new ms_QueueItem(ms_baseStandard+'newsletters.api', 'post');
    queueItem.addParam('action', 'removeNewsletter');
    queueItem.addParam('email', email);
    queueItem.addParam('newsletter', newsletter);
    queueItem.addParam('callback', view);
    var queueItemObj = queueItem.getQueueItem();
    msQueueManager.addRequest(queueItemObj);
}
/* RESPONSE */
function ms_doNothing(jsonResponse) {
    msQueueManager.requestReceived();
}

function ms_uiGetNewsletters(jsonResponse) {

    var error = (typeof jsonResponse.errors == 'undefined') ? false : true;
    if(error == false) {
        // update ui for successful
        drawNewsletters(jsonResponse);
        //$('cnnConnectNewsletterLoading').hide();
        //$('cnnConnectNewsletterContainer').show();
    } else {
        // update ui for errors
        //$('cnnConnectNewsletterLoadingContent').innerHTML = 'The service is temporarily unavailable, please <a href="javascript:void(0)" onclick="window.msReload();">try again</a> soon.<br/>Thank you for your patience!';
    }
}

var cnn_newsletterChange = '';

function ms_uiAddNewsletter(jsonResponse) {
    msQueueManager.requestReceived(); // lets iJax know it can process the next request
    var error = (typeof jsonResponse.errors == 'undefined') ? false : true;
	if(error == false) {
		//for overlay
		if(cnn_newsletterChange.indexOf('main') < 0){
			$(cnn_newsletterChange).down('.news_subscribe2').removeClassName('displayon').addClassName('displayoff');
			$(cnn_newsletterChange).down('.news_unsubscribe2').removeClassName('displayoff').addClassName('displayon');
		} else {
			$(cnn_newsletterChange).down('.news_subscribe').removeClassName('displayon').addClassName('displayoff');
			$(cnn_newsletterChange).down('.news_unsubscribe').removeClassName('displayoff').addClassName('displayon');			
		}
		newsletterReload++;
    } else {
        // update ui for errors
    }
}

function ms_uiRemoveNewsletter(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
		if(cnn_newsletterChange.indexOf('main') < 0){
			$(cnn_newsletterChange).down('.news_subscribe2').removeClassName('displayoff').addClassName('displayon');
			$(cnn_newsletterChange).down('.news_unsubscribe2').removeClassName('displayon').addClassName('displayoff');
		} else {
			$(cnn_newsletterChange).down('.news_subscribe').removeClassName('displayoff').addClassName('displayon');
			$(cnn_newsletterChange).down('.news_unsubscribe').removeClassName('displayon').addClassName('displayoff');
		}		
		newsletterReload++;
    } else {
        // update ui for errors
    }
}

/* GUI */
var noneSubscribed = false;
function drawNewsletters(jsonObj) {

    updatedList = updateNewsletters(jsonObj);
    msStorage.newsletters = updatedList;    
    var newsletters = msStorage.newsletters; // used to improve performance
    
    for(key in newsletters) { // sets  sub/unsub btn states for overlay
        if(newsletters[key].status=='sub') {
			jQuery("#"+key).find(".news_unsubscribe2").addClass('displayon').show();
			jQuery("#"+key).find(".news_subscribe2").removeClass('displayon').hide();
        } else if (newsletters[key].status=='unsub') {
			jQuery("#"+key).find(".news_unsubscribe2").removeClass('displayon').hide();
			jQuery("#"+key).find(".news_subscribe2").addClass('displayon').show();
		}
	}
	
	var newsletterhtml = [];
	var count = 100;
	var subnumber = 0;
	var newsletterList = getNewsletterList();
    for(key in newsletters) { // sets  sub/unsub btn states for main page featured newsletters module
		if (subnumber >= 6) { break; }
        if(newsletters[key].status=='sub') {
			if(newsletters[key].viewName && newsletters[key].viewName.length > 35){
				newsletters[key].viewName = newsletters[key].viewName.substr(0,35);
				newsletters[key].viewName += '...';
			}
			newsletterhtml += '<div class="a_newsletter"><h3>'+newsletters[key].viewName+'</h3><span id="'+key+'_main"><a href="#" class="news_unsubscribe displayon" onclick="ms_formUpdateNewsletter($(\'cnnConnectUpdateNewsletterForm'+count+'\').serialize(true), \'unsub\'); return false;"></a><a href="#" class="news_subscribe displayoff" onclick="ms_formUpdateNewsletter($(\'cnnConnectUpdateNewsletterForm'+count+'\').serialize(true), \'sub\'); return false;"></a></span><form id="cnnConnectUpdateNewsletterForm'+count+'" onsubmit="return false;"><input type="hidden" value="'+key+'" name="newsletter"/>';
			if(newsletters[key].email.sub.email){
				newsletterhtml += '<input type="hidden" name="email" value="' + newsletters[key].email.sub.email + '" />';
			}
			newsletterhtml += '</form></div>';
			count++;
			subnumber++;
        }
	}
	newsletterhtml += '<div class="newsletter_viewall"><a href="#" onclick="fillNewsletterEmails();showOverlay(\'profile_newsletter_overlay\');return false"></a></div>';
	if (subnumber > 0) {
		jQuery("#newsletter_content").html(newsletterhtml); 
	} else { 
		jQuery("#featured_letter").hide();
		jQuery("#newsletter_content .news_subscribe").hide();
		jQuery("#newsletter_content .news_example").show();
		jQuery("#featured_letter_none").show();
		noneSubscribed = true;
	}
		
	jQuery(".news_unsubscribe").click(function () {  // newsletter unsub button on main
		cnn_newsletterChange = jQuery(this).parent().attr('id');
	});	
	
	jQuery(".news_subscribe").click(function () { // newsletter subscribe button on main
		cnn_newsletterChange = jQuery(this).parent().attr('id');
	});	
}

function updateNewsletters(newsletters) {
    /*  get newsletter list contains the master list for the newsletters.
        the response from the server only sends the pending and active,
        here we match it against the master list to update it to reflect
        what the user has subscribed to */
    var masterList = getNewsletterList();
    var active = newsletters.activeNewsletters;
    for(key in active) {
        nlName = active[key].name
        if(typeof(masterList[nlName]) != 'undefined') {
            masterList[nlName].email.sub = active[key];
            masterList[nlName].status = 'sub';
        }
    }

    var pending = newsletters.pendingNewsletters;
    for(key in pending) {
        nlName = pending[key].name
        if(typeof(masterList[nlName]) != 'undefined') {
            masterList[nlName].email.pending = active[key];
            masterList[nlName].status = 'pending';
        }
    }

    return masterList;

}

var beenFilled = false;
function fillNewsletterEmails() { // setups up user email inputs
	//what a pos - resync master list needed
	var masterList = msStorage.newsletters;
    var emailList = msStorage.emails;
    var newsletter = masterList[name];
    var count = 0;
    var html = '';
    var description = '';
    var status = '';
	if (beenFilled === false) {
		for(var i=0; i<emailList.length; i++) { // add emails to each newletter
			html += '<input type="checkbox" name="email" value="'+emailList[i].email+'"/>'+emailList[i].email+'<br />';
		}
		jQuery(".newsletter_emails").append(html);
		var emailList = msStorage.emails;
		if (emailList.length > 1) {
			jQuery(".cnn_prfnwsox1").show();
		}
	}
	var newsletterList = getNewsletterList();
	for(key in newsletterList) { // selects email subbed status
		if (masterList[key].status == "sub") { 
		var subbedemail = masterList[key].email.sub.email;
		var emailbox = key + "_emails";
		$emailCheck = jQuery("#"+emailbox);
		var len = $emailCheck.children().length;
		for(i=0; i<len; i++) {
			if ($emailCheck.children().eq(i).attr("value") == subbedemail) { 
				$emailCheck.children().eq(i).attr({ checked : "checked"});
			} 
		}
		}
	}
	beenFilled = true;

}

function showEditNewsletter(name) {

    var masterList = msStorage.newsletters;
    var emailList = msStorage.emails;
    var newsletter = masterList[name];
    var count = 0;
    var html = '';
    var description = '';
    var status = '';

    if(typeof(msStorage.emails) != 'undefined') {
        html += '<input type="hidden" name="newsletter" value="'+name+'" />';
        for(var i=0; i<emailList.length; i++) {
            if(emailList[i].status == 'unconfirmed') {
                html += '<input disabled="disabled" type="checkbox" /><span class="cnngraytxt"><strong>'+emailList[i].email+'</strong></span> &nbsp;&nbsp;<span class="cnnredtxt">Unconfirmed</span> (<span id="cnnNewsletterResendEmailLink'+count+'"><a href="javascript:void(0);" onclick="sendConfirmEmailNewsletter(\'cnnNewsletterResendEmailLink'+count+'\', \''+emailList[i].email+'\')">resend e-mail</a></span>)<br />';
                count++;
            } else {
                var status = getStatusOfEmail(emailList[i].email, newsletter);
                if(status == 'sub') {
                    html += '<input type="checkbox" checked="checked" name="email" value="'+emailList[i].email+'"/><strong> '+emailList[i].email+'</strong><br />';
                } else {
                    html += '<input type="checkbox" name="email" value="'+emailList[i].email+'"/><strong> '+emailList[i].email+'</strong><br />';
                }
            }
        }
        if(newsletter.thumbnail != '') {
            description = '<img src="'+newsletter.thumbnail+'" width="160" height="90" alt="" align="left" alt="'+newsletter.viewName+'" />';
        } else {
            description = '<img width="160" height="90" align="left" alt="" src="/.element/img/2.0/sect/connect/160x90_placeholder.gif"/>';
        }
        $('cnnConnectUpdateNewsletterDescription').innerHTML = description + newsletter.description;
		$('cnnConnectSubUn').src = '/.element/img/2.0/sect/connect/save.gif';
        $('cnnConnectUpdateNewsletterName').innerHTML = newsletter.viewName;
        $('cnnConnectUpdateNewsletterInputs').innerHTML = html;
        $('cnnConnectNewsletter_RS').style.display = 'block';
    }
}
function showEditNewsletter2(name) {
    var masterList = msStorage.newsletters;
    var emailList = msStorage.emails;
    var newsletter = masterList[name];
    var count = 0;
    var html = '';
    var description = '';
    var status = '';

    if(typeof(msStorage.emails) != 'undefined') {
        html += '<input type="hidden" name="newsletter" value="'+name+'" />';
        for(var i=0; i<emailList.length; i++) {
            if(emailList[i].status == 'unconfirmed') {
                html += '<input disabled="disabled" type="checkbox" /><span class="cnngraytxt"><strong>'+emailList[i].email+'</strong></span> &nbsp;&nbsp;<span class="cnnredtxt">Unconfirmed</span> (<span id="cnnNewsletterResendEmailLink'+count+'"><a href="javascript:void(0);" onclick="sendConfirmEmailNewsletter(\'cnnNewsletterResendEmailLink'+count+'\', \''+emailList[i].email+'\')">resend e-mail</a></span>)<br />';
                count++;
            } else {
                var status = getStatusOfEmail(emailList[i].email, newsletter);
                if(status == 'sub') {
                    html += '<input type="checkbox" checked="checked" name="email" value="'+emailList[i].email+'"/><strong> '+emailList[i].email+'</strong><br />';
                } else {
                    html += '<input type="checkbox" name="email" value="'+emailList[i].email+'"/><strong> '+emailList[i].email+'</strong><br />';
                }
            }
        }
        if(newsletter.thumbnail != '') {
            description = '<img src="'+newsletter.thumbnail+'" width="160" height="90" alt="" align="left" alt="'+newsletter.viewName+'" />';
        } else {
            description = '<img width="160" height="90" align="left" alt="" src="/.element/img/2.0/sect/connect/160x90_placeholder.gif"/>';
        }
        //$('cnnConnectUpdateNewsletterDescription').innerHTML = description + newsletter.description;
		//$('cnnConnectSubUn').src = '/.element/img/2.0/sect/connect/save.gif';
       // $('cnnConnectUpdateNewsletterName').innerHTML = newsletter.viewName;
        //$('cnnConnectUpdateNewsletterInputs').innerHTML = html;
       // $('cnnConnectNewsletter_RS').style.display = 'block';
    }
}

function getStatusOfEmail(emailAddress, newsletter) { 

    // check if it is in the subscribed emails
    for(var i=0; i<newsletter.email.sub.length; i++) {
        if(emailAddress == newsletter.email.sub[i].email) { return 'sub'; }
    }
    // check if it is in the pending emails
    for(var i=0; i<newsletter.email.pending.length; i++) {
        if(emailAddress == newsletter.email.sub[i].email) { return 'pending'; }
    }
    return 'unsub';
}

function getNewsletterList() {

    var json = {
        "intl-amanpour":{viewName:"Amanpour", description:"null", thumbnail:"null", status:"unsub", email: {sub:[], pending:[]}},
        "member_services":{viewName:"Marketing", description:"null", thumbnail:"null", status:"unsub", email: {sub:[], pending:[]}},
        "cnn-htmlquicknews":{viewName:"CNN Morning News Update (HTML)", description:"Start your day with a rundown of the top news stories from CNN.com.", thumbnail:"/.element/img/2.0/content/email/connect/amfix_120x90.jpg", status:"unsub", email: {sub:[], pending:[]}},
        "cnn-textquicknews":{viewName:"CNN Morning News Update (TEXT)", description:"Start your day with a rundown of the top news stories from CNN.com. ", thumbnail:"/.element/img/2.0/content/email/connect/amfix_text.gif", status:"unsub", email: {sub:[], pending:[]}},
       // "cnn-bia":{viewName:"Black in America", description:"Get the latest news, exclusive behind-the-scenes content and programming alerts as CNN covers the innovative and unexpected ways Americans are transforming the black experience.", thumbnail:"/.element/img/2.0/content/email/connect/160x90_bia.jpg", status:"unsub", email: {sub:[], pending:[]}},
        "intl-htmlasiaheadlines":{viewName:"CNN Asia editorial note", description:"null", thumbnail:"/.element/img/2.0/content/email/connect/160x90_bia.jpg", status:"unsub", email: {sub:[], pending:[]}},
        "intl-htmleuheadlines":{viewName:"CNN Europe editorial note", description:"null", thumbnail:"/.element/img/2.0/content/email/connect/160x90_bia.jpg", status:"unsub", email: {sub:[], pending:[]}},
        //"cnn-heroes":{viewName:"CNN Heroes", description:"Get monthly updates, news and exclusive behind-the-scenes coverage as we search the globe for the 2009 CNN Hero of the Year.", thumbnail:"/.element/img/2.0/content/email/connect/160x90_cnnheroes.jpg", status:"unsub", email: {sub:[], pending:[]}},
        "intl-htmltravel":{viewName:"CNN Partner Hotel specials", description:"null", thumbnail:"/.element/img/2.0/content/email/connect/160x90_bia.jpg", status:"unsub", email: {sub:[], pending:[]}},
        "cnn-health":{viewName:"Health News", description:"Your weekly update on the latest health news.", thumbnail:"/.element/img/2.0/content/email/connect/160x90_health.gif", status:"unsub", email: {sub:[], pending:[]}},
        "intl-insideafrica":{viewName:"Inside Africa", description:"null", thumbnail:"/.element/img/2.0/content/email/connect/160x90_bia.jpg", status:"unsub", email: {sub:[], pending:[]}},
       // "cnn-larryking":{viewName:"Larry King Live", description:"Which celebrity, newsmaker and/or politician will Larry King be talking to tonight? Get Mobile SMS alerts, too!", thumbnail:"/.element/img/2.0/content/email/connect/160x90_larry_king.gif", status:"unsub", email: {sub:[], pending:[]}},
        "cnn-loudobbs":{viewName:"Lou Dobbs Tonight", description:"A daily rundown of the day's issues, the issues that matter.", thumbnail:"/.element/img/2.0/content/email/connect/160x90_lou_dobbs.gif", status:"unsub", email: {sub:[], pending:[]}},
        "cnn-rcshow":{viewName:"Morning Express with Robin Meade", description:"Wake up with \"Morning Express with Robin Meade\" and receive a daily \"Morning Sunshine\" e-mail from Robin.", thumbnail:"/.element/img/2.0/content/email/connect/160x90_express.jpg", status:"unsub", email: {sub:[], pending:[]}},
		"cnn-morninggrind":{viewName:"Political Ticker - weekday edition", description:"Get the latest political news, behind-the-scenes reports and expert commentary from CNN's Best Political Team.", thumbnail:"/.element/img/2.0/content/email/connect/160x90_SOTU_political_ticker.jpg", status:"unsub", email: {sub:[], pending:[]}},
		"cnn-sundaysotu":{viewName:"State of the Union with Candy Crowley", description:"Get a sneak peek from Candy Crowley on what to watch this week in politics, in a special Sunday edition of the \"Political Ticker\" newsletter.", thumbnail:"/.element/img/2.0/content/email/connect/160x90_SOTU_political_ticker.jpg", status:"unsub", email: {sub:[], pending:[]}},		
        "cnn-primenews":{viewName:"HLN's Prime News", description:"Vinnie Politan gives you an inside look at the day's most powerful headlines, giving you a chance to join in on the spirited debate.", thumbnail:"/.element/img/2.0/content/email/connect/160x90_prime_news.gif", status:"unsub", email: {sub:[], pending:[]}},
        "cnn-showbiz":{viewName:"HLN's Showbiz Tonight", description:"A daily update of the most provocative entertainment news from AJ Hammer and Brooke Anderson.", thumbnail:"/.element/img/2.0/content/email/connect/160x90_showbiz.gif", status:"unsub", email: {sub:[], pending:[]}},
        "cnn-situationroom":{viewName:"The Situation Room with Wolf Blitzer", description:"A daily update on the world of raw, unfiltered and live news topics from the producers of \"The Situation Room,\" hosted by Wolf Blitzer.", thumbnail:"/.element/img/2.0/content/email/connect/160x90_situation.gif", status:"unsub", email: {sub:[], pending:[]}},
        "cnn-computing":{viewName:"Tech News", description:"Get a weekly round-up of the latest news in techonlogy.", thumbnail:"/.element/img/2.0/content/email/connect/160x90_tech_news.jpg", status:"unsub", email: {sub:[], pending:[]}},
        "cnn-dailytop10":{viewName:"Today's Top Video", description:"See the 10 most popular videos on CNN.com each day", thumbnail:"/.element/img/2.0/content/email/connect/160x90_daily_top10.gif", status:"unsub", email: {sub:[], pending:[]}},		
        "cnn-primetime":{viewName:"Tonight on CNN", description:"What's on CNN each night? Get a list of CNN prime-time show topics and guests each weekday.", thumbnail:"/.element/img/2.0/content/email/connect/160x90_tonight.gif", status:"unsub", email: {sub:[], pending:[]}},
        "intl-vitalsigns":{viewName:"Vital Signs", description:"null", thumbnail:"/.element/img/2.0/content/email/connect/160x90_tonight.gif", status:"unsub", email: {sub:[], pending:[]}}
    };

    return json;
}

function sendConfirmEmailNewsletter(id, email) {

    msStorage.confirmNewsletter[msStorage.confirmNewsletter.length] = {"id": id, "email": email};
    $(id).innerHTML = 'sending...';
    ms_sendConfirmEmailAgain(email, 'updateConfirmEmailNewsletter');
}

function updateConfirmEmailNewsletter(jsonResponse) {

    msQueueManager.requestReceived(); // lets iJax know it can process the next request
    var confirmNewsletterLocal = msStorage.confirmNewsletter;
    var error = (typeof jsonResponse.errors == 'undefined') ? false : true;
    if(error == false) {
        // update ui for successful
        $(confirmNewsletterLocal[0].id).innerHTML = 'e-mail sent, <a href="javascript:void(0);" onclick="sendConfirmEmailNewsletter(\''+confirmNewsletterLocal[0].id+'\', \''+confirmNewsletterLocal[0].email+'\')">resend</a>';
    } else {
        $(confirmNewsletterLocal[0].id).innerHTML = '<a href="javascript:void(0);" onclick="sendConfirmEmailNewsletter(\''+confirmNewsletterLocal[0].id+'\', \''+confirmNewsletterLocal[0].email+'\')">error, try again</a>';
    }
    // update the local storage object
    if(confirmNewsletterLocal[0].length > 1) {
        var newConfirmNewsletter = msStorage.confirmNewsletter.slice(1);
        msStorage.confirmNewsletter = newConfirmNewsletter;
    } else {
        msStorage.confirmNewsletter = [];
    }
}
