Prototype.Browser.IE6 = (Prototype.Browser.IE && navigator.appVersion.indexOf("MSIE 6")!=-1);

var Global = Class.create();
Global.prototype = {
	pngElements: [
	],
	
	initialize: function() {
		this.onButtonClick = this.onButtonClickListener.bindAsEventListener(this);
		this.onPrint = this.onPrintListener.bindAsEventListener(this);
		this.formURL = '';
		this.externaliseLinks();
		this.externaliseButtons();
		this.enablePrintButtons();
		this.saveFormURL();
		this.removeWidows();
		this.gCheckMaxCheckBoxSelected();
		this.png();
	},
	
	saveFormURL: function() {
		if (document.forms.length > 0) {
			this.formURL = document.forms[0].action;
		}
	},
	
	png: function() {
		// Add the classname "png" to the necessary elements
		for ( var x = 0 ; x < this.pngElements.length ; x++ ) {
			var elements = $$(this.pngElements[x]);
			for ( var y = 0 ; y < elements.length ; y++ ) {
				elements[y].addClassName('png');
			}
		}

		if (typeof DD_belatedPNG != "undefined" && Prototype.Browser.IE6) {
			DD_belatedPNG.fix('.png');
		}
	},
	
	externaliseLinks: function() {
		var links = $$("a"); 
		for ( var x=0; x<links.length; x++ ) { 
			var link = links[x];
			if (link.getAttribute("href")) {
				var rels = link.getAttribute("rel");
				if (rels != null) {
					rels = rels.split(" ");
					for (var i=0; i<rels.length; i++) {
						if (rels[i] == "external") {
							link.target = "_blank"; 
							break;
						}
					}
				}
			}
		} 
	},
	
	externaliseButtons: function() {
		var buttons = $$('input.external-form','a.external-form');
		for ( var x = 0 ; x < buttons.length ; x++ ) {
			var button = buttons[x];
			Event.observe(button, 'click', this.onButtonClick);
		}
	},
	
	enablePrintButtons: function() {
		var printButtons = $$('.print-button');
		for ( var x = 0 ; x < printButtons.length ; x++ ) {
			Event.observe(printButtons[x], 'click', this.onPrint);
		}
	},
	
	removeWidows: function() {
		var elements = $$('div.park-info h2');
		for ( var x = 0 ; x < elements.length ; x++ ) {
			var element = elements[x];
			var words = this.getWordsAsArray(element);
			var lineHeight = 23;
			if (words.length > 3) {
				if (element.getHeight() > lineHeight) {
					words[2] += '<br/>';
					element.update(words.join(' '));
				}
			}
		}
	},
	
	getWordsAsArray: function(element) {
		if (element) {
			var text = element.innerHTML;
			return text.split(' ');
		}
		
		return null;
	},
	
	resetForm: function() {
		var form = document.forms[0];
		form.target = "_self";
		form.action = this.formURL;
	},
	
	onPrintListener: function(e) {
		window.print();
		Event.stop(e);
	},
	
	onButtonClickListener: function(e) {
		var form = document.forms[0];
		form.target = "_blank";
		// Reset form after click;
		setTimeout(this.resetForm.bind(this), 10);
	},
		
	gCheckMaxCheckBoxSelected: function(e) {
		this.gCheckBoxListClickListener = this.gCheckBoxListClick.bindAsEventListener(this);
	
		// MAXITEMS FOR CHECKBOXLIST
		var checkboxlists = $$('table[rel]');
		
		for ( var x = 0 ; x < checkboxlists.length ; x++ ) {
			var table = checkboxlists[x];
			var inputs = table.select('input');
			
			if (this.gGetMaxItems(table) > 0) {
				for ( var y = 0 ; y < inputs.length; y++ ) {
					var input = inputs[y];
					Event.observe(input, 'click', this.gCheckBoxListClickListener);
				}
			}
		}
	},
		
	gCheckBoxListClick: function(e) {
		var element = Event.element(e);
		var table = element.up(3);
		
		var itemsSelected = this.gGetSelectedItems(table);
		var maxItems = this.gGetMaxItems(table);
		if (itemsSelected > maxItems) {
				alert('You can only select ' + maxItems + ' options to search on');
				element.checked = false;
				Event.stop(e);
				return;
		}
	},

	gGetCheckboxListName: function(element) {
		if (element.getAttribute("rel") != null) {
			var _names = element.getAttribute("rel").split(" ");
			
			if (_names.length > 1)
			{
				var _name = "";
				for (var i=1; i < _names.length; i++)
					_name = _name + _names[i] + " ";
				return _name;
			}
		}
		
		return "items";
	},
		
	gGetMaxItems: function(element) {
		var regex = new RegExp('([0-9]+)');
		if (element.getAttribute("rel") != null) {
			var maxitems = regex.exec(element.getAttribute("rel"));
			if (maxitems != null) {
				return parseInt(maxitems);
			}
		}
		
		return -1;
	},

	gGetSelectedItems: function(element) {
		var checkboxlists = $$('table[rel]');
		var items = 0;
				
		for ( var x = 0 ; x < checkboxlists.length ; x++ ) {
			var table = checkboxlists[x];
			var inputs = table.select('input');
			
			for ( var y = 0 ; y < inputs.length; y++ ) {
				var input = inputs[y];
				if (input.checked) {
					items++;
				}
			}
		}
/*
		var inputs = element.select('input');
		var items = 0;
		for ( var y = 0 ; y < inputs.length; y++ ) {
			var input = inputs[y];
			if (input.checked) {
				items++;
			}
		}
*/		
		return items;
	},
	
	
	
	
	


// Error handling for the Dates, as per #1055
    gDateValueChanging: function (sender, args) {
	    $("date-errors").hide();
	    var theDate = sender.get_selectedDate(); 
	    var minDate = sender.get_minDate();
	    var maxDate = sender.get_maxDate();
    	
	    var theError = "";
	    var foundError = false;
    	
	    if ( theDate < minDate ) {
		    theError = "Please check arrival date. Arrival date must be in the future.";
		    foundError = true;
	    }
    	
	    if ( theDate > maxDate ) {
		    theError = "Please check date. Arrival date can't be more than 12 months in adavance.";
		    foundError = true;
	    }
    	
	    if( foundError ){
		    $("date-errors").show();
		    $("date-errors").update("<b>ERRORS:</b><p>" + theError + "</p>");
	    }
    },


    gDateError: function (sender, args) { 
	    sender.focus(); 
    } 
};
