
var SUB_OVERLAY = null;
ta.servlet.MemberProfile = {
  getAddBox: function(event,elt) {
    if(elt.hasClass('active'))
    {
      return;
    }
    //prevent input from becoming checked until method completes
    elt.removeProperty('checked');
    new Event(event).stop();

    var nlType = elt.className.match(/type_(\w+)/);
    if(nlType && nlType[1]=='farewatch') {
      showDHTMLPopup('AirWatchAlertDhtmlPopup', '/AirWatchAlertDhtmlPopup?pid=1768&fromServlet=MemberProfile', true);
    }
    else {
      new Ajax('/MemberSubscriptionsController?Action=GetAddDest', {
        onFailure: function(e) { alert(JS_Ajax_failed); },
        onComplete: function(txt,xml) {
          if(ta.servlet.MemberProfile.checkForErrors(txt,true)) {
            return;
          }
          SUB_OVERLAY = ta.overlays.showInLightbox(txt);
          $('NL_TYPE').value=nlType[1];
          new Autocompleter.Ajax.Json2($('ADD_TW_DEST'), "/TypeAheadJson?action=GEO", {
            postVar: 'query',
            zIndex: 9999,
            onSelect: function(elemt, resObj) { //check to see if TW is available for that location
              new Ajax('/MemberSubscriptionsController', {
                data: {
                  'Action': 'CheckTWLoc',
                  'geo': resObj.value,
                  'nl': nlType[1]
                },
                onComplete: function(txt,xml) {
                  var errorMsg = ta.servlet.MemberProfile.checkForErrors(txt,false);
                  if(errorMsg) {
                    if($('ADD_TW_ERROR')) {
                      $('ADD_TW_ERROR').setHTML(errorMsg);
                    }
                    else {
                      new Element('div', {'class':'error', 'id': 'ADD_TW_ERROR'}).setHTML(errorMsg).injectInside($('ADD_TW_BOX'));
                    }
                    return;
                  }
                  if($('ADD_TW_ERROR')) {
                    $('ADD_TW_ERROR').remove();
                  }
                  $('ADD_TW_DEST_ID').value=resObj.value;
                }
              }).request(); //new ajax (for onselect)
            } //onSelect
          });  // new AutoCompleter
        } //onComplete
      }).request(); //initial ajax call
    }
  },
  
  addTWDest: function(event,elt) {
    var nlType = $('NL_TYPE').value;
    new Ajax('/MemberSubscriptionsController?Action=AddTWLoc&nl='+nlType+'&geo='+$('ADD_TW_DEST_ID').value, {
      onFailure: function(e) { alert(JS_Ajax_failed); },
      onComplete: function(txt,xml) {
        var errorMsg = ta.servlet.MemberProfile.checkForErrors(txt,false);
        if(errorMsg) {
          if($('ADD_TW_ERROR')) {
            $('ADD_TW_ERROR').setHTML(errorMsg);
          }
          else {
            new Element('div', {'class':'error', 'id': 'ADD_TW_ERROR'}).setHTML(errorMsg).injectInside($('ADD_TW_BOX'));
          }
          return;
        }
        $('CONTAINER_'+nlType).setHTML(txt);
        ta.servlet.MemberProfile.switchRadioStates($('SUB_'+nlType),$('UNSUB_'+nlType));
        SUB_OVERLAY.hide();
        ta.servlet.MemberProfile.showSaved();
      }
    }).request(); 
  },
  
  removeTWDest: function(event,elt) {
    var gid = elt.className.match(/g(\d+)/);
    var nlType = elt.className.match(/type_(\w+)/);
    if (gid && gid[1]) {
      new Ajax('/MemberSubscriptionsController?Action=RemoveTWLoc&nl='+nlType[1]+'&geo='+gid[1], {
        evalScripts: true,
        onFailure: function(e) { alert(JS_Ajax_failed); },
        onComplete: function(txt,xml) {
          if(ta.servlet.MemberProfile.checkForErrors(txt,true)) {
            return;
          }
          if(txt.match(/id="TRIPWATCH"/)) //reload entire subs section (to remove a TW row)
          {
            $('SUB_SECTION').setHTML(txt);
          }
          else {
            $('CONTAINER_'+nlType[1]).setHTML(txt);
            //removed last watched loc for non-original
            if(typeof UNSUB_BY_REMOVE != 'undefined' && UNSUB_BY_REMOVE) {
              ta.servlet.MemberProfile.switchRadioStates($('UNSUB_'+nlType[1]),$('SUB_'+nlType[1]));
            }
          }
          ta.servlet.MemberProfile.showSaved();
        }
      }).request();
    }
  },
  
  changeTNNotif: function(event,elt) {
    var level = elt.checked ? 2 : 4;
    new Ajax('/MemberSubscriptionsController?Action=ChangeTNNotif&cat='+elt.value+'&set='+level, {
      onFailure: function(e) { alert(JS_Ajax_failed); },
      onComplete: function(txt,xml) {
        if(ta.servlet.MemberProfile.checkForErrors(txt,true)) {
          return;
        }
        ta.servlet.MemberProfile.showSaved();
      }
    }).request(); 
  },
  
  changeSub: function(event,elt) {
    //do nothing when clicking on radio button that is already selected
    if(elt.hasClass('active'))
    {
      return;
    }
	//prevent input from becoming checked until method completes
    elt.removeProperty('checked');
    event.stop();
    var nlType = elt.className.match(/type_(\w+)/)[1];
    var action = elt.className.match(/action_(\w+)/)[1];
    var radioSub = $('SUB_'+nlType);
    var radioUnsub = $('UNSUB_'+nlType);
    new Ajax('/MemberSubscriptionsController', {
      data: {
        'Action': action,
        'nl': nlType
      },
      onFailure: function(e) { alert(JS_Ajax_failed); },
      onComplete: function(txt,xml) {
        if(ta.servlet.MemberProfile.checkForErrors(txt,true)) {
          return;
        }
        if(action=='GetUnsub') {
          SUB_OVERLAY = ta.overlays.showInLightbox(txt);
          $('NL_TYPE').value=nlType;
          $('UNSUB_LINK').addClass('type_'+nlType);
        }
        else if(action=='Subscribe') {
          ta.servlet.MemberProfile.switchRadioStates(radioSub,radioUnsub);
          ta.servlet.MemberProfile.showSaved();
        }
        else if(action=='Unsubscribe') {
          if(txt.match(/id="TRIPWATCH"/))
          {
            $('SUB_SECTION').setHTML(txt);
          }
          else {
            if(nlType=='original' || nlType.match(/tw_/) || nlType=='farewatch') {
              if(SUB_OVERLAY) SUB_OVERLAY.hide(); 
              $('CONTAINER_'+nlType).setHTML(txt);
            }
            ta.servlet.MemberProfile.switchRadioStates(radioUnsub,radioSub);
          }
          ta.servlet.MemberProfile.showSaved();
        }
      }
    }).request();
  },
  
  removeAWRoute: function(event,elt) {
    var pairId = elt.className.match(/pair_(\d+)/);
    if(pairId && pairId[1])
    {
      new Ajax('/MemberSubscriptionsController', {
        onFailure: function(e) { alert(JS_Ajax_failed); },
        data: {
        'Action': 'RemoveAWRoute',
        'id': pairId[1]
        },
        evalScripts: true,
        onComplete: function(txt,xml) {
          if(ta.servlet.MemberProfile.checkForErrors(txt,true)) {
            return;
          }
          $('CONTAINER_farewatch').setHTML(txt);
          //check to see if last route was removing, causing an unsub
          if(typeof UNSUB_BY_REMOVE != 'undefined' && UNSUB_BY_REMOVE)
          {
            ta.servlet.MemberProfile.switchRadioStates($('UNSUB_farewatch'),$('SUB_farewatch'));
          }
          ta.servlet.MemberProfile.showSaved();
        }
      }).request();
    }
  },
  
  changeNLFormat: function(event,elt) {
    if(elt.hasClass('active')) {
      return;
    }
	//prevent input from becoming checked until method completes
    elt.removeProperty('checked');
    event.stop();

    var nlf = elt.className.match(/nlf_(\w+)/);
    if(nlf==null) {
      return;
    }
    else { nlf=nlf[1];}
    
    var radioHtml = $('fmtHTML');
    var radioText = $('fmtText');
    new Ajax('/MemberSubscriptionsController', {
      data: {
        'Action': 'ChangeNLFormat',
        'letterformat': nlf
      },
      onFailure: function(e) { alert(JS_Ajax_failed); },
      onComplete: function(txt,xml) {
        if(ta.servlet.MemberProfile.checkForErrors(txt,true)) {
          return;
        }
        if(nlf=='html') {
          ta.servlet.MemberProfile.switchRadioStates(radioHtml,radioText);
        }
        else if(nlf=='text') {
          ta.servlet.MemberProfile.switchRadioStates(radioText,radioHtml);
        }
        ta.servlet.MemberProfile.showSaved();
      }
    }).request();
  },

  changeM2M: function(event,elt) {
    if(elt.hasClass('active')) {
      return;
    }
    //prevent input from becoming checked until method completes
    elt.removeProperty('checked');
    event.stop();
	
    var setting = elt.className.match(/setting_(\w+)/);
    if(setting==null) {
      return;
    }
    else { setting=setting[1];}
    
    var radioOn = $('ON_m2m');
    var radioOff = $('OFF_m2m');
    new Ajax('/MemberSubscriptionsController', {
      data: {
        'Action': 'ChangeM2M',
        'set': setting
      },
      onFailure: function(e) { alert(JS_Ajax_failed); },
      onComplete: function(txt,xml) {
        if(ta.servlet.MemberProfile.checkForErrors(txt,true)) {
          return;
        }
        if(setting=='on') {
          ta.servlet.MemberProfile.switchRadioStates(radioOn,radioOff);
          $$('input.type_pm').each( function(i) {
            i.removeProperty('disabled');
          });
          $('m2mFreqOpts').className = "m2mEnabled";
        }
        else if(setting=='off') {
          ta.servlet.MemberProfile.switchRadioStates(radioOff,radioOn);
          $$('input.type_pm').each( function(i) {
            i.setProperty('disabled',true);
          });
          $('m2mFreqOpts').className = "m2mDisabled";
        }
        ta.servlet.MemberProfile.showSaved();
      }
    }).request();
  },
  
  changeUpdateRate: function(event,elt) {
    if(elt.hasClass('active')) {
      return;
    }
    //prevent input from becoming checked until method completes
    elt.removeProperty('checked');
    event.stop();
    var type = elt.className.match(/type_(\w+)/);
    var rate = elt.className.match(/rate_(-{0,1}\d)/);
    if(type==null || rate==null) {
      return;
    }
    else {
      type=type[1];
      rate=rate[1];
    }
    var radioNew = (elt.getTag() == 'input') ? elt : elt.getElements('input')[0];
    if(radioNew.disabled) {
      return;
    }
    
    var radioCurrent;
    $$('input.type_'+type).each( function(i) {
      if(i.hasClass('active')) {
        radioCurrent = i;
      }
    });
    
    var dataObj;
    if(type=='pm') {
      dataObj = {
        'Action':'ChangePMNotif',
        'nfrequency': rate
      };
    }
    else if(type=='fun') {
      dataObj = {
        'Action': 'ChangeTNNotif',
        'cat': 101,
        'set': rate
      };
    }
    new Ajax('/MemberSubscriptionsController', {
      data: dataObj,
      onFailure: function(e) { alert(JS_Ajax_failed); },
      onComplete: function(txt,xml) {
        if(ta.servlet.MemberProfile.checkForErrors(txt,true)) {
          return;
        }
        ta.servlet.MemberProfile.switchRadioStates(radioNew,radioCurrent);
        ta.servlet.MemberProfile.showSaved();
      }
    }).request();
  },
  
  switchRadioStates: function(radioToBeActive, radioToBeInactive) {
    radioToBeActive.setProperty('checked','checked');
    radioToBeActive.addClass('active');
    radioToBeInactive.removeClass('active');
    radioToBeInactive.removeProperty('checked');
    // accommodate label clicks
    var lblTBA = ( radioToBeActive.getParent().getTag() == 'label' ) ? radioToBeActive.getParent() : false;
    var lblTBI = ( radioToBeInactive.getParent().getTag() == 'label' ) ? radioToBeInactive.getParent() : false;
    if( lblTBA && lblTBI ) {
      lblTBA.addClass('active');
      lblTBI.removeClass('active');
    }
  },
  
  showSaved: function() {
    ta.servlet.MemberProfile.closeSaved();
    window.mpSavedOL = new ta.overlays.CenteredOverlay({backdrop: ta.overlays.BACKDROP_NEVER,style: 'mpSaved', showCloseButton:false}).loadRemoteSuccess(JS_CHANGES_SAVED);
    ta.store('overlays.current', window.mpSavedOL);
    window.mpSavedOL.show();
    setTimeout('ta.servlet.MemberProfile.closeSaved()',1500);
  },
  
  closeSaved: function() {
    var lb = ta.retrieve('overlays.current');
    if (lb && lb) lb.hide();
    ta.remove('overlays.current');
  },

  selectAll: function(checkBoxes) {
    if (!checkBoxes.length) {
      checkBoxes.checked = true;
    }
    else {
      for (var i = 0; i < checkBoxes.length; i++) {
        checkBoxes[i].checked = true;
      }
    }  
  },
  
  unselectAll: function(checkBoxes) {
    if (!checkBoxes.length) {
      checkBoxes.checked = false;
    }  
    else {
      for (var i = 0; i < checkBoxes.length; i++) {
        checkBoxes[i].checked = false;
      }
    }  
  },
  
  forumSelectAll: function(event,elt) {
    ta.servlet.MemberProfile.selectAll($('FORUM').elements['ft']);
  },

  forumUnselectAll: function(event,elt) {
    ta.servlet.MemberProfile.unselectAll($('FORUM').elements['ft']);
  },
  
  removeForumNotif: function(event,elt) {  
    new Ajax('/MemberSubscriptionsController', {
      data: $('FORUM'),
      onFailure: function(e) { alert(JS_Ajax_failed); },
      onComplete: function(txt,xml) {
        if(ta.servlet.MemberProfile.checkForErrors(txt,true)) {
          return;
        }
        ta.servlet.MemberProfile.showSaved();
        $('FORUM_SECTION').setHTML(txt);
      }
    }).request();
  },

  nexusGeoSelectAll: function(event,elt) {
    ta.servlet.MemberProfile.selectAll($('NEXUS_GEO').elements['unsubspace']);
  },

  nexusGeoUnselectAll: function(event,elt) {
    ta.servlet.MemberProfile.unselectAll($('NEXUS_GEO').elements['unsubspace']);
  },
  
  nexusDocSelectAll: function(event,elt) {
    ta.servlet.MemberProfile.selectAll($('NEXUS_DOC').elements['unsubdoc']);
  },

  nexusDocUnselectAll: function(event,elt) {
    ta.servlet.MemberProfile.unselectAll($('NEXUS_DOC').elements['unsubdoc']);
  },
  
  removeNexusGeoNotif: function(event,elt) {  
    new Ajax('/MemberSubscriptionsController', {
      data: $('NEXUS_GEO'),
      onFailure: function(e) { alert(JS_Ajax_failed); },
      onComplete: function(txt,xml) {
        if(ta.servlet.MemberProfile.checkForErrors(txt,true)) {
          return;
        }
        ta.servlet.MemberProfile.showSaved();
        $('NEXUS_SECTION').setHTML(txt);
      }
    }).request();
  }, 

  removeNexusDocNotif: function(event,elt) {  
    new Ajax('/MemberSubscriptionsController', {
      data: $('NEXUS_DOC'),
      onFailure: function(e) { alert(JS_Ajax_failed); },
      onComplete: function(txt,xml) {
        if(ta.servlet.MemberProfile.checkForErrors(txt,true)) {
          return;
        }
        ta.servlet.MemberProfile.showSaved();
        $('NEXUS_SECTION').setHTML(txt);
      }
    }).request();
  },
  
  unsubscribeAll: function(event,elt) {
    new Ajax('/MemberSubscriptionsController?Action=UnsubscribeAll', {
      onFailure: function(e) { alert(JS_Ajax_failed); },
      onComplete: function(txt,xml) {
        if(ta.servlet.MemberProfile.checkForErrors(txt,true)) {
          return;
        }
        ta.servlet.MemberProfile.showSaved();
        $('SUB_SECTION').setHTML(txt);
      }
    }).request();
  },
  
  /**
   * Checks for error messages in Ajax response
   * @param {String} txt The text of the response
   * @param {boolean} handleDisplay If true, function displays error message,
   * otherwise return the message to be handled by the caller.
   */
  checkForErrors: function(txt,handleDisplay) {
    if(txt.match(/^{/)) {
      var data = eval( '(' + txt + ')' );
      if(data.ERROR) {
        if(handleDisplay) {
          ta.overlays.showInLightbox(data.ERROR);
          return true;
        }
        return data.ERROR;
      }
      else if(data.ALERT) {
        if(handleDisplay) {
          ta.overlays.showInLightbox(data.ERROR);
          return true;
        }
        return data.ALERT;
      }
      else if(data.REDIRECT) {
        window.location = data.REDIRECT;
        return true;
      }
    }
    if(handleDisplay) {
      return false;
    }
    return null;
  },
  
  setAvatar: function(event,elt) {
    event.preventDefault();
    var cid = elt.className.match(/cid_(\w+)/)[1];
    var avid = elt.className.match(/avid_(\d+)/)[1];
    new Ajax('/MemberProfileController', {
      data: {
        'Action': 'SetAvatar',
        'avid': avid
      },
      onFailure: function(e) { alert(JS_Ajax_failed); },
      onComplete: function(txt,xml) {
        if(ta.servlet.MemberProfile.checkForErrors(txt,true)) {
          return;
        }
        $('BODYCON').setHTML(txt);
        ta.servlet.MemberProfile.showSaved();
      }
    }).request();
  },
  
  /**
   * Clear the user's avatar to allow FB avatar to show.
   */
  clearAvatar: function() {
    new Ajax('/MemberProfileController', {
      data: {
        'Action': 'SetAvatar',
        'avid': 0
      },
      onFailure: function(e) { alert(JS_Ajax_failed); },
      onComplete: function(txt,xml) {
        if(ta.servlet.MemberProfile.checkForErrors(txt,true)) {
          return;
        }
        $('BODYCON').setHTML(txt);
        ta.servlet.MemberProfile.showSaved();
      }
    }).request();
  },

  addEmail: function() {
    var emailBoxCount = $$('div[id^=addEmail_]').length;
    var lastAdded = $("addEmail_" + (emailBoxCount - 1));

    if ($(lastAdded.getFirst()).getValue() == '') {
        ta.servlet.MemberProfile.showError(JS_err_invalid_email);
        return;
    }
    
    var elmt = lastAdded.clone();
    elmt.set({'id': 'addEmail_' + emailBoxCount, 'class': 'newEmail email'});
    elmt.getElement('input').set({'id': 'email_' + emailBoxCount, 'value': '', 'name': 'email_' + emailBoxCount});
    elmt.getElement('span[id^=del_]').set({'id': 'del_' + emailBoxCount});
    elmt.getElement('span[id^=prim_]').set({'id': 'prim_' + emailBoxCount});
    var primary = elmt.getElement('span[id=primary]');
    if (primary) {
      primary.remove();
    }
    elmt.getElement('.actions').setStyle('display', 'inline');
    elmt.show();
    elmt.injectAfter(lastAdded);
    lastAdded = elmt;
    emailBoxCount++;
  },

  showError: function(msg) {
    var elmt = new Element('li', {'class': 'error'}).setText(msg);
    elmt.inject($('errors'));
    (function() { elmt.remove(); }).delay(2500);
  },

  deleteEmail: function(elmt) {

    var emailBoxCount = $$('div[id^=addEmail_]').length;
    var id = $(elmt).getProperty('id');
    var index = /del_(\d+)/.test(id) ? RegExp.$1 : false;
    if (index)
    {
        var box = $('addEmail_' + index);
        if (box.hasClass('newEmail')) {
            confirmBubble(elmt, 0, 0, 0, '', function() {
              if (index == emailBoxCount - 1) {
                  emailBoxCount--;
              }
              box.remove();
            });
        } else {
          var alias = $('email_' + index).getValue();
          confirmBubble(elmt, 0, 0, 0, '', function() {
            new Ajax('/CommunityAjax', {
              data: {'action': 'RemoveEmail', 'email': alias },
              onSuccess: function() { box.remove(); }
            }).request();
          });
        }
    }
  },

  makePrimaryEmail: function(elmt) {
    var id = $(elmt).getProperty('id');
    var index = /prim_(\d+)/.test(id) ? RegExp.$1 : false;
    if (index)
    {
        if (!$('email_' + index).getValue()) {
          ta.servlet.MemberProfile.showError(JS_err_invalid_email);
          return;
        }
        
        var box = $('addEmail_' + index);
        var elmt = $('primaryEmail');
        elmt.set({'value': 'email_' + index});

        $('emailList').getElements('div').each(function(child) {
          if (child.hasClass('email')) {
            child.getElement('.actions').setStyle('display', 'inline');
          }
        });

        box.getElement('.actions').setStyle('display', 'none');
        var primary = $('primary');
        primary.clone().injectAfter(box.getElement('.actions'));
        primary.remove();
    }
  },

  submitProfileForm: function(form, toUpdate) {
    $(form).send({
      onComplete: function(txt, xml) {
        if (txt.match(/^{/)) {
          var data = eval('(' + txt + ')'); 
          if (data.REDIRECT) window.location = data.REDIRECT;
          return;
        }
        var elt = new Element('div').setHTML(txt).getElement('.errors');
        if (elt && elt.hasClass('errors')) {
          if ($('errors')) {
            $('errors').replaceWith(elt);
          } else {
            elt.injectTop(toUpdate);
          }
        } else {
          $(toUpdate).empty().setHTML(txt);
          ta.servlet.MemberProfile.showSaved();
        }
        if (form == 'base') {
          var newName = $('displayName').getValue();
          if (newName && newName != '') {
            $('HEAD').getElement('li.first').setText(newName);
          }
        } else if (form == 'aboutme') {
          var newLoc = $('displayLocation').getValue();
          var update = $('LEFTNAV').getElement('.mbrLocation');
          if (update != null) {
            update.setText(newLoc);
          }
        }
      }
    });
    return false;
  },
  
  cancelProfileForm: function(action, toUpdate) {
    new Ajax('/MemberProfileController', {
      method: 'post',
      data: {'Action': action},
      update: $(toUpdate)
    }).request();
  }
};
