ajium = {};

ajium.data = {};

ajium.loading = {};

ajium.tools = {
		
		getWindowWidth 		: function( objDoc, objWin ) {
								return (objDoc.layers||(objDoc.getElementById&&!objDoc.all)) ? objWin.innerWidth : (objDoc.all ? objDoc.body.clientWidth : 0);
							  },
		getWindowHeight		: function( objDoc, objWin ) {
								return objWin.innerHeight ? objWin.innerHeight :(objDoc.getBoxObjectFor ? Math.min(objDoc.documentElement.clientHeight, objDoc.body.clientHeight) : ((objDoc.documentElement.clientHeight != 0) ? objDoc.documentElement.clientHeight : (objDoc.body ? objDoc.body.clientHeight : 0)));
							  },
		getScrollWidth		: function( objDoc, objWin ) {
								return objDoc.all ? Math.max(Math.max(objDoc.documentElement.offsetWidth, objDoc.documentElement.scrollWidth), objDoc.body.scrollWidth) : (objDoc.body ? objDoc.body.scrollWidth : ((objDoc.documentElement.scrollWidth != 0) ? objDoc.documentElement.scrollWidth : 0));
							  },
		getScrollHeight		: function( objDoc, objWin ) {
								return Math.max( Math.max( objDoc.body.scrollHeight, objDoc.documentElement.scrollHeight ), Math.max( objDoc.body.offsetHeight, objDoc.documentElement.offsetHeight ) );
							  },
		getScrollLeft		: function( objDoc, objWin ) {
								return objDoc.all ? (!objDoc.documentElement.scrollLeft ? objDoc.body.scrollLeft : objDoc.documentElement.scrollLeft) : ((objWin.pageXOffset != 0) ? objWin.pageXOffset : 0);
							  },
		getScrollTop		: function( objDoc, objWin ) {
								return objDoc.all ? (!objDoc.documentElement.scrollTop ? objDoc.body.scrollTop : objDoc.documentElement.scrollTop) : ((objWin.pageYOffset != 0) ? objWin.pageYOffset : 0);
							  },
		getClientLeft		: function( objDoc, objWin ) {
								return (!objDoc.documentElement.clientLeft ? objDoc.body.clientLeft : objDoc.documentElement.clientLeft);
							  },
		getClientTop		: function( objDoc, objWin ) {
							  	return (!objDoc.documentElement.clientTop ? objDoc.body.clientTop : objDoc.documentElement.clientTop);
							  },
		getSize				: function( objDoc, objWin ) {
								WindowWidth   = ajium.tools.getWindowWidth ( objDoc, objWin );
								WindowHeight  = ajium.tools.getWindowHeight( objDoc, objWin );
								ScrollWidth   = ajium.tools.getScrollWidth ( objDoc, objWin );
								ScrollHeight  = ajium.tools.getScrollHeight( objDoc, objWin );
								ScrollLeft    = ajium.tools.getScrollLeft  ( objDoc, objWin );
								ScrollTop     = ajium.tools.getScrollTop   ( objDoc, objWin );
								PageWidth	  = Math.max( ScrollWidth, WindowWidth);
								PageHeight	  = Math.max( ScrollHeight, WindowHeight);
								return { pW: PageWidth, pH: PageHeight, wW: WindowWidth, wH: WindowHeight, sW: ScrollWidth, sh: ScrollHeight, sL: ScrollLeft, sT: ScrollTop };
							  },
		$					: function(sId){
								if (!sId) {	return null; }
								var obj = document.getElementById(sId);
								if (obj) { return obj; }
								if (document.all) { return document.all[sId]; }
								return obj;
							  },
		getElementSize		: function( e ) {
									if ( e.display != 'none' || e.display != null )
									{
										return {width: e.clientWidth, height: e.clientHeight};
									}
									else
									{
										var orig = jQuery.extend(true, {}, e);
									    e.style.visibility 		= 'hidden';
									    e.style.position 		= 'absolute';
									    e.style.top				= '10px';
									    e.style.left			= '10px';
									    e.style.display 		= 'block';
									    var sizes 				= {width: e.clientWidth, height: e.clientHeight};
									    var originalHeight 		= e.clientHeight;
									    e.style.top 			= orig.style.top;
									    e.style.left 			= orig.style.left;
									    e.style.display 		= orig.style.display;
									    e.style.position 		= orig.style.position;
									    e.style.visibility 		= orig.style.visibility;
									    return sizes;
								 	}  			
								  },
		getBody				: function( objDoc )
							  {
									  return objDoc.getElementsByTagName("body").item(0) ? objDoc.getElementsByTagName("body").item(0) : objDoc.getElementsByTagName("html").item(0);
							  },
		/* Helper Function to get a style definition from an element */					  
		/* to prevent a empty result if something is defined in the css-file definition*/					  
		getStyle			: function( e, styleProp )
							  {
								  if (e.currentStyle)
								  		var y = e.currentStyle[styleProp];
								  else if (window.getComputedStyle)
								  		var y = document.defaultView.getComputedStyle(e,null).getPropertyValue(styleProp);
								  return y;
							  },
							  getCloneOfObject: function(oldObject) {
							        var tempClone = {};

							        if (typeof(oldObject) == "object")
							            for (prop in oldObject)
							                // for array use private method getCloneOfArray
							                if ((typeof(oldObject[prop]) == "object") &&
							                                (oldObject[prop]).__isArray)
							                    tempClone[prop] = this.getCloneOfArray(oldObject[prop]);
							                // for object make recursive call to getCloneOfObject
							                else if (typeof(oldObject[prop]) == "object")
							                    tempClone[prop] = this.getCloneOfObject(oldObject[prop]);
							                // normal (non-object type) members
							                else
							                    tempClone[prop] = oldObject[prop];

							        return tempClone;
							    },
							    getCloneOfArray: function(oldArray) {
							        var tempClone = [];

							        for (var arrIndex = 0; arrIndex <= oldArray.length; arrIndex++)
							            if (typeof(oldArray[arrIndex]) == "object")
							                tempClone.push(this.getCloneOfObject(oldArray[arrIndex]));
							            else
							                tempClone.push(oldArray[arrIndex]);

							        return tempClone;
							    }


							
}

ajium.$ = ajium.tools.$;

/**
 * 	loading 
 */


ajium.loading = {
	_loading	:	null,
	_msg		:	null,
	init		:	function( element )
					{
						if ( 'string' == typeof element && element.length > 0 )
						{
							element = ajium.$( element );
						}
						
						if ( 'object' != typeof element )
						{
							element = ajium.tools.getBody( document );
							var tmpSize = ajium.tools.getSize( document, window );
							size = {width: tmpSize.pW, height: tmpSize.pH};
						}
						else
						{
							size = ajium.tools.getElementSize(element);
						}
						
						this._loading = document.createElement("div");
						this._loading.style.display 	= 'none';
						this._loading.setAttribute('id','ajium_overlay' );
					 	this._loading.style.width		= size.width + 'px';
					 	this._loading.style.height		= size.height + 'px';
					 	this._loading.className 		= 'ajium-loading';
					 	
					 	/**
					 	 * Set offset only for elements which are not defined absolute
					 	 */
					 	
					 	if ( 'absolute' != ajium.tools.getStyle( element, 'position') )
					 	{
					 		this._loading.style.top			= element.offsetTop + 'px';
					 		this._loading.style.left		= element.offsetLeft + 'px';
					 	}

					 	element.appendChild(this._loading);

					 	/**
					 	 * loading Message
					 	 */
					 	
						this._msg = document.createElement("div");
						this._msg.style.display 	= 'none';
						this._msg.setAttribute('id','ajium_overlay_msg' );
					 	this._msg.className 		= 'ajium-loading-msg';					 	
					 	
					 	element.appendChild(this._msg);
					 	
					 	var tmpSize = ajium.tools.getElementSize(this._msg);
					 	
					 	this._msg.style.top  = Math.max( ( ( size.height -  tmpSize.height ) / 2 ), 0 )  + 'px';
					 	this._msg.style.left = Math.max( ( ( size.width -  tmpSize.width ) / 2 ), 0 ) + 'px';
					 	
					 	this._loading.style.display = '';
					 	this._msg.style.display 	= '';
					},
	destroy		:	function( element )
					{
						if ( this._loading )
						{
							if ( this._msg )
							{
								this._msg.parentNode.removeChild(this._msg);
								delete this._msg;
							}
							this._loading.parentNode.removeChild(this._loading);
							delete this._loading;
						}
					}
}
