AWEBER = function(){


    /**
    * Shortcut for document.getElementById()
    * @param {id} id of html element to return
    * @method $
    * @return {Object} Html element with id id
    */
    var $ = function(id){
        return document.getElementById(id);
    }

    /**
    * Load the aweber forms dropdown
    * @param {Object} listSelect
    * @param {Object} formsSelect
    * @param {Object} aweberFormHTMLLink
    * @param {} account
    * @method loadFormdDropdown
    * @return {Function} 
    */
    var loadFormsDropdown = function(listSelect, formsSelect, aweberFormHTMLLink, account){
	return function(e){
	    var listName = listSelect.options[listSelect.selectedIndex].value;
	    if(listName!='-1' && account[listName]){
	        var forms = account[listName]['forms'];
		var opt = null;
	        for(formId in forms){
		    opt = $option({'value':forms[formId]['html_source_link']}, forms[formId]['name']);
                    formsSelect.appendChild(opt);
		    if(opt.value==aweberFormHTMLLink){
   		        opt.selected = true;
		    }
	        }
	    }
	}
    }

    /**
    * Render the aweber forms dropdown
    * @param {Object} container
    * @param {Object} aweberFormHTMLLink
    * @param {} account
    * @method renderFormsDropdown
    * @return {Function} 
    */
    var renderFormsDropdown = function(container, aweberFormHTMLLink){
	return function(listSelect, account){
	    if(!$('wpsn_aweberFormsSelect')){
   	        var formsSelect = $select({'id':'wpsn_aweberFormsSelect', 'name':'wpsn_aweberFormsSelect'});
                container.appendChild($li({}, $label({}, 'Form:'), $div({}, formsSelect)));
            }
	    else{
	        var formsSelect = $('wpsn_aweberFormsSelect');
		formsSelect.innerHTML = '';
	    }
	    formsSelect.appendChild($option({'value':'-1'}, 'Please select'));
            // Reload the aweber forms dropdown when the user selects a different aweber list
	    YAHOO.util.Event.on(listSelect, 'change', loadFormsDropdown(listSelect, formsSelect, aweberFormHTMLLink, account));
            loadFormsDropdown(listSelect, formsSelect, aweberFormHTMLLink, account)(null);
	}
    }

    /**
    * Callback for when the lists dropdown is loaded.
    * @param {Object} listSelect
    * @param {string} aweberListName
    * @param {Object} aweberAccountInput
    * @param {Function} loadListSelectCallback
    * @method loadFormdDropdown
    * @return {Function} 
    */
    var loadListSelectSuccess = function(listSelect, aweberListName, aweberAccountInput, loadListSelectCallback){
	return function(o){
            aweberAccountInput.value = o.responseText;
            var account = YAHOO.lang.JSON.parse(o.responseText);
            var opt = null;
	    for(listName in account){
		if(listName!='data'){
                    opt = $option({'value':listName}, listName);
                    listSelect.appendChild(opt);
		    if(opt.value==aweberListName){
			opt.selected = true;
		    }
		}
	    }
            loadListSelectCallback(listSelect, account); 
	}
    }

    /**
    * Placeholder
    * @param {object} o
    * @method loadListSelectFailure
    * @return {Function} 
    */
    var loadListSelectFailure = function(){
	return function(o){
	}
    }

    /**
    * Load the aweber lists dropdown
    * @param {Object} listSelect
    * @param {Object} usernameInput
    * @param {Object} passwordInput
    * @param {string} aweberListName
    * @param {Object} aweberAccountInput
    * @param {Function} loadListSelectCallback
    * @method loadFormdDropdown
    * @return {Function} 
    */
    var loadListSelect = function(listSelect, usernameInput, passwordInput, aweberListName, aweberAccountInput, loadListSelectCallback){
	return function(e){
	    var listName = listSelect.options[listSelect.selectedIndex].value;
	    if(1){
               if(false && listName==-1 && aweberAccountInput.value!=""){  
	  	   var o = {
		       responseText : aweberAccountInput.value
		   }
                   loadListSelectSuccess(listSelect, aweberListName, aweberAccountInput, loadListSelectCallback)(o);
               }
	       else{
                   if(usernameInput.value!=""){
    	               var callback =
                      {
    	                  success: loadListSelectSuccess(listSelect, aweberListName, aweberAccountInput, loadListSelectCallback),
  	                  failure: loadListSelectFailure()
                      };  
    	              var cObj = YAHOO.util.Connect.asyncRequest('POST', '../wp-content/plugins/wpsn/aweber/server/aweber.php?run=getAWeberAccount', callback, 'oauthUsername='+usernameInput.value+'&oauthPassword='+passwordInput.value);
	           }
	       }
	    }
	}
    }

    /**
    * Render the aweber lists dropdown
    * @param {Object} container
    * @param {string} aweberListName
    * @param {Object} aweberAccountInput
    * @param {Function} callback
    * @param {Object} usernameInput
    * @param {Object} passwordInput
    * @method renderListsDropdown
    * @return {Function} 
    */
    var renderListsDropdown = function(container, aweberListName, aweberAccountInput, callback){
	return function(usernameInput, passwordInput){
	    var listSelect = $select({'id':'wpsn_aweberListSelect', 'name':'wpsn_aweberListSelect'});
            container.appendChild($li({}, $label({}, 'List:'), $div({}, listSelect)));
	    listSelect.appendChild($option({'value':'-1'}, 'Please select'));
	    YAHOO.util.Event.on(usernameInput, 'change', loadListSelect(listSelect, usernameInput, passwordInput, aweberListName, $input({'value':''}), callback));
	    YAHOO.util.Event.on(passwordInput, 'change', loadListSelect(listSelect, usernameInput, passwordInput, aweberListName, $input({'value':''}), callback));
            loadListSelect(listSelect, usernameInput, passwordInput, aweberListName, aweberAccountInput, callback)(null);
	}
    }

    /**
    * Render the aweber form elements, lists dropdown and forms dropdown
    * @param {Object} container
    * @param {string} aweberUserName
    * @param {string} aweberPassword
    * @param {Function} callback
    * @method _renderAWeberFormElements
    * @return {Function} 
    */
    var _renderAWeberFormElements = function(container, aweberUsername, aweberPassword, callback){
        container.appendChild($li({}, $label({'for':'wpsn_aweberUsername'}, 'Aweber username:'), $div({}, $input({'value': aweberUsername, 'name':'wpsn_aweberUsername', 'id':'wpsn_aweberUsername', 'type':'text', '_class':'textbox, inputbox', 'className':'textbox, inputbox', 'size':"30", 'maxlength':"50"}))));
        container.appendChild($li({}, $label({'for':'wpsn_aweberPassword'}, 'Aweber password:'), $div({}, $input({'value': aweberPassword, 'name':'wpsn_aweberPassword', 'id':'wpsn_aweberPassword', 'type':'password', '_class':'text', 'className':'text', 'size':"30", 'maxlength':"50"}))));
        container.appendChild($li({}, $label({'for':'wpsn_aweberUpdatedAccount'}, 'Updated account:'), $div({}, $input({'name':'wpsn_aweberUpdatedAccount', 'id':'wpsn_aweberUpdatedAccount', 'type':'checkbox'})), $div({'_class':'help', 'className':'help'}, 'Check this if you are adding your aweber account for the first time or have updated it')));
// wpsn_aweberUpdatedAccount
        callback($('wpsn_aweberUsername'), $('wpsn_aweberPassword')); // renderListsDropdown
    }

    /**
    * Callback for when user is subscribed to aweber
    * @param {Object} o
    * @method aweberSubscribeSuccess
    * @return {Function} 
    */
    var aweberSubscribeSuccess = function(){
	return function(o){
	}
    }

    /**
    * Placeholder
    * @param {Object} o
    * @method aweberSubscribeFailure
    * @return {Function} 
    */
    var aweberSubscribeFailure = function(){
	return function(o){
	}
    }

    /**
    * Subscribe user to aweber
    * @param {String} subscriberName
    * @param {String} subscriberEmail
    * @param {Object} aweberFormHTMLLink
    * @method _aweberSubscribe
    * @return {Function} 
    */
    var _aweberSubscribe = function(subscriberName, subscriberEmail, aweberFormHTMLLink){
 	               var callback =
                      {
    	                  success: aweberSubscribeSuccess(),
  	                  failure: aweberSubscribeFailure()
                      };  
    	              var cObj = YAHOO.util.Connect.asyncRequest('POST', './wp-content/plugins/wpsn/aweber/server/aweber.php?run=aWeberSubscribe', callback, 'formHTMLLink='+aweberFormHTMLLink+'&subscriberName='+subscriberName+'&subscriberEmail='+subscriberEmail);
    }

    return{

    /**
    * Placeholder
    * @param {Object} container
    * @method init
    * @return {Function} 
    */
	init : function(container){
	   return function(e){

	   }
	},

    /**
    * Render the aweber form elements, lists dropdown and forms dropdown
    * @param {Object} container
    * @param {String} aweberUsername
    * @param {String} aweberPassword
    * @param {String} aweberListName
    * @param {Object} aweberFormHTMLLink
    * @param {Object} aweberAccountInput
    * @method renderAWeberFormElements
    * @return {Function} 
    */
	renderAWeberFormElements : function(container, aweberUsername, aweberPassword, aweberListName, aweberFormHTMLLink, aweberAccountInput){
	   return function(e){
               _renderAWeberFormElements(container, aweberUsername, aweberPassword, renderListsDropdown(container, aweberListName, aweberAccountInput, renderFormsDropdown(container, aweberFormHTMLLink)));
	   }
	},

    /**
    * Subscribe user to aweber
    * @param {String} subscriberName
    * @param {String} subscriberEmail
    * @param {Object} aweberFormHTMLLink
    * @method aweberSubscribe
    * @return {Function} 
    */
	aweberSubscribe : function(subscriberName, subscriberEmail, aweberFormHTMLLink){
	   return function(e){
	       _aweberSubscribe(subscriberName, subscriberEmail, aweberFormHTMLLink);
	   }
	}
                   
    };

}();









