
// Cache
var Cache =
	{
		Data: {},
		get: function(k) { return this.Data[k]; },
		set: function(k, v) { this.Data[k] = v; }
	}


// Page class
	var Page =
	{
		start: function() {
		
			// Events
			$('input.highlightOnFocus')
				.focus(UI.focusInput)
				.blur(UI.blurInput);

		}
	}



// Fire Page.start on $(document).ready
$(document).ready(Page.start);




// UI class
var UI =
	{
		submitForm: function(obj) 
		{
			$(obj).parents('form').submit();
		},

		focusInput: function() 
		{
			$(this).addClass("highlighted");

			if (Cache.Data['defaultVal' + $(this).attr('id')] == undefined)
			{
				Cache.Data['defaultVal' + $(this).attr('id')] = $(this).val();
				$(this).val('')
			}
		},

		blurInput: function() 
		{
			$(this).removeClass("highlighted");
			if ($(this).val() == '')
			{
				$(this).val(Cache.Data['defaultVal' + $(this).attr('id')]);
				Cache.Data['defaultVal' + $(this).attr('id')] = undefined;
			}
		}
	}



// Utils class
var Utils = 
	{

		// Get object from id
		getObj: function(elementId) {
			return document.getElementById(elementId);
		},

		// Popup window
		popUp: function(url, windowName, width, height, extraParameters) {
			var str = 'height=' + height + ',width=' + width + ',' + extraParameters;
			if (parseInt(navigator.appVersion) > 3)
				str += ',left=' + (screen.width - width) / 2 + ',top=' + parseInt((screen.height - h) / 3);
			return this.window.open(url, windowName, str);
		},

		// Sorts any listbox
		sortListBox: function(objListbox) {
			var x;
			var temparr = new Array(objListbox.options.length);
			for (x = 0; x < objListbox.options.length; x++)
				temparr[x] = objListbox.options[x].value + "||" + objListbox.options[x].text + "||" + objListbox.options[x].className;
			temparr.sort();
			for (x = 0; x < temparr.length; x++) {
				optionArr = temparr[x].split("||")
				objListbox.options[x] = new Option(optionArr[1], optionArr[0]);
				objListbox.options[x].className = optionArr[2];
			}
		},

		// Create a cookie
		createCookie: function(cookieName, value, daysToExpire) {
			if (daysToExpire) {
				var date = new Date();
				date.setTime(date.getTime() + (daysToExpire * 24 * 60 * 60 * 1000));
				var expires = "; expires=" + date.toGMTString();
			}
			else
				var expires = "";
			document.cookie = cookieName + "=" + value + expires + "; path=/";
		},

		// Read a cookie
		readCookie: function(cookieName) {
			var nameEQ = name + "=";
			var ca = document.cookie.split(";");
			for (var i = 0; i < ca.length; i++) {
				var c = ca[i];
				while (c.charAt(0) == ' ')
					c = c.substring(1, c.length);
				if (c.indexOf(nameEQ) == 0)
					return c.substring(nameEQ.length, c.length);
			}
			return null;
		},

		// Delete a cookie
		deleteCookie: function(cookieName) {
			createCookie(cookieName, "", -1);
		},

		// Get absolute left for an object
		getAbsLeft: function(object) {
			var iY = 0;
			if (object)
				while (object.offsetParent) {
				iY += parseInt(object.offsetLeft);
				object = object.offsetParent;
			}
			return iY;
		},

		// Get absolute top for object
		getAbsTop: function(object) {
			var iX = 0;
			if (object)
				while (object.offsetParent) {
				iX += parseInt(object.offsetTop);
				object = object.offsetParent;
			}
			return iX
		}
	}
	


// Prototypes


// Trims a string
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g, "");
}
String.prototype.trimLeft = function() {
	return this.replace(/^\s+/, "");
}
String.prototype.trimRight = function() {
	return this.replace(/\s+$/, "");
}

// Reverse a string
String.prototype.reverse = function() {
	var splitext = this.split("");
	var revertext = splitext.reverse();
	var reversed = revertext.join("");
	return reversed;
}






/*
Copyright (c) Copyright (c) 2007, Carl S. Yestrau All rights reserved.
Code licensed under the BSD License: http://www.featureblend.com/license.txt
Version: 1.0.3
*/
var FlashDetect = new function() {
	var self = this;
	self.installed = false;
	self.raw = "";
	self.major = -1;
	self.minor = -1;
	self.revision = -1;
	self.revisionStr = "";
	var activeXDetectRules = [
		{
			"name": "ShockwaveFlash.ShockwaveFlash.7",
			"version": function(obj) {
				return getActiveXVersion(obj);
			}
		},
		{
			"name": "ShockwaveFlash.ShockwaveFlash.6",
			"version": function(obj) {
				var version = "6,0,21";
				try {
					obj.AllowScriptAccess = "always";
					version = getActiveXVersion(obj);
				} catch (err) { }
				return version;
			}
		},
		{
			"name": "ShockwaveFlash.ShockwaveFlash",
			"version": function(obj) {
				return getActiveXVersion(obj);
			}
		}
	];
	var getActiveXVersion = function(activeXObj) {
		var version = -1;
		try {
			version = activeXObj.GetVariable("$version");
		} catch (err) { }
		return version;
	};
	var getActiveXObject = function(name) {
		var obj = -1;
		try {
			obj = new ActiveXObject(name);
		} catch (err) { }
		return obj;
	};
	var parseActiveXVersion = function(str) {
		var versionArray = str.split(","); //replace with regex
		return {
			"raw": str,
			"major": parseInt(versionArray[0].split(" ")[1], 10),
			"minor": parseInt(versionArray[1], 10),
			"revision": parseInt(versionArray[2], 10),
			"revisionStr": versionArray[2]
		};
	};
	var parseStandardVersion = function(str) {
		var descParts = str.split(/ +/);
		var majorMinor = descParts[2].split(/\./);
		var revisionStr = descParts[3];
		return {
			"raw": str,
			"major": parseInt(majorMinor[0], 10),
			"minor": parseInt(majorMinor[1], 10),
			"revisionStr": revisionStr,
			"revision": parseRevisionStrToInt(revisionStr)
		};
	};
	var parseRevisionStrToInt = function(str) {
		return parseInt(str.replace(/[a-zA-Z]/g, ""), 10) || self.revision;
	};
	self.majorAtLeast = function(version) {
		return self.major >= version;
	};
	self.FlashDetect = function() {
		if (navigator.plugins && navigator.plugins.length > 0) {
			var type = 'application/x-shockwave-flash';
			var mimeTypes = navigator.mimeTypes;
			if (mimeTypes && mimeTypes[type] && mimeTypes[type].enabledPlugin && mimeTypes[type].enabledPlugin.description) {
				var version = mimeTypes[type].enabledPlugin.description;
				var versionObj = parseStandardVersion(version);
				self.raw = versionObj.raw;
				self.major = versionObj.major;
				self.minor = versionObj.minor;
				self.revisionStr = versionObj.revisionStr;
				self.revision = versionObj.revision;
				self.installed = true;
			}
		} else if (navigator.appVersion.indexOf("Mac") == -1 && window.execScript) {
			var version = -1;
			for (var i = 0; i < activeXDetectRules.length && version == -1; i++) {
				var obj = getActiveXObject(activeXDetectRules[i].name);
				if (typeof obj == "object") {
					self.installed = true;
					version = activeXDetectRules[i].version(obj);
					if (version != -1) {
						var versionObj = parseActiveXVersion(version);
						self.raw = versionObj.raw;
						self.major = versionObj.major;
						self.minor = versionObj.minor;
						self.revision = versionObj.revision;
						self.revisionStr = versionObj.revisionStr;
					}
				}
			}
		}
	} ();
};
FlashDetect.release = "1.0.3";