﻿
var DB = {
  pardot_visitor_id: function() {
    if (pi != null && pi.tracker != null && pi.tracker.visitor_id != null)
      return pi.tracker.visitor_id
    else
      return 0;
  },

  request: function(url, args, onSuccess, onFailure) {
    Nmma.Ajax.request(url, {
      parameters: { 'arguments': args },
      onSuccess: function(response) {
        if (response.isSuccess()) {
          onSuccess(response);
        }
        else {
          onFailure(response);
        }
      } .bind(this),
      onFailure: function(response) {
        if (onFailure != null && onFailure != 'undefined') {
          args.errors = 'Request failed';
          onFailure(args);
        }
      } .bind(this)
    });
  },

  evalScripts: function(s) {
    if(typeof(s) != 'undefined' && s != null)
      s.extractScripts().map(function(script) { eval(script); });
  }
};

DB.isFlashMenuEnabled = true;

DB.Utils = {

  renderMenu: function(movie, width, height, flashvars, requiredversion, movieid) {
    if (DB.isFlashMenuEnabled) {
      document.write('<div id="flashmenu">' + getFlashHtml(movie, width, height, flashvars, requiredversion, movieid) + '</div>');
    }
  }
}

DB.Effect =
{
  disabled: false,
  rotate: true,
  showPage: function(i, rotate) {
    this.rotate = rotate;
    if (!this.disabled) {
      var t = 1;
      var dots = Element.select($('pages'), '[class="navigationitem"]');
      dots.each(function(el) {
        var dot = Element.down(el, 'a');
        if (Element.hasClassName(dot, 'active')) {
          Element.removeClassName(dot, 'active');
          Element.addClassName(dot, 'inactive');
        }
      });
      Element.removeClassName(Element.down(dots[i], 'a'), 'inactive');
      Element.addClassName(Element.down(dots[i], 'a'), 'active');
      var pages = Element.select($('pages'), '[class="page"]');
      var next = i + 1;
      if (next >= pages.length) next = 0;
      pages.each(function(el, index) {
        if (el.style.display != 'none' && index != i) {
          if (!DB.Effect.disabled) {
            DB.Effect.disabled = true;
            new Effect.Parallel([
              new Effect.Fade(el, { sync: true }),
              new Effect.Appear(pages[i], { sync: true })
              ], { duration: t, afterFinish: function() { DB.Effect.disabled = false; if (DB.Effect.rotate) { setTimeout('if(DB.Effect.rotate) DB.Effect.showPage(' + next + ', true);', 10000); } } }
            );
          }
        }
      });
    }
  }
}

DB.Content = {
  load: function(el, url) {
    DB.request('/shared/pages/ajaxhandlers/discoverboating/content.aspx',
              { ActionType: 'getcontentblock', url: url },
                this.update.bind(this, el),
                null);
  },

  loadForm: function(el, form) {
    DB.request('/shared/pages/ajaxhandlers/discoverboating/content.aspx',
              { ActionType: 'getform', form: form },
                this.update.bind(this, el),
                null);
  },

  submitForm: function(form, action, messages, errors) {
    Element.hide(messages);
    Element.update(messages, '');
    Element.hide(errors);
    Element.update(errors, '');
    var bkg = new Nmma.ProcessingBackgroundLayer();
    setTimeout(function(bkg) {
      var params = Form.serialize(form, true);
      params.ActionType = action;
      DB.request('/shared/pages/ajaxhandlers/discoverboating/content.aspx',
                  params,
                  this.displayMessage.bind(this, messages, bkg),
                  this.displayErrors.bind(this, errors, bkg));
    }.bind(this, bkg), 500);
  },

  onCountryChange: function(el, country) {
    DB.request('/shared/pages/ajaxhandlers/discoverboating/content.aspx',
              { ActionType: 'oncountrychange', country: country },
                this.update.bind(this, el),
                null);
  },

  update: function(el, response) {
    Element.update(el, response.responseText);
  },

  displayMessage: function(el, bkg, response) {
    bkg.hide();
    Element.update(el, response.getMessagesList());
    Element.show(el);
  },

  displayErrors: function(el, bkg, response) {
    bkg.hide();
    Element.update(el, response.getErrorsList());
    Element.show(el);
  }
}

DB.Security = {

  onCountryChange: function(el, country) {
    DB.request('/shared/pages/ajaxhandlers/discoverboating/security.aspx',
                { ActionType: 'oncountrychange', country: country },
                  this.update.bind(this, el),
                  null);
  },

  update: function(el, args) {
    Element.update(el, args.responseText);
  },

  FBonregister: function() {
    var popup = DialogManager.getActive();
    if (popup == null)
      popup = new Nmma.Dialog({ 'width': 720, 'draggable': true, 'showButtons': false, 'roundedCorners': true, 'fullDestroy': true });
    FB.getLoginStatus(function(response) {
      if (response.session) {
        var dvd = ($('dvdrequest') != null) ? $('dvdrequest').value : '';
        var goyd = ($('goydrequest') != null) ? $('goydrequest').value : '';
        Nmma.Ajax.request('/shared/pages/ajaxhandlers/discoverboating/security.aspx', {
          parameters: { 'arguments': { actiontype: 'fbregister', dvdrequest: dvd, goydrequest: goyd, uid: response.session.uid, access_token: response.session.access_token, visitor_id: DB.pardot_visitor_id()} },
          onSuccess: function(response) {
            if (response.isSuccess())
              popup.loadRequestSuccess(response);
            else
              popup.showErrors(response);
          },
          onFailure: function(response) { popup.showErrors(response); }
        });
      }
      else {
        // user is not logged in
        DialogManager.getActive().setMessage('<ul><li>Facebook login failed.</li></ul>');
      }
    });
  },

  FBonlogin: function() {
    var popup = DialogManager.getActive();
    if (popup == null)
      popup = new Nmma.Dialog({ 'width': 720, 'draggable': true, 'showButtons': false, 'roundedCorners': true, 'fullDestroy': true });
    FB.getLoginStatus(function(response) {
      if (response.session) {
        Nmma.Ajax.request('/shared/pages/ajaxhandlers/discoverboating/security.aspx', {
          parameters: { 'arguments': { actiontype: 'fblogin', uid: response.session.uid, access_token: response.session.access_token, visitor_id: DB.pardot_visitor_id()} },
          onSuccess: function(response) {
            if (response.isSuccess())
              popup.loadRequestSuccess(response);
            else
              popup.showErrors(response);
          },
          onFailure: function(response) { popup.showErrors(response); }
        });
      }
      else {
        // user is not logged in
        DialogManager.getActive().setMessage('<ul><li>Facebook login failed.</li></ul>');
      }
    });
  },

  loadForm: function(action, s) {
    var popup = DialogManager.getActive();
    if (popup == null) {
      popup = new Nmma.Dialog({ 'width': 720, 'draggable': true, 'showButtons': true, 'showCloseButton': false, 'roundedCorners': true, 'displayErrors': 'summary', 'fullDestroy': true });
      var btn = popup.addButton('Back', null, 1, false);
      btn.hide();
    }
    if (Object.isFunction(s))
      popup.registerSuccessCallback(s.bind(popup));
    popup.registerSubmitCallback(function() {
      var bkg = new Nmma.ProcessingBackgroundLayer();
      setTimeout(function(bkg) {
        Nmma.Ajax.request('/shared/pages/ajaxhandlers/discoverboating/security.aspx', {
          parameters: { 'form': popup.getContent().id },
          onSuccess: function(response) {
            bkg.hide();
            if (response.isSuccess()) {
              popup.loadRequestSuccess(response);
            }
            else {
              popup.showErrors(response);
              DB.evalScripts(response.responseText);
            }
          },
          onFailure: function(response) {
            bkg.hide();
            popup.showErrors(response);
          }
        });
      } .bind(this, bkg), 500);
    });
    var bkg = new Nmma.ProcessingBackgroundLayer();
    setTimeout(function(bkg) {
      Nmma.Ajax.request('/shared/pages/ajaxhandlers/discoverboating/security.aspx', {
        parameters: { 'arguments': { 'ActionType': action, visitor_id: DB.pardot_visitor_id()} },
        onSuccess: function(response) {
          bkg.hide();
          if (response.isSuccess()) {
            popup.loadRequestSuccess(response);
          }
          else {
            popup.showErrors(response);
            DB.evalScripts(response.responseText);
          }
        },
        onFailure: function(response) {
          bkg.hide();
          popup.showErrors(response);
        }
      });
    } .bind(this, bkg), 500);
  },

  logout: function() {
    Nmma.Ajax.request('/shared/pages/ajaxhandlers/discoverboating/security.aspx', {
      parameters: { 'arguments': { 'ActionType': 'logout'} },
      onSuccess: function(response) {
        if (response.isSuccess()) {
          Nmma.Forms.Reload();
        }
        else { alert(response.getErrorsList()); }
      },
      onFailure: function(response) { alert(response.getErrorsList()); }
    });
  }

}

DB.Contact = {

  onCountryChange: function(el, country) {
    DB.request('/shared/pages/ajaxhandlers/discoverboating/contact.aspx',
                { ActionType: 'oncountrychange', country: country },
                  this.update.bind(this, el),
                  null);
  },

  update: function(el, args) {
    Element.update(el, args.responseText);
  },

  loadForm: function(action, s) {
    var popup = DialogManager.getActive();
    if (popup == null) {
      popup = new Nmma.Dialog({ 'width': 720, 'draggable': true, 'showButtons': true, 'showCloseButton': false, 'roundedCorners': true, 'displayErrors': 'summary', 'fullDestroy': true });
      var btn = popup.addButton('Back', null, 1, false);
      btn.hide();
    }
    if (Object.isFunction(s))
      popup.registerSuccessCallback(s.bind(popup));
    popup.registerSubmitCallback(function() {
      var bkg = new Nmma.ProcessingBackgroundLayer();
      setTimeout(function(bkg) {
        Nmma.Ajax.request('/shared/pages/ajaxhandlers/discoverboating/contact.aspx', {
          parameters: { 'form': popup.getContent().id },
          onSuccess: function(response) {
          bkg.hide();
          if (response.isSuccess())
              popup.loadRequestSuccess(response);
            else
              popup.showErrors(response);
          },
          onFailure: function(response) { bkg.hide(); popup.showErrors(response); }
        });
      } .bind(this, bkg), 500);
    });
    var bkg = new Nmma.ProcessingBackgroundLayer();
    setTimeout(function(bkg) {
      Nmma.Ajax.request('/shared/pages/ajaxhandlers/discoverboating/contact.aspx', {
        parameters: { 'arguments': { 'ActionType': action, visitor_id: DB.pardot_visitor_id()} },
        onSuccess: function(response) {
          bkg.hide();
          if (response.isSuccess()) {
            popup.loadRequestSuccess(response);
          }
          else { popup.showErrors(response); }
        },
        onFailure: function(response) { bkg.hide(); popup.showErrors(response); }
      });
    } .bind(this, bkg), 500);
  }
}

var Search = {

  _inited: false,

  start: function() {
    var q = $('q').value;
    if (q != '') {
      window.location = '/search.aspx?q=' + q;
    }
  },

  focus: function(el) {
    el.style.color = '#000';
    if (!Search._inited) {
      el.value = '';
      Search._inited = true;
    }
  },

  blur: function(el) {
    el.style.color = '#CCC';
  },

  keyPressed: function(e) {
    if (!e) { var e = window.event; }
    var code = (e.keyCode) ? e.keyCode : e.which;
    if (code == 13) {
      Search.start();
      return false;
    }
  }

}

printPage = function() {
  window.print();
}

var Send = {

  display: function() {
    var div = document.createElement('div');
    div.setAttribute('id', 'sendtoafriend');
    var html = [];
    html.push('<h3>Share this page with a friend </h3>');
    html.push('<form id="sendtoafriendform" action="/sendtofriend.aspx" method="post" onsubmit="return Send.send();">');
    html.push(' <div><label>Your Name:</label> <input type="text" name="name" value="" class="textbox" /></div>');
    html.push(' <div><label>Your Email:</label> <input type="text" name="email" value="" class="textbox" /></div>');
    html.push(' <div><p>&nbsp;<p></div>');
    html.push(' <div><label>Friend\'s Email 1:</label> <input type="text" name="email1" value="" class="textbox" /></div>');
    html.push(' <div><label>Friend\'s Email 2:</label> <input type="text" name="email2" class="textbox" /></div>');
    html.push(' <div><label>Friend\'s Email 3:</label> <input type="text" name="email3" class="textbox" /></div>');
    html.push(' <div style="text-align:center; padding:20px;"><input type="submit" value="Send" class="button" /> <input type="button" value="Cancel" onclick="Send.close();" class="button" /></div>');
    html.push(' <div><input type="hidden" name="page" value="' + document.location + '" /></div>');
    html.push('</form>');
    div.innerHTML = html.join('');
    document.getElementsByTagName('body')[0].appendChild(div);
    Form.focusFirstElement('sendtoafriendform');

  },

  close: function() {
    el = $('sendtoafriend');
    if (el) Element.remove(el);
  },

  send: function() {
    var f = $('sendtoafriendform');
    var errors = [];

    if (f.name.value == '') { errors.push(' - Please enter your name '); }
    if (!Send.isValidEmail(f.email.value)) { errors.push(' - Your email address contains errors '); }
    if (f.email1.value != '' && !Send.isValidEmail(f.email1.value)) { errors.push(' - Your friend\'s email 1 address contains errors '); }
    if (f.email2.value != '' && !Send.isValidEmail(f.email2.value)) { errors.push(' - Your friend\'s email 2 address contains errors '); }
    if (f.email3.value != '' && !Send.isValidEmail(f.email3.value)) { errors.push(' - Your friend\'s email 3 address contains errors '); }
    if (f.email1.value == '' && f.email2.value == '' && f.email3.value == '') { errors.push(' - At least one friend\'s  email is required '); }

    if (errors.length > 0) {
      alert(errors.join('\n\n'));
    } else {
      new Ajax.Request(document.location.toString(), {
        parameters: Form.serialize(f),
        onSuccess: Send.confirm
      });
      var el = $('sendtoafriend');
      if (el) {
        Element.update(el, '<h3>Sending...</h3>');
        el.style.height = '120px';
      }
    }
    return false;
  },

  confirm: function(response) {
    var el = $('sendtoafriend');
    if (el) {
      Element.update(el, '<h3>' + response.responseText + '</h3><div style="text-align:center; padding:20px;"><input type="button" value="OK" onclick="Send.close();" class="button" /></div>');
      el.style.height = '120px';
      setTimeout('Send.close()', 3000);
    }
  },

  isValidEmail: function(email) {
    return (/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/).test(email);
  }


}

var Tracking = {

  onClick: function(typeid, brandid, accountid, url) {
    //new Ajax.Request('/ajax/brands.aspx', { parameters: 'typeid=' + typeid + '&brandid=' + brandid + '&accountid=' + accountid + '&url=' + escape(url) });
    Tracking.record(url);
  },

  go: function(url) {
    Tracking.record(url);
  },

  record: function(url) {
    new Ajax.Request('/shared/pages/discoverboating/referrals.aspx', { parameters: 'url=' + escape(url) });
  }

}

var Rating = {

  rate: function(destinationId, score) {
    new Ajax.Request('/shared/pages/discoverboating/rating.aspx', {
      parameters: 'destinationid=' + destinationId + '&score=' + score,
      onSuccess: function(response) { $('rating' + destinationId).update(response.responseText); }
    });
  }

}

