document.write('<script src="/javascripts/scriptaculous/effects.js" type="text/javascript"></script>');

function lnl_home()
{
    //setup the rotating banner adverts
    if ($('banners'))
    {
        var banners = $('ad-banners').childElements();
    }
    else
    {
        var banners = new Array();
    }
    var num_banners = banners.length;
    var current_banner = 0;
    var previous_banner = 0;

    function rotate_banners()
    {
        if (num_banners > 1)
        {
            Effect.Fade(banners[current_banner],{ queue: 'front', duration: 0.4});
            current_banner = current_banner + 1;
            if (current_banner >= num_banners)
            {
                current_banner = 0;
            }
            Effect.Appear(banners[current_banner],{ queue: 'end', duration: 0.6});
        }
    }

    new PeriodicalExecuter(rotate_banners, 10);

}

Event.observe(window, 'load', function() {
    var selectabar_nav = $$('ul.navbar-secondary');
    if (selectabar_nav.length)
    {
        selectabar_nav.each(function(item){
            $(item.parentNode).observe('mouseover', function(e){
                item.style.display = 'block';
            });
            $(item.parentNode).observe('mouseout', function(e){
                item.style.display = 'none';
            });
        });
    }

  lnl_home();

  $A(document.getElementsByClassName('highlight_effect')).each(function(element){
    new Effect.Highlight(element)
  })

  // Add highlighting and clickable rows to tables
  $A(document.getElementsByClassName('listrow')).each(function(row){
    Event.observe(row, 'mouseover', function() {
      row.style.cursor = 'pointer';
    });
    Event.observe(row, 'click', function() {
      $A(row.childNodes).each(function(cell) {
        if(cell.nodeName == 'TD') {
          $A(cell.childNodes).each(function(child) {
            if(Element.hasClassName(child, 'edit')) {
              window.location = child.href;
            }
          });
        }
      });
    });
  });

  // Disable submit buttons when a form is submitted
    $A(document.getElementsByTagName('form')).each(function(form) {
        var submit = $A(form.getElementsByTagName('input')).find(function(input) {
            return (input.type == 'submit');
        });
        Event.observe(form, 'submit', function(event) {
          if (submit)
          {
            //submit.disabled = true;
            new Insertion.After(submit, '<input type="hidden" name="'+submit.name+'" value="'+submit.value+'" />');
          }
        });
    });


    // Make the drop shadow work for the City Bars site
    var cityBarsPages = ['active_whatson', 'active_partyideas', 'active_corporateeventsandprivateparties', 'active_specialoffers', 'active_reservationsandenquiries', 'active_root']

    if (cityBarsPages.indexOf(document.getElementsByTagName('body')[0].id) >= 0)
    {
        // Only try and add it if the div is on the page
        if ($('large-sh'))
        {
            applyDropShadows("div#large-sh","shadow3");
        }
    }

    // Relaunch party collapsing banner on homepage
    venue_overlay_displayed = true;

    function venue_overlay_disappear(event)
    {
        if (venue_overlay_displayed == true)
        {
            Effect.Squish('site-overlay',{duration: 0.5});
            venue_overlay_displayed = false;
        }
        Event.stop(event);
    }

    if ($('overlay-link'))
    {
        Event.observe('overlay-link','click', function(event) {venue_overlay_disappear(event)});
        // overlay will disappear after 30 seconds
        new PeriodicalExecuter(function (pe) { venue_overlay_disappear(); pe.stop(); }, 30);
    }

    if ($$('#telephone-lines a')) 
    {
        $$('#telephone-lines a').each(function(tel){
                tel.observe('click', function(event) {Effect.Fade('telephone-lines')});
        });
    }

    if ($('vip-terms-link'))
    {
        Event.observe('vip-terms-link','click', function(event) {
                Event.stop(event);
                Effect.toggle('vip-terms', 'blind', { duration: 1.0 });
        });
    }
    if ($$('.vip-enter-link'))
    {
        $$('.vip-enter-link').each(function(item){
                item.observe('click', function(event) {
                    Event.stop(event);
                    Effect.toggle('competition-form', 'blind', { duration: 1.0 });
                });
        });
    }

}); // End onload listner

function loginFormToggle(emailInput, passInput)
{
    emailInput.setStyle({color: '#666'})
    var emailInputDefault = emailInput.value
    emailInput.observe('focus', function(event) {
      var field = Event.element(event)

      if (field.value == emailInputDefault)
      {
		 if (field.value == "Your email")
		 {
		 	field.value = ''
		 	field.setStyle({color: 'black'})
		 }
	  }
    })
    emailInput.observe('blur', function(event) {
      var field = Event.element(event)

      if (field.value == '')
      {
          field.value = emailInputDefault
          field.setStyle({color: '#666'})
      }
    })

    passInput.setStyle({color: '#666'})
    var passInputDefault = passInput.value
    passInput.observe('focus', function(event) {
      var field = Event.element(event)

      if (field.value == passInputDefault)
      {
          field.value = ''
          field.setStyle({color: 'black'})
      }
    })
    passInput.observe('blur', function(event) {
      var field = Event.element(event)

      if (field.value == '')
      {
          field.value = passInputDefault
          field.setStyle({color: '#666'})
      }
    })
}

var Datefield = {
  increment: function(element) {
    if (element.bounds['within']) {
      this._incrementWithinArray(element)
    } else if (typeof(element.bounds['lower']) != 'undefined' && typeof(element.bounds['upper']) != 'undefined') {
      this._incrementWithinBounds(element)
    }

  },

  decrement: function(element) {
    if (element.bounds['within']) {
      this._decrementWithinArray(element)
    } else if (typeof(element.bounds['lower']) != 'undefined' && typeof(element.bounds['upper']) != 'undefined') {
      this._decrementWithinBounds(element)
    }


  },

  _incrementWithinBounds: function(element) {
    val = this._parseVal(element)
    new_val = val + 1

    if ($R(element.bounds['lower'], element.bounds['upper']).include(new_val)) {
      element.value = this._padValue(new_val, element.bounds['pad'])
    } else {
      element.value = this._padValue(element.bounds['lower'], element.bounds['pad'])
    }
  },

  _decrementWithinBounds: function(element) {
    val = this._parseVal(element)
    new_val = val - 1

    if ($R(element.bounds['lower'], element.bounds['upper']).include(new_val)) {
      element.value = this._padValue(new_val, element.bounds['pad'])
    } else {
      element.value = this._padValue(element.bounds['upper'], element.bounds['pad'])
    }
  },

  _padValue: function(num, padding) {

    if (typeof(padding) != 'undefined') {
      pad_times = padding - (num + '').length
      for (i = pad_times; pad_times != 0; pad_times--) {
        num = '0' + num
      }
    }
    return num
  },

  _incrementWithinArray: function(element) {
    index = this._valueInBoundsArray(element)
    bounds_arr = element.bounds['within']
    element.value = (index != null && typeof(bounds_arr[index + 1]) != 'undefined') ? bounds_arr[index + 1] : bounds_arr[0]
  },

  _decrementWithinArray: function(element) {
    index = this._valueInBoundsArray(element)
    bounds_arr = element.bounds['within']
    element.value = (index != null && typeof(bounds_arr[index - 1]) != 'undefined') ? bounds_arr[index - 1] : bounds_arr[bounds_arr.length - 1]
  },

  _valueInBoundsArray: function(element) {
    val = this._parseVal(element)
    bounds_arr = element.bounds['within']

    found_val = bounds_arr.detect(function(arr_el) {
      if (typeof(val) == 'string') {
        return (val.toLowerCase() == arr_el.toLowerCase())
      } else {
        return (val == arr_ell)
      }
    }.bind(this))

    return (found_val) ? bounds_arr.indexOf(found_val) : null
  },

  _parseVal:  function(element) {
    return (element.bounds['type'] == 'string') ? element.value.toLowerCase() : element.value - 0
  }
}

Dateset = Class.create();
Dateset.prototype = {
  initialize: function(element, bounds) {
    this.element = $(element);
    this.field_bounds = $H({  day: {lower: 1, upper: 31},
                              month: {lower: 1, upper: 12},
                              year: {lower: 1947, upper: 2047},
                              hour: {lower: 1, upper: 12},
                              minutes: {lower: 0, upper: 59, pad: 2},
                              meridiem: {within: ['AM', 'PM'], type: 'string'} }).merge(bounds || {})

    this.field_names = this.field_bounds.collect(function(arr) { return arr[0] })

    Element.cleanWhitespace(this.element);

    this.getDatefields().each( function(arr) {
      this.addListeners(arr[1]);
    }.bind(this));
  },

  getDatefields: function() {
    fields = {}
    date_fields = $A(this.element.getElementsByTagName('input'))

    this.field_names.each(function(field_name) {
      fields[field_name] = date_fields.detect(function(field) {
        if (field.id.match(new RegExp('.*_' + field_name + '$'))) {
          field.bounds = this.field_bounds[field_name]
          return field
        } else {
          return null
        }
      }.bind(this))
    }.bind(this))
    return $H(fields)
  },

  addListeners: function(field) {
    Event.observe(field, 'keypress', this.onKeypress.bindAsEventListener(this));
  },

  onKeypress: function(event) {
    field = Event.element(event);
    if (event.keyCode == Event.KEY_UP) {
      Datefield.increment(field)
    } else if (event.keyCode == Event.KEY_DOWN) {
      Datefield.decrement(field)
    }
  }
}

SlideDownMenu = Class.create();

/**
 * @param container the outer <div> 
 * @param dropdown the element to slide down
 * @param img object the image reference and open/close images
 * @example: 
 * 
 *   new SlideDownMenu($('discover'), $$('#discover .the_menu')[0], {img:$$('#discover .menu_class')[0], open: '/img/mh/btn-discover-open.png', closed: '/img/mh/btn-discover.png'});
 */
SlideDownMenu.prototype = { 
    initialize: function(container, dropdown, image) { 
        this.container = container;
        this.dropdown = dropdown;
        this.image = image;

        this.container.observe('click', this.toggleSlide.bind(this));
        this.toggleSlide(true);
    },

    toggleSlide: function(reverse) { 
        reverse =(typeof(reverse) != 'undefined' && typeof(reverse) != 'object') ? reverse : false;
        if (this.container.hasClassName('open') && this.dropdown.visible() && !reverse) 
        {
            this.slideUp();
        }
        else if(!this.dropdown.visible())
        {
            this.slideDown();
        }
    },

    slideDown: function() { 
       this.container.addClassName('open')
       var image = this.image;
       new Effect.BlindDown(this.dropdown,{duration:0.4, afterFinish: function(){
            image.img.src = image.open;
        }});
    },
             
    slideUp: function() { 
       this.container.removeClassName('open')
       var image = this.image;
       new Effect.BlindUp(this.dropdown,{duration:0.4, afterFinish: function(){
            image.img.src = image.closed;
        }});
    }
}

