/*
 * euDock - javascript Emulation of Dock style MAC OS X bar
 *
 * Version: 2.0
 *
 * Copyright (C) 2006 Parodi (Pier...) Eugenio <piercingslugx@inwind.it>
 *                                              http://eudock.jules.it
 *
 * SPECIAL THANKS TO Tiago D'Herbe (tvidigal) FOR (Multiple Dock) INSPIRATION
 *
 * This library is free software; you can redistribute it and/or             
 * modify it under the terms of the GNU Lesser General Public                
 * License as published by the Free Software Foundation; either              
 * version 2.1 of the License, or (at your option) any later version.        
 *                                                                           
 * This library is distributed in the hope that it will be useful,           
 * but WITHOUT ANY WARRANTY; without even the implied warranty of            
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         
 * Lesser General Public License for more details.                           
 *                                                                           
 * You should have received a copy of the GNU Lesser General Public          
 * License along with this library; if not, write to the Free Software       
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 */

 /*
  *
  * This program is absolutely free...
  *           ...BUT...
  * If you modify(OR TRY TO DO THAT)this Source Code,
  * my SOUL will carry you some monstrous Nightmares
  *
  * Have a nice day
  * enjoy yourself.
  *          Pier...
  *
  * (Sorry but I'm Italian not an American writer)
  *                            (...a day Maybe...)
  */

if (!euEnv)
	var euEnv      = new Array();
euEnv.Kost         = new Array();
euEnv.Kost.num     = 0;
euEnv.Kost.next    = function(){return this.num++;}
euEnv.euDockArray  = new Array();
euEnv.refreshTime  = 35;
euEnv.exeThread          = true;
euEnv.exeThreadWhiteLoop = 0;
euEnv.x = 0;
euEnv.y = 0;
euEnv.mouseMoved=false;

var euUP       = 1;
var euDOWN     = 2;
var euLEFT     = 3;
var euRIGHT    = 4;

var euICON     = 5;
var euMOUSE    = 6;

var euSCREEN   = 7;
var euOBJECT   = 8;
var euABSOLUTE = 9;
var euRELATIVE = 10;

var euHORIZONTAL = 11;
var euVERTICAL   = 12;

var euTRANSPARENT = 13;
var euFIXED       = 14;
var euOPAQUE      = 15;



/* 
 ****************************************
 ****** Standard euDock Functions *******
 ******  (BEGIN)                  *******
 **************************************** 
 */		
		function euIdObjTop(euObj){
		    var ret = euObj.offsetTop;
		    while ((euObj = euObj.offsetParent)!=null)
		        ret += euObj.offsetTop;
		    return ret;
		};
		
		function euIdObjLeft(euObj){
		    var ret = euObj.offsetLeft;
		    while ((euObj = euObj.offsetParent)!=null)
		        ret += euObj.offsetLeft;
		    return ret;
		};
		
		function isEuInside(euObj,x,y){
			var euTop  = euIdObjTop(euObj);
			var euLeft = euIdObjLeft(euObj);			
			return ((euTop<=y && (euTop+euObj.offsetHeight)>=y)&&(euLeft<=x && (euLeft+euObj.offsetWidth)>=x));
		};		
	
		/*
		 * euDimensioni()
		 *
		 * standard code fo retrieve width and Height of Screen
		 *
		 */
		function euDimensioni(){
		    if( typeof( window.innerWidth ) == 'number' ) {
		        //Non-IE
		        euEnv.euFrameWidth = window.innerWidth-16;
		        euEnv.euFrameHeight = window.innerHeight;
		    } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		        //IE 6+ in 'standards compliant mode'
		        euEnv.euFrameWidth = document.documentElement.clientWidth-16;
		        euEnv.euFrameHeight = document.documentElement.clientHeight;
		    } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		        //IE 4 compatible
		        euEnv.euFrameWidth = document.body.clientWidth;
		        euEnv.euFrameHeight = document.body.clientHeight;
		    }
		};
		
		function offsEut() {
		    euEnv.euScrOfY = 0;
		    euEnv.euScrOfX = 0;
		    if( typeof( window.pageYoffsEut ) == 'number' ) {
		        //Netscape compliant
		        euEnv.euScrOfY = window.pageYoffsEut;
		        euEnv.euScrOfX = window.pageXoffsEut;
		    } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		        //DOM compliant
		        euEnv.euScrOfY = document.body.scrollTop;
		        euEnv.euScrOfX = document.body.scrollLeft;
		    } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		        //IE6 standards compliant mode
		        euEnv.euScrOfY = document.documentElement.scrollTop;
		        euEnv.euScrOfX = document.documentElement.scrollLeft;
		    }		    
		};
/* 
 ****************************************
 ****** Standard euDock Functions *******
 ******  (END)                    *******
 **************************************** 
 */

/* 
 ****************************************
 ****** euDock Trans Functions    *******
 ******  (BEGIN)                  *******
 **************************************** 
 */

	function euKostFunc30(x){
		return 0.3;
	};
	
	function euKostFunc100(x){
		return 1;
	};	
 
 	function euLinear(x){
		return x;
	};
  
	function euLinear30(x){
		return 1*(x+(1-x)*0.3);
	};
	
	function euLinear20(x){	
		return x+(1-x)*0.2;
	};
	
	function euExp30(x){
		return euLinear30(x*x*x);
	};

	function euLinear50(x){	
		return x+(1-x)*0.5;
	};		
	
	function euHarmonic(x){
		return euLinear30((1-Math.cos(Math.PI*x))/2);
	};
	
	function euSemiHarmonic(x){
		return euLinear30(Math.cos(Math.PI*(1-x)/2));
	};	
 
/* 
 ****************************************
 ****** euDock Trans Functions    *******
 ******  (END)                    *******
 **************************************** 
 */ 
 
/* 
 ****************************************
 ******    euDock Object          *******
 ******     (START)               *******
 **************************************** 
 */
		function euDock(){
			this.id = 'euDock_'+euEnv.Kost.next();
			document.write("<div id='"+this.id+"_bar' style='z-index:1000;position:absolute;border:0px solid black;'></div>");	
			document.write("<div onMouseOut='euEnv.euDockArray."+this.id+".mouseOut();' onMouseOver='euEnv.euDockArray."+this.id+".mouseOver();' id='"+this.id+"' style='z-index:1000;position:absolute;border:0px solid black;'></div>");	
			this.div   =document.getElementById(this.id);
			this.divBar=document.getElementById(this.id+"_bar");
			this.iconsArray=new Array();
			this.isInside=false;
			euEnv.euDockArray[this.id]=this;
			this.bar=null;
			
			this.mouseX = 0;
			this.mouseY = 0;
			
			this.centerPosX = 0;
			this.centerPosY = 0;
			this.offset     = 0;
			this.iconOffset = 0;
			
			this.venusHillSize  = 3;//200;
			this.venusHillTrans = euLinear;

			this.position    = euUP;
			this.align       = euSCREEN;
			this.objectAlign = euDOWN;
			this.idObjectHook;
			this.animaition  = euICON;
			this.animFading  = euABSOLUTE;
			
			this.setIconsOffset = function(offset){
				this.iconOffset=offset;
			};
			
			this.setAnimation = function(anim,size){				
				this.animaition    = anim;
				this.venusHillSize = size;
			};
			
			this.setPointAlign = function(x,y,pos){
				this.offset   = 0;
				this.align    = euABSOLUTE;
				this.position = pos;
				this.setCenterPos(x,y);
			}
			
			this.setObjectAlign = function(idObj,align,offset,pos){
				this.offset       = offset;
				this.align        = euOBJECT;
				this.objectAlign  = align;
				this.position     = pos;
				this.idObjectHook = document.getElementById(idObj);
				this.setObjectCoord();
			};
			
			this.setObjectCoord = function(){
				if (this.objectAlign==euDOWN)
					this.setCenterPos(
						euIdObjLeft(this.idObjectHook) + (this.idObjectHook.offsetWidth/2),
						euIdObjTop(this.idObjectHook)  + this.idObjectHook.offsetHeight + this.offset);
				else if (this.objectAlign==euUP)
					this.setCenterPos(
						euIdObjLeft(this.idObjectHook) + (this.idObjectHook.offsetWidth/2),
						euIdObjTop(this.idObjectHook) - this.offset);
				else if (this.objectAlign==euLEFT)
					this.setCenterPos(
						euIdObjLeft(this.idObjectHook) - this.offset,
						euIdObjTop(this.idObjectHook)  + (this.idObjectHook.offsetHeight/2));
				else if (this.objectAlign==euRIGHT)
					this.setCenterPos(
						euIdObjLeft(this.idObjectHook) + this.idObjectHook.offsetWidth + this.offset,
						euIdObjTop(this.idObjectHook)  + (this.idObjectHook.offsetHeight/2));				
			};			
			
			this.setScreenAlign = function(align,offset){
				this.offset=offset;
				this.align = euSCREEN;
				if (align==euUP)
					this.position=euDOWN;
				else if (align==euDOWN)					
					this.position=euUP;
				else if (align==euLEFT)
					this.position=euRIGHT;
				else if (align==euRIGHT)					
					this.position=euLEFT;
				this.setScreenCoord();
			};
			
			this.setScreenCoord = function(){
				euDimensioni();
				offsEut();
				if (this.position==euDOWN)
					this.setCenterPos(
						euEnv.euScrOfX+euEnv.euFrameWidth/2,
						euEnv.euScrOfY+this.offset);
				else if (this.position==euUP)
					this.setCenterPos(
						euEnv.euScrOfX+euEnv.euFrameWidth/2,
						euEnv.euScrOfY+euEnv.euFrameHeight-this.offset);					
				else if (this.position==euRIGHT)
					this.setCenterPos(
						euEnv.euScrOfX+this.offset,
						euEnv.euScrOfY+euEnv.euFrameHeight/2);
				else if (this.position==euLEFT)
					this.setCenterPos(
						euEnv.euScrOfX+euEnv.euFrameWidth-this.offset,
						euEnv.euScrOfY+euEnv.euFrameHeight/2);					
			};
			
			this.refreshDiv = function(){
				if (this.position==euDOWN){
					this.setPos(this.centerPosX-this.getWidth()/2,this.centerPosY+this.iconOffset);					
				}else if (this.position==euUP){
					this.setPos(this.centerPosX-this.getWidth()/2,this.centerPosY-this.getHeight()-this.iconOffset);
				}else if (this.position==euRIGHT){					
					this.setPos(this.centerPosX+this.iconOffset,this.centerPosY-this.getHeight()/2);
				}else{
					this.setPos(this.centerPosX-this.getWidth()-this.iconOffset,this.centerPosY-this.getHeight()/2);
				}
				if (this.bar){
					if (this.position==euDOWN){
						this.setBarPos(this.centerPosX-this.getWidth()/2,this.centerPosY);					
					}else if (this.position==euUP){
						this.setBarPos(this.centerPosX-this.getWidth()/2,this.centerPosY-this.bar.getSize());
					}else if (this.position==euRIGHT){
						this.setBarPos(this.centerPosX,this.centerPosY-this.getHeight()/2);
					}else{
						this.setBarPos(this.centerPosX-this.bar.getSize(),this.centerPosY-this.getHeight()/2);
					}
				}
			}			
			
			this.riposition = function(){
				if (this.align == euSCREEN)
					this.setScreenCoord();
				else if (this.align == euOBJECT)
					this.setObjectCoord();				
			};
									
			this.setCenterPos = function(x,y){
				this.centerPosX = x;
				this.centerPosY = y;
				this.refreshDiv();
			};

			this.setPos = function(x,y){				
				this.setPosX(x);
				this.setPosY(y);
			};	
			
			this.setBarPos = function(x,y){
				this.setBarPosX(x);
				this.setBarPosY(y);
			};			
			
			this.setDim = function(w,h){
				this.setWidth(w);
				this.setHeight(h);				
			};	
			
			
			this.setBarPosX   = function(x) {document.getElementById(this.id+"_bar").style.left=x+'px';};
			this.setBarPosY   = function(y) {document.getElementById(this.id+"_bar").style.top=y+'px';};			
			
			this.getPosX   = function() {return document.getElementById(this.id).style.left.replace(/[^0-9]/g,"");};			
			this.setPosX   = function(x) {document.getElementById(this.id).style.left=x+'px';};
			this.getPosY   = function() {return document.getElementById(this.id).style.top.replace(/[^0-9]/g,"");};	
			this.setPosY   = function(y) {document.getElementById(this.id).style.top=y+'px';};
			this.getWidth  = function() {return document.getElementById(this.id).style.width.replace(/[^0-9]/g,"");};
			this.setWidth  = function(w){document.getElementById(this.id).style.width=Math.round(w)+'px';};
			this.getHeight  = function() {return document.getElementById(this.id).style.height.replace(/[^0-9]/g,"");};		
			this.setHeight = function(h){document.getElementById(this.id).style.height=Math.round(h)+'px';};
			
			this.getVenusWidth  = function() {return this.venusHillSize*this.getWidth();};
			this.getVenusHeight = function() {return this.venusHillSize*this.getHeight();};
			
			this.getMouseRelativeX = function(){return this.mouseX-euIdObjLeft(this.div);};
			this.getMouseRelativeY = function(){return this.mouseY-euIdObjTop(this.div);};
			
			this.updateDims = function(){
				var bakWidth  = 0;
				var bakHeight = 0;
				for (var i in this.iconsArray){					
					if (this.position==euUP || this.position==euDOWN){						
						bakWidth  += this.iconsArray[i].getWidth();
						bakHeight = (this.iconsArray[i].getHeight()>bakHeight)?this.iconsArray[i].getHeight():bakHeight;
						bakHeight = Math.round(bakHeight);
					}else{						
						bakHeight += this.iconsArray[i].getHeight();
						bakWidth  = (this.iconsArray[i].getWidth()>bakWidth)?this.iconsArray[i].getWidth():bakWidth;
						bakWidth = Math.round(bakWidth);
					}
				}
				
				if (this.bar){
					if (this.position==euUP || this.position==euDOWN)
						this.bar.setProperties(bakWidth,this.position)
					else
						this.bar.setProperties(bakHeight,this.position)
					this.bar.refresh();
				}
				
				//bakWidth=Math.ceil(bakWidth);			
				//bakHeight=Math.ceil(bakHeight);
								
				var posx=0;
				var posy=0;
				var updPosX=0;
				var updPosY=0;
				for (var i in this.iconsArray){					
					if (this.position==euDOWN){
						updPosX=posx;
						updPosY=posy;
						posx+=this.iconsArray[i].getWidth();
					}else if (this.position==euUP){
						updPosX=posx;
						updPosY=bakHeight-this.iconsArray[i].getHeight();
						posx+=this.iconsArray[i].getWidth();
					}else if (this.position==euRIGHT){
						updPosX=posx;
						updPosY=posy;
						posy+=this.iconsArray[i].getHeight();
					}else{
						updPosX=bakWidth-this.iconsArray[i].getWidth();
						updPosY=posy;
						posy+=this.iconsArray[i].getHeight();
					}
					this.iconsArray[i].setPos(updPosX,updPosY);
					this.iconsArray[i].refresh();
					
				}
				
				this.setDim(bakWidth,bakHeight);
				this.refreshDiv();
			};
			
			this.kernel = function(){				
				if (this.isInside)
					return this.kernelMouseOver();
				else
					return this.kernelMouseOut();			
			};
			
			this.kernelMouseOver = function(){				
				var ret=false;
				var overI = -1;
				var mouseRelX = this.getMouseRelativeX();
				var mouseRelY = this.getMouseRelativeY();
				var mediana;
				var border;
				var frameTo;
				var venusWidth;
				var venusHeight;
				var overIcon;
				if (this.position==euUP || this.position==euDOWN){
					venusWidth = this.getVenusWidth();
					for (var i in this.iconsArray)
						if (this.iconsArray[i].isInsideX(mouseRelX)){
							overIcon=i;
							border=this.iconsArray[i].getWidth()/2;
							if (this.animaition==euICON){
								mouseRelX  = this.iconsArray[i].posX+border;
								border=0;
							}
						}
					for (var i in this.iconsArray){
						mediana = this.iconsArray[i].posX+this.iconsArray[i].getWidth()/2;
						if (Math.abs(mediana-mouseRelX)<=border)
							mediana=mouseRelX;
						else if (mediana<mouseRelX)
							mediana+=this.iconsArray[i].getWidth()/2;
						else if (mediana>mouseRelX)
							mediana-=this.iconsArray[i].getWidth()/2;
						if (this.animaition==euICON  && Math.abs(i-overIcon)<=this.venusHillSize)
							frameTo = this.venusHillTrans(1-Math.abs(i-overIcon)/this.venusHillSize);
						else if (this.animaition==euMOUSE && Math.abs(mediana-mouseRelX)<=venusWidth)
							frameTo = this.venusHillTrans(1-Math.abs(mediana-mouseRelX)/venusWidth);
						else
							frameTo = 0;
							
						if (frameTo==0 || frameTo==1 || Math.abs(frameTo-this.iconsArray[i].frame)>0.01)
							ret|=this.iconsArray[i].setFrameTo(frameTo);
							
						if (this.animFading==euABSOLUTE)
							if (this.iconsArray[i].isInsideX(mouseRelX))
								ret|=this.iconsArray[i].setFadingTo(1);
							else
								ret|=this.iconsArray[i].setFadingTo(0);
						else
							ret|=this.iconsArray[i].setFadingTo(frameTo);
						
					}
				}else{
					venusHeight = this.getVenusHeight();
					for (var i in this.iconsArray)
						if (this.iconsArray[i].isInsideY(mouseRelY)){
							overIcon=i;
							border=this.iconsArray[i].getHeight()/2;
							if (this.animaition==euICON){
								mouseRelY  = this.iconsArray[i].posY+border;
								border=0;
							}
						}					
					for (var i in this.iconsArray){
						mediana = this.iconsArray[i].posY+this.iconsArray[i].getHeight()/2;
						if (Math.abs(mediana-mouseRelY)<=border)
							mediana=mouseRelY;
						else if (mediana<mouseRelY)
							mediana+=this.iconsArray[i].getHeight()/2;
						else if (mediana>mouseRelY)
							mediana-=this.iconsArray[i].getHeight()/2;
						if (this.animaition==euICON  && Math.abs(i-overIcon)<=this.venusHillSize)
							frameTo = this.venusHillTrans(1-Math.abs(i-overIcon)/this.venusHillSize);
						else if (this.animaition==euMOUSE && Math.abs(mediana-mouseRelY)<=venusHeight)
							frameTo = this.venusHillTrans(1-Math.abs(mediana-mouseRelY)/venusHeight);
						else
							frameTo = 0;
							
						if (frameTo==0 || frameTo==1 || Math.abs(frameTo-this.iconsArray[i].frame)>0.01)
							ret|=this.iconsArray[i].setFrameTo(frameTo);
							
						if (this.animFading==euABSOLUTE)
							if (this.iconsArray[i].isInsideY(mouseRelY))
								ret|=this.iconsArray[i].setFadingTo(1);
							else
								ret|=this.iconsArray[i].setFadingTo(0);
						else
							ret|=this.iconsArray[i].setFadingTo(frameTo);
						
					}										
				}
				if (ret)
					this.updateDims();
				return ret;				
			};
			
			this.kernelMouseOut = function(){
				var ret=false;
				for (var i in this.iconsArray)
					ret|=this.iconsArray[i].setAllFrameTo(0);	
				if (ret)
					this.updateDims();				
				return ret;	
			};			
			
			this.mouseOut = function(){
				this.isInside=false;

				euEnv.exeThreadWhiteLoop=5;				
			};
			
			this.mouseOver = function(){
				this.isInside=true;
				if (this.onMouseOver)
					this.onMouseOver();
				euEnv.exeThreadWhiteLoop=5;				
			};			
			
			this.mouseMove = function(x,y){
				var inside = isEuInside(this.div,x,y);
				var ret = (this.mouseX!=x || this.mouseY!=y) && inside;
				
				this.mouseX=x;
				this.mouseY=y;

				
				if (inside!=this.isInside){					
					this.isInside=inside;
					ret=true;
				}
								
				for (var i in this.iconsArray)
					ret|=this.iconsArray[i].isRunning();					
				return ret;
			};
			
			this.iconParams=new Array();
			this.setAllFrameStep = function(step){
				this.iconParams.frameStep=step;
				for (var i in this.iconsArray)
					this.iconsArray[i].frameStep=step;				
			};
			
			this.setAllZoomFunc = function(func){
				this.setAllZoomFuncW(func);
				this.setAllZoomFuncH(func);
			};		
			
			this.setAllZoomFuncW = function(func){
				this.iconParams.zoomFuncW=func;
				for (var i in this.iconsArray)
					this.iconsArray[i].zoomFuncW=func;
			};
			
			this.setAllZoomFuncH = function(func){
				this.iconParams.zoomFuncH=func;
				for (var i in this.iconsArray)
					this.iconsArray[i].zoomFuncH=func;	
			};
			
			this.setBar = function(args){
				var id = 'euDock_bar_'+euEnv.Kost.next(); 
				euEnv.euDockArray[id] = new euDockBar(id,this);
				euEnv.euDockArray[id].setElements(args);
				this.bar=euEnv.euDockArray[id];				
				return euEnv.euDockArray[id];				
			};
			
			this.addIcon = function(args,params){
				var id = 'euDock_icon_'+euEnv.Kost.next(); 
				euEnv.euDockArray[id] = new euDockIcon(id,this);
				euEnv.euDockArray[id].addElement(args);
				this.iconsArray.push(euEnv.euDockArray[id]);
				for (i in this.iconParams)
					euEnv.euDockArray[id][i]=this.iconParams[i];
				for (i in params)
					euEnv.euDockArray[id][i]=params[i];	
				return euEnv.euDockArray[id];				
			};
			
		};
/* 
 ****************************************
 ******    euDock Object          *******
 ******     (END)                 *******
 **************************************** 
 */
 
/* 
 ****************************************
 ******    euDock Icon Object     *******
 ******     (START)               *******
 **************************************** 
 */
		function euDockIcon(id,dock){
			this.id = id;			
			
			this.parentDock = dock;
			
			this.elementsArray;
			
			this.zoomFuncW=euLinear30;
			this.zoomFuncH=euLinear30;
			
			this.posX          = 0;
			this.posY          = 0;
			this.width         = 0;
			this.height        = 0;
			this.frame         = 0;
			this.frameStep     = 0.5;
			this.fadingFrame   = 0;
			this.fadingStep    = 1;
			this.fadingType    = euTRANSPARENT;
			
			this.loaded        = false;
			this.runningFrame  = false;
			this.runningFading = false;
			
			this.updateDims = function(){
				if (!this.loaded)return;
				
				for (var i=0;i<this.elementsArray.length;i++)
					this.elementsArray[i].setProperties(this.posX,this.posY,this.getWidth(),this.getHeight());
			};
			
			this.updateFading = function(){
				if (!this.loaded)return;
				var stato = this.fadingFrame*(this.elementsArray.length-1);
				var prev  = Math.floor(stato);
				var next  = Math.ceil( stato);
				var fading=0;
				for (var i=0;i<this.elementsArray.length;i++){
					if (this.fadingType==euFIXED){
						if (i==next)
							fading=100-100*(i-stato);
						else if (i<next)
							fading=100;
						else
							fading=0;
					}else{
						if (i==next)
							fading=100-100*(i-stato);
						else if (i==prev){
							if (this.fadingType==euTRANSPARENT)
								fading=100-100*(stato-i);
							else
								fading=100;
						}else
							fading=0;
					}
					this.elementsArray[i].setFading(fading);
				}				
			};
			
			this.refresh = function(){
				this.updateDims();
				this.updateFading();
			};

			this.isAbsoluteInside = function(x,y){
				x-=this.getAbsolutePosX();
				y-=this.getAbsolutePosY();
				return x>0 && y>0 && x<this.getWidth() && y<this.getHeight();
			};			
						
			this.isInside = function(x,y){
				return this.isInsideX(x) && this.isInsideY(y);
			};
			
			this.isInsideX = function(x){			
				return 	(this.loaded && (this.posX<=x) && ((this.posX+this.getWidth())>=x));
			};
			
			this.isInsideY = function(y){
				return 	(this.loaded && (this.posY<=y) && ((this.posY+this.getHeight())>=y));
			};			
			
			this.retrieveLoadingDims = function(elem,num){
				if (elem.onLoadPrev)
					elem.onLoadPrev();
				if (num==0 && !this.loaded)
					this.setDim(elem.getWidth(),elem.getHeight());
				elem.loaded=true;				
				var ret=true;			
				for (var i in this.elementsArray)
					ret&=this.elementsArray[i].loaded
				this.loaded=ret;	
				if (this.loaded){
					this.parentDock.updateDims();					
					for (var i in this.elementsArray)
						this.elementsArray[i].show();
				}
				if (elem.onLoadNext)
					elem.onLoadNext();				
			};
			
			this.setPos = function(x,y){
				this.posX = x;
				this.posY = y;				
			};	
			
			this.setDim = function(w,h){
				if (this.width==0)
					this.width  = w;
				if (this.height==0)
					this.height = h;				
			};	
			
			this.getAbsolutePosX = function(){return euIdObjLeft(this.parentDock.div)+this.posX;};
			this.getAbsolutePosY = function(){return euIdObjTop(this.parentDock.div)+this.posY;};
			
			this.setPosX   = function(x) {this.posX=x;};
			this.setPosY   = function(y) {this.posY=y;};
			this.getWidth  = function()  {if (!this.loaded)return 0; return this.width*this.zoomFuncW(this.frame);};
			this.getHeight = function()  {if (!this.loaded)return 0; return this.height*this.zoomFuncH(this.frame);};		
			
			this.isRunning = function(){
				return this.runningFrame || this.runningFading;
			};
			
			this.setAllFrameTo = function(to){
				this.setFadingTo(to);
				this.setFrameTo(to) ;
				return this.isRunning();
			};
			
			this.setFadingTo = function(fadingTo){
				if (this.fadingFrame==fadingTo)
					this.runningFading = false;
				else{					
					if (this.fadingFrame>fadingTo)
						this.fadingFrame-=this.fadingStep;
					else
						this.fadingFrame+=this.fadingStep;
						
					this.runningFading = true;					
						
					if (Math.abs(this.fadingFrame-fadingTo)<this.fadingStep)
						this.fadingFrame=fadingTo;
				
					if (this.fadingFrame<0)
						this.fadingFrame = 0;
					if (this.fadingFrame>1)
						this.fadingFrame = 1;
				}
				return this.runningFading;
			};
			
			this.setFrameTo = function(frameTo){
				//frameTo=(Math.round(frameTo*100))/100;				
				if (this.frame==frameTo)
					this.runningFrame = false;
				else{
					this.runningFrame = true;
					
					this.frame+=(frameTo-this.frame)*this.frameStep;					
	
					if (Math.abs(this.frame-frameTo)<0.01)
							this.frame=frameTo;
				
					
					if (this.frame<0)
						this.frame = 0;
					if (this.frame>1)
						this.frame = 1;				
				}
				return this.runningFrame;
			};
			
			this.addElement = function(args){				
				if (typeof(args)!="undefined" && args!=null){
					this.elementsArray=new Array();
					this.fadingStep = 0.5/args.length;

					for (var i=0;i<args.length;i++)
						for (var ii in args[i]){
							var id = "euDock_"+ii+"_"+euEnv.Kost.next();
							euEnv.euDockArray[id]= new window[ii](id,args[i][ii],this.parentDock.div,"euEnv.euDockArray."+this.id+".retrieveLoadingDims(euEnv.euDockArray."+id+","+i+");");
							this.elementsArray.push(euEnv.euDockArray[id]);
							euEnv.euDockArray[id].loaded=false;							
						}
				}
			};
			
			this.mouseClick = function(x,y){
				if (this.isAbsoluteInside(x,y)){
					if (this.link)					
						document.location.href=this.link;
					else if (this.mouseInsideClick)
						this.mouseInsideClick(x,y);						
				}
			};
			
		};
/* 
 ****************************************
 ******    euDock Icon Object     *******
 ******     (END)                 *******
 **************************************** 
 */
 
 /* 
 ****************************************
 ******    euDock Bar Object     *******
 ******     (START)               *******
 **************************************** 
 */
		function euDockBar(id,dock){
			this.id = id;
			
			this.parentDock = dock;
			
			this.elementsArray=new Array();
			
			this.len=0;
			this.align=euUP;
			
			this.loaded = false;
			
			this.getSize = function(){
				if (!this.loaded)
					return 0;				
				if (this.align==euUP || this.align==euDOWN)				
					return this.elementsArray.left.getHeight();
				else
					return this.elementsArray.top.getWidth();
			};
			
			this.refresh = function(){
				if (!this.loaded)
					return;			
				if (this.align==euUP || this.align==euDOWN){
					this.elementsArray.left.setPos(-this.elementsArray.left.getWidth(),0);
					this.elementsArray.horizontal.setProperties(0,0,Math.round(this.len),this.getSize());
					this.elementsArray.right.setPos(Math.round(this.len),0);
					this.elementsArray.left.show();
					this.elementsArray.horizontal.show();
					this.elementsArray.right.show();
					if (this.elementsArray.top)
						this.elementsArray.top.hide();
					if (this.elementsArray.bottom)
						this.elementsArray.bottom.hide();
					if (this.elementsArray.vertical){
						this.elementsArray.vertical.setProperties(0,0,0,0);
						this.elementsArray.vertical.hide();
					}
				}else{
					this.elementsArray.top.setPos(0,-this.elementsArray.top.getHeight());
					this.elementsArray.vertical.setProperties(0,0,this.getSize(),Math.round(this.len));
					this.elementsArray.bottom.setPos(0,Math.round(this.len));
					this.elementsArray.top.show();
					this.elementsArray.vertical.show();
					this.elementsArray.bottom.show();
					if (this.elementsArray.left)
						this.elementsArray.left.hide();
					if (this.elementsArray.right)
						this.elementsArray.right.hide();
					if (this.elementsArray.horizontal){
						this.elementsArray.horizontal.setProperties(0,0,0,0);
						this.elementsArray.horizontal.hide();
					}
				}				
					
			};
			
			this.setProperties = function(len,align){				
				this.len=len+1;
				this.align=align;
				this.refresh();
			};
			
			this.retrieveLoadingDims = function(elem){
				if (elem.onLoadPrev)
					elem.onLoadPrev();
				elem.loaded=true;				
				var ret=true;			
				for (var i in this.elementsArray)
					ret&=this.elementsArray[i].loaded
				this.loaded=ret;	
				if (this.loaded){
					this.parentDock.updateDims();					
					for (var i in this.elementsArray)
						this.elementsArray[i].show();
				}
				if (elem.onLoadNext)
					elem.onLoadNext();
			};
			
			this.setElements = function(args){
				if (typeof(args)!="undefined" && args!=null){
					for (var i in args)
						for (var ii in args[i]){
							var id = "euDock_"+ii+"_"+euEnv.Kost.next();
							//if (this.elementsArray[i]){
							//	this.elementsArray[i].hide();
							//	euEnv.euDockArray[this.elementsArray[i].id]=null;
							//}
							euEnv.euDockArray[id]=new window[ii](id,args[i][ii],this.parentDock.divBar,"euEnv.euDockArray."+this.id+".retrieveLoadingDims(euEnv.euDockArray."+id+");");
							this.elementsArray[i]=euEnv.euDockArray[id];
							euEnv.euDockArray[id].loaded=false;
						}
				}				
			};
		};
/* 
 ****************************************
 ******    euDock Bar Object      *******
 ******     (END)                 *******
 **************************************** 
 */
function euThread(){
	euDimensioni();
	offsEut();
    euEnv.timeout=window.setTimeout("euThread();",euEnv.refreshTime);
    
    euEnv.exeThread = false;
    if (euEnv.mouseMoved)
		for (var i in euEnv.euDockArray)
			if (euEnv.euDockArray[i].mouseMove)
				euEnv.exeThread |= euEnv.euDockArray[i].mouseMove(euEnv.euScrOfX+euEnv.x,euEnv.euScrOfY+euEnv.y);
	euEnv.mouseMoved=false;			
	if (euEnv.exeThread)
		euEnv.exeThreadWhiteLoop=5;    
  
    if(euEnv.exeThreadWhiteLoop>0)
    	euKernel();    	
		
	for (var i in euEnv.euDockArray)
		if (euEnv.euDockArray[i].riposition)
			euEnv.euDockArray[i].riposition();    	
};

function euKernel(){
	euEnv.exeThread = false;
	for (var i in euEnv.euDockArray)
		if (euEnv.euDockArray[i].kernel)
			euEnv.exeThread |= euEnv.euDockArray[i].kernel();

	if (euEnv.exeThread)
		euEnv.exeThreadWhiteLoop=5;
	else
		euEnv.exeThreadWhiteLoop--;					
}; 

function on_MouseMove(e) {	
	if (!e) var e = window.event;
	euEnv.x = e.clientX;
	euEnv.y = e.clientY;
	euEnv.mouseMoved = true;
	if (euEnv.onmousemoveBK)
		return euEnv.onmousemoveBK(e);
	return true;
};

function on_MouseDown(e) {
	if (!e) var e = window.event;	
	for (var i in euEnv.euDockArray)
		if (euEnv.euDockArray[i].mouseDown)
			euEnv.exeThread |= euEnv.euDockArray[i].mouseDown(euEnv.euScrOfX+e.clientX,euEnv.euScrOfY+e.clientY);
	if (euEnv.onmousedownBK)
		return euEnv.onmousedownBK(e);
	return true;
};

function on_MouseUp(e) {
	if (!e) var e = window.event;	
	for (var i in euEnv.euDockArray)
		if (euEnv.euDockArray[i].mouseUp)
			euEnv.exeThread |= euEnv.euDockArray[i].mouseUp(euEnv.euScrOfX+e.clientX,euEnv.euScrOfY+e.clientY);
	if (euEnv.onmouseupBK)
		return euEnv.onmouseupBK(e);
	return true;
};

function on_MouseClick(e) {
	if (!e) var e = window.event;
	for (var i in euEnv.euDockArray)
		if (euEnv.euDockArray[i].mouseClick)
			euEnv.exeThread |= euEnv.euDockArray[i].mouseClick(euEnv.euScrOfX+e.clientX,euEnv.euScrOfY+e.clientY);
	if (euEnv.onclickBK)
		return euEnv.onclickBK(e);
	return true;
};

if (document.onmousemove)
	euEnv.onmousemoveBK = document.onmousemove;
document.onmousemove  = on_MouseMove;

if (document.onmousedown)
	euEnv.onmousedownBK = document.onmousedown;
document.onmousedown  = on_MouseDown;

if (document.onmouseup)
	euEnv.onmouseupBK = document.onmouseup;
document.onmouseup    = on_MouseUp;

if (document.onclick)
	euEnv.onclickBK = document.onclick;
document.onclick      = on_MouseClick;

euDimensioni();
offsEut();
euThread();
