/*
	Global variables - Common

*/

var rStates = [
	"Alabama", "Alaska", "Arkansas", "Arizona", "California", "Colorado", "Connecticut", "Delaware", "Distict of Columbia"
	, "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana"
	, "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana"
	, "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina"
	, "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina"
	, "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia"
	, "Wisconsin", "Wyoming"
];

/*
	Global functions
*/

function getMousePosition(e) {
	
  return e.pageX ? {'x':e.pageX, 'y':e.pageY} : {'x':e.clientX + document.documentElement.scrollLeft + document.body.scrollLeft, 'y':e.clientY + document.documentElement.scrollTop + document.body.scrollTop};

};

function showToolTip(oEvent) {
	
	var toolTipText = arguments[0].data.tip;
	
	var mouse = getMousePosition(oEvent);
	var fullText = toolTipText || "";
						
	var toolTip = $("#toolTip")[0];
	toolTip.style.left = (mouse.x + 30) + "px";
		
	var tipWidth = arguments[0].data.tipWidth + "px";
	
	toolTip.style.width = tipWidth;
	toolTip.style.textAlign = "left";	
	
	toolTip.innerHTML = fullText;
	
	var tipPos = arguments[0].data.tipPos;
	
	if (tipPos == "top") {
		toolTip.style.top = (mouse.y - $(toolTip).height() - 20) + "px";	
	} else {
		toolTip.style.top = (mouse.y + 10) + "px";	
	}
	
	if (fullText.length > 0) {
	
		$("#toolTip").show();
	
	} else {
		
		$("#toolTip").hide();
			
	}
	
};

function hideToolTip() {
	
	var toolTip = $("#toolTip");
	
	toolTip.html("");
	
	toolTip.hide();
		
};

function reloadMethods() {  
	/* This method needs to get attached to any ajax calls that return new HTML for display*/
	
	common.handleMask("on");
	
	common.expandCollapse.build("one");
	
	common.assignToolTips();
	
};

var Common_Class = function() {
	
	this.container = $(document.body);
	
	this.browsers = {
		mozilla: $.browser.mozilla
		, msie: $.browser.msie
		, opera: $.browser.opera
		, safari: $.browser.safari
	};
	
	this.version = $.browser.version;	
		
	var sType;
	
	for (sType in this.browsers) {
	
		if (this.browsers[sType]) {
			
			this.browser = sType;	
		}
		
	}
	
	var loc = String(location.href);
	var rLoc = loc.split("\/");
	
	var _page = rLoc[rLoc.length-1] || "index.asp";
	
	this.page = _page;
	
	this.init();
};

Common_Class.prototype.init = function() {
	
	this.handleMask("off");	
	
	/*document.oncontextmenu = this.contextMenu;*/

	this._buildExpandCollapse();
	
	this._buildToolTip();
	
	this._handleNavigation();
	
	this._handleMessage();
	
	var elMask = $("div#mask");
	
	var oCSS = {"opacity":"0.75", "filter":"alpha(opacity=75)"};
	
	elMask.css(oCSS);
	
	var elLoader = $("div#msgLoader");
	
	elLoader.css(oCSS);
	
	setTimeout(function() {common._applyCorners();}, 0);
	
	$('.slideshow').cycle({
		//fx: 'fade,growY,growX,scrollLeft,scrollDown,scrollRight,scrollUp'
        	//, randomizeEffects: true
        	fx: 'fade'
        	, speed: 1500
        	, timeout: 3000
        	, random: 1
		//fx: 'turnUp' // choose your transition type, ex: fade, scrollUp, shuffle, etc...
		, pause: 1
	});

	
};

Common_Class.prototype._applyCorners = function(){

	var iRadius = 10;

	 var settings = {
      tl: { radius: iRadius },
      tr: { radius: iRadius },
      bl: { radius: iRadius },
      br: { radius: iRadius },
      antiAlias: true
    };
	
	curvyCorners(settings, "#headerContainer, #footerContainer");
	
	var iRadius = 25;

	 var settings = {
      tl: { radius: iRadius },
      tr: { radius: iRadius },
      bl: { radius: iRadius },
      br: { radius: iRadius },
      antiAlias: true
    };
	
	curvyCorners(settings, ".roundCornersLarge");

};

Common_Class.prototype._handleMessage = function(){

	var qsMessage = $("div#qsMessage");
	
	if (qsMessage.length > 0) {
	
		var message = qsMessage[0].innerHTML;
	
		msgBox.display({
			title: "Status Message"
			, displayTitle: true
			, content: oElement.create("div", {className: "offsetTop10"}, message)
			, buttons: {
			   cancel: {
			       label: "OK"
			       , id: "okayButton"
			       , className: "buttonSave"
			       , oData: {ref: "okayButton"}
			       , actionFunc: function() {
						msgBox.close();
			       }
			   }			   
			}
		});
		
		var cssObj = {
			"color":"#000000"
			, "text-align":"left"
			, "top": 200
		};
		
		msgBox.cssOverride("msgBox", cssObj);
		
		cssObj = {
			"background-color": "#000066"
			, "color":"#FFFFFF"
			, "text-align":"left"
		};
		
		msgBox.cssOverride("msgBoxTitle", cssObj);		
	
	}

};

Common_Class.prototype._handleNavigation = function() {
	
	var navLinks = $("div.navLinks");

	navLinks.hover(function() {
		$(this).addClass("navLinksHover")		
	}, function() {
		$(this).removeClass("navLinksHover")
	});
		
};

Common_Class.prototype.handleMask = function(state) {

	var mask = $("#mask")[0];
	var loader = $("#loader")[0];
	
	if (!mask) {
	
		$(document.body).append("<div id='mask'>&nbsp;</div>");
				
	}
	
	if (!loader) {
		$(document.body).append("<div id='loader'>Loading...</div>");
	}
	
	if (state && state != "off") {
	
		$("#mask").show();
		$("#loader").show();
		
		this._centerLoader("#loader");
		
	} else if (!state || state == "off") {
		
		$("#mask").hide();
		$("#loader").hide();
	
	}
	
};

Common_Class.prototype._centerLoader = function(sElement) {
	
	var bodyWidth = $(document.body).width();
	
	$(sElement).css({"left": (bodyWidth/2) - 200});
	
	
};

Common_Class.prototype.contextMenu = function() {

	return false;
	
};

Common_Class.prototype.ajax = function(oData) {

	if (!oData) {
	
		this.displayDefault();
		
		return;
		
	}
	
	this.handleMask("on");

	var filePath = oData.filePath || "";
	
	var _data = oData.data || {};
	
	var success = oData.success || function(data, success) {
		alert("default success method");
		common.handleMask("on");
	};
	
	var failure = oData.failure || function(xhr, status, error) {
		alert("default failure method");
		common.handleMask("on");
	};
	
	if (filePath != "") {
	
		$.ajax({
			url: oData.filePath
			, type: "POST"
			, data: oData.data
			, success: oData.success
			, error: oData.failure
		});
		
	} else {
		
		this.displayDefault();
	}
	
};

Common_Class.prototype.displayDefault = function() {
	
	msgBox.display({
		title: "Error:"
		, displayTitle: false
		, content: oElement.create("div", {}, "The information provided does not result in a valid ajax call.")
		, buttons: {
		   okay: {
		       label: "Okay"
		       , id: "okayButton"
		       , className: "buttonCancel"
		       , oData: {ref: "okayButton"}
		       , actionFunc: function() {
				msgBox.close();
		       }
		   }
		}
	});

};

Common_Class.prototype.truncate = function(sString, iLength) {
	
	var sStr = String(sString);
	
	if (sStr.length < iLength) {
		
		return sStr;	
		
	} else {
		
		return sStr.substr(0, iLength) + "...";
		
	}
	
};

Common_Class.prototype._buildExpandCollapse = function() {
	
	this.expandCollapse = new ExpandCollapse_Class("one");
		
};

Common_Class.prototype._buildToolTip = function() {

	var toolTip = $("div#toolTip");
	
	if (toolTip.length == 0) {
		
		toolTip = Element.create("div", {id: "toolTip"}, "&nbsp;");
		
		this.container.append(toolTip);
		
	}
	
	this.assignToolTips();
	
};

Common_Class.prototype.assignToolTips = function() {
	
	/* Elements that get the tool tip must have the class name toolTip and an attribute called tip
	
	This method should get called any time new content is loaded onto the page via an ajax call. */
	
	var i, len;
	
	var toolTips = $(".toolTip");
	
	if (toolTips.length > 0) {
	
		toolTips.unbind("mouseover");
		toolTips.unbind("mouseout");
		toolTips.unbind("mousemove");
		
		for (i = 0, len = toolTips.length; i < len; i++) {
		
			var tip = toolTips[i];
		
			var tipText = tip.getAttribute("tip") || "";
			var tipWidth = tip.getAttribute("tipWidth") || 400;
			var tipPos = tip.getAttribute("tipPos") || "default";
		
			$(tip).bind("mouseover", {tip: tipText, tipWidth: tipWidth, tipPos: tipPos}, showToolTip);	
			$(tip).bind("mousemove", {tip: tipText, tipWidth: tipWidth, tipPos: tipPos}, showToolTip);
			$(tip).bind("mouseout", {}, hideToolTip);
	
		}		
	
	}
	this.handleMask("off");
};

Common_Class.prototype.json = function(sString) {

	return json_parse(unescape(sString));
	
};

Common_Class.prototype.sort = function(rArray, sortField, sDirection) {

	var field = sortField;
	var direction = sDirection || "asc";

	rArray.sort(compareSort);

	return rArray;
	
	function compareSort(a, b) {
		
		if (typeof(a[field]) == "string" || typeof(b[field]) == "string") {
			a[field] = String(a[field]);
			b[field] = String(b[field]);
		}
		
		if (direction == "desc") {
			if (a[field] > b[field]) {return -1;}
			if (a[field] < b[field]) {return 1;}
			return 0;
		} else {
			if (a[field] < b[field]) {return -1;}
			if (a[field] > b[field]) {return 1;}
			return 0;
		}
	}

};

var common = new Common_Class();