Object.extend = function (ObjectName,source) {
    for(property in source) {
        ObjectName[property] = source[property]; 
    }
}

if(!Element) var Element = new Object();
Object.extend(Element,{
        /**
                      *generate id for Element
                      *get random letter A-Z a-z
                      *get random number 0-10
                      *finish length 32 chars
                      *@access public
                      *@return String generated ID
                      */
        generateId:function (len) {
            var generatedId = '';
            for(var i = 0 ; i < len;i++){
                while (1) {
                    var letterCode = Math.round(Math.random()*122);                
                    if(letterCode >= 65 && letterCode <= 90 || letterCode >= 97 && letterCode <= 122) {
                        generatedId += String.fromCharCode(letterCode);
                        break;
                    }
                }
                generatedId += ''+Math.round(Math.random()*10);                
            }            
            return generatedId;
        },
        /**
                      *create HTML Element
                      *@access public 
                      *@params String HTML name
                      *@return object
                      */
        create:function (n) {
            return document.createElement(n);
        },
        /**
                      *attach Attribute to HTML Element
                      *@access public           
                      *@params Object HTML Element
                      *@params String name of Attribute
                      *@params [String Attribute Value] [Object Attribute Values [only for style Attribute]]
                      *@return void
                      */
        attrib:function (obj,name,valObj) {     
            if(!name.match(/style/i) ) {
                obj.setAttribute(name,valObj);
            } else {
                for(value in valObj) {
                    eval('obj.style.'+value+'= valObj[value]');
                }
            }
        },
        /**
                       *display Object on Document
                       *@access public
                       *@params obj HTML object
                       *@return void
                       */
        show:function(obj) {
            if(typeof obj == 'object')
                obj.style.display = 'block';
            else 
                document.getElementById(obj).style.display = 'block';
        },
        /**
                       *hide Object on Document
                       *@access public
                       *@params obj HTML object
                       *@return void
                       */
        hide:function(obj) {
            if(typeof obj == 'object')
                obj.style.display = 'none';
            else 
                document.getElementById(obj).style.display = 'none';
        },
        /**
                      *delete HTML Element from Document
                      *@access public
                      *@params Object HTML element
                      *@return void
                      */                       
        unlink:function (element) {
            element.parentNode.removeChild(element);
        },
        /**
                      *bind HTML object to HTML element
                      *@access public 
                      *@params Object HTML ObjT target Element
                      *@params Object HTML Obj bind to Element
                      *@return void
                      */
        bind:function (objT,objS) {        
            if(typeof objS == 'object') {      
                objS.appendChild(objT);
            } else {
                try {
                    if(objS.match(/BODY/i)) {
                        document.getElementsByTagName('BODY')[0].appendChild(objT);
                    } else {
                        if(document.getElementById(objS)) {
                            document.getElementById(objS).appendChild(objT);
                        } else {
                            throw ('Element mit der ID '+objS+' ist nicht belegt');
                        }
                    }
                } catch (e) {
                    alert(e+"  "+objS);
                }
            }
        },
        /**
                     * position ermitteln 
                     * @access private
                     * @param Object HTML Object				  
                     * @return Object
                     */
        getCoords:function(htmlObj) {   
            var body = false;
            if(typeof htmlObj == 'string' && !htmlObj.match(/(body|window)/i)) {
                var obj = document.getElementById(htmlObj);
            } else if (typeof htmlObj == 'object' && htmlObj.nodeName.match(/(body|window)/i)) {
                var obj = htmlObj;
            } else {
                body = true;
            }
                
            if(!body) {
                var left = 0;
                var top  = 0;
                var objW = obj.offsetWidth;
                var objH = obj.offsetHeight;
                                    		
                while (obj.offsetParent) {
                    left += obj.offsetLeft;
                    top  += obj.offsetTop;
                    obj = obj.offsetParent;
                }
                
                left += obj.offsetLeft;
                top  += obj.offsetTop;
                                    					
                return {posX:left,posY:top,w:objW,h:objH};
            } else {
                var height       = window.innerHeight || document.documentElement.offsetHeight;
                var width        = window.innerWidth  || document.documentElement.offsetWidth;
                var scrollHeight = document.documentElement.scrollHeight; 
                
                return {w:width,h:height,sH:scrollHeight};
            }
        },
        /**
                     * Hilfsfunktion für Eventhandling
                     * @access public
                     * @param Object element , welches Object den Event auslöst
                     * @param String type , welcher Eventhandler kommt in Frage
                     * @param String callBack , callBack Funktion welche den event verarbeitet
                     * @param Object returnParams optionale Rückgabe Parameter
                     * @return object event;
                     * @return object html object;
                     */
        bindEvent:function(element,type,callBack,rP) {
        
            if(typeof element == 'string') {
                if(element.match(/body/i)) {
                    var triggerObj = document.getElementsByTagName('BODY')[0];
                } else {
                    var triggerObj = document.getElementById(element);
                }
            } else {
                var triggerObj = element;
            }
        
            var returnParams = rP;	
            var event        = type;
            try{
            	if(document.addEventListener) { //gute Browser
            	    if(type.match(/^on/))  {
                       event = type.replace(/^on/,"");
                    }
                    triggerObj.addEventListener(event,handleEvent,false);
            	} else { // IE
            	    if(!type.match(/^on/))	
                        event = "on"+type;            	    
                    triggerObj.attachEvent(event,handleEvent);
            	}
            }catch(e){}
            	
            function handleEvent (evt) {
                var event  = (evt)?evt:(window.event)?window.event:'';
            								
                if(event.stopPropagation) {
                    event.stopPropagation();
                } else {
                    event.cancelBubble = true;
                }
            		
                var target = event.srcElement || event.currentTarget;       
                callBack.call(callBack,event,target,(returnParams)?returnParams:null);
            }
        },
        /**
                      *clear browser newlines form inner HTML
                      *@access public
                      *@params Object HTML Element
                      *@return Object HTML Element
                      */
        stripBreaks:function(obj) {
            DomTree.innerHTML = trim(DomTree.innerHTML);
            DomTree.innerHTML = DomTree.innerHTML.replace(/>\s*/gm,'>'); 
            DomTree.innerHTML = DomTree.innerHTML.replace(/\s*</gm,'<'); 
            DomTree.innerHTML = DomTree.innerHTML.replace(/>\s*</gm,'><'); 
            return DomTree;
        },
        /**
                      *css Wert auslesen welche direkt in einen CSS File angegeben sein können
                      *@access public
                      *@params [Object htmlObject | String object id / name] 
                      *@paramsString name CSS 
                      *@return String CSS Value
                      */
        cssValue:function (htmlObj,name) {        
            if(typeof htmlObj == 'string') {
                if(htmlObj.match(/body/i)) {
                    var obj = document.getElementsByTagName('BODY')[0];
                } else {
                    var obj = document.getElementById(htmlObj);
                }
            } else {
                var obj = htmlObj;
            }
            
            if(window.getComputedStyle) {
                return window.getComputedStyle(obj,'').getPropertyValue(name);
            } else {
                return obj.currentStyle[name];
            }
        }
    }
);

function adjustSize(){
	if(document.getElementById('contentArea') && document.getElementById('header')){
		var yOffset = Element.getCoords('header');
		var heightObject = Element.getCoords('body');
		var fheight = heightObject.sH-yOffset.h;	
		
		Element.attrib(document.getElementById('contentArea'),'style',{height:fheight+'px',
																	   width:heightObject.w-1+'px'});
		try{
		Element.attrib(document.getElementById('geist'),'style',{height:fheight+'px',
																	   width:heightObject.w-20+'px'});
		}catch(e){
		
		}
	}
	
	/*if(document.getElementById('geist')){
		document.getElementById('geist').style.height = document.body.clientHeight+'px';
		document.getElementById('geist').style.width = document.body.clientWidth+'px';
	}	*/
}

