// -------------------------------------------------------------------
// DHTML Window Widget- By Dynamic Drive, available at: http://www.dynamicdrive.com
// v1.0: Script created Feb 15th, 07'
// v1.01: Feb 21th, 07' (see changelog.txt)
// v1.02: March 26th, 07' (see changelog.txt)
// v1.03: May 5th, 07' (see changelog.txt)
// v1.1:  Oct 29th, 07' (see changelog.txt)
// -------------------------------------------------------------------

var dhtmlwindow={
imagefiles:['windowfiles/min.gif', 'windowfiles/close.gif', 'windowfiles/restore.gif', 'windowfiles/resize.gif'], //Path to 4 images used by script, in that order
ajaxbustcache: true, //Bust caching when fetching a file via Ajax?
ajaxloadinghtml: '<b>Loading Page. Please wait...</b>', //HTML to show while window fetches Ajax Content?

minimizeorder: 0,
zIndexvalue:100,
tobjects: [], //object to contain references to dhtml window divs, for cleanup purposes
lastactivet: {}, //reference to last active DHTML window

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"></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>'

  _proxy_jslib_assign('', domwindow, 'innerHTML', '=', (domwindowdata))

  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)("dhtmlwindowholder").appendChild(domwindow)

  

 var t= _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(t)
	var divs= _proxy_jslib_handle(t, 'getElementsByTagName', '', 1, 0)("div")
	for (var i=0; i<divs.length; i++){ //go through divs inside dhtml window and extract all those with class="drag-" prefix
		if (/drag-/.test( _proxy_jslib_handle(divs, (i), 0, 0).className))
			 _proxy_jslib_assign('', t, ( _proxy_jslib_handle( _proxy_jslib_handle(divs, (i), 0, 0).className, 'replace', '', 1, 0)(/drag-/, "")), '=', ( _proxy_jslib_handle(divs, (i), 0, 0)  

 ))}
	//t.style.zIndex=this.zIndexvalue //set z-index of this dhtml window
	t.handle._parent=t  

 t.resizearea._parent=t  

 t.controls._parent=t  

 t.onclose=function() {return true} //custom event handler "onclose"
	t.onmousedown=function() {dhtmlwindow.setfocus(this)} //Increase z-index of window when focus is on it
	t.handle.onmousedown=dhtmlwindow.setupdrag  

 t.resizearea.onmousedown=dhtmlwindow.setupdrag  

 t.controls.onclick=dhtmlwindow.enablecontrols

 t.show=function() {dhtmlwindow.show(this)} //public function for showing dhtml window
	t.hide=function() {dhtmlwindow.hide(this)} //public function for hiding dhtml window
	 _proxy_jslib_assign('', t, 'close', '=', (function() { _proxy_jslib_handle(dhtmlwindow, 'close', '', 1, 0)(this)}))  

 t.setSize=function(w, h) {dhtmlwindow.setSize(this, w, h)} //public function for setting window dimensions
	t.moveTo=function(x, y) {dhtmlwindow.moveTo(this, x, y)} //public function for moving dhtml window (relative to viewpoint)
	t.isResize=function(bol) {dhtmlwindow.isResize(this, bol)} //public function for specifying if window is resizable
	t.isScrolling=function(bol) {dhtmlwindow.isScrolling(this, bol)} //public function for specifying if window content contains scrollbars
	 _proxy_jslib_assign('', t, 'load', '=', (function(contenttype, contentsource, title) { _proxy_jslib_handle(dhtmlwindow, 'load', '', 1, 0)(this, contenttype, contentsource, title)}))  

  _proxy_jslib_assign('', 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 ( _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(t)==null) //if window doesn't exist yet, create it
		t=this.init(t)  

 else
		t= _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(t)

 this.setfocus(t)

 t.setSize(getValue(("width")), (getValue("height")))  

 var xpos=getValue("center")? "middle" : getValue("left")  
	var ypos=getValue("center")? "middle" : getValue("top")  
	//t.moveTo(xpos, ypos) //Position window
	if (typeof recalonload!="undefined" && recalonload=="recal" && this.scroll_top==0){ //reposition window when page fully loads with updated window viewpoints?
		if (window.attachEvent && !window.opera) //In IE, add another 400 milisecs on page load (viewpoint properties may return 0 b4 then)
			this.addEvent(window, function() { _proxy_jslib_handle(null, 'setTimeout', setTimeout, 1, 0)(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)  

  _proxy_jslib_handle(t, 'load', '', 1, 0)(contenttype, contentsource, title)

 if (t.state=="minimized" && t.controls.firstChild.title=="Restore"){ //If window exists and is currently minimized?
		 _proxy_jslib_handle(t.controls.firstChild, 'setAttribute', '', 1, 0)("src", dhtmlwindow.imagefiles[0])  

  _proxy_jslib_handle(t.controls.firstChild, 'setAttribute', '', 1, 0)("title", "Minimize")

 t.state="fullview"  

 }
	return t

},

setSize:function(t, w, h) { //set window size (min is 150px wide by 100px tall)
	t.style.width=Math.max(parseInt(w), 150)+"px"

 t.contentarea.style.height=Math.max(parseInt(h), 100)+"px"

},

moveTo:function(t, x, y) { //move window. Position includes current viewpoint of document
	this.getviewpoint()  

 t.style.left=(x=="middle")? this.scroll_left+(this.docwidth-t.offsetWidth)/2+"px" : this.scroll_left+parseInt(x)+"px"

  _proxy_jslib_assign('', t.style, 'top', '=', ((y=="middle")? this.scroll_top+(this.docheight-t.offsetHeight)/2+"px" : this.scroll_top+parseInt(y)+"px"

))},

isResize:function(t, bol) { //show or hide resize inteface (part of the status bar)
	t.statusarea.style.display=(bol)? "block" : "none"

 t.resizeBool=(bol)? 1 : 0

},

isScrolling:function(t, bol) { //set whether loaded content contains scrollbars
	t.contentarea.style.overflow=(bol)? "auto" : "hidden"

},

load:function(t, contenttype, contentsource, title) { //loads content into window plus set its title (3 content types: "inline", "iframe", or "ajax")
	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")
		 _proxy_jslib_assign('', t.handle.firstChild, 'nodeValue', '=', (title))

 if (contenttype=="inline")
		 _proxy_jslib_assign('', t.contentarea, 'innerHTML', '=', (contentsource))

 else if (contenttype=="div"){
		var inlinedivref= _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(contentsource)
		 _proxy_jslib_assign('', t.contentarea, 'innerHTML', '=', ((inlinedivref.defaultHTML ||  _proxy_jslib_handle(inlinedivref, 'innerHTML', '', 0, 0))  ))

 if (!inlinedivref.defaultHTML)
			inlinedivref.defaultHTML= _proxy_jslib_handle(inlinedivref, 'innerHTML', '', 0, 0)  

  _proxy_jslib_assign('', inlinedivref, 'innerHTML', '=', (""  ))

 inlinedivref.style.display="none"  

 }
	else if (contenttype=="iframe"){
		t.contentarea.style.overflow="hidden"  

 if (!t.contentarea.firstChild || t.contentarea.firstChild.tagName!="IFRAME") //If iframe tag doesn't exist already, create it first
			 _proxy_jslib_assign('', t.contentarea, 'innerHTML', '=', ('<iframe src="" style="margin:0; padding:0; width:100%; height: 100%" name="_iframe-'+t.id+'"></iframe>'))

  _proxy_jslib_handle( _proxy_jslib_handle( _proxy_jslib_handle( _proxy_jslib_handle(window, 'frames', '', 0, 0), ("_iframe-"+t.id), 0, 0), 'location', '', 0, 0), 'replace', '', 1, 0)(contentsource)  

 }
	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=e.clientX  

 d.initmousey=e.clientY

 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"){ //if content of this window div is "iframe"
		t.style.backgroundColor="#F8F8F8"  

 t.contentarea.style.visibility="hidden"

 }
	document.onmousemove=d.getdistance  

 document.onmouseup=function() {
		if (t.contentarea.datatype=="iframe"){ //restore color and visibility of content div onmouseup
			t.contentarea.style.backgroundColor="white"

 t.contentarea.style.visibility="visible"

 }
		d.stop()

 }
	return false

},

getdistance:function(e) {
	var d=dhtmlwindow
	var etarget=d.etarget
	var e=window.event || e
	d.distancex=e.clientX-d.initmousex  

 d.distancey=e.clientY-d.initmousey

 if (etarget.className=="drag-handle") //if target element is "handle" div
		d.move(etarget._parent, e)

 else if (etarget.className=="drag-resizearea") //if target element is "resize" div
		d.resize(etarget._parent, e)

 return false  

},

getviewpoint:function() { //get window viewpoint numbers
	var ie=document.all && !window.opera
	var domclientWidth=document.documentElement && parseInt(document.documentElement.clientWidth) || 100000  
	this.standardbody=(document.compatMode=="CSS1Compat")? document.documentElement :  _proxy_jslib_handle(document, 'body', '', 0, 0)  

 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) { //remember certain attributes of the window when it's minimized or closed, such as dimensions, position on page
	this.getviewpoint()  

 t.lastx=parseInt((t.style.left || t.offsetLeft))-dhtmlwindow.scroll_left  

 t.lasty=parseInt(( _proxy_jslib_handle(t.style, 'top', '', 0, 0) || t.offsetTop))-dhtmlwindow.scroll_top

 t.lastwidth=parseInt(t.style.width)  

},

move:function(t, e) {
	t.style.left=dhtmlwindow.distancex+dhtmlwindow.initx+"px"

  _proxy_jslib_assign('', 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=window.event? window.event.srcElement : e.target  
	if (/Minimize/i.test(sourceobj.getAttribute("title"))) //if this is the "minimize" control
		d.minimize(sourceobj, this._parent)

 else if (/Restore/i.test(sourceobj.getAttribute("title"))) //if this is the "restore" control
		d.restore(sourceobj, this._parent)

 else if (/Close/i.test(sourceobj.getAttribute("title"))) //if this is the "close" control
		 _proxy_jslib_handle(d, 'close', '', 1, 0)(this._parent)

 return false

},

minimize:function(button, t) {
	dhtmlwindow.rememberattrs(t)

  _proxy_jslib_handle(button, 'setAttribute', '', 1, 0)("src", dhtmlwindow.imagefiles[2])

  _proxy_jslib_handle(button, 'setAttribute', '', 1, 0)("title", "Restore")

 t.state="minimized"  

 t.contentarea.style.display="none"

 t.statusarea.style.display="none"

 if (typeof t.minimizeorder=="undefined"){ //stack order of minmized window on screen relative to any other minimized windows
		dhtmlwindow.minimizeorder++ //increment order
		t.minimizeorder=dhtmlwindow.minimizeorder

 }
	t.style.left="10px"  

 t.style.width="200px"

 var windowspacing=t.minimizeorder*10  
	 _proxy_jslib_assign('', t.style, 'top', '=', (dhtmlwindow.scroll_top+dhtmlwindow.docheight-(t.handle.offsetHeight*t.minimizeorder)-windowspacing+"px"

))},

restore:function(button, t) {
	dhtmlwindow.getviewpoint()

  _proxy_jslib_handle(button, 'setAttribute', '', 1, 0)("src", dhtmlwindow.imagefiles[0])

  _proxy_jslib_handle(button, 'setAttribute', '', 1, 0)("title", "Minimize")

 t.state="fullview"  

 t.style.display="block"

 t.contentarea.style.display="block"

 if (t.resizeBool) //if this window is resizable, enable the resize icon
		t.statusarea.style.display="block"

 t.style.left=parseInt(t.lastx)+dhtmlwindow.scroll_left+"px"  

  _proxy_jslib_assign('', 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){ //In non IE browsers, all errors are caught, so just run the below
		var closewinbol=true

 }
	finally{ //In IE, not all errors are caught, so check if variable isn't defined in IE in those cases
		if (typeof closewinbol=="undefined"){
			alert("An error has occured somwhere inside your \"onclose\" event handler")

 var closewinbol=true

 }
	}
	if (closewinbol){ //if custom event handler function returns true
		if (t.state!="minimized") //if this window isn't currently minimized
			dhtmlwindow.rememberattrs(t)  

 if ( _proxy_jslib_handle( _proxy_jslib_handle(window, 'frames', '', 0, 0), ("_iframe-"+t.id), 0, 0)) //if this is an IFRAME DHTML window
			 _proxy_jslib_handle( _proxy_jslib_handle( _proxy_jslib_handle( _proxy_jslib_handle(window, 'frames', '', 0, 0), ("_iframe-"+t.id), 0, 0), 'location', '', 0, 0), 'replace', '', 1, 0)("about:blank")

 else
			 _proxy_jslib_assign('', t.contentarea, 'innerHTML', '=', (""))

 t.style.display="none"

 t.isClosed=true  

 }
	return closewinbol

},


setopacity:function(targetobject, value) { //Sets the opacity of targetobject based on the passed in value setting (0 to 1 and in between)
	if (!targetobject)
		return
	if (targetobject.filters && targetobject.filters[0]){ //IE syntax
		if (typeof targetobject.filters[0].opacity=="number") //IE6
			targetobject.filters[0].opacity= _proxy_jslib_handle(null, 'value', value, 0, 0)*100

 else //IE 5.5
			targetobject.style.filter="alpha(opacity="+ _proxy_jslib_handle(null, 'value', value, 0, 0)*100+")"

 }
	else if (typeof targetobject.style.MozOpacity!="undefined") //Old Mozilla syntax
		targetobject.style.MozOpacity= _proxy_jslib_handle(null, 'value', value, 0, 0)

 else if (typeof targetobject.style.opacity!="undefined") //Standard opacity syntax
		targetobject.style.opacity= _proxy_jslib_handle(null, 'value', value, 0, 0)

},

setfocus:function(t) { //Sets focus to the currently active window
	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) //If there exists previously stored information such as last x position on window attributes (meaning it's been minimized or closed)
		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) // if Mozilla, IE7, Safari etc
		page_request = new (XMLHttpRequest)()

 else if (window.ActiveXObject){ // if IE6 or below
		try {
		page_request = new (ActiveXObject)("Msxml2.XMLHTTP")

 } 
		catch (e){
			try{
			page_request = new (ActiveXObject)("Microsoft.XMLHTTP")

 }
			catch (e){}
		}
	}
	else
		return false

  _proxy_jslib_assign('', 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()

  _proxy_jslib_handle(page_request, 'open', '', 1, 0)('GET', url+bustcacheparameter, true)

 page_request.send(null)

},

ajax_loadpage:function(page_request, t) {
	if (page_request.readyState == 4 && (page_request.status==200 ||  _proxy_jslib_handle( _proxy_jslib_handle(window, 'location', '', 0, 0), 'href', '', 0, 0).indexOf("http")==-1)){
	 _proxy_jslib_assign('', t.contentarea, 'innerHTML', '=', (page_request.responseText

 ))}
},


stop:function() {
	dhtmlwindow.etarget=null  

 document.onmousemove=null

 document.onmouseup=null

},

addEvent:function(target, functionref, tasktype) { //assign a function to execute to an event handler (ie: onunload)
	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++){
		 _proxy_jslib_handle(dhtmlwindow.tobjects, (i), 0, 0).handle._parent= _proxy_jslib_handle(dhtmlwindow.tobjects, (i), 0, 0).resizearea._parent= _proxy_jslib_handle(dhtmlwindow.tobjects, (i), 0, 0).controls._parent=null

 }
	window.onload=null

}

} //End dhtmlwindow object

 _proxy_jslib_handle(document, 'write', '', 1, 0)('<div id="dhtmlwindowholder"><span style="display:none">.</span></div>')  

window.onunload=dhtmlwindow.cleanup

 ;
_proxy_jslib_flush_write_buffers() ;