Figment.Import( 'Figment.EventHandler',Figment.getJSRoot() + '_framework/' );
Figment.Import('Disney.WDPRO.IBC.Reporting',Figment.getJSRoot()+ 'reporting/');
Figment.Import('Disney.WDPRO.IBC.ErrorHandling',Figment.getJSRoot()+ '_global/');

(function() {
  var $D = YAHOO.util.Dom,
      $E = YAHOO.util.Event,
      $ = YAHOO.util.Dom.get;
  
  Figment.Namespace('Disney.WDPRO.IBC.PartyMix');
  
  Disney.WDPRO.IBC.PartyMix = {
      CONST_CLASSNAME_HIDE: 'closedState',
      CONST_CLASSNAME_SHOW: 'openedState',

      CONST_CONTINUEBTN_LINK_HBX: 'ContinueButton_Link',

      objChildAgeFieldset: null,
      objChildSelect: null,
      objChildSelectLabel: null,
      objNumChildSelect: null,

      objAdultSelect: null,

      showChildAgeFieldset: function () {
          $D.replaceClass(this.objChildAgeFieldset, Disney.WDPRO.IBC.PartyMix.CONST_CLASSNAME_HIDE, Disney.WDPRO.IBC.PartyMix.CONST_CLASSNAME_SHOW);
      },

      hideChildAgeFieldset: function () {
        $D.replaceClass(this.objChildAgeFieldset, Disney.WDPRO.IBC.PartyMix.CONST_CLASSNAME_SHOW, Disney.WDPRO.IBC.PartyMix.CONST_CLASSNAME_HIDE);
      },

      hideChildSelect: function () {
        for (var x=0; x < this.objChildSelect.length; x++) {
          $D.replaceClass(this.objChildSelect[x],Disney.WDPRO.IBC.PartyMix.CONST_CLASSNAME_SHOW,Disney.WDPRO.IBC.PartyMix.CONST_CLASSNAME_HIDE);
          this.objChildSelect[ x ].selectedIndex = 0;
          $D.replaceClass(this.objChildSelectLabel[x],Disney.WDPRO.IBC.PartyMix.CONST_CLASSNAME_SHOW,Disney.WDPRO.IBC.PartyMix.CONST_CLASSNAME_HIDE);
        }
      },

      getPullDownValue: function ( objElement ) {
          return objElement.options[objElement.selectedIndex].value;
      },

      showChildSelect: function ( intToShow ) {
          // hide all child pull downs...
          for (var y = 0; y < this.objChildSelect.length; y++) {
            $D.replaceClass(this.objChildSelect[y],Disney.WDPRO.IBC.PartyMix.CONST_CLASSNAME_SHOW,Disney.WDPRO.IBC.PartyMix.CONST_CLASSNAME_HIDE);
            $D.replaceClass(this.objChildSelectLabel[y],Disney.WDPRO.IBC.PartyMix.CONST_CLASSNAME_SHOW,Disney.WDPRO.IBC.PartyMix.CONST_CLASSNAME_HIDE);
          }

          if(intToShow === 0) {
              this.hideChildAgeFieldset();
              this.hideChildSelect();
          } else if( intToShow > 0) {
              for(var x=0; x < intToShow; x++) {
                $D.replaceClass(this.objChildSelect[x],Disney.WDPRO.IBC.PartyMix.CONST_CLASSNAME_HIDE,Disney.WDPRO.IBC.PartyMix.CONST_CLASSNAME_SHOW);
                $D.replaceClass(this.objChildSelectLabel[x],Disney.WDPRO.IBC.PartyMix.CONST_CLASSNAME_HIDE,Disney.WDPRO.IBC.PartyMix.CONST_CLASSNAME_SHOW);
              }
              this.showChildAgeFieldset();
          }
          this.redrawSibling();
      },

      redrawSibling: function() {
          var sibling = $D.getNextSibling("PartyMix_Module");
          $D.addClass(sibling, "closedState");
          $D.removeClass(sibling, "closedState");
          delete sibling;
      }
  };
  
  Figment.Namespace('Disney.WDPRO.IBC.PartyMix.Rules');

  Disney.WDPRO.IBC.PartyMix.Rules = {

      validateAdultInfantRatio: function ( objEvent ) {
          // grab number of adults...
          var numAdults = parseInt(Disney.WDPRO.IBC.PartyMix.objAdultSelect.options[Disney.WDPRO.IBC.PartyMix.objAdultSelect.selectedIndex].value,10);
          // grab number of infants
          var intInfant = 0;
          for(var x=0; x< Disney.WDPRO.IBC.PartyMix.objChildSelect.length; x++) {
              if(Disney.WDPRO.IBC.PartyMix.objChildSelect[x].options[Disney.WDPRO.IBC.PartyMix.objChildSelect[x].selectedIndex].value == "0" &&
                  Disney.WDPRO.IBC.PartyMix.objChildSelect[x].className !== Disney.WDPRO.IBC.PartyMix.CONST_CLASSNAME_HIDE) {
                  intInfant += 1;
              }
          }

          if(intInfant > numAdults) {
             // if (objEvent.preventDefault() !== null) {
             //   objEvent.preventDefault();
             // }
              Disney.WDPRO.IBC.ErrorHandling.addMessage(Disney.WDPRO.IBC.PartyMix.objChildAgeFieldset, '1701007_ErrorCode' );
          } else {
              Disney.WDPRO.IBC.ErrorHandling.removeMessage(Disney.WDPRO.IBC.PartyMix.objChildAgeFieldset, '1701007_ErrorCode' );
          }

      },

      validateChildAgesSet: function (objEvent) {
          // grab number of children
          var intNumChild = Disney.WDPRO.IBC.PartyMix.objNumChildSelect.options[Disney.WDPRO.IBC.PartyMix.objNumChildSelect.options.selectedIndex].value;
          var bChildAgesSelected = true;
          for(var x=0; x < parseInt(intNumChild,10); x++) {
              if(Disney.WDPRO.IBC.PartyMix.objChildSelect[x].options[Disney.WDPRO.IBC.PartyMix.objChildSelect[x].selectedIndex].value === "" || Disney.WDPRO.IBC.PartyMix.objChildSelect[x].value === "null") {
               //   if (objEvent.preventDefault()) {
               //     objEvent.preventDefault();
               //   }
                  //objEvent.preventDefault();
                  bChildAgesSelected = false;
                  break;
              }
          }
          if(!bChildAgesSelected) {
             // if (objEvent.preventDefault() !== null) {
             //   objEvent.preventDefault();
             // }
             // NOTE: Disney.WDPRO.IBC.ErrorHandling functionality adds the '_ErrorCode' suffix,
             // only errorNumbers should be passed NOT 'errorNumber_ErrorCode'
              Disney.WDPRO.IBC.ErrorHandling.addMessage(Disney.WDPRO.IBC.PartyMix.objChildAgeFieldset, '1701006_ErrorCode' );
          } else {
              Disney.WDPRO.IBC.ErrorHandling.removeMessage(Disney.WDPRO.IBC.PartyMix.objChildAgeFieldset, '1701006_ErrorCode' );
          }
      },

      validatePartyMix: function () {
          Disney.WDPRO.IBC.PartyMix.Rules.validateChildAgesSet();
          Disney.WDPRO.IBC.PartyMix.Rules.validateAdultInfantRatio();
      }
  };
  
  Figment.Namespace('Disney.WDPRO.IBC.PartyMix.Events');

  Disney.WDPRO.IBC.PartyMix.Events = {

      EVENT_SubmitReportingLinkTrack_onclick: function(linkValue) {

          //set option object for tracking links
          var optionsObject = {engines:[Disney.WDPRO.IBC.Reporting.ANALYTICS_ENGINES.HitBox,Disney.WDPRO.IBC.Reporting.ANALYTICS_ENGINES.SiteCatalyst]
                              };

          optionsObject.linkName = linkValue;

          //track link
          Disney.WDPRO.IBC.Reporting.TrackCustomLink(optionsObject);

          //clean up
          delete optionsObject;
      },

      EVENT_continue_onclick: function (evt) {
          var objWindowEvent = Figment.EventHandler.getEvent( evt );
          var objElement = objWindowEvent.element;
      //  Disney.WDPRO.IBC.PartyMix.Rules.validateAdultInfantRatio(objWindowEvent);
      //  Disney.WDPRO.IBC.PartyMix.Rules.validateChildAgesSet(objWindowEvent);

          /*Old hitbox specific tracking
          _hbLink(Disney.WDPRO.IBC.PartyMix.CONST_CONTINUEBTN_LINK_HBX);*/
          Disney.WDPRO.IBC.PartyMix.Events.EVENT_SubmitReportingLinkTrack_onclick(Disney.WDPRO.IBC.PartyMix.CONST_CONTINUEBTN_LINK_HBX);
      },

      EVENT_ChildrenTotal_onChange: function (evt) {
          var objWindowEvent = Figment.EventHandler.getEvent( evt );
          var objElement = objWindowEvent.element;
          Disney.WDPRO.IBC.PartyMix.showChildSelect(parseInt(Disney.WDPRO.IBC.PartyMix.getPullDownValue(objElement),10));
      },

      main: function (evt) {
          Disney.WDPRO.IBC.PartyMix.objChildAgeFieldset = $('partyMixChildAges');
          Disney.WDPRO.IBC.PartyMix.objChildSelect = Disney.WDPRO.IBC.PartyMix.objChildAgeFieldset.getElementsByTagName('select');
          Disney.WDPRO.IBC.PartyMix.objChildSelectLabel = Disney.WDPRO.IBC.PartyMix.objChildAgeFieldset.getElementsByTagName('label');
          Disney.WDPRO.IBC.PartyMix.objNumChildSelect = $('partyMix_ChildrenTotal');
          Disney.WDPRO.IBC.PartyMix.objAdultSelect = $('partyMix_AdultsTotal');

          // attach pull down event
          var childPull = $('partyMix_ChildrenTotal');
          if (childPull !== null) {
            $E.addListener(childPull, 'change', Disney.WDPRO.IBC.PartyMix.Events.EVENT_ChildrenTotal_onChange);
          }
          // check to see if already populated, and display relevant number of age boxes
          if(parseInt(Disney.WDPRO.IBC.PartyMix.getPullDownValue(childPull),10) > 0) {
              Disney.WDPRO.IBC.PartyMix.showChildSelect(parseInt(Disney.WDPRO.IBC.PartyMix.getPullDownValue(childPull),10));
              var objWindowEvent = Figment.EventHandler.getEvent( evt );
              Disney.WDPRO.IBC.PartyMix.Rules.validateAdultInfantRatio(objWindowEvent);
          }

          if ( Disney.WDPRO.IBC.PartyMix.objChildSelect !== null && Disney.WDPRO.IBC.PartyMix.objChildSelect !== undefined ) {
              for (var i=0; i < Disney.WDPRO.IBC.PartyMix.objChildSelect.length; i++) {
                $E.addListener(Disney.WDPRO.IBC.PartyMix.objChildSelect[ i ], 'change', Disney.WDPRO.IBC.PartyMix.Rules.validatePartyMix); //validateAdultInfantRatio );
              }
          }

          // attach to the continue button
          var objContinueBtn = $('continue');
          if(objContinueBtn !== null) {
            $E.addListener(objContinueBtn,  'click', Disney.WDPRO.IBC.PartyMix.Events.EVENT_continue_onclick);
          }

          if(Disney.WDPRO.IBC.PartyMix.objAdultSelect !== null) {
            $E.addListener(Disney.WDPRO.IBC.PartyMix.objAdultSelect, 'change', Disney.WDPRO.IBC.PartyMix.Rules.validateAdultInfantRatio);
          }
      }

  };
  
  Figment.EntryPoint.add(Disney.WDPRO.IBC.PartyMix.Events);
  
})();

