// Gekko Namespace
var Gekko = {};

Gekko.Func = function(){
	return {
		isArray: function(chk) {
			return ((chk) && (typeof chk === 'object') && (typeof chk.length === 'number'));
		},
		inArray: function(needle, haystack, strict) {
			if (strict) {
				for (var i = 0, len = haystack.length; i < len; i++) {
					if (haystack[i] === needle) {
						return true;
					}
				}
			} else {
				for(var i = 0, len = haystack.length; i < len; i++) {
					if (haystack[i] == needle) {
						return true;
					}
				}
			}
				return false;
		},
		strToCamelCase: function(string) {
			for (var regExp = /-([a-z])/; regExp.test(string); string = string.replace(regExp, RegExp.$1.toUpperCase()));
				return string;
		}
	};
}();

Gekko.Int = {
	getIntVal: function(int, defaultInt) {
		if (isNaN(defaultInt)) {
			defaultInt = 0;
		}
		var intNum = parseInt(int);
		var retInt = (isNaN(intNum)) ? defaultInt : intNum;

			return retInt;
	},
	rand: function(intSize) {
		if ((intSize > 0) && (intSize < 21)) {
			do {
				var num = (Math.random().toString().substr(2) * Math.floor(Math.random()*999)).toString().substr(0,intSize);							
			} while(num.length < intSize);
		} else {
			var num = (Math.random().toString().substr(2) * Math.floor(Math.random()*999)).toString().substr(0,16);
		}

			return num;
	}
};
	
Gekko.Dom = function() {
	var ready = false;

	var DOMLoadObj = {
		init: function() {
			if (!ready) {
				var interval = setInterval(
							function() {
								if (typeof document.getElementsByTagName !== 'undefined' && (document.getElementsByTagName('body')[0] != null || document.body != null)) {
									clearInterval(interval);
									DOMLoadObj.loadCallback();
								}
							}, 10);
			}
		},
		loadCallback: function() {
			if (!ready) {
				ready = true;
				for (var i = 0, len = Gekko.Dom.onloadCallbackArr.length; i < len; i++) {
					var hash = Gekko.Dom.onloadCallbackArr[i];
					if (hash.obj) {
						hash.fn.apply(hash.obj, hash.args);
					} else {
						hash.fn(hash.args);
					}
				}
			}
		}
	};

	DOMLoadObj.init();

	window.onload = function() {
						if (!ready) {
							DOMLoadObj.loadCallback();
						}
					};

	return {
		onloadCallbackArr: [],
		isReady: function() { 
			return ready;
		}
	};

}();

Gekko.Evt = function() {
	var evtHashTbl = {}, elemArr = [], interval = false, int = 0;
	
	var evtHash = function(obj) {
		if (typeof evtHashTbl[obj] !== 'undefined') {
			return evtHashTbl[obj];
		} else {
			return (evtHashTbl[obj] = {});
		}
	};

	var evtObj = {
		onDOMLoad: function(callback, param) {
			Gekko.Dom.onloadCallbackArr.push({fn:callback, args:Gekko.Func.isArray(param) ? param : [], obj:arguments[2] || false});
		},
		onElementLoad: function(elem, callback) {
			var key = '{id::elem_' + elem + '||callback::fn_' + callback + '}';
			if (typeof elemArr[key] !== 'undefined') {
				return;
			}

			elemArr[key] = {id:elem, fn:callback, key:elemArr.length};
			elemArr.push(elem);

			if (!interval) {
				interval = setInterval(
					function() {
						for (var j in elemArr) {
							if (Gekko.Element.getById(elemArr[j].id)) {
								elemArr[j].fn();
								delete elemArr[elemArr[j].key];
								delete elemArr[j];
								elemArr.length = elemArr.length - 1;
							}
						}
						if (elemArr.length < 1) {
							clearInterval(interval);
								interval = false;
						}
					}, 10);
			}
					
			
		},
		evt: function(e) {
			return e || window.event;
		},
		evtSrc: function(e) {
			if (typeof e.target !== 'undefined') {
				this.evtSrc = function(e) {
					return e.target;
				};
					return this.evtSrc(e);
			} else {
				this.evtSrc = function(e) {
					return e.srcElement;
				};
					return this.evtSrc(e);
			}
		},
		preventDefault: function(e) {
			if (e.preventDefault) {
				e.preventDefault();
			} else {
				e.returnValue = false;
			}
		},
		stopBubble: function(e) {
			if (e.stopPropagation) {
				e.stopPropagation();
			}
			e.cancelBubble = true;
		},
		getMousePos: function(e) {
			if ((e.pageX) || (e.pageY)) {
				this.getMousePos = function(e) {
					return {x:e.pageX, y:e.pageY};
				};
					return this.getMousePos(e);
			} else {
				this.getMousePos = function(e) {
					return {x:e.clientX + document.documentElement.scrollLeft - document.body.clientLeft, y:e.clientY + document.documentElement.scrollTop  - document.body.clientTop};
				};
					return this.getMousePos(e);
			}
		},
		removeAllEvt: function(node) {
			node = Gekko.Element.isDocumentObj(node);
			for (var j in node) {
				try {
					if (typeof node[j] === 'function') {
						node[j] = null;
					}
				} catch(e) {
					false;
				}
			}
			node = node.firstChild;
			while (node) {
				Gekko.Evt.removeAllEvt(node);				
				node = node.nextSibling;
			}
			if (arguments.length > 1) {
				for(var i = 1, len = arguments.length; i < len; i++) {
					Gekko.Evt.removeAllEvt(arguments[i]);
				}
			}
				return true;
		}
	};

	if (document.addEventListener) {
		evtObj.addEvtListener = function(obj, evt, fn, capture) {
			var uniqueId = Gekko.Element.objUniqueId(obj), hash = evtHash(obj), key = '{obj::obj_' + uniqueId + '||event::evt_' + evt + '||callback::fn_' + fn + '}' + obj;

			if (typeof hash[key] === 'undefined') {
				hash[key] = {obj: obj, evt: evt, fn: fn};
				obj.addEventListener(evt, fn, (capture || false));
			}
				return obj;
		};
	} else if (document.attachEvent) {
		evtObj.addEvtListener = function(obj, evt, fn) {
			var uniqueId = Gekko.Element.ieGetUniqueId(obj), hash = evtHash(uniqueId), key = '{FNKEY::obj_' + uniqueId + '::evt_' + evt + '::fn_' + fn + '}';

			if (typeof hash[key] === 'undefined') { 
				var fnTmp = function() {
					fn.call(obj);
				};
				hash[key] = {obj: obj, evt: evt, fn: fnTmp};

				obj.attachEvent('on' + evt, fnTmp);

				// attach unload event to the window to clean up possibly IE memory leaks
				window.attachEvent('onunload', function() { obj.detachEvent('on' + evt, fnTmp); });
			}
				return obj;
		};
	} else {
		evtObj.addEvtListener = function(obj, evt, fn) {
			var hash = evtHash(obj), key = '{obj::obj_' + obj + '||event::evt_' + evt + '||callback::fn_' + fn + '}';
			if (typeof hash[key] === 'undefined') {
				hash['{obj::obj_' + obj + '||event::evt_' + evt + '||callback::fn_' + fn + '}'] = arguments;

				{obj['on' + evt] = fn};
			}
				return obj;
		};
	}

	if (document.removeEventListener) {
		evtObj.removeEvtListener = function(obj, evt, fn) {
			var uniqueId = Gekko.Element.objUniqueId(obj), hash = evtHash(obj), key = '{obj::obj_' + uniqueId + '||event::evt_' + evt + '||callback::fn_' + fn + '}' + obj;

			if (typeof hash[key] !== 'undefined') {
				obj.removeEventListener(evt, fn, false);
				delete hash[key];
			}
				return obj;
		};
	} else if (document.detachEvent) {
		evtObj.removeEvtListener = function(obj, evt, fn) {
			var uniqueId = Gekko.Element.ieGetUniqueId(obj), hash = evtHash(uniqueId), key = '{FNKEY::obj_' + uniqueId + '::evt_' + evt + '::fn_' + fn + '}', chkObj;

			if (typeof (chkObj = hash[key]) !== 'undefined') {
				obj.detachEvent('on' + evt, chkObj.fn);
				delete hash[key];
			}
				return obj;
		};
	} else {
		evtObj.removeEvtListener = function(obj, evt, fn) {
			var hash = evtHash(obj);
			if (typeof hash[key] !== 'undefined') {
				{obj['on' + evt] = null};
				delete hash[key];
			}
				return obj;
		};
	}

		return evtObj;
}();

Gekko.Element = function() {
	var m_guidCounter = 0;

	var obj = {
		getByClassName: function(_className, startElem, htmlTag) {
			startElem = startElem || document;
			htmlTag   = htmlTag || '*';

			if (typeof _className === 'string') {
				_className = new RegExp('(^| )' + _className.replace(/\s/g, "") + '( |$)');
			}

			if ((typeof startElem.all !== 'undefined') && (htmlTag == '*')) {
				var tags = startElem.all;
			} else {
				var tags = startElem.getElementsByTagName(htmlTag);
			}

			var elemArr = [];
			for (var i = 0, len = tags.length; i < len; i++) {
				var elem = tags[i];
				if (_className.test(elem.className)) {
					elemArr.push(elem);
				}
			}
				return elemArr;
		},
		getAbsolutePos: function(pos) {
			var left = 0, top = 0;

			while (pos.offsetParent) {
				left += pos.offsetLeft;
				top  += pos.offsetTop;
				pos   = pos.offsetParent;
			}

			left += pos.offsetLeft;
			top  += pos.offsetTop;

				return {x:left, y:top};
		},
		getRelativePos: function(pos) {
			var left = 0, top = 0;

			left += pos.offsetLeft;
			top  += pos.offsetTop;

				return {x:left, y:top};
		},
		objUniqueId: function(elem) {
			if (typeof elem.objid === 'undefined') {
				elem.objid = m_guidCounter++;
			}
				return elem.objid;
		},
		ieGetUniqueId: function(elem) {
			if (elem === window) { 
				return 'theWindow';
			} else if (elem === document) {
				return 'theDocument';
			} else {
				return elem.uniqueID;
			}
		},
		isDocumentObj: function(elem) {
			if (isString = ((typeof elem === 'string') && (node = Gekko.Element.getById(elem)))) {
				return node;
			} else if ((isString == false) && (typeof elem !== 'undefined') && (typeof elem.ownerDocument.nodeName !== 'undefined')) {
				return elem;
			} else {
				return false;
			}
		}
	};

	var isGetById = document.getElementById ? true : false;
	/* netscape 4+/IE 5+ */
	if (((navigator.userAgent.indexOf('Gecko') > -1) || (navigator.userAgent.indexOf('MSIE') > -1) || (navigator.userAgent.indexOf('Opera') > -1)) && (isGetById)) {
		obj.getById = function(elemId) {
			return document.getElementById(elemId);
		};
	} else if ((document.layers) && (!isGetById)) {
		/* netscape 4 */
		obj.getById = function(elemId) {
			return document.elemId.document;
		};
	} else if ((document.all) && (!isGetById)) {
			/* IE 4 */
			obj.getById = function(elemId) {
				return document.all[elemId];
			};
		} else {
			obj.getById = function() {
				return false;
			};
	}
	return obj;
}();

Gekko.Frame = function() {
	return {
		iframeShim: function() {
			var iframe = document.createElement('iframe');
			var cssStyle  = iframe.style;

			iframe.setAttribute('src', document.location.protocol == 'https:' ? '//0' : 'javascript:false');
			iframe.setAttribute("scrolling", "no");
			iframe.setAttribute('frameborder', 0);
			iframe.setAttribute('width', '100%');
			iframe.setAttribute('height', '100%');
			cssStyle.position = 'absolute'; 
			cssStyle.zIndex   = '-100';
			cssStyle.filter   = 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';
			cssStyle.top      = '0px';
			cssStyle.left     = '0px';
				return iframe;
		}
	};
}();

Gekko.Css = function() {
	var overlayCache = {};
	var obj = {
		hideOverlay: function(parent) {
			parent = Gekko.Element.isDocumentObj(parent) || document.body;
			overlayCache[Gekko.Element.objUniqueId(parent)].style.display = 'none';
		},
		overlay: function(opacity, parent) {
			opacity = opacity || 90;
			parent  = Gekko.Element.isDocumentObj(parent) || document.body;

			if (typeof overlayCache[objId = Gekko.Element.objUniqueId(parent)] === 'undefined') {
				var overlay = document.createElement('div');
				overlay.setAttribute('id', 'overlay_object_' + objId);
				overlay.className    = 'overlay';
				overlay.style.height = Gekko.Browser.getDimension().htmlHeight + 'px';
				if (Gekko.Browser.isIE6OrLower) {
					overlay.appendChild(Gekko.Frame.iframeShim());
				}
				this.setOpacity(overlay, opacity);
				overlayCache[objId] = overlay;
				parent.appendChild(overlay);
					return overlay;
			} else {
				overlayCache[objId].style.display = 'block';
					return overlayCache[objId];
			}
		},
		set: function(element, property, value) {
			element.style[Gekko.Func.strToCamelCase(property)] = value;
				return element;
		},
		setOpacity: function(element, opacity) {
			var limit;
			if ((opacity < (limit = 1)) || (opacity > (limit = 100))) {
				opacity = limit;
			}

			var nonIEOpacity = opacity / 100;
			element.style.opacity = (nonIEOpacity);
			element.style.MozOpacity = (nonIEOpacity);
			element.style.KhtmlOpacity = (nonIEOpacity);
			element.style.filter = 'alpha(opacity=' + opacity + ')';
				return element;
		}
	};

	if (typeof window.getComputedStyle !== 'undefined') {
		obj.getStyle = function(element, style) {
			var currentStyle = document.defaultView.getComputedStyle(element, null);
				return (style) ? currentStyle.getPropertyValue(style) : currentStyle;
		};
	} else {
		obj.getStyle = function(element, style) {
			var currentStyle = element.currentStyle;
				return currentStyle[Gekko.Func.strToCamelCase(style)];
		};
	}

		return obj;
}();

Gekko.Browser = function() {
	var dimension = {};
	var obj = {
		getDimension: function() {
			return dimension;
		}
	};

	var viewspace =	function () {
		var de = document.documentElement;
		var property = ((de.clientHeight > 0) && (obj.isIE6OrLower)) ? de : document.body;
		dimension.clientWidth  = property.clientWidth;
		dimension.clientHeight = property.clientHeight;

		dimension.htmlWidth  = Math.max(Math.max(de.scrollWidth, document.body.scrollWidth), dimension.clientWidth);
		dimension.htmlHeight = Math.max(Math.max(de.scrollHeight, document.body.scrollHeight), dimension.clientHeight);

		Gekko.Evt.addEvtListener(window, "resize", viewspace);	
	};

	var filter = /MSIE [3-6]\./i;
	if(filter.test(navigator.userAgent)) {
		obj.isIE6OrLower = true;
	}

	Gekko.Evt.onDOMLoad(viewspace);
	
		return obj;
}();

function isValidEmail(str) {
   return (str.indexOf("@") > 0);
}

function verifyData(frm){
	var error=false;
	var message;
	message = "Please enter the following information:\n\n";

	if(frm.elements['name'].value == "") {
		message += "- Your Name\n";
		error = true;
		}
	if(isValidEmail(frm.elements['email'].value)==false) {
		message += "- Email Address\n";
		error = true;
		}
	if(frm.elements['enquiry'].value == "") {
		message += "- Your Message\n";
		error = true;
		}
	if (error!=false) {
		alert(message);
		return false;
		}
	else {
		return true;
	}
}