if(!GuiPack) {

	//extend Prototype.Browser
	if (Prototype.Browser.WebKit) {
		Prototype.Browser.WebKitVersion = parseFloat(navigator.userAgent.match(/AppleWebKit\/([\d\.\+]*)/)[1]);
		Prototype.Browser.Safari2 		= (Prototype.Browser.WebKitVersion < 420);
	};
	
	if (Prototype.Browser.IE) {
		Prototype.Browser.IEVersion = parseFloat(navigator.appVersion.split(';')[1].strip().split(' ')[1]);
		Prototype.Browser.IE6 		= (Prototype.Browser.IEVersion == 6);
		Prototype.Browser.IE7 		= (Prototype.Browser.IEVersion == 7);
		Prototype.Browser.IE8 		= (Prototype.Browser.IEVersion == 8);
	};

	//extend Prototype.Event
	
	Object.extend(Event, {
		/**
		 * wheel event
		 *
		 * event listening
		 * $(element).observe('mousewheel', function);
		 * $(element).observe('DOMMouseScroll', function); for firefox
		 *
		 * capturing
		 * function(e) {	
       	 * 		if (Event.wheel(e) > 0) //down
         * 		if (Event.wheel(e) < 0) //up
		 * 		e.stop(); //end event
		 * }
		 */
		wheel:function (event){
			var delta = 0;
			if (!event) {
				event = window.event;
			};
			if (event.wheelDelta) {
				delta = event.wheelDelta/120; 
				if (window.opera) {
					delta = -delta;
				};
			} else if (event.detail) {
				delta = -event.detail/3;
			};
			return Math.round(delta); //Safari Round
		}
	});

	//extend Prototype.Element 
	Element.addMethods({		   
		/**
	 	 * get the contents of an iFrame element
	 	 */
		getIframeContent: function(element){
			element = $(element);
			return element.contentWindow.document.body.innerHTML;
		}
	});

	var GuiPack = {
		domLoaded: false,
		
		preloadImage: function(file) {
			
			if(Object.isArray(file)) {
				file.each.bind(this, function(e){
					this.preloadImage(e);
				});
			} else {
				var img 	= new Image();
				img.src 	= file;
			};
		},
		
		clearEffectQueue: function(scope) {
			Effect.Queues.get(scope).each(function(effect) {
				effect.cancel();
			});
		},
		
		getScrollbarWidth: function() {
			if(typeof this.scrollbarWidth == 'undefined') {
				var inner = Builder.node('p');	
				$(inner).setStyle({width: '100%', height: '200px'});
				
				var outer = Builder.node('div');
				$(outer).setStyle({position: 'absolute', top: '0px', left: '0px', visibility: 'hidden', width: '200px', height: '150px', overflow: 'hidden'});
				outer.appendChild(inner);
				
				document.body.appendChild (outer);
				var w1 = inner.offsetWidth;
				outer.setStyle({overflow: 'scroll'});
				var w2 = inner.offsetWidth;
				if (w1 == w2) {
					w2 = outer.clientWidth;
				};			
				document.body.removeChild(outer);
				
				this.scrollbarWidth = (w1 - w2);
			};
			return this.scrollbarWidth;
		},
		
		secondsToTime: function(input) {
			var hours 	= Math.floor(input / 3600);
			var minutes = Math.floor(input / 60) - (hours * 60);
			var seconds = input - ((hours * 3600) + (minutes * 60));		
			
			return ((hours < 10) ? '0':'') + hours + ':' + ((minutes < 10) ? '0':'') + minutes + ':' + ((seconds < 10) ? '0':'') + seconds;
		},
		
		writeCookie: function(key, value, expiryDays) {
			var expires = "";
			if (expiryDays) {
				var date = new Date();
				date.setTime(date.getTime()+(expiryDays*24*60*60*1000));
				var expires = "; expires="+date.toGMTString();
			};

			document.cookie = key + "=" + value + expires + "; path=/";
		},

		readCookie: function(key) {
			key		= key + "=";
			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(key) == 0) {
					return c.substring(key.length,c.length);
				};
			};
			return null;

		},
		
		isDomLoaded: function() {
			return this.domLoaded;	
		}
	};
	
	document.observe('dom:loaded', function(){GuiPack.domLoaded = true;});
};