/**
 * Class that does dynamic actions when editing the wish list
 */
DearSantaManager = function() {

}

DearSantaManager.disableEnterKey = function(e) {
        var key;

        if(window.event) {
          key = window.event.keyCode;     //IE
        }
        else {
          key = e.which;     //firefox
        }

        if(key == 13) {
          return false;
        }
        else {
          return true;
        }
}

DearSantaManager.prototype = {

    currentKeydown : {}, // key = text field, data = keycode
    baseUrl : '', // location of ${resource:dir('/")}

    /**
     * This method is called after the page load is complete.
     */
    initialize : function(baseUrl) {
      this.baseUrl = baseUrl;

      if ((Ext.isIE6 || Ext.isSafari2 || Ext.isSafari3 || Ext.isGecko2)) {
        alert("You are using an outdated Browser.  Please download the latest version of Firefox or Internet Explorer");

      }

      var timer = document.getElementById('dsCountdownTimer');
      if (timer) {
        var days = this.getDaysUntilXmas();
        var units = "days";
        if (days == 1) {
          units = "day";
        }
        timer.innerHTML = "<div style='text-align:center;font-size:18px'>" + days + "</div><div style='text-align:center; font-size: 15px'>" + units + "</div>";
      }

      this.initializeLetterEditor();
      this.initializeForgotPassword();


    },
    initializeForgotPassword : function() {
       var input = Ext.get("recoverPasswordUsername") || Ext.get('resetPasswordPassword');
       if (input) {
           input.focus(30);
       }
    },

    initializeLetterEditor : function() {
        this.createLetterPageWasUnloaded = false;
        this.letterEditorLastSerializedParameters = undefined;
        this.wasLetterSaveClicked = false;
        this.alreadyAutosaved = false;
        this.timerRunCount = 0;

//        Ext.EventManager.on(window, 'unload', this.handleCreateLetterUnload, this);

        // If we're on the create letter page....
        if (Ext.get('isCreateLetterForm')) {


            var dt = new Ext.util.DelayedTask(function() {
				var lc = Ext.get("letterContent");
                lc.dom.focus();


                var isBasedOnDraft = Ext.get("is_based_on_draft");
                if (!isBasedOnDraft) {
                        lc.dom.select();
                }

			}, this);
            dt.delay(30);


            for (var f=1;f!=51;f++) {
              var inputField = Ext.get("dsWish_" + f);
              if (inputField) {
                  // NOTE: We can't use the keypress event, because it has a problem
                  // where the keys '&' and ")' show as the same key codes as the
                  // up and down arrows.
                  inputField.on("keydown", function(event, htmlEl) {
                      var keyCode = event.getKey();
                      var parts = htmlEl.id.split('_');
                      var currentRow = parseInt(parts[1]);
                      if (keyCode == 38 && currentRow > 1) {   // 38 = up arrow
                          var prevRowId = "dsWishRow_" + (currentRow-1);
                          var prevRow = Ext.get(prevRowId);
                          var prevInput = Ext.get("dsWish_" + (currentRow-1));
			              if (prevRow) {
                              prevInput.focus(15);
            			  }
                      }

                      // 13 = enter, 40 = down arrow, 9=tab
                      if (keyCode == 13 || keyCode == 40 || (keyCode == 9 && !event.shiftKey)) {
                          var nextRowId = "dsWishRow_" + (currentRow+1);
                          var nextRow = Ext.get(nextRowId);
                          var nextInput = Ext.get("dsWish_" + (currentRow+1));
                          if (nextRow) {
                              nextRow.removeClass("dsHiddenComponent");
                              nextInput.focus(15);
                          }
                          if (keyCode == 13) {
                              event.stopEvent();
                              return false;
                          }
                      }
                  }, this)
              }
            }

            var task = {
                run: function(){
//                    this.log("Testing for autosave");
//                    alert("Timer running");
                    if (this.timerRunCount > 0) { // don't run when the page is initially loaded
                        if (this.createLetterPageWasUnloaded == false) {
                            this.saveLetterDraft("timedSave " + this.createLetterPageWasUnloaded);
                        }
                    }
                    this.timerRunCount++;
                },
                interval: (20 * 1000), //20 seconds
                scope: this
            }

            Ext.TaskMgr.start(task);

        }



    },

    /**
     * Mark our state to note that the user clicked "
     */
    letterSaved: function() {
       // Mark our state to no
       this.wasLetterSaveClicked = true;
    },

    saveLetterDraft : function(saveType) {
        var formParams = this.createLetterFormParameters();

        var letterContent = formParams.letterContent;

        // If any data has changed since the last submit
        if (Ext.util.JSON.encode(formParams) != this.letterEditorLastSerializedParameters) {
//            this.log("Content changed, aa=" + this.alreadyAutosaved + ", form params=" + Ext.util.JSON.encode(formParams));
            this.log("Autosave - Saving changes");
            if (this.alreadyAutosaved || this.letterHasInformationInIt()) {
                this.alreadyAutosaved = true;
                
                formParams.saveType = saveType;
                Ext.Ajax.request({
                    url:  this.baseUrl + 'santaLetter/saveDraft',
                    params: formParams
                });                
            }
            this.letterEditorLastSerializedParameters = Ext.util.JSON.encode(formParams);
        }
        else {
            this.log("Autosave reported no changes");
        }

    },

    scopedHandleUnload : function() {
//        alert("Unload is being called, wLSC= " + this.wasLetterSaveClicked);
        var isCreateLetter = Ext.get('isCreateLetterForm');
        if (isCreateLetter && !this.wasLetterSaveClicked) {

            this.createLetterPageWasUnloaded = true;

            this.saveLetterDraft("unload");
        }        
    },
    handleUnload : function() {
        dearSantaManager.scopedHandleUnload();

    }.createDelegate(this),
    letterHasInformationInIt: function() {
        var letterContent = Ext.get('letterContent').dom.value;
	if (letterContent && letterContent.trim() != '') {
	   return true;
	}
        for (var f=1;f!=51;f++) {
            var fieldName = "w_" + f;
            var fieldValue = Ext.get("dsWish_" + f).dom.value;
            if (fieldValue && fieldValue.trim() != '') {
		return true;
            }
        }
	return false;
      
    },
    createLetterFormParameters: function() {
        var letterContent = Ext.get('letterContent').dom.value;
        var formParams = {
            letterContent: letterContent
        };

        // Now grab all the wish list items
        for (var f=1;f!=51;f++) {
            var fieldName = "w_" + f;
            var fieldValue = Ext.get("dsWish_" + f).dom.value;
            formParams[fieldName] = fieldValue;
        }
        return formParams

    },



    log : function(msg) {
        if (Ext.isGecko) {
//            console.log(msg); // Causes a script error, even in Firefox?
        }

    },
    
    getDaysUntilXmas : function() {
      var oneMinute = 60 * 1000
      var oneHour = oneMinute * 60
      var oneDay = oneHour * 24
      var today = new Date()
      var nextXmas = new Date()
      nextXmas.setMonth(11)
      nextXmas.setDate(25)
      if (today.getMonth() == 11 && today.getDate() > 25) {
        nextXmas.setFullYear(nextXmas.getFullYear() + 1)
      }
      var diff = nextXmas.getTime() - today.getTime()
      diff = Math.floor(diff / oneDay)
      return diff
    }

}

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}



