xMousePos = 0;
yMousePos = 0;

function resetMouseMove(){
if ( document.layers ){document.captureEvents(Event.MOUSEMOVE);document.onmousemove = captureMousePosition;} 
else if (document.all){document.onmousemove = captureMousePosition;} 
else if (document.getElementById){document.onmousemove = captureMousePosition;}}

function captureMousePosition( e ) 
{
    	if ( document.layers ) 
	{
        	xMousePos = e.pageX;
        	yMousePos = e.pageY;
    	} 
	else if ( document.all ) 
	{
        	xMousePos = window.event.x + document.body.scrollLeft;
        	yMousePos = window.event.y + document.body.scrollTop;
    	} 
	else if ( document.getElementById ) 
	{
        	xMousePos = e.pageX;
        	yMousePos = e.pageY;
	}
}

var dhtmlwindow={

imagefiles:['../dhw/min.gif', '../dhw/close.gif', '../dhw/restore.gif', '../dhw/resize.gif'], 

ajaxbustcache: false, 
ajaxloadinghtml: '<b>Loading Page. Please wait...</b>',
minimizeorder: 0,
zIndexvalue:9000,
tobjects: [], 
lastactivet: {}, 

init:function( t )
{
	var domwindow = document.createElement("div"); 
	domwindow.id = t;
	domwindow.className="dhtmlwindow";

	var domwindowdata='';
	domwindowdata='<div class="drag-handle">';
	domwindowdata+='DHTML Window <div class="drag-controls"><img id="m" src="'+this.imagefiles[0]+'" title="Minimize" /><img src="'+this.imagefiles[1]+'" title="Close" /></div>';
	domwindowdata+='</div>';
	domwindowdata+='<div class="drag-contentarea"></div>';
	domwindowdata+='<div class="drag-statusarea"><div class="drag-resizearea" style="background: transparent url('+this.imagefiles[3]+') top right no-repeat;">&nbsp;</div></div>';
	domwindowdata+='</div>';

	domwindow.innerHTML = domwindowdata;

	document.getElementById("dhtmlwindowholder").appendChild( domwindow );
	var t = document.getElementById( t );

	var divs = t.getElementsByTagName("div");

	for ( var i = 0; i < divs.length; i++ )
	{ 
		if (/drag-/.test(divs[i].className))
			t[divs[i].className.replace(/drag-/, "")] = divs[i]; 
	}
	
	t.handle._parent = t; 
	t.resizearea._parent = t;
	t.controls._parent = t;
	t.onclose = function(){ return true };
	t.onmousedown = function(){ dhtmlwindow.setfocus( this ) };
	t.handle.onmousedown = dhtmlwindow.setupdrag; 
	t.resizearea.onmousedown = dhtmlwindow.setupdrag; 
	t.controls.onclick = dhtmlwindow.enablecontrols;
	t.show = function(){ dhtmlwindow.show(this) };
	t.hide = function(){ dhtmlwindow.hide(this) }; 
	t.close = function(){ dhtmlwindow.close(this) }; 
	t.setSize = function(w, h){ dhtmlwindow.setSize(this, w, h) }; 
	t.moveTo = function(x, y){ dhtmlwindow.moveTo(this, x, y) }; 
	t.isResize = function(bol){ dhtmlwindow.isResize(this, bol) }; 
	t.isScrolling = function(bol){ dhtmlwindow.isScrolling(this, bol) }; 
	t.load = function(contenttype, contentsource, title){ dhtmlwindow.load(this, contenttype, contentsource, title)}; 

	this.tobjects[this.tobjects.length] = t;
	return t;
},

open:function(t, contenttype, contentsource, title, attr, recalonload)
{
	var d = dhtmlwindow; 

	function getValue(Name)
	{
		var config = new RegExp(Name+"=([^,]+)", "i"); 
		return (config.test(attr))? parseInt(RegExp.$1) : 0;
	}

	if ( document.getElementById( t ) == null ) 
	{
		t = this.init( t );
	}
	else
	{
		t = document.getElementById( t );
	}

	this.setfocus( t );

	t.setSize(getValue(("width")), (getValue("height")));
 
	var xpos = getValue("center") ? "middle" : getValue("left");
	var ypos = getValue("center") ? "middle" : getValue("top");

	if ( typeof recalonload != "undefined" && recalonload == "recal" && this.scroll_top == 0 )
	{ 
		if ( window.attachEvent && !window.opera ) 
			this.addEvent(window, function(){ setTimeout(function(){ t.moveTo(xpos, ypos)}, 400) }, "load" );
		else
			this.addEvent(window, function(){ t.moveTo(xpos, ypos)}, "load" );
	}

	t.isResize( getValue("resize") );
	t.isScrolling( getValue("scrolling") );
	t.style.visibility = "visible";
	t.style.display = "block";
	t.contentarea.style.display = "block";
	t.moveTo( xpos, ypos );
	t.load( contenttype, contentsource, title );

	if ( t.state == "minimized" && t.controls.firstChild.title == "Restore")
	{ 
		t.controls.firstChild.setAttribute("src", dhtmlwindow.imagefiles[0]);
		t.controls.firstChild.setAttribute("title", "Minimize");
		t.state="fullview";
	}

	return t;
},

setSize:function(t, w, h)
{ 
	t.style.width=Math.max(parseInt(w), 150)+"px";
	t.contentarea.style.height=Math.max(parseInt(h), 100)+"px";
},

moveTo:function(t, x, y)
{
	this.getviewpoint();

	t.style.left = ( x == "middle" ) ? this.scroll_left+(this.docwidth-t.offsetWidth)/2+"px" : this.scroll_left+parseInt(x)+"px";
	t.style.top = ( y == "middle" ) ? this.scroll_top+(this.docheight-t.offsetHeight)/2+"px" : this.scroll_top+parseInt(y)+"px";
 
},

isResize:function(t, bol)
{
	t.statusarea.style.display=(bol)? "block" : "none";
	t.resizeBool=(bol)? 1 : 0;
},

isScrolling:function(t, bol)
{ 
	t.contentarea.style.overflow=(bol)? "auto" : "hidden";
},

load:function(t, contenttype, contentsource, title)
{ 
	if ( t.isClosed )
	{
		alert("DHTML Window has been closed, so no window to load contents into. Open/Create the window again.")
		return
	}

	var contenttype = contenttype.toLowerCase();

	if ( typeof title != "undefined" )
	{	
		t.handle.firstChild.nodeValue = title;
	}
	if ( contenttype == "inline" )
	{
		t.contentarea.innerHTML = contentsource;
	}
	else if ( contenttype == "div" )
	{
		var inlinedivref = document.getElementById(contentsource);

		t.contentarea.innerHTML = ( inlinedivref.defaultHTML || inlinedivref.innerHTML );

		if ( !inlinedivref.defaultHTML )
			inlinedivref.defaultHTML = inlinedivref.innerHTML;

		inlinedivref.innerHTML = "";
		inlinedivref.style.display = "none";
	}
	else if ( contenttype == "iframe" )
	{
		t.contentarea.style.overflow = "hidden";
		if (!t.contentarea.firstChild || t.contentarea.firstChild.tagName!="IFRAME") 
			t.contentarea.innerHTML='<iframe src="" style="margin:0; padding:0; width:100%; height: 100%" name="_iframe-'+t.id+'"></iframe>'
		window.frames["_iframe-"+t.id].location.replace(contentsource) //set location of iframe window to specified URL
	}
	else if (contenttype=="ajax")
	{
		this.ajax_connect(contentsource, t)
	}

	t.contentarea.datatype = contenttype 
},

setupdrag:function( e )
{
	var d = dhtmlwindow; 
	var t = this._parent;

	d.etarget = this;

	var e = window.event || e;	

	d.initmousex = xMousePos;
	d.initmousey = yMousePos;

	d.initx = parseInt( t.offsetLeft );
	d.inity = parseInt( t.offsetTop );
	d.width = parseInt( t.offsetWidth );
	d.contentheight = parseInt( t.contentarea.offsetHeight );

	if ( t.contentarea.datatype == "iframe" )
	{ 
		t.style.backgroundColor = "#F8F8F8";
		t.contentarea.style.visibility = "hidden";
	}

	document.onmousemove = d.getdistance; 
	document.onmouseup = function()
	{
		if ( t.contentarea.datatype == "iframe" )
		{
			t.contentarea.style.backgroundColor = "white";
			t.contentarea.style.visibility = "visible";
		}
		d.stop();
	}

	return false;
},

getdistance:function( e )
{
	captureMousePosition( e ); 

	var d = dhtmlwindow;
	var etarget = d.etarget;
	var e = window.event || e;

	d.distancex = xMousePos - d.initmousex;
	d.distancey = yMousePos - d.initmousey;

	if ( etarget.className == "drag-handle" )
	{	
		d.move( etarget._parent, e );
	}
	else if ( etarget.className == "drag-resizearea" )
	{
		d.resize( etarget._parent, e );
	}

	return false;
},

getviewpoint:function()
{ 
	var ie = document.all && !window.opera;
	var domclientWidth = document.documentElement && parseInt(document.documentElement.clientWidth) || 100000;

	this.standardbody = (document.compatMode == "CSS1Compat" ) ? document.documentElement : document.body;
	this.scroll_top = (ie) ? this.standardbody.scrollTop : window.pageYOffset;
	this.scroll_left = (ie) ? this.standardbody.scrollLeft : window.pageXOffset;
	this.docwidth = (ie) ? this.standardbody.clientWidth : (/Safari/i.test(navigator.userAgent))? window.innerWidth : Math.min(domclientWidth, window.innerWidth-16);
	this.docheight = (ie)? this.standardbody.clientHeight: window.innerHeight;
},

rememberattrs:function(t)
{ 
	this.getviewpoint();
	t.lastx=parseInt((t.style.left || t.offsetLeft))-dhtmlwindow.scroll_left;
	t.lasty=parseInt((t.style.top || t.offsetTop))-dhtmlwindow.scroll_top;
	t.lastwidth=parseInt(t.style.width);
},

move:function(t, e)
{
	t.style.left = dhtmlwindow.distancex + dhtmlwindow.initx + "px";
	t.style.top = dhtmlwindow.distancey + dhtmlwindow.inity + "px";
},

resize:function(t, e)
{
	t.style.width=Math.max(dhtmlwindow.width+dhtmlwindow.distancex, 150)+"px";
	t.contentarea.style.height=Math.max(dhtmlwindow.contentheight+dhtmlwindow.distancey, 100)+"px";
},

enablecontrols:function( e )
{
	var d = dhtmlwindow;
	var sourceobj = e ? e.target : window.event.srcElement; 

	if (/Minimize/i.test(sourceobj.getAttribute("title")))
		d.minimize(sourceobj, this._parent);
	else if (/Restore/i.test(sourceobj.getAttribute("title")))
		d.restore(sourceobj, this._parent);
	else if (/Close/i.test(sourceobj.getAttribute("title")))
		d.close(this._parent);

	return false;
},

minimize:function(button, t)
{
	dhtmlwindow.rememberattrs(t)
	button.setAttribute("src", dhtmlwindow.imagefiles[2])
	button.setAttribute("title", "Restore")
	t.state="minimized" 
	t.contentarea.style.display="none"
	t.statusarea.style.display="none"
	if (typeof t.minimizeorder=="undefined")
	{
		dhtmlwindow.minimizeorder++;
		t.minimizeorder = dhtmlwindow.minimizeorder;
	}
	t.style.left = "10px";
	t.style.width = "200px";
	var windowspacing = t.minimizeorder*10;
	t.style.top = dhtmlwindow.scroll_top+dhtmlwindow.docheight-(t.handle.offsetHeight*t.minimizeorder)-windowspacing+"px"
},

restore:function(button, t)
{
	dhtmlwindow.getviewpoint();
	button.setAttribute("src", dhtmlwindow.imagefiles[0]);
	button.setAttribute("title", "Minimize");

	t.state = "fullview";
	t.style.display = "block"
	t.contentarea.style.display = "block";

	if (t.resizeBool) 
		t.statusarea.style.display = "block";

	t.style.left = parseInt(t.lastx) + dhtmlwindow.scroll_left + "px";
	t.style.top = parseInt(t.lasty) + dhtmlwindow.scroll_top + "px";
	t.style.width = parseInt(t.lastwidth) + "px";
},

close:function( t )
{
	try
	{
		var closewinbol=t.onclose();
	}
	catch(err)
	{
		var closewinbol=true;
 	}
	finally
	{ 
		if ( typeof closewinbol == "undefined" )
		{
			alert("An error has occured somwhere inside your \"onclose\" event handler")
			var closewinbol = true;
		}
	}
	if ( closewinbol )
	{ 
		if (t.state!="minimized") 
			dhtmlwindow.rememberattrs(t) 
		if (window.frames["_iframe-"+t.id])
			window.frames["_iframe-"+t.id].location.replace("about:blank")
		else
			t.contentarea.innerHTML="";

		t.style.display="none";
		t.isClosed=true;
	}
	return closewinbol;
},


setopacity:function(targetobject, value)
{ 
	if (!targetobject)
		return

	if (targetobject.filters && targetobject.filters[0]){ //IE syntax
		if (typeof targetobject.filters[0].opacity=="number") //IE6
			targetobject.filters[0].opacity=value*100
		else //IE 5.5
			targetobject.style.filter="alpha(opacity="+value*100+")"
		}
	else if (typeof targetobject.style.MozOpacity!="undefined") //Old Mozilla syntax
		targetobject.style.MozOpacity=value
	else if (typeof targetobject.style.opacity!="undefined") //Standard opacity syntax
		targetobject.style.opacity=value
},

setfocus:function( t )
{
	this.zIndexvalue++;
	t.style.zIndex = this.zIndexvalue;
	t.isClosed = false;
	this.setopacity( this.lastactivet.handle, 0.5 );
	this.setopacity( t.handle, 1 );
	this.lastactivet = t;
},


show:function(t)
{
	if ( t.isClosed )
	{
		alert("DHTML Window has been closed, so nothing to show. Open/Create the window again.")
		return;
	}
	if ( t.lastx )
		dhtmlwindow.restore( t.controls.firstChild, t);
	else
		t.style.display="block";

	this.setfocus( t );
	t.state="fullview";
},

hide:function(t){t.style.display="none"},

ajax_connect:function(url, t){
	var page_request = false
	var bustcacheparameter=""
	if (window.XMLHttpRequest)
		page_request = new XMLHttpRequest()
	else if (window.ActiveXObject)
	{
		try {
		page_request = new ActiveXObject("Msxml2.XMLHTTP")
		} 
		catch (e){
			try{
			page_request = new ActiveXObject("Microsoft.XMLHTTP")
			}
			catch (e){}
		}
	}
	else
		return false
	t.contentarea.innerHTML=this.ajaxloadinghtml
	page_request.onreadystatechange=function(){dhtmlwindow.ajax_loadpage(page_request, t)}
	if (this.ajaxbustcache) //if bust caching of external page
		bustcacheparameter=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
	page_request.open('GET', url+bustcacheparameter, true)
	page_request.send(null)
},

ajax_loadpage:function(page_request, t){
	if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){
	t.contentarea.innerHTML=page_request.responseText
	}
},

stop:function(){dhtmlwindow.etarget=null;document.onmousemove=null;document.onmouseup=null;resetMouseMove();},

addEvent:function(target, functionref, tasktype)
{ 
	var tasktype = ( window.addEventListener ) ? tasktype : "on"+tasktype;

	if (target.addEventListener)
		target.addEventListener(tasktype, functionref, false);
	else if (target.attachEvent)
		target.attachEvent(tasktype, functionref);
},

cleanup:function(){

	for (var i=0; i<dhtmlwindow.tobjects.length; i++){
		dhtmlwindow.tobjects[i].handle._parent=dhtmlwindow.tobjects[i].resizearea._parent=dhtmlwindow.tobjects[i].controls._parent=null;
	}
	window.onload=null;
}
}

document.write('<div id="dhtmlwindowholder"><span style="display:none">.</span></div>');
window.onunload = dhtmlwindow.cleanup;
resetMouseMove();
