/**
 * GLOBAL JS FUNCTIONS
 */

	var GBPCHANNELS = {
		PureTasmania: "PT",
		CountryClubTasmania: "CCT",
		WrestPoint: "WPH",
		HenryJonesArtHotel: "HJH"
	}
	
	var GBPChannel = GBPCHANNELS.PureTasmania
	
	
	var DEBUGMODE = false;

	/**
	 * Loads a file from a Url.
	 * @param {String} url Template to load
	 */
	var LoadTemplate = function(url) {
		var template = jQuery.ajax({
							url: url,
							cache: true,
							success: function() {
							},
							async: false
						}).responseText;

		return template;
	}

	
	/**
	 * Generic function to find Content in a GBP Content Object
	 * @param {Object} Content Array
	 * @param {Object} MessageIdentifier
	 */
	function GetContent(object, identifier) {
		try {
			var content = base2.Array2.filter(object, function(instance){
				var found = false;
				if (instance.MessageIdentifier) {
					found = instance.MessageIdentifier == identifier;
				} else if (instance.ID) {
					found = instance.ID == identifier;
				}
				
				return found;
			});
			return content[0]
		} catch (e) {
			return null;
		}
	}
	
	
	/**
	 * Generate a GUID
	 */
	function GUID() {
		var length = 18;
		var chars = 'abVWXYcdhi1kCDlmn2IJK9oetOPQRwx4yz6ABpqr5Euv7FGH8Lfgs3MN0SjTUZ';
		return randomString(chars, length);
	}
	
		
	/**
	 * Generates a random string.
	 * @param {Object} sChrs
	 * @param {Object} iLen
	 */
	function randomString(sChrs,iLen) {
		var sRnd = '';
		for (var i=0; i < iLen; i++) {
			var randomPoz = Math.floor(Math.random() * sChrs.length);
			sRnd += sChrs.substring(randomPoz,randomPoz+1);
		}
		return sRnd;
	}
	
	/**
	 * Displays a standard error message
	 * @param {Object} message
	 */
	function ShowError(message, header) {
		var jGrowlOptions = {
			position: "center",
			theme: "error",
			header: header,
			sticky: true
		}
		jQuery.jGrowl(message, jGrowlOptions);
	}
	
	/**
	 * Displays a standard success message
	 * @param {Object} message
	 * @param {Object} header
	 */
	function ShowSuccess(message, header) {
		var jGrowlOptions = {
			position: "center",
			theme: "success",
			header: header,
			sticky: true
		}
		jQuery.jGrowl(message, jGrowlOptions);
	}
	
	/**
	 * Displays a waiting message (used in cart checkout)
	 * @param {Object} message
	 * @param {Object} header
	 */
	function ShowWaiting(message, header) {
		var jGrowlOptions = {
			position: "center",
			theme: "waiting",
			header: header,
			sticky: true
		}
	}
	
	/**
	 * Displays a standard notification message
	 * @param {Object} message
	 * @param {Object} header
	 */
	function Notify(message, header) {
		var jGrowlOptions = {
			position: "center",
			theme: "notify",
			header: header,
			sticky: true
		}
		jQuery.jGrowl(message, jGrowlOptions);
	}
	

	
	
	function PNGFix() {
		if ($.browser.msie) {
			try {document.execCommand("BackgroundImageCache", false, true);} catch(err){};
			if (typeof(DD_belatedPNG) != 'undefined') {
				DD_belatedPNG.fix('img, #logo2 a, .box1, #footer');
				DD_belatedPNG.fix('.btn1 a, .btn1 span, .btn2 a, .btn5 a, .btn5 span, .btn6 a, .btn6 span');
				DD_belatedPNG.fix('.location .side, #payment fieldset .side, .quickbook li a');
				DD_belatedPNG.fix('.nav1, .nav1 a, .nav1 span, .bookingRates a.prev, .bookingRates a.next');
				DD_belatedPNG.fix('.popup, .popup5, .popup5 .t, .popup5 .b, .popup5 .close a, #tooltip1, #tooltip1 .in, #choose .buttons');
			}
		}
	}
	
	
	
	/**
	 * Log a JS error to the server
	 * @param {Object} errorMessage
	 * @param {Object} url
	 * @param {Object} line
	 */
	function LogJSError(errorMessage, url, line) {
		var errorLogUrl = "ajaxHandler.ashx?p=/error/log";
		var params = {
			description: errorMessage,
			url: url,
			line: line,
			parent_url: document.location.href,
			user_agent: navigator.userAgent
		}
		
		
		jQuery.ajax({
			url: errorLogUrl,
			type: APIMETHODS.POST,
			async: true,
			data: params,
			dataType: "json",
			processData: true
		});
		
		return !DEBUGMODE;
	}
	
	//window.onerror = LogJSError;

	/**
	 * Generic Popup
	 * @param {Object} options
	 */
	var Popup = base2.Base.extend({
		constructor: function(options) {
			this.SetOptions(options);
			this.SetEvents();
		},

		SetOptions: function(options) {
			this.Defaults = {
				Container: "#customerSupport",
				ButtonText: "Customer Support",
				ElementID: "btnSupport",
				Template: "templates/gbp_support.html"
			}

			this.Options = jQuery.extend({}, this.Defaults, options);
		},


		SetEvents: function() {
			var object = this;
			jQuery("#" + this.Options.ElementID + " .btn1 a").live("click", function() {
				var anchor = jQuery(this);
				var item = anchor.parent().parent();
				var p = item.find('.popup');
				if (!p.hasClass('popup-active'))
				{
					item.find('.popup').removeClass('popup-active').end().find('.btn1 a').removeClass('active');
				}
				anchor.toggleClass('active');
				if (anchor.hasClass('active')) {
					p.addClass('popup-active').hide();
					p.stop(true,false).css({display: "block", opacity: 0}).animate({opacity: 1});
				} else {
					p.stop(true,false).animate({opacity: 0}, 500, "swing", function() {
						jQuery(this).css({ display: "none"});						
					});
				}


				return false;
			});			
		},

		Load: function(container) {
			if (container == null) {
				container = jQuery(this.Options.Container);
			} else {
				this.Options.Container = container;
			}
			this.Render(container);

		},

		/**
		 * Appends the login form markup into the specified container
		 * @param {Object} jQContainer
		 */
		Render: function(jQContainer) {
			var template = LoadTemplate(this.Options.Template);
			template = template.replace("%BUTTONTEXT%", this.Options.ButtonText);

			var item = jQuery(template);
			item.attr("id", this.Options.ElementID);

			jQContainer.append(item);

		},		

		Hide: function() {

			var container = jQuery(this.Options.Container);
			container.find("#" + this.Options.ElementID).hide();
		},

		Show: function() {
			var container = jQuery(this.Options.Container);
			container.find("#" + this.Options.ElementID).show();
		}

	});


	var overlayID = "GBPOverlay";

	function ShowOverlay() {
		
		var overlay = jQuery("<div />", {
			id: overlayID,
			css: {
				background: "#000",
				opacity: 0,
				position: "fixed",
				top: 0,
				left: 0,
				width: "100%",
				height: "100%",
				display: "block",
				zIndex: 9000
			}
		});
		
		jQuery("body").append(overlay);
		
		overlay.animate({ opacity: 0.5}, "normal", "swing", function() {
			
		});
		
		
	}
	
	function HideOverlay() {
		
		jQuery("#" + overlayID).animate({ opacity: 0}, "normal", "swing", function() {
			jQuery(this).remove();
		});
	}

	
	function getParameterByName( name )
	{
	  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	  var regexS = "[\\?&]"+name+"=([^&#]*)";
	  var regex = new RegExp( regexS );
	  var results = regex.exec( window.location.href );
	  if( results == null )
	    return "";
	  else
	    return decodeURIComponent(results[1].replace(/\+/g, " "));
	}

