﻿var Step3Controller = (function() {
    function fnStep3ControllerConstructor(oNewModel, oNewView, oNewEventDispatcher) {
        /****************************************************/
		/*                                                  */
		/*                                                  */
		/*                 Private Variables                */
		/*                                                  */
		/*                                                  */
		/****************************************************/
		
		var oModel;
		var oView;
		var oEventDispatcher;
		var oValidator;
		var oViewHelper;
		
        /****************************************************/
		/*                                                  */
		/*                                                  */
		/*                  Event Handlers                  */
		/*                                                  */
		/*                                                  */
		/****************************************************/
		
		function ajax_onSuccess(oResponse) {
		    oViewHelper.enableEmail();
		}
		
		function btnSend_onClick(event) {
		    if (oValidator.isValid()) {
		        oViewHelper.disableEmail();
		        var siteIdFlag = queryString("siteid");
		        siteIdFlag = (siteIdFlag == "") ? "sw" : siteIdFlag;
		        new Ajax.Request("emailquote.aspx", { method: "post", parameters: {number: oModel.getReferenceNumber(), siteid: siteIdFlag, recipient: oModel.getRecipientEmailAddress(), from: oModel.getSenderEmailAddress(), message: oModel.getMessage()}, onSuccess: ajax_onSuccess });
		    }
		    else {
		        oValidator.validateRecipientEmailAddress();
                oValidator.validateSenderEmailAddress();
		        oViewHelper.showErrorMessages(oValidator.getAllErrors());
		    }
        }
        
        function grpEmailFormElements_onKeyUp(event) {
            var oElement = Event.element(event);
            if (oElement.match("input#txtRecipientEmail")) {
                oModel.setRecipientEmailAddress(oElement.value);
            }
            else if (oElement.match("input#txtYourEmail")) {
                oModel.setSenderEmailAddress(oElement.value);
            }
            else if (oElement.match("textarea#txtMessage")) {
                oModel.setMessage(oElement.value);
            }
        }
		
		function lstQuoteLinks_onClick(event) {
	        var oElement = Event.element(event);
	        if (oElement.match("a.Print")) 
	        {
	            var siteIdQuery = queryString("siteid");
	            if (siteIdQuery !='')
	                siteIdQuery = "&siteid=" + siteIdQuery;
	                
		        window.open("/onlinequote/showquote.aspx?number=" + oModel.getReferenceNumber() + "&print=true" + siteIdQuery, "_blank");
	        }
	        /*else if (oElement.match("a.PDF")) {
        	
	        }*/
	        else if (oElement.match("a.Email")) {
		        oView.toggleEmailDisplay();
	        }
	        else 
	        if (!oElement.match("a.BuyNow"))
	            Event.stop(event);
        }
        
        function queryString(parameter) { 
          var loc = location.search.substring(1, location.search.length);
          var param_value = false;

          var params = loc.split("&");
          for (i=0; i<params.length;i++) {
              param_name = params[i].substring(0,params[i].indexOf('='));
              if (param_name.toLowerCase() == parameter.toLowerCase()) {
                  param_value = params[i].substring(params[i].indexOf('=')+1)
              }
          }
          if (param_value) {
              return param_value;
          }
          else {
              return ""; //Here determine return if no parameter is found
          }
        }
        
        function setReferenceNumber(oEvent) {
            oModel.setReferenceNumber(oEvent.number);
        }
    
        /****************************************************/
		/*                                                  */
		/*                                                  */
		/*            Class Level Private Methods           */
		/*                                                  */
		/*                                                  */
		/****************************************************/
		
		function attachEventListeners() {
		    oEventDispatcher.attachEventListener("Quote Saved", setReferenceNumber);
		}
		
		function attachEvents() {
		    Event.observe($("grpEmailFormElements"), "keyup", grpEmailFormElements_onKeyUp);
		    Event.observe($("lstQuoteLinks"), "click", lstQuoteLinks_onClick);
	        /*Event.observe($("lnkEditContactInformation"), "click", lnkEditContactInformation_onClick);
	        Event.observe($("lnkEditProducts"), "click", lnkEditProducts_onClick);*/
	        Event.observe($("btnSend"), "click", btnSend_onClick);
	        Event.stopObserving($("tbStep1"), "click");
		}
		
		/****************************************************/
		/*                                                  */
		/*                                                  */
		/*                Accessors/Mutators                */
		/*                                                  */
		/*                                                  */
		/****************************************************/
		
		this.setEventDispatcher = function(oNewEventDispatcher) {
			if (oNewEventDispatcher)
				oEventDispatcher = oNewEventDispatcher;
		}
		
		this.setModel = function(oNewModel) {
			if (oNewModel) {
				oModel = oNewModel;
				oModel.addObserver(this);
			}
		}
		
		this.setView = function(oNewView) {
			if (oNewView)
				oView = oNewView;
		}
		
		/****************************************************/
		/*                                                  */
		/*                                                  */
		/*                Observer Interface                */
		/*                                                  */
		/*                                                  */
		/****************************************************/
		
		this.update = function(oArguments) {
		    switch (oArguments.event) {
		        case "Recipient Email Address Changed":
		            oValidator.validateRecipientEmailAddress();
		            break;
		        case "Sender Email Address Changed":
		            oValidator.validateSenderEmailAddress();
		            break;
		    }
		    oViewHelper.updateErrorMessages(oValidator.getAllErrors());
		}
    
        /****************************************************/
	    /*                                                  */
	    /*                                                  */
	    /*                 Initialize Class                 */
	    /*                                                  */
	    /*                                                  */
	    /****************************************************/
	    
	    this.setModel(oNewModel);
	    this.setView(oNewView);
	    this.setEventDispatcher(oNewEventDispatcher);
	    if (oModel && oView && oEventDispatcher) {
	        oValidator = new Step3ModelPropertyValidator(oModel);
			oViewHelper = new Step3ViewHelper(oView);
	        attachEventListeners();
	        attachEvents();
	    }
    }
    
    return fnStep3ControllerConstructor;
})();