function Panel(pointer, name, pos,clipping, parentlayer, closeclipping)
{
    this.pointer = pointer;
    this.name = name;
    this.clipping = clipping;
    this.closeclipping = closeclipping || "0,0,0,0";
    

    this.propertypointer =  crossbrowser("propertypointer", name, parentlayer);  
    this.layerpointer = crossbrowser("layerpointer", name, parentlayer);

    //methods
    this.clipTo = panelClipTo;
    this.moveTo = panelMoveTo;
    this.close = new Function("eval(this.propertypointer).visibility = crossbrowser('off');");
    this.open = new Function("eval(this.propertypointer).visibility = crossbrowser('on');");
    this.setContent = panelSetContent;

}

function panelMoveTo(posx, posy)
{
	
    //if posx is an array
    if (posx.join) {
	var temppos = posx;
	posx = temppos[0];
	posy = temppos[1];
    }
 		
    eval(this.propertypointer).left = posx;
    eval(this.propertypointer).top = posy;
}


//method to change the panels clipping
function panelClipTo(top, right, bottom, left)
{

    //if top is an array
    if (top.length) {
	var tempclip = top;
	top = tempclip[0];
	right = tempclip[1];
	bottom = tempclip[2];
	left = tempclip[3];
    }

     //navigator syntax  
    if (document.layers)  {    
	eval(this.propertypointer).clip.top  = top;
	eval(this.propertypointer).clip.right  = right;    
	eval(this.propertypointer).clip.bottom  = bottom;
	eval(this.propertypointer).clip.left  = left; 
    } 
    //explorer and netscape 6 syntax  
    else if (document.all) {  
		
		eval(this.propertypointer).clip = "rect(" + top + "px " + right + "px " + bottom + "px " + left + "px)";  
    } 
	else {
		eval(this.propertypointer).clip = "rect(" + top + ", " + right + ", " + bottom + ", " + left + ")";  
//alert(this.propertypointer + ".clip = rect(" + top + ", " + right + ", " + bottom + ", " + left + ");");
}

    
}


//method changes the content of the layer
function panelSetContent(new_content)
{
   	
    if (document.layers){
	eval(this.layerpointer).open();
	eval(this.layerpointer).write(new_content);
	eval(this.layerpointer).close();
    }
    //explorer code
    else eval(this.layerpointer).innerHTML = new_content;

}




function EventPanel(object)
{
    object.mouseovercode = "";
    object.mouseupcode = ""; 
    object.mouseoutcode = "";
    object.mousedowncode = "";
    object.mousemovecode = "";

    object.trigger = false;
    object.over = false;

    eval(object.layerpointer + ".onmouseup = new Function('" + object.pointer + ".mouseUpHandler();');");
    eval(object.layerpointer + ".onmousedown = new Function('" + object.pointer + ".mouseDownHandler();');");
    
    if (document.layers) {
	eval(object.layerpointer + ".onmousemove = new Function('e', '" + object.pointer + ".mouseMoveHandler();" + object.pointer + ".mouseOverHandler();" + object.layerpointer + ".routeEvent(e)');");

	eval(object.layerpointer + ".captureEvents(Event.MOUSEMOVE)");
    }
    else {
	eval(object.layerpointer + ".onmousemove = new Function('e', '" + object.pointer + ".mouseMoveHandler();" + object.pointer + ".mouseOverHandler();');");
    }


    //eval("GlobalEvent.addMouseMoveCode('temp = " + object.pointer + "; if (temp.over) {temp.trigger=true; temp.over = false;} else if (temp.trigger) {temp.mouseOutHandler(); GlobalEvent.mouseEnterHandler(); temp.trigger=false;temp.enter=false;}')");

    //methods
    object.mouseMoveHandler = eventPanelMouseMoveHandler;
    object.mouseUpHandler = eventPanelMouseUpHandler;
    object.mouseOverHandler = eventPanelMouseOverHandler;
    object.mouseDownHandler = eventPanelMouseDownHandler;
    object.mouseOutHandler = eventPanelMouseOutHandler;
    object.addMouseOverCode = new Function("newcode", "this.mouseovercode += newcode + ';'");
    object.addMouseUpCode = new Function("newcode", "this.mouseupcode += newcode + ';'");
    object.addMouseOutCode = new Function("newcode", "this.mouseoutcode += newcode + ';'"); 
    object.addMouseDownCode = new Function("newcode", "this.mousedowncode += newcode + ';'"); 
    object.addMouseMoveCode = new Function("newcode", "this.mousemovecode += newcode + ';'"); 


}

function eventPanelMouseMoveHandler()
{

    eval(this.mousemovecode);
}

function eventPanelMouseOutHandler()
{
     eval(this.mouseoutcode);
}


function eventPanelMouseOverHandler()
{

    //if (!this.enter) {   
	eval(this.mouseovercode);
	this.enter = true;
	//}
    this.over = true;

}


function eventPanelMouseUpHandler()
{
    eval(this.mouseupcode); 
}

function eventPanelMouseDownHandler()
{
    eval(this.mousedowncode); 
}

function GlobalEvents(pointer)
{
    this.pointer = pointer;
    this.mousemovecode = "";
    this.mouseentercode = "";
    this.trigger = true;
    


    //eval("window.document.onmousemove = new Function('e', '" + this.pointer + ".mouseMoveHandler(); window.document.routeEvent(e);')");

   if (document.layers) {
	window.document.captureEvents(Event.MOUSEMOVE);
	
    } 

    //methods
    this.addMouseMoveCode = new Function("newcode", "this.mousemovecode += newcode + ';'");
    this.addMouseEnterCode = new Function("newcode", "this,mouseentercode += newcode + ';'");
    this.mouseMoveHandler = globalEventsMouseMoveHandler;
    this.mouseEnterHandler = globalEventsMouseEnterHandler;

}

function globalEventsMouseEnterHandler()
{
    eval(this.mouseentercode);
}


function globalEventsMouseMoveHandler()
{
    //window.status = "glob mousemove";
    eval(this.mousemovecode);

}




function crossbrowser(whichexpression)
{
	
    var returnpointer = "no appropriate pointer found"  //return value of this function
	    //navigator expressions
	    if (document.layers){
		
		switch (whichexpression){

		    case "layerpointer" :
		    returnpointer = "";
		    if (crossbrowser.arguments[2]) returnpointer = "document." + arguments[2] + ".";		    
		    returnpointer += "document." + crossbrowser.arguments[1] + ".document";
		    break;
		    //pointer to layerproperties
		    case "propertypointer" :
		    returnpointer = "";
		    if (crossbrowser.arguments[2]) returnpointer = "document." + arguments[2] + ".";
		    returnpointer += "document." + crossbrowser.arguments[1];
		    break;

		    case "windowsize" :
		    returnpointer = [window.innerWidth, window.innerHeight];
		    break;
	
		    case "on" :
		    returnpointer = "show";
		    break;
		    
		    case "off" :
		    returnpointer = "hide";

		    
		}
	    }

	//explorer expressions
	    else if (document.all) {
		switch (whichexpression){

		case "layerpointer" :
		    returnpointer = "document.all." + crossbrowser.arguments[1];
		    break;
		
		    //pointer to layerproperties
		    //crossbrowser.arguments[2] has to be the pointer to the frame in which the layer is
		case "propertypointer" :
		    returnpointer = crossbrowser.arguments[1] + ".style";
		    break;
				
	        case "windowsize" :
		    returnpointer = [document.body.clientWidth, document.body.clientHeight + 20];
		    break;
		case "on" :
		    returnpointer = "visible";
		    break;
		
		case "off" :
		    returnpointer = "hidden";
		    break;


		}
	    }

    //netscape 6
	    else
		{
		    switch (whichexpression){
			
		    case "layerpointer" :
			returnpointer = "document.getElementById('" + crossbrowser.arguments[1] + "')";
			break;
			
			//pointer to layerproperties
			//crossbrowser.arguments[2] has to be the pointer to the frame in which the layer is
		    case "propertypointer" :
			returnpointer = "document.getElementById('" + crossbrowser.arguments[1] + "').style";
			break;
			
		    case "windowsize" :
			returnpointer = [window.innerWidth, window.innerHeight];
			
			break;
		    case "on" :
			returnpointer = "visible";
			break;
			
		    case "off" :
			returnpointer = "hidden";
			break;
		    }		    
		}

	
    return returnpointer;
}


function SwapContent(pointer, whichpanel, whichcontent)
{
    this.pointer = pointer;
    this.PicPanel = whichpanel;
    this.whichcontent = whichcontent;

    //methods
    this.changeContent = swapContentChangeContent;
}


function swapContentChangeContent()
{
    this.PicPanel.setContent(this.whichcontent);
}


function WindowResizeEvent(pointer, reload)
{
    this.pointer = pointer;
    
    //nestcape
    if (document.layers) {
	window.captureEvents(Event.RESIZE);
    } 
		    
    eval("window.onresize = new Function('" + this.pointer + ".executeCode();')");


	
    this.resizecode = "";  
    if (reload) this.resizecode = "if (document.layers) window.location.reload();";
    
    //methoden 
    this.add = new Function("newcode", "this.resizecode += newcode + ';';");	 
    this.executeCode = new Function("eval(this.resizecode);");
		
}


function PanelSwap(pointer)
{
    this.pointer = pointer;

    //properties
    this.panelstore = new Array();
    this.count = 0;
    this.LastOpenPanel = false;

    //methods
    this.add = new Function("whichpanel", "this.panelstore[this.count] = whichpanel; this.count++");
    this.open = panelSwapOpen;
    this.clear = new Function("if (this.LastOpenPanel) {this.LastOpenPanel.close();this.LastOpenPanel = false;}");
}


//closes all panels in the textpanelsarray exept whichpanel
function panelSwapOpen(whichpanel)
{
  
    if (!this.LastOpenPanel) {
	this.LastOpenPanel = whichpanel;
	this.LastOpenPanel.open();
    }
    else if (this.LastOpenPanel != whichpanel) {
	 this.LastOpenPanel.close();
	this.LastOpenPanel = whichpanel;
	whichpanel.open();
    }
	
}



/*
    

function SmallSwapPanel(object, group)
{
	if (object) {
	    object.swappanel = true;
	    object.group = group || "default";

		
	    //SwapStore holds all the SmallSwapPanel instances
	    if (!SmallSwapPanel.swapstore) {	
		SmallSwapPanel.count = 1;
		SmallSwapPanel.swapstore = new Array();
		SmallSwapPanel.swapstore[0] = object;
	    }
	    else {
		SmallSwapPanel.swapstore[SmallSwapPanel.count] = object;
		SmallSwapPanel.count++;	
	    }
	}

	//static
	if (!SmallSwapPanel.LastOpenPanel) SmallSwapPanel.LastOpenPanel = false;

	
	
	//methods
	object.swapOpen = smallSwapPanelSwapOpen;
}


//closes all panels in the textpanelsarray beside whichone
function smallSwapPanelSwapOpen()
{
    panelarray = SmallSwapPanel.swapstore;


    if (!SmallSwapPanel.LastOpenPanel) {
	SmallSwapPanel.LastOpenPanel = this;
	SmallSwapPanel.LastOpenPanel.open();
    }
    else if (SmallSwapPanel.LastOpenPanel != this) {
	SmallSwapPanel.LastOpenPanel.close();
	SmallSwapPanel.LastOpenPanel = this;
	this.open();
    }
}
*/

//simple JavaScript Image Swap
function SwapImage(pointer, whichname, whichsrc, whichlayer)
{
    this.pointer = pointer;
    this.name = whichname;
    this.highsrc = whichsrc;
    this.layer = whichlayer;
    
    if ((this.layer) && (document.layers))this.imagepointer = eval(crossbrowser("propertypointer", this.layer) + ".document.images['" + this.name + "']");

    else this.imagepointer = document.images[this.name];
    this.lowsrc = this.imagepointer.src;
    this.swap = false;
    
    //preload
    this.image = new Image(); this.image.src = this.highsrc;
    
    //methods
    this.swapIt = swapImageSwapIt;
    
}

    
//changes Images source	
function swapImageSwapIt()
{
    if (!this.swap) {
	this.imagepointer.src = this.highsrc;
	this.swap = true;
    }
    else {
	this.imagepointer.src = this.lowsrc;
	this.swap = false;
    }

    return false;
}


function EmptyObject()
{
}



