document.observe("dom:loaded", function() {
  var element, elements;
  //login to pulse link on the homepage
  var redraw = function(){
      if (Prototype.Browser.IE) {
          var n = document.createTextNode(' ');
          document.body.appendChild(n);
          (function(){n.parentNode.removeChild(n)}).defer();
      }
  };
  (function(){
    var expandables;
    if (expandables = $$('.expandable')){
      expandables.each(function(expandable){
        expandable.hide();
        expandable.previous('h6').addClassName('tree').observe('click', function(){
          expandable.toggle();
          expandable.previous('h6').toggleClassName('tree_expanded');
        });
      });
    }
  })();

  (function(){
  if (element = $('login_to_pulse')){
    element.observe('click', function(e){
    e.stop();
      $('login_form').show();
    });
  }})();

  (function(){
  if (elements = $$('.close')){
    elements.each(function(element){
    element.observe('click', function(e){
      e.stop();
        $(this).up().hide();
    });
    });
  }})();
  // init slideshow
  if(element = $('slideshow')){
    if (element.select('img').length > 1){
      new Crossfade(element, {duration:1});
    }
  };

  if($('branch_name')){
    var setup_branches_dropdown = function(){
      var branch_select = $('branch_name');
      var branches = healthcare_area_branches;
      branches = $H(branches).select(function(b){
        return ((($F('service_id') !== '' && b.value['service'].include($F('service_id'))) || !$('service_id').selectedIndex) &&
                 ($F('area') !== '' && b.value['area'].include($F('area'))) || !$('area').selectedIndex);
      });
        var options = '';
        var current = branch_select.getValue();
        var selected_is_selected = false;
        branch_select.innerHTML = ''
        branches.each(function(branch){
          if (branch.key === current) {
            selected_is_selected = true;
            branch_select.insert({bottom:new Element('option', {'selected': 'selected'}).update(branch.key)});
          } else {
            branch_select.insert({bottom:new Element('option').update(branch.key)});
          }

        });
        branch_select.insert({top:new Element('option', {value:''}).update('-Select Branch-')})
        if (!selected_is_selected){
          branch_select.selectedIndex = branch_select.options.length == 2 ? 1 : 0
        }
    };
    $('service_id').observe('change', setup_branches_dropdown);
    $('area').observe('change', setup_branches_dropdown);
    setup_branches_dropdown();
  };

  (function(){
  if (elements = $$('login')){}
  })();
  //hide and show relevant fields on the contact me form.
  (function(){
    var f = {};
    ['phone', 'mail'].each(function(field){
      if(element = $('contact_me_by_'+field)){
        f[field] = function(){
          if ($('contact_me_by_'+field).checked){
            $$('.'+field+'_fields').invoke('show');
            $$('.'+field+'_fields input').invoke('enable');
          } else {
            $$('.'+field+'_fields').invoke('hide');
            $$('.'+field+'_fields input').invoke('disable');
          }
          redraw();
        }
        element.observe('click', f[field]);
        f[field]();
      }
    });
  })();

  (function(){
   var req_regexp = /mailer\[required\]\[([a-z0-9_]*)\]/
   var req_if_regexp = /mailer\[required_if\]\[([a-z0-9_]*)\]/
   elements = $$("input[name^='mailer[required]']");
   elements.each(function(element){
       var id = element.readAttribute('name').match(req_regexp)[1];
    var label = $$("label[for='"+id+"']")[0]
    if (label) {
          label.insert({bottom:'<abbr title="required" class="required">*</abbr>'});
      }
   });
   var req_elements = $$("input[name^='mailer[required_if]']")
   var get_answer_to = function(question){

    if ($(question)){
      if ($(question).down('select')){
        return $F(question).isArray ? $F(question) : [$F(question)]
      } else if ($(question).down('input')){
        return $(question).select('input:checked').collect(function(i){return $F(i)});
      }
    } else {
      return false;
    }
  }
   $$('input, select, textarea').each(function(input){
    input.observe('click', function(){
      req_elements.each(function(element){
        var id = element.readAttribute('name').match(req_if_regexp)[1];
        var label = $$("label[for='"+id+"']")[0]
        var req;
        if (label) {
          var if_values = element.readAttribute('value').split(', ');
          if_values = if_values.map(function(value){
            value = value.split('=');
            return get_answer_to(value[0])[0] === value[1];
          });
          if (req = label.select('.required')[0]){
            req.remove();
          }
          if (if_values.all()){
            label.insert({bottom:'<abbr title="required" class="required">*</abbr>'});
          }
        }
      });
    });
   });


  })();
  //sensible source-order, javascript-off-friendly placeholder labels.
  //overlays the label on the input on load. hides it on click/focus.
  //shows it if there's nothing in the field on blur.
  if (elements = $$('label.placeholder')){
    elements.each(function(element){
      var input = $(element.readAttribute('for'));
      var div = element.up('div');
      div.setStyle({width:input.getWidth()+'px',height:input.getHeight()+'px',position:'relative'})
      element.setStyle({width:input.getWidth()+'px',height:input.getHeight()+'px',position:'absolute',zIndex:9})
      element.observe('click', function(){
        element.hide();
      });
      input.observe('focus', function(){
        element.hide();
      });
      input.observe('blur', function(){
        if (input.getValue() == ''){
          element.show();
        }
      });
    });
  }
  //if it's got a class of print - turn it into a print link.
  if (elements = $$('.print')){
    elements.each(function(element){
      element.observe('click', function(){
        window.print();
      });
    });
  }
  //modify text size functions.
  (function(){
    var $contents = $$('.resizable');

    if ($contents.length){
      var $increase_text = $$('.increase')[0];
      var $decrease_text = $$('.decrease')[0];
      var modifyTextSize = function(direction){
      if (window.font_size_multiplier === undefined) {window.font_size_multiplier = 1};
          if (direction == 'decrease') {
            window.font_size_multiplier -= 0.1;
          } else {
            window.font_size_multiplier += 0.1;
          }
          $contents.each(function(content){
             content.setStyle({'fontSize':window.font_size_multiplier + 'em'});
          });
          //disable at extremes
          if (window.font_size_multiplier < 1) {
            $decrease_text.addClassName('disabled');
          } else {
            $decrease_text.removeClassName('disabled');
          }
          if (window.font_size_multiplier > 2) {
            $increase_text.addClassName('disabled');
          } else {
            $increase_text.removeClassName('disabled')
          }
      };
      $increase_text.observe('click', function(){
        if(!$increase_text.hasClassName('disabled')){
          modifyTextSize('increase');
        }
      });
      $decrease_text.observe('click', function(){
        if(!$decrease_text.hasClassName('disabled')){
          modifyTextSize('decrease');
        }
      });
    }
  })();

  //map stuff
  (function(){
  if ($('map_wrap_no_js')){
    var selected_area = $('map_image').readAttribute('src').match(/\/images\/maps\/([a-z_]*)\.png/)[1];
    var hovered_area;
    var show_area_services = function(branch_ids){
      //hide everything
      $('contact_details').select('.hideable').invoke('hide');
      $('contact_details').select('a.tree').invoke('removeClassName', 'tree_expanded');
      $('contact_area_'+selected_area).show();
      //$('contact_details').scrollTo();
      redraw();
    }
    $('contact_details').select('a.tree').each(function(link){
      link.observe('click', function(e){
        e.stop();
        var area = link.up('.area');
        if (link.hasClassName('tree_expanded')) {
          link.removeClassName('tree_expanded');
          area.select('a.tree').invoke('removeClassName', 'tree_expanded');
          area.select('.hideable').invoke('hide');
          var branch_list = link.up('.branch_list');
          if (branch_list){
            branch_list.show();
            branch_list.previous().toggleClassName('tree_expanded');
          }
          var children = link.up('li').select('.branch_list');
          if (!children.length){
            children = link.up('li').select('.hideable');
          }
          //children.first().show().previous().addClassName('tree_expanded');
        } else {
          area.select('a.tree').invoke('removeClassName', 'tree_expanded');
          area.select('.hideable').invoke('hide');
          var branch_list = link.up('.branch_list');
          if (branch_list){
            branch_list.show();
            branch_list.previous().addClassName('tree_expanded');
          }
          var children = link.up('li').select('.branch_list');
          if (!children.length){
            children = link.up('li').select('.hideable');
          }
          children.first().show().previous().addClassName('tree_expanded');
        }
        redraw();
      });
    });
    //show hovered map area
    var map_mouse_over = function(e){
      var new_hovered_area;
      if (e.element().match('area')){
        new_hovered_area = e.element().className;
        if(hovered_area != new_hovered_area){
          hovered_area = new_hovered_area;
          var map = hovered_area;
          var label = hovered_area;
          if (!$('contact_area_'+new_hovered_area)){
            map = 'nz';
            label = selected_area;
          }
          $('map_image').writeAttribute('src', '/images/maps/'+map+'.png');
          $$('.map_label').invoke('hide')
          $$('.map_label.'+label).first().show()
          if (Prototype.Browser.IE){
            //IE renders percentage of opacity set on semitransparent pngs really horribly.
            $('map_image').setOpacity(1);
          } else {
            $('map_image').setOpacity(0.2);
          }
        }
      }
    }
    //show selected map area
    var map_mouse_out = function(e){
      if(hovered_area){
        hovered_area = ''
        $('map_image').setOpacity(0);
        $$('.map_label').invoke('hide')
        var map_label = $$('.map_label.'+selected_area).first()
        if (map_label) {
          map_label.show();
        }
        $('map_wrap').setStyle({background:"url('/images/maps/"+selected_area+".png') top left no-repeat"});
      }
    }
    $('map_wrap_no_js').writeAttribute('id', 'map_wrap').setStyle({background:"url('/images/maps/"+selected_area+".png') top left no-repeat"});
    $$('.map_label').invoke('hide')
    $('map_image').show().setOpacity(0);
    $('map_image').observe('mouseout', map_mouse_out);
    $('map_wrap').select('area','img').each(function(map){
      map.observe('mousemove', map_mouse_over);
      map.observe('mouseout', map_mouse_out);
      map.observe('click', function(e){
        e.stop();

        selected_area = e.element().className;
        if (!$('contact_area_'+selected_area)){
          selected_area = 'nz';
        }
        show_area_services();
        redraw();
      });
    });
  }
  })();
});
