/*
    Parameters:
        serv_path = servlet path for ajax signup
        signupForm = id/reference to the form to attach the onsubmit to, or the submit button to attach the onclick to
        signupEmail = the email address field
        loggedOut = if true, will only run if the user is logged out
*/

CARE2.newsletterPopUp = function(serv_path, signupForm, signupEmail, loggedOut, defaultChannels) {
    if(CARE2.loggedIn() && loggedOut) return false;

    var obj = {
        floater: false,
        showHideSubmit: function(e, obj) {
            obj = obj||this;
            var anychecked = false;
            var allIDs = obj.subscriptions.getElementsByTagName('input');
            for(var l,i=0;l=allIDs[i];i++) if(l.checked && l.type=="checkbox") anychecked = true;
            CARE2.setOpacity(obj.submitDisable, 70);
            obj.submitDisable.style.display = (anychecked) ? "none" : "block";
        },
        onSubmit: function(){
            var urlstring = "?request=getoptions&email_address="+this.signupEmail.value;
            var requrl = this.serv_path + urlstring;
            var _self = this;

            var request = YAHOO.util.Connect.asyncRequest('GET', requrl, {
                success: function(o) {
                    if ( o.status != 200 ) {
                        alert("There was an unknown error. Please try again.");
                    } else {
                        var responseText = eval("(" + o.responseText + ")");

                        for(var error,i=0;error=responseText["errors"][i];i++) {
                            if ( (typeof(error["field"] != "undefined")) && (error["field"] == "email") ){
                                alert(error["message"]);
                                return false;
                            }
                        }

                        var allIDs = _self.subscriptions.getElementsByTagName('input');
                        for(var l,i=0;l=allIDs[i];i++) {
                            l.checked = false;
                        }

                        // Assign default checkboxes if they are already subscribed
                        if ((typeof(responseText["errors"][0] == "undefined")) && (typeof(responseText["options"][0]) == "string")) {
                            for (var channel,i=0; channel=responseText["options"][i]; i++) {
                                if($('subscribe_'+channel)) $('subscribe_'+channel).checked = true;
                            }
                        } else if(typeof(responseText["errors"][0] == "undefined") && defaultChannels) {
                            for (var channel,i=0; channel=defaultChannels[i]; i++) {
                                if($('subscribe_'+channel)) $('subscribe_'+channel).checked = true;
                            }
                        }

                        _self.showHideSubmit();

                        if ( !_self.floater ) {
                            $("newsletter_popup").style.display = "block";
                            _self.floater = CARE2.floater("newsletter_popup",{branding:'care2',_onload:function(){
                                $('newsletter_submit').onclick = function() {
                                    this.blur();

                                    var urlstring = "?";
                                    var fields = $("newsletter_popup").getElementsByTagName('input');
                                    for(var f,i=0;f=fields[i];i++)
                                        if ( ((f.type == "checkbox" || f.type == "radio") && f.checked == true) || (f.type == "hidden") )
                                            urlstring += (urlstring == "?") ? f.name+"="+f.value : "&"+f.name+"="+f.value;

                                    _self.floater.box.style.height = "auto";

                                    if (urlstring == "?" || $('newsletter_input2').value == "name@address.com") {
                                        $('newsletter_alert').innerHTML = 'Oops! Please fill in a valid email address and select the tips and stories you\'d like to receive to continue.';
                                        $('newsletter_alert').style.display = "block";
                                    } else {
                                        urlstring += "&request=subscribe&email_address="+$('newsletter_input2').value;
                                        var form = $('care2ActionAlertEmail').form;
                                        //var form = signupEmail.form;
                                        // I don't even like this listtype
                                        // listgroup thing!
                                        if(form && form.listtype) urlstring += "&listtype="+form.listtype.value;
                                        if(form && form.listgroup) urlstring += "&listgroup="+form.listgroup.value;
                                        var requrl = _self.serv_path + urlstring;

                                        var request = YAHOO.util.Connect.asyncRequest('GET', requrl, {
                                            success: function(o) {
                                                if(o.status != 200) {
                                                    $('newsletter_alert').innerHTML = "There was an unknown error. Please try again.";
                                                    $('newsletter_alert').style.display = "block";
                                                } else {
                                                    responseText = eval("(" + o.responseText + ")");
                                                    if ( (typeof(responseText["errors"].length) != "undefined") && responseText["errors"].length > 0 ) {
                                                        // Print error messages we got as response
                                                        for(var error, i=0; error=responseText["errors"][i];i++) {
                                                            if ( (typeof(error["field"] != "undefined")) && (typeof(error["message"] != "undefined"))) {
                                                                $('newsletter_alert').innerHTML += error["field"] + ": " + error["message"] + "<br />";
                                                            }
                                                        }
                                                        $('newsletter_alert').style.display = "block";
                                                    } else {
                                                        _self.floater.hide();
                                                    }
                                                }
                                            },
                                            failure: function(o) {
                                                var responseText = eval("("+o.responseText+")");
                                                $('newsletter_alert').innerHTML = responseText.message;
                                                $('newsletter_alert').style.display = "block";
                                            }
                                        });
                                    }

                                    return false;
                                }
                            }});

                            _self.floater._onclose = function() {
                                $('newsletter_alert').style.display = "none";
                            }
                        } else {
                            _self.floater.show();
                        }

                        $('newsletter_input2').value = _self.signupEmail.value;

                        YAHOO.util.Event.addListener($('newsletter_pop_form').getElementsByTagName('input'), 'click', _self.showHideSubmit, _self);
                    }
                },
                failure: function(o) {
                    alert("There was an unknown error. Please try again.");
                }
            });

            return false;
        },
        checkAll: function(e,check) {
            check = check||false;
            this.blur();
            var allIDs = $('newsletter_pop_form').getElementsByTagName('input');
            for(var l,i=0;l=allIDs[i];i++) if(l.type=="checkbox") l.checked = check;
            obj.showHideSubmit();
        },
        subscriptions: $('newsletter_checkboxes'),
        submitDisable: $('newsSubmitCoverup'),
        signupForm: $(signupForm),
        signupEmail: $(signupEmail),
        serv_path: serv_path
    }

    var listener_type = (obj.signupForm.type && obj.signupForm.type == "submit")  ? "onclick" : "onsubmit";

    obj.signupForm[listener_type] = function(){
        var inps = this.getElementsByTagName('input');
        for(var l,i=0;l=inps[i];i++) if(l.type=="submit") l.blur();

        obj.onSubmit();

        return false;
    }

    if($('toggleAllChannelsCheck')) {
        $('toggleAllChannelsCheck').onclick = function() {
            this.blur();
            return false;
        }
    }

    if($('toggleAllChannelsUnCheck')) {
        $('toggleAllChannelsUnCheck').onclick = function() {
            this.blur();
            return false;
        }
    }

    YAHOO.util.Event.addListener('toggleAllChannelsCheck', 'click', obj.checkAll, true);
    YAHOO.util.Event.addListener('toggleAllChannelsUnCheck', 'click', obj.checkAll, false);

    return obj;
}

