var trip_planner_elements = null;
var trip_planner_category = null;
var trip_planner_item = null;
var newsletter_slide_finished = false;
var marker_managers = [];
var marker_requests = [];
var markers = [];
var map_icons = [];
var map_ids = [1,2,3,5,6,7,8,9,10];
var interactive_map = null;
var press_slides = [];
var interactive_map_page = false;
var flag_marker = null;
var map_loading_div = null;
var press_toggles = null;
var newsletter = null;
var trip_planner = null;
var event_categories_fx = [];

window.addEvent('domready', function() {

  /* Add rollovers for top nav in IE6 */
  if (Browser.Engine.trident && Browser.Engine.version == 4) {
    var nav_li = $$('#nav li');
        nav_li.extend($$('#sub_nav li'));
    if (nav_li.length) {
      nav_li.addEvent('mouseenter', function(e) {
        var tar = $(e.target);
				while (tar.nodeName != 'LI') {
					tar = tar.getParent();
				}
				$$('select').setStyle('visibility','hidden');
        tar.addClass('ie6_selected');
      });
      nav_li.addEvent('mouseleave', function(e) {
        var tar = $(e.target);
				while (tar.nodeName != 'LI') {
					tar = tar.getParent();
				}
				$$('select').setStyle('visibility','visible');
        tar.removeClass('ie6_selected');
      });
    }
  }
  
  var event_categories = $$('div.listing div.category_event');
    if(event_categories.length) {
    	event_categories.each(function(event_category) {
    		var id = event_category.getAttribute('id');
    		event_categories_fx[id] = [];
    		var el_hidden = event_category.getElement('div.hidden');
    		event_categories_fx[id]['hidden'] = new Fx.Tween(el_hidden);
    		var el_bottom = event_category.getElement('div.category_bottom');
    		event_categories_fx[id]['bottom'] = new Fx.Tween(el_bottom);
    	});
    	event_categories.addEvent('mouseenter', function() {
            var id = this.getAttribute('id');
            event_categories_fx[id]['hidden'].cancel();
            event_categories_fx[id]['hidden'].start('height', 30);
            event_categories_fx[id]['bottom'].cancel();
            event_categories_fx[id]['bottom'].start('height', 105);
        });
    	event_categories.addEvent('mouseleave', function() {
            var id = this.getAttribute('id');
            event_categories_fx[id]['hidden'].cancel();
            event_categories_fx[id]['hidden'].start('height', 0);
            event_categories_fx[id]['bottom'].cancel();
            event_categories_fx[id]['bottom'].start('height', 72);
        });
    }

    if($('home_content')) {
        var window_height = window.getSize()['y'];
        var body_height = $$('body')[0].getStyle('height').replace('px','')
        if(window_height > body_height){
            //console.log(window_height + ' > ' + html_height);
            $$('html, body').each(function(set){
                set.setStyle('height','100%');
            });
        }
    }
    

	var search_form = document.forms['search_form'];
	if (search_form) {
		search_form = $(search_form);
		new ClearTextInput(search_form.query);
	}


    // Press release toggling
    press_toggles = $$('a.press_release_toggle');
    if (press_toggles) {
        press_toggles.each(function(press_toggle) {
          var idx = press_toggle.getAttribute('id').substr(21);
          press_slides[idx] = new Fx.Slide(press_toggle.getParent().getNext('div'));
          press_slides[idx].hide();
        });
    }

    // If there are no trip planner items, hide the elements container
    if ($$('div.trip_planner_item').length == 0) {
        $$('#trip_planner_elements').setStyles({display:'none'});
    }

    trip_planner = $('trip_planner');
    if (trip_planner) {
        // apply calendar date pickers
        new CalendarEightysix('trip_start', {format:'%d/%m/%Y', minDate:Date.now(), alignX:'middle', alignY:'bottom'});
        new CalendarEightysix('trip_end', {format:'%d/%m/%Y', minDate:Date.now(), alignX:'middle', alignY:'bottom'});
        var trip_planner_elements = $('trip_planner_elements');

        add_to_trip_planner = $$('a.add_to_trip_planner');
        add_to_trip_planner.addEvent('click', add_to_trip_planner_fn);

        remove_from_trip_planner = $$('a.remove_from_trip_planner');
        remove_from_trip_planner.addEvent('click', removeItem);
                
        var trip_date_toggle = $('trip_date_toggle');
        var trip_date_form_wrapper = $('trip_date_form_wrapper');
        if (trip_date_toggle) {
            trip_date_toggle.addEvent('click', function(e) {
                e = new Event(e).stop();
                if (trip_date_form_wrapper.getStyle('display') == 'block') {
                    trip_date_form_wrapper.setStyle('display', 'none');
                }
                else {
                    trip_date_form_wrapper.setStyle('display', 'block');
                }
            });
        }
        var trip_date_form = $('trip_date_form');
        if (trip_date_form) {
            trip_date_form.addEvent('submit', function(e) {
                why = '';
                e = new Event(e);
                start_date_split = trip_date_form.trip_start.value.split('/');
                var start_date = new Date(start_date_split[2], start_date_split[1]-1, start_date_split[0]);
                end_date_split = trip_date_form.trip_end.value.split('/');
                var end_date = new Date(end_date_split[2], end_date_split[1]-1, end_date_split[0], 23, 59, 59);
                var now = new Date();
                // check if start date is greater than end date
                if (start_date > end_date) {
                    why = "Please make sure the end date is later than the start date\r\n";
                }
                // make sure end date is greater than now
                if (now > end_date) {
                    why = "Please make sure the end date is later than the current date\r\n";
                }
                if (why) {
                    alert(why);
                    return false;
                    e.stop();
                }
                return true;

            });
        }
        var trip_date_clear = $('trip_date_clear');
        if (trip_date_clear) {
            trip_date_clear.addEvent('click', function(e) {
                e = new Event(e).stop();
                trip_date_form_wrapper.setStyle('display', 'block');
                $('trip_planner_dates').destroy();
                trip_planner_clear_request =
                    new Request({url:'trip_planner_clear_dates'}).send();
                $('trip_start').value = '';
                $('trip_end').value = '';
            });
        }
        var trip_planner_email = $$('.trip_planner_email_icon')[0];
        var trip_planner_email_form = $('trip_planner_email_form');
        if (trip_planner_email) {
            trip_planner_email.addEvent('click', function(e) {
                e = new Event(e).stop();
                // switch this to an input field
                trip_planner_email.setStyle('display', 'none');
                trip_planner_email_form.setStyle('display', 'block');
            });
        }
        if (trip_planner_email_form) {
            new ClearTextInput(trip_planner_email_form.email);
            trip_planner_email_form.addEvent('submit', function(e) {
                // check for valid email
                why = '';

                if (!checkEmail(trip_planner_email_form.email.value ||
                        trip_planner_email_form.email.value == trip_planner_email_form.email.defaultValue)) {
                    why += "Please enter your email\r\n";
                }

                if (why) {
                    alert(why);
                }
                else {
                    trip_planner_email_request = new Request({
                        url:'trip_planner_email',
                        onSuccess:function(responseText, responseXML) {
                            if (responseText.length) {
                                alert(responseText);
                            }
                            else {
                                alert('Your trip planner has been emailed to '+trip_planner_email_form.email.value);
                                trip_planner_email_form.setStyle('display', 'none');
                                trip_planner_email.setStyle('display', 'inline');
                                trip_planner_email_form.email.value = trip_planner_email_form.email.defaultValue;
                            }
                        }
                    }).send('email='+trip_planner_email_form.email.value);
                }
                e = new Event(e).stop();
            });
        }
    }


    newsletter = $('newsletter');
    if (newsletter && newsletter.nodeName != "SELECT") {
        var newsletter_form = $(newsletter.getElement('form'));
        new ClearTextInput(newsletter_form.newsletter_firstname);
        new ClearTextInput(newsletter_form.newsletter_lastname);
        new ClearTextInput(newsletter_form.newsletter_email);
        new ClearTextInput(newsletter_form.newsletter_address);
        new ClearTextInput(newsletter_form.newsletter_comments);
        var more_link = newsletter.getElement('.ds_c a');
        var newsletter_form_fx = new Fx.Slide($('newsletter_form'), {
            open: false,
            onComplete: function() {
                newsletter_slide_finished = true;
            }
        });
        newsletter_form_fx.hide();
        // hide the actual submit button
        newsletter.getElement('form .submit').setStyle('display', 'none');
        more_link.addEvent('click', function(e) {
            e = new Event(e).stop();
            if (!newsletter_slide_finished) {
            // firstly slide in the form
                newsletter_form_fx.slideIn();
            }
            else {
                // check contents of form
                why = '';
                if (!newsletter_form.newsletter_firstname.value.length ||
                    newsletter_form.newsletter_firstname.value == newsletter_form.newsletter_firstname.defaultValue) {
                    why = "Please enter your First Name\r\n";
                }
                if (!newsletter_form.newsletter_lastname.value.length ||
                    newsletter_form.newsletter_lastname.value == newsletter_form.newsletter_lastname.defaultValue) {
                    why += "Please enter your Last Name\r\n";
                }
                if (!checkEmail(newsletter_form.newsletter_email.value ||
                    newsletter_form.newsletter_email.value == newsletter_form.newsletter_email.defaultValue)
                ) {
                    why += "Please enter your Email\r\n";
                }
                
                if (newsletter_form.include_guide.checked && 
                	(newsletter_form.newsletter_address.value == newsletter_form.newsletter_address.defaultValue
                	|| newsletter_form.newsletter_address.value.length < 10)
                ) {
                	why += "Please enter your Address if you want to receive the Holiday Guide\r\n";
                }
                if (why) {
                    alert(why);
                }
                else {
                    if (newsletter_form.newsletter_address.value ==
                        newsletter_form.newsletter_address.defaultValue) {
                        newsletter_form.newsletter_address.value = '';
                    }
                    if (newsletter_form.newsletter_comments.value ==
                        newsletter_form.newsletter_comments.defaultValue) {
                        newsletter_form.newsletter_comments.value = '';
                    }
                    newsletter_form.submit();
                }
            }
        });
        if (getURLParam('newsletter_status') == 'success') {
        	setTimeout('alert("Newsletter subscription successful");', 500);
        }
    }


    interactive_map = $('interactive_map_wrapper');
    if (interactive_map) { 	
        if ($('interactive_map_page')) {
            interactive_map_page = true;
            // load the map straight away
            loadInteractiveMap();
        }
        else {
            // change the name of the appropriate label
            var cat_input = $('category_'+cluster_array.category_id);
            if (cat_input) {
                var cat_label = cat_input.getNext('label');
                cat_label.set('html', 'Current items');
                // add events for flags
                $$('.show_on_map').addEvent('click', function(e) {
                    e = new Event(e).stop();
                    var idxs = $(e.target).getAttribute('id').split('_');
                    // is the map showing?
                    if (interactive_map.getStyle('display') == 'none') {
                        interactive_map.setStyle('display', 'block')
                        loadInteractiveMap();
                    }
                    categoryOn(idxs[4]);
                    flagItem(idxs[3]);
                });
            }
        }
        // add events to destination drop down
        interactive_map.getElement('select').addEvent('change', function(e) {
            if (this.value) {
                var vals = this.value.split(',');
                map.setCenter(new GLatLng(parseFloat(vals[0]),parseFloat(vals[1])),parseInt(vals[2]));
            }
        });
        var map_close = $('interactive_map_close');
        if (map_close) {
            map_close.addEvent('click', function(e) {
                e = new Event(e).stop();
                if (confirm('Are you sure you want to close the map?')) {
                    interactive_map.setStyle('display', 'none');
                }
            });
        }

    }

  /* Modal Box Goodness */
  var boxed = $$('a.boxed');
  if (boxed.length) {
      SqueezeBox.assign($$('a.boxed'), {
        parse: 'rel'
      });
  }
  /* END MODAL BOX GOODNESS :( */
  

  setTimeout('delayed_load()', 250);
  
});


function delayed_load()
{

    var gps_map = $('gps_map');
    if (gps_map && typeof(point) != 'undefined') {
        setStaticLocation(point);
    }
    
    // E-newsletters Archive Go Button Navigation
    var newsletter_submits  = $$('.newsletter_archive_submit');
    
    if (newsletter_submits.length) {
    	newsletter_submits.addEvent('click', function(e) {
            e = new Event(e).stop();
            var val = this.getPrevious('select').get('value');
            if (val != 0) {
                window.open(val);
            } else {
                alert('Please select a newsletter from the list.');
            }
        });
    }
    
    var enquiry_form = document.forms['enquiry_form'];
    if (enquiry_form) {
      enquiry_form = $(enquiry_form);
      new ClearTextInput(enquiry_form.contact_name);
      new ClearTextInput(enquiry_form.contact_email);
      new ClearTextInput(enquiry_form.contact_phone);
      new ClearTextInput(enquiry_form.contact_message);
      enquiry_form.addEvent('submit', function(e) {
          why = '';
          if (enquiry_form.contact_name.value == enquiry_form.contact_name.defaultValue ||
              !enquiry_form.contact_name.value.length) {
              why = "Please enter your name\r\n";
          }
          if (enquiry_form.contact_email.value == enquiry_form.contact_email.defaultValue ||
              !checkEmail(enquiry_form.contact_email.value)) {
              why += "Please enter your email\r\n";
              }
          if (enquiry_form.contact_message.value == enquiry_form.contact_message.defaultValue) {
              why += "Please enter your message\r\n";
          }

          if (why) {
              alert(why);
              e = new Event(e).stop();
          }
      });
    }

    var use_images_form = document.forms['use_images_form'];
    if (use_images_form) {
      use_images_form = $(use_images_form);
      new ClearTextInput(use_images_form.use_image_name);
      new ClearTextInput(use_images_form.use_image_email);
      new ClearTextInput(use_images_form.use_image_phone);
      use_images_form.addEvent('submit', function(e) {
        why = '';
        if (use_images_form.use_image_name.value == use_images_form.use_image_name.defaultValue 
         || !use_images_form.use_image_name.value.length) {
        	why = "Please enter your name\r\n";
        }
        if (use_images_form.use_image_email.value == use_images_form.use_image_email.defaultValue 
         || !use_images_form.use_image_email.value.length
         || !checkEmail(use_images_form.use_image_email.value)) {
        	why += "Please enter your email\r\n";
        }
        if (!use_images_form.use_image_details.value.length) {
        	why += "Please enter the images you would like\r\n";
        }
        if (!use_images_form.use_image_message.value.length) {
        	why += "Please explain how you intend to use these images\r\n";
        }

        if (why) {
			alert(why);
			e = new Event(e).stop();
        }
        if (use_images_form.use_image_phone.value == use_images_form.use_image_phone.defaultValue) {
        	use_images_form.use_image_phone.value = '';
        }
        
      });
    }

    var addevent_form = document.forms['contribute_addevent'];
    if (addevent_form) {
    	addevent_form = $(addevent_form);
        new ClearTextInput(addevent_form.submitter_name);
		new ClearTextInput(addevent_form.submitter_email);
		new ClearTextInput(addevent_form.submitter_phone);
		new ClearTextInput(addevent_form.submitter_event);
		new ClearTextInput(addevent_form.submitter_details);
		addevent_form.addEvent('submit', function(e) {
			why = '';
			if (addevent_form.submitter_name.value == addevent_form.submitter_name.defaultValue 
			 || !use_images_form.use_image_name.value.length) {
				why = "Please enter your name\r\n";
			}
			if (addevent_form.submitter_email.value == addevent_form.submitter_email.defaultValue 
			 || !use_images_form.use_image_email.value.length
			 || !checkEmail(addevent_form.submitter_email)) {
				why += "Please enter your email\r\n";
			}
			if (addevent_form.submitter_event.value == addevent_form.submitter_event.defaultValue 
			 || !addevent_form.submitter_event.value.length) {
				why += "Please enter the name of the event\r\n";
			}
			if (addevent_form.submitter_details.value == addevent_form.submitter_details.defaultValue 
			 || !addevent_form.submitter_details.value.length) {
				why += "Please enter some details about your event\r\n";
			}
			if (why) {
				alert(why);
				e = new Event(e).stop();
			}
			if (addevent_form.submitter_phone.value == addevent_form.submitter_phone.defaultValue) {
				addevent_form.submitter_phone.value = '';
			}
			
		});
    }
    
      // Category Selector Tooltips
      var tooltips1 = $$('a.tooltip');
      if (tooltips1.length) {
        tooltips1.each(function(element,index) {
            var content = element.get('title');
            element.store('tip:title', content);
            element.store('tip:text', '');
            element.store('tip:top', '');
        });
        var atooltips_tipz = new Tips(tooltips1, {
            className: 'tooltip',
            offset: {
            'x': -30,       //default is 16
            'y': -20        //default is 16
            },
            fixed: true
        });
      }
      // END CATEGORY SELECTOR TOOLTIPS

      // Event category list icon tooltips
      var maptip = $$('a.maptip1');
      maptip.extend($$('a.addtip1'));
      maptip.extend($$('a.maptip2'));
      maptip.extend($$('a.addtip2'));
      if (maptip.length) {
        maptip.each(function(element,index) {
            var content = element.get('title');
            element.store('tip:title', content);
            element.store('tip:text', '');
            element.store('tip:top', '');
        });
        var tipz = new Tips(maptip, {
            className: 'tooltip2',
            offset: {
            'x': -108,       //default is 16
            'y': -25        //default is 16
            },
            fixed: true
        });
      }
      // END CATEGORY LIST ICON TOOLTIPS
      
      // Social media icon hover tips
      var socialtip = $$('a.socialtip');
      if (socialtip.length) {
       socialtip.each(function(element,index) {
         var content = element.get('title');
         element.store('tip:title', content);
         element.store('tip:text', '');
         element.store('tip:top', '');
      });
        var socialtip_tipz = new Tips(socialtip, {
            className: 'tooltip',
            offset: {
            'x': -10,       //default is 16
            'y': -25        //default is 16
            },
            fixed: true
        });
      }
      // END SOCIAL MEDIA ICON HOVER TIPS
      

      
      if (press_toggles) {
          press_toggles.addEvent('click', function(e) {
            e = new Event(e).stop();
            var idx = this.getAttribute('id').substr(21);
            press_slides[idx].toggle();
          });
      }
}

function loadInteractiveMap() {

  // create map here
    if (!map) {

        map_ids.each(function(id) {
            map_icons[id] = [];
            map_icons[id].item = new GIcon();
            map_icons[id].cluster = new GIcon();
            map_icons[id].item.image = 'images/icons/map/icon_'+id+'s.png';
            map_icons[id].cluster.image = 'images/icons/map/icon_'+id+'.png';
            map_icons[id].item.shadow = 'images/icons/map/icon_shadow.png';
            map_icons[id].cluster.shadow = 'images/icons/map/icon_shadow_l.png';
            map_icons[id].item.iconSize = new GSize(18, 32);
            map_icons[id].cluster.iconSize = new GSize(23, 42);
            map_icons[id].item.shadowSize = new GSize(36, 33);
            map_icons[id].cluster.shadowSize = new GSize(40, 43);
            map_icons[id].item.iconAnchor = new GPoint(9, 32);
            map_icons[id].cluster.iconAnchor = new GPoint(12, 42);
            map_icons[id].item.infoWindowAnchor = new GPoint(9, 2);
            map_icons[id].cluster.infoWindowAnchor = new GPoint(9, 2);
        });
    	
        map = new GMap2(document.getElementById("interactive_map"));
        GEvent.addListener(map, "moveend", function() {
          if (flag_marker) {
              var t_marker = flag_marker;
              flag_marker = null;
              GEvent.trigger(t_marker, 'click');
          }
      });
      map.setUIToDefault();
      map.disableScrollWheelZoom();
      if (ave_lat && ave_lng) {
          map.setCenter(new GLatLng(parseFloat(ave_lat), parseFloat(ave_lng)),
                        11);
      }
      else {
          map.setCenter(new GLatLng(-26.804638, 153.130349),
                        11);
      }
    
      // add event to turning on and off categories
      var interative_map_categories = $$('#interative_map_categories input');
      interative_map_categories.addEvent('click', function(e) {
         var tar = $(e.target);
         var idx = tar.getAttribute('id').substr(9);
         if (tar.checked) {
             // turn on category
             categoryOn(idx);
         }
         else {
             // turn off category
             categoryOff(idx);
         }
      });
    
        // add loading animation      
        map_loading_div = new Element("div");
        map_loading_div.setStyles({visibility:"hidden",background:"#ffffff",border:"1px solid #8888FF"});
        map_loading_div.set('html', '<p>Loading...</p>');
        map.getContainer().appendChild(map_loading_div);	    	
        var center_pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(100,18));
        center_pos.apply(map_loading_div);
    }
}

function add_to_trip_planner_fn(e) {
    e = new Event(e).stop();
    var tar = $(e.target);
    if (tar.nodeName != 'A') {
        tar = tar.getParent();
    }
    
    // get the id of the item
    var idxs = tar.getAttribute('id').split('_');

    // work out if it's in the list
    // if not, get the html to insert

    // alternative is to create element then load it in here

    trip_planner_add_request = new Request.HTML({
        onSuccess:function tripPlannerInsert(tree, elements, html, js)
        {
        // create div
            if (trip_planner_category && elements.length) {
            	var tripPlannerItemClass = 'trip_planner_item';
            	if (html.indexOf('out_of_date') > 0) {
            		tripPlannerItemClass += ' out_of_date';
            		$('events_out_of_date').setStyle('display', 'block');
            	}
                var el_div = new Element('div', {
                    'id':'trip_planner_item_'+trip_planner_item+'_'+trip_planner_category, 
                    'class':tripPlannerItemClass
                });
                el_div.inject($('trip_planner_category_items_'+trip_planner_category));
                el_div.set('html', html);
                // add events
                checkTripPlannerCategories();
                el_div.getElement('.remove_from_trip_planner').addEvent('click', removeItem);
                var msg = 'This item has been added to your trip planner';
                if (trip_planner_category == 1) {
                    msg += "\r\nNote: This event may be outside of your trip planner dates.";
                }
                alert(msg);
            }
            else if (!elements.length) {
                alert('This item already exists in the list');
            }

        }
        }).get('trip_planner_item/'+idxs[1]);
    trip_planner_category = idxs[2];
    trip_planner_item = idxs[1];

}

function categoryOn(category_id)
{
    // have we loaded the data for this
    if (marker_managers[category_id]) {
        marker_managers[category_id].show();
    }
    else {
        loadMarkers(category_id);
    }
}

function categoryOff(category_id)
{
    marker_managers[category_id].hide();
}

function flagItem(item_id)
{
    var curr_zoom = map.getZoom();
    // iterate through the markers to work out which one to show

    var zoom_idx = 17;

    var i = 0;
    var clicked_marker = false;
    while (!clicked_marker && i < markers[cluster_array.category_id][zoom_idx].length) {
        var j = 0;
        while (!clicked_marker && j < markers[cluster_array.category_id][zoom_idx][i].item_ids.length) {
            if (markers[cluster_array.category_id][zoom_idx][i].item_ids[j] == item_id) {
                clicked_marker = markers[cluster_array.category_id][zoom_idx][i];
            }
            j++;
        }
        i++;
    }
    if (clicked_marker) {
        flag_marker = clicked_marker;
        map.setCenter(clicked_marker.getLatLng(), 17);
    }
    window.scrollTo(0, 154);

}

function loadMarkers(category_id)
{
    map_loading_div.setStyle('visibility','visible');
    if (!marker_requests[category_id]) {
        if (cluster_array && category_id == cluster_array.category_id) {
            markers[category_id] = []
            marker_managers[category_id] = new MarkerManager(map);
            // add all markers
            markers[category_id][9] = createMarkers(cluster_array.markers[9], category_id);
            markers[category_id][11] = createMarkers(cluster_array.markers[11], category_id);
            markers[category_id][13] = createMarkers(cluster_array.markers[13], category_id);
            markers[category_id][15] = createMarkers(cluster_array.markers[15], category_id);
            markers[category_id][17] = createMarkers(cluster_array.markers[17], category_id);
            addMarkers(markers[category_id][9], category_id, 1, 10);
            addMarkers(markers[category_id][11], category_id, 11, 12);
            addMarkers(markers[category_id][13], category_id, 13, 14);
            addMarkers(markers[category_id][15], category_id, 15, 16);
            addMarkers(markers[category_id][17], category_id, 17);
            $('category_'+category_id).checked = true;
            categoryOn(category_id);
        }
        else {
            marker_requests[category_id] = new Request.JSON({
                url: 'markers/'+category_id,
                onSuccess: function(data) {
                    map_loading_div.setStyle('visibility','hidden');
                    marker_managers[data.category_id] = new MarkerManager(map);
                    // add all markers
                    markers[data.category_id] = [];
                    markers[data.category_id][9] = createMarkers(data.markers[9], data.category_id);
                    markers[data.category_id][11] = createMarkers(data.markers[11], data.category_id);
                    markers[data.category_id][13] = createMarkers(data.markers[13], data.category_id);
                    markers[data.category_id][15] = createMarkers(data.markers[15], data.category_id);
                    markers[data.category_id][17] = createMarkers(data.markers[17], data.category_id);
                    addMarkers(markers[data.category_id][9], data.category_id, 1, 10);
                    addMarkers(markers[data.category_id][11], data.category_id, 11, 12);
                    addMarkers(markers[data.category_id][13], data.category_id, 13, 14);
                    addMarkers(markers[data.category_id][15], data.category_id, 15, 16);
                    addMarkers(markers[data.category_id][17], data.category_id, 17);
                    categoryOn(data.category_id);
                },
                onFailure: function() {
                    marker_requests[category_id] = null;
                }
            }).get();
        }
    }
}

function createMarkers(markers, category_id)
{
    
    var marker_array = [];
    markers.each(function(marker) {
        var t_icon = null;
        if (marker.item_ids.length > 1) {
            t_icon = map_icons[category_id].cluster;
        }
        else {
            t_icon = map_icons[category_id].item;
        }
        var t_marker = new GMarker(
                new GLatLng(parseFloat(marker.lat),
                            parseFloat(marker.lng)),
                t_icon);
        t_marker.item_ids = marker.item_ids;
        
        GEvent.addListener(t_marker, 'click', function() {
          // get html for item
            var zoom = map.getZoom();
            if (t_marker.item_ids.length == 1) {
              var req = new Request.HTML({
                  onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
                    // hide loading div
                    map_loading_div.setStyle('visibility', 'hidden');
                    map.openInfoWindowHtml(t_marker.getLatLng(),
                            responseHTML,{
                            pixelOffset: new GSize(0,-32),
                            onOpenFn: function() {
                                // add event to zoom button
                                $$('#interactive_map .add_to_trip_planner').addEvent('click', add_to_trip_planner_fn);
                            }
                          });
                  }
              }).get('marker/'+t_marker.item_ids[0]+'/'+zoom);
            }
            else {
                    // if at max zoom, show popup with truncated info
                  var req = new Request.HTML({
                      onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
                        // hide loading div
                        map_loading_div.setStyle('visibility', 'hidden');
                        map.openInfoWindowHtml(t_marker.getLatLng(),
                                responseHTML,{
                                pixelOffset: new GSize(0,-32),
                                onOpenFn: function() {
                                    // add event to zoom button
                                    $$('#interactive_map .add_to_trip_planner').addEvent('click', add_to_trip_planner_fn);
                                    $$('.infowindow_zoom').addEvent('click', function(e) {
                                        e = new Event(e).stop();
                                        var curr_zoom = map.getZoom();
                                        if (curr_zoom < 17) {
                                            var new_zoom = curr_zoom+2;
                                            if (new_zoom > 17) {
                                                new_zoom = 17;
                                            }
                                            map.setZoom(new_zoom);
                                            map.closeInfoWindow();
                                        }
                                    });
                                }
                              });
                        }
                  }).get('marker/'+t_marker.item_ids.join(',')+'/'+zoom);
                  map.setCenter(this.getLatLng());
//	    		}

            }
            // show loading div
            map_loading_div.setStyle('visibility','visible');
        });
        marker_array.push(t_marker);
    });
    return marker_array;
}

function addMarkers(markers, category_id, zoom_level1, zoom_level2) {

    marker_managers[category_id].addMarkers(markers, zoom_level1, zoom_level2);

}


function checkTripPlannerCategories()
{
    categories    = $$('#trip_planner_elements h4');
    var has_items = 0;
    categories.each(function(category) {
        var idx = category.getAttribute('id').substr(22);
        var cat_items = $('trip_planner_category_items_'+idx);
        if (cat_items.getChildren().length) {
            category.setStyle('display', 'block');
            has_items = 1;
        }
        else {
            category.setStyle('display', 'none');
        }
    });

    // If there are items
    if (has_items == 1) {
        $$('#trip_planner_elements').setStyles({display:'block'});
        $$('#print_email_links').setStyles({display:'block'});
        $$('#plan_your_holiday').setStyles({display:'none'});
    } else {
        $$('#plan_your_holiday').setStyles({display:'block'});
        $$('#print_email_links').setStyles({display:'none'});
        $$('#trip_planner_elements').setStyles({display:'none'});
    }

}

function removeItem(e)
{
    // Confirmation message to stop user unintentionally removing an item
    var really_delete = confirm("Are you sure you want to remove this item?");
    if (really_delete == true) {
        e = new Event(e).stop();
        var tar = $(e.target);
        var idx = $(e.target).getAttribute('id').substr(25);
        trip_planner_remove_request = new Request({url:'trip_planner_item_remove/'+idx}).send();
        // remove the id
        $(tar.parentNode).destroy();
        checkTripPlannerCategories();
    } else {
        return false;
    }
}

var ClearTextInput = new Class({

    Implements: [Events, Options],

  options: {
/*  onFocus: $function,
    onBlur: $function  */
  },

  element: null,

  initialize: function(element, options)
  {
    this.setOptions(options);
    this.element = $(element);
    this.element.addEvent('focus', function(e) {
      if (this.element.value == this.element.defaultValue) {
        this.element.value = '';
      }
      this.fireEvent('focus', [this.element]);
    }.bind(this));
    this.element.addEvent('blur', function(e) {
      if (this.element.value == '') {
        this.element.value = this.element.defaultValue;
      }
      this.fireEvent('blur', [this.element]);
    }.bind(this));
  }
});

function checkEmail (strng) {
    var valid = true;
  if (strng == "") {
    valid = false;
  }
  else if (!isRFC822ValidEmail(strng)) {
    valid = false;
  }
  return valid;
}

/**
 * JavaScript function to check an email address conforms to RFC822 (http://www.ietf.org/rfc/rfc0822.txt)
 *
 * Version: 0.2
 * Author: Ross Kendall
 * Created: 2006-12-16
 * Updated: 2007-03-22
 *
 * Based on the PHP code by Cal Henderson
 * http://iamcal.com/publish/articles/php/parsing_email/
 */

/*

Portions copyright (C) 2006  Ross Kendall - http://rosskendall.com
Portions copyright (C) 1993-2005 Cal Henderson - http://iamcal.com

Licenced under Creative Commons _or_ GPL according to the terms below...

--

 Licensed under a Creative Commons Attribution-ShareAlike 2.5 License

 You are free:

    * to Share -- to copy, distribute, display, and perform the work
    * to Remix -- to make derivative works

 Under the following conditions:

    * Attribution. You must attribute the work in the manner specified by the author or licensor.
    * Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one.

    * For any reuse or distribution, you must make clear to others the license terms of this work.
    * Any of these conditions can be waived if you get permission from the copyright holder.

 http://creativecommons.org/licenses/by-sa/2.5/

--

 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License
 as published by the Free Software Foundation; either version 2
 of the License, or (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 http://www.gnu.org/copyleft/gpl.html

*/


function isRFC822ValidEmail(sEmail) {

  var sQtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
  var sDtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
  var sAtom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
  var sQuotedPair = '\\x5c[\\x00-\\x7f]';
  var sDomainLiteral = '\\x5b(' + sDtext + '|' + sQuotedPair + ')*\\x5d';
  var sQuotedString = '\\x22(' + sQtext + '|' + sQuotedPair + ')*\\x22';
  var sDomain_ref = sAtom;
  var sSubDomain = '(' + sDomain_ref + '|' + sDomainLiteral + ')';
  var sWord = '(' + sAtom + '|' + sQuotedString + ')';
  var sDomain = sSubDomain + '(\\x2e' + sSubDomain + ')*';
  var sLocalPart = sWord + '(\\x2e' + sWord + ')*';
  var sAddrSpec = sLocalPart + '\\x40' + sDomain; // complete RFC822 email address spec
  var sValidEmail = '^' + sAddrSpec + '$'; // as whole string

  var reValidEmail = new RegExp(sValidEmail);

  if (reValidEmail.test(sEmail)) {
    return true;
  }

  return false;
}


SqueezeBox.parsers.swf = function(preset) {
      return (preset || this.url.test(/\.swf/)) ? this.url : false;
};

SqueezeBox.handlers.swf = function(url) {
    var size = this.options.size;
    return new Swiff(url, {
        id: 'sbox-swf',
        width: size.x,
        height: size.y
    });
};


function getURLParam(strParamName) {
	var strReturn = "";
	var strHref = window.location.href;
	if ( strHref.indexOf("?") > -1 ) {
		var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
		var aQueryString = strQueryString.split("&");
		for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
		if (aQueryString[iParam].indexOf(strParamName.toLowerCase() + "=") > -1 ) {
			var aParam = aQueryString[iParam].split("=");
			strReturn = aParam[1];
			break;
			}
		}
	}
	return unescape(strReturn);
}

var fontin      = { src: base_url+'fontin.swf' };
var fontin_sans = { src: base_url+'fontin_sans.swf' };

sIFR.activate(fontin, fontin_sans);

sIFR.replace(fontin, {
  selector: '#home_message h2.right',
  css: '.sIFR-root { font-size:50px;color: #FFFFFF;text-align:right;}',
  wmode: 'transparent',
  ratios: [7, 1.32, 11, 1.31, 13, 1.24, 14, 1.25, 19, 1.23, 21, 1.2, 26, 1.21, 27, 1.2, 34, 1.19, 42, 1.18, 43, 1.17, 48, 1.18, 53, 1.17, 54, 1.18, 69, 1.17, 70, 1.16, 73, 1.17, 74, 1.16, 75, 1.17, 80, 1.16, 81, 1.17, 1.16]
});
sIFR.replace(fontin, {
  selector: '#home_message h2',
  css: '.sIFR-root { font-size:50px;color: #FFFFFF;}',
  wmode: 'transparent',
  ratios: [7, 1.32, 11, 1.31, 13, 1.24, 14, 1.25, 19, 1.23, 21, 1.2, 26, 1.21, 27, 1.2, 34, 1.19, 42, 1.18, 43, 1.17, 48, 1.18, 53, 1.17, 54, 1.18, 69, 1.17, 70, 1.16, 73, 1.17, 74, 1.16, 75, 1.17, 80, 1.16, 81, 1.17, 1.16]
});
sIFR.replace(fontin, {
  selector: '#home_message p.right',
  css: '.sIFR-root { font-size:18px;color: #FFFFFF;text-align:right}',
  wmode: 'transparent',
  ratios: [7, 1.32, 11, 1.31, 13, 1.24, 14, 1.25, 19, 1.23, 21, 1.2, 26, 1.21, 27, 1.2, 34, 1.19, 42, 1.18, 43, 1.17, 48, 1.18, 53, 1.17, 54, 1.18, 69, 1.17, 70, 1.16, 73, 1.17, 74, 1.16, 75, 1.17, 80, 1.16, 81, 1.17, 1.16]
});
sIFR.replace(fontin, {
  selector: '#home_message p',
  css: '.sIFR-root { font-size:18px;color: #FFFFFF;}',
  wmode: 'transparent',
  ratios: [7, 1.32, 11, 1.31, 13, 1.24, 14, 1.25, 19, 1.23, 21, 1.2, 26, 1.21, 27, 1.2, 34, 1.19, 42, 1.18, 43, 1.17, 48, 1.18, 53, 1.17, 54, 1.18, 69, 1.17, 70, 1.16, 73, 1.17, 74, 1.16, 75, 1.17, 80, 1.16, 81, 1.17, 1.16]
});


sIFR.replace(fontin, {
  selector: 'h2.sifr_replace',
  css: ['.sIFR-root { color: #FFFFFF;}',
        'a {color:#FFFFFF; text-decoration:none}',
        'a:hover {color:#69B6D7}'
       ],
  wmode: 'transparent',
  ratios: [7, 1.32, 11, 1.31, 13, 1.24, 14, 1.25, 19, 1.23, 21, 1.2, 26, 1.21, 27, 1.2, 34, 1.19, 42, 1.18, 43, 1.17, 48, 1.18, 53, 1.17, 54, 1.18, 69, 1.17, 70, 1.16, 73, 1.17, 74, 1.16, 75, 1.17, 80, 1.16, 81, 1.17, 1.16]
});

sIFR.replace(fontin, {
  selector: 'h3.sifr_replace',
  css: '.sIFR-root { color: #FFFFFF;}',
  wmode: 'transparent',
  ratios: [7, 1.32, 11, 1.31, 13, 1.24, 14, 1.25, 19, 1.23, 21, 1.2, 26, 1.21, 27, 1.2, 34, 1.19, 42, 1.18, 43, 1.17, 48, 1.18, 53, 1.17, 54, 1.18, 69, 1.17, 70, 1.16, 73, 1.17, 74, 1.16, 75, 1.17, 80, 1.16, 81, 1.17, 1.16]
});

sIFR.replace(fontin, {
  selector: 'h2.sifr_replace_blue',
  css: ['.sIFR-root { color: #379cd2;}',
        'a {color:#379cd2; text-decoration:none}',
        'a:hover {color:#69B6D7}'
       ],
  wmode: 'transparent',
  ratios: [7, 1.32, 11, 1.31, 13, 1.24, 14, 1.25, 19, 1.23, 21, 1.2, 26, 1.21, 27, 1.2, 34, 1.19, 42, 1.18, 43, 1.17, 48, 1.18, 53, 1.17, 54, 1.18, 69, 1.17, 70, 1.16, 73, 1.17, 74, 1.16, 75, 1.17, 80, 1.16, 81, 1.17, 1.16]
});

sIFR.replace(fontin, {
  selector: '#walk_guides_inner h2.sifr_replace_blue',
  css: ['.sIFR-root { color: #379cd2;}',
        'a {color:#379cd2; text-decoration:none}',
        'a:hover {color:#69B6D7}'
       ],
  wmode: 'transparent',
  ratios: [7, 1.32, 11, 1.31, 13, 1.24, 14, 1.25, 19, 1.23, 21, 1.2, 26, 1.21, 27, 1.2, 34, 1.19, 42, 1.18, 43, 1.17, 48, 1.18, 53, 1.17, 54, 1.18, 69, 1.17, 70, 1.16, 73, 1.17, 74, 1.16, 75, 1.17, 80, 1.16, 81, 1.17, 1.16]
});

sIFR.replace(fontin, {
  selector: 'h3.sifr_replace_blue',
  css: '.sIFR-root { color: #379cd2;}',
  wmode: 'transparent',
  ratios: [7, 1.32, 11, 1.31, 13, 1.24, 14, 1.25, 19, 1.23, 21, 1.2, 26, 1.21, 27, 1.2, 34, 1.19, 42, 1.18, 43, 1.17, 48, 1.18, 53, 1.17, 54, 1.18, 69, 1.17, 70, 1.16, 73, 1.17, 74, 1.16, 75, 1.17, 80, 1.16, 81, 1.17, 1.16]
});

sIFR.replace(fontin, {
  selector: 'p.sifr_replace_16',
  css: '.sIFR-root { color: #393939; font-size:16px;}',
  wmode: 'transparent',
  ratios: [7, 1.32, 11, 1.31, 13, 1.24, 14, 1.25, 19, 1.23, 21, 1.2, 26, 1.21, 27, 1.2, 34, 1.19, 42, 1.18, 43, 1.17, 48, 1.18, 53, 1.17, 54, 1.18, 69, 1.17, 70, 1.16, 73, 1.17, 74, 1.16, 75, 1.17, 80, 1.16, 81, 1.17, 1.16]
});
