function $fGet(id)
{
	var elem = document.getElementById(id);
	return elem;
}

function assert(id, string)
{
	var el = document.getElementById(id);
	if (!isDefined(el) || el.nodeType != 1) {
		document.write(string);
	} else {
		el.innerHTML = string;
	}
}

function isDefined(variable)
{
	return variable != null && variable != undefined
}

function Browser() {
	var ua = navigator.userAgent;
	
	this.ie = false;
	this.ie6 = false;
	this.ie7 = false;
	this.gecko = false;
	this.safari = false;
	
	if (ua.indexOf("MSIE") >= 0) {
		this.ie = true;
		if (ua.indexOf("MSIE 7") >= 0) {
			this.ie7 = true;
		}	
		if (ua.indexOf("MSIE 6") >= 0) {
			this.ie6 = true;
		}	
	} else if (ua.indexOf("WebKit") >= 0) {
		this.safari = true;
	} else if (ua.indexOf("Gecko") >= 0) {
		this.gecko = true;
	}
	
	this.theme = "basic";
	this.themePath = "themes/" + this.theme + "/";
}

function OS() {
	var os = navigator.appVersion;
	
	this.mac = false;
	this.win = false;
	this.linux = false;
	this.unix = false;
	
	if (os.indexOf("Win") >= 0) {
		this.win = true;
	} else if (os.indexOf("Mac") >= 0) {
		this.mac = true;
	} else if (os.indexOf("X11") >= 0) {
		this.unix = true;
	} else if (os.indexOf("Linux") >= 0) {
		this.linux = true;
	}

}

function getParentByClassName(child, className)
{
	var parent = null;
	while (child && !parent) {
		if (child.className == className)
			parent = child;
		else
			child = child.parentNode;
	}
	
	return parent;
}

function getElementsByClassName(parent, className, match)
{
	var elements = new Array(0);

	if (parent.nodeType == 1) {
		if (match != null && match != undefined && match) {
			var cname = parent.className != undefined ? parent.className : "";
			if (cname.indexOf(className) >= 0) {
				elements.push(parent);
			}
		} else {
			if (parent.className == className)
				elements.push(parent);
		}
	
		if (parent.hasChildNodes()) {
			var children = parent.childNodes;
			for (var i = 0; i < children.length; i++) {
				elements = elements.concat(getElementsByClassName(children[i], className, match));
			}
		}
	}
	return elements;
}

function getElementByClassName(parent, className, match)
{
	if (!parent || className == "")
		return null;
	
	if (match != null && match != undefined && match) {
		var cname = parent.className != undefined ? parent.className : "";
		if (cname.indexOf(className) >= 0) {
			return parent;
		}
	} else {
		if (parent.className == className)
			return parent;
	}
	
	var children = parent.childNodes;
	var node = null;
	var i = 0;
	
	while (!node && i < children.length) {
		node = getElementByClassName(children.item(i), className, match);
		i++;
	}
			
	return node;
}

function getCSSPropertyValue(className, property)
{
  	var className = "." +className;
   	
	if (browser.ie) {
		rules = document.styleSheets.item(0).rules;
	} else {
		rules = document.styleSheets.item(0).cssRules;
	}
	
	var value = "";
	var st = "";
		
	for (var i = 0; i < rules.length; i++) {
		st = rules.item(i).selectorText;
		
		if (st) {
			var tokens = st.split(',');
			
			for (var k = 0; k < tokens.length; k++) {
				if (strip(tokens[k], ' ') == className) {
					if (browser.ie) {
						value = rules.item(i).style.getAttribute(property);
					} else {
						value = rules.item(i).style.getPropertyValue(property);
					}
					k = tokens.length;
					i = rules.length;					
				}
			}
		}
   	}
   	
   	return value;
}

function strip(string, symbol) {
	var newstring = "";
	
	for (var i = 0; i < string.length; i++) {
		if (string.charAt(i) != symbol)
			newstring += string.charAt(i);
	}
	return newstring;
}

function getTextNode(aNode)
{
	if (!isDefined(aNode) || !aNode.hasChildNodes())
		return null;
	
	for (var child = aNode.firstChild; child; child = child.nextSibling) {
		if (child.nodeType == 3) {
			return child;
		}
	}	
	
	return null;
}

function Dashboard(parent) {
	this.parent = parent;
	this.widgets = new Array(0);
	this.add = dashboardAdd;
	this.remove = dashboardRemove;
	
	return this;
}

function dashboardAdd(object) {
	if (!this.widgets)
		return;
	
	var widget = null;
	
	for (var i in this.widgets) {
		if (this.widgets[i] == object) {

			widget = this.widgets[i];
			break;
		}
	}
	
	if (!widget)
		widget = this.widgets[this.widgets.push(object)];
		
	return widget;
}

function dashboardRemove(object) {
	if (!this.widgets)
		return;
	
	var widget = null;
	
	for (var i in this.widgets) {
		if (this.widgets[i] == object) {
			widget = this.widgets[i];
			break;
		}
	}
	
	if (widget)
		this.widgets.splice(i,1);
		
	return true;
}

var DAX_Global_disableDragging = false;
 
 function startDragObject(event)
 {
	
	if (DAX_Global_disableDragging) {
		DAX_Global_disableDragging = false;
		return false;
	}
 
 	var event = xpEvent(event, true);
 	Controller.dragObject = this;
 	
 	var x = 0;
	var y = 0;
	
	if (event.pageX || event.pageY) {
		x = event.pageX;
		y = event.pageY;
 	} else if (event.screenX || event.screenY) {
	    x = event.screenX;
	    y = event.screenY;
	}
	
	if (this.style.zIndex < 9000) {
		setStyle(this, "zIndex", ++WindowManager.maxZIndex);
	} else { 
		setStyle(this, "zIndex", ++WindowManager.maxZDashIndex);
	}
		
	this.offsetX = this.offsetLeft - x;
    this.offsetY = this.offsetTop - y;
    
    if (document.addEventListener) {
    	document.addEventListener("mousemove", draggingObject, true);
  	 	document.addEventListener("mouseup",   stopDragObject, true);
    } else {
       document.onmousemove = draggingObject;
 	   document.onmouseup   = stopDragObject;
    }
    
    if (this.ondragstart) {
    	this.ondragstart(event);
    }
 }
 
 function startDragOtherObject(event, object)
 {
 	var event = xpEvent(event, true);
 	Controller.dragObject = object;
 	
 	var x = 0;
	var y = 0;
	
	if (event.pageX || event.pageY) {
		x = event.pageX;
		y = event.pageY;
 	} else if (event.screenX || event.screenY) {
	    x = event.screenX;
	    y = event.screenY;
	}
	
	if (object.style.zIndex < 9000) {
		setStyle(object, "zIndex", ++WindowManager.maxZIndex);
	} else { 
		setStyle(object, "zIndex", ++WindowManager.maxZDashIndex);
	}
	object.offsetX = object.offsetLeft - x;
    object.offsetY = object.offsetTop - y;
    
    if (document.addEventListener) {
    	document.addEventListener("mousemove", draggingObject, true);
  	 	document.addEventListener("mouseup",   stopDragObject, true);
    } else {
       document.onmousemove = draggingObject;
 	   document.onmouseup   = stopDragObject;
    }
    
    if (object.ondragstart) {
    	object.ondragstart(event);
    }
 }

 function draggingObject(event)
 {
 	var event = xpEvent(event, true, true);
 	var object = Controller.dragObject;
 	
 	if (!object)
 		return;
 	
 	object.dragging = true;
 	
 	var x = 0;
	var y = 0;
	
	if (event.pageX || event.pageY) {
		x = event.pageX;
		y = event.pageY;
	} else if (event.screenX || event.screenY) {
		x = event.screenX;
		y = event.screenY;
	}
	
	object.style.left = (x+object.offsetX)+"px";
	object.style.top = (y+object.offsetY)+"px";
	
	if (object.ondragging) {
		object.ondragging(event);
	}
	
	return false;
 }
 
 function stopDragObject(event)
 {
 	if (!Controller.dragObject)
 		return;
 		
	if (document.removeEventListener) {
 		document.removeEventListener("mousemove", draggingObject, true);
	    document.removeEventListener("mouseup",   stopDragObject, true);
 	} else {
		document.onmousemove = null;
 		document.onmouseup   = null;	
    }
    
    if (Controller.dragObject.dragging && Controller.dragObject.ondragstop) {
    	Controller.dragObject.ondragstop(event);
    }
    
    Controller.dragObject.dragging = false;
    Controller.dragObject = null;
 }
 
function n2String(aNode)
{
	var tn = getTextNode(aNode);
	return isDefined(tn) ? new String(tn.nodeValue) : new String("");
}

function removeChildren(node)
{
	while(node.firstNode) {
		node.removeChild(firstNode);
	}
}

function getElementById(aNode, aElementId) {
	if (aNode.nodeType != 1)
		return null;
	
	if (aNode.id == aElementId)
		return aNode;
	
	var node = null;
	
	for (var child = aNode.firstChild; child; child = child.nextSibling) {
		node = getElementById(child, aElementId);
	}
	
	return node;
}

function getStyle(aHTMLElement, aStyle)
{
	var value = aHTMLElement.style[aStyle];
	if (!value) {
		if (document.defaultView && document.defaultView.getComputedStyle) {
			var css = document.defaultView.getComputedStyle(aHTMLElement, null);
			value = css ? css.getPropertyValue(aStyle) : null;
		} else if (aHTMLElement.currentStyle) {
			value = aHTMLElement.currentStyle[aStyle];
		}
	}

	return value;
}

function setStyle(aHTMLElement, aStyle, aValue)
{
	try {
		if (aStyle.toLowerCase() == "width" && browser.ie && false) {
			if ( (aValue.indexOf('px') != -1) || (!(isNaN(aValue))) ){

				aValue = parseFloat(aValue);

				paddingOffset = parseFloat(aHTMLElement.currentStyle.paddingLeft) + parseFloat(aHTMLElement.currentStyle.paddingRight);

				if (!(isNaN(paddingOffset))) {
					aValue = aValue + paddingOffset;
				}

				borderOffset = parseFloat(aHTMLElement.currentStyle.borderLeftWidth) + parseFloat(aHTMLElement.currentStyle.borderRightWidth);
				if (!(isNaN(borderOffset))) {
					aValue = aValue	+ borderOffset;
				}
			}
		} else if (aStyle.toLowerCase() == "height" && browser.ie && false) {
			if ( (aValue.indexOf('px') != -1) || (!(isNaN(aValue))) ){
		
			}
		}
		aHTMLElement.style[aStyle] = aValue;
	} catch (e) {
	}
}

function getMousePosition(aEvent)
{
	var x = 0;
	var y = 0;
	if (!aEvent) var aEvent = window.event;
	if (aEvent.pageX || aEvent.pageY){
		x = aEvent.pageX;
		y = aEvent.pageY;
	} 
	else if (aEvent.clientX || aEvent.clientY){
		x = aEvent.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		y = aEvent.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}	
	return { x : x, y : y};
}

function getObjectPosition(object)
{
	var px = 0;
	var py = 0;
	
	if (object.offsetParent) {
		for (var px = 0, py = 0; object.offsetParent; object = object.offsetParent) {
			px += object.offsetLeft;
			py += object.offsetTop;
		}
	} else {
		px = object.offsetLeft;
		py = object.offsetTop;
	}
	
    return { x : px, y : py  };
}

function xpEvent(aEvent, aCancel, aPreventDefault)
{
	var aCancel = isDefined(aCancel) ? aCancel : false;
	var aEvent = !aEvent ? window.event : aEvent;
	var aPreventDefault = isDefined(aPreventDefault) ? aPreventDefault : false;
	
	if (aCancel) {
		aEvent.cancelBubble = aCancel;
		
		if (aEvent.stopPropagation)
			aEvent.stopPropagation();
	}
	
	if (aPreventDefault) {
		if (aEvent.preventDefault)
			aEvent.preventDefault();
	}

	aEvent._target = isDefined(aEvent.target) ? aEvent.target : aEvent.srcElement;
	if (aEvent._target) {
		if (aEvent._target.nodeType == 3) // handle safari
			aEvent._target = aEvent._target.parentNode;
	}
	
	return aEvent;
}

function xpGetSize(aElement)
{
	if (getStyle(aElement, "display") != "none")
		return (browser.ie) ? { width: aElement.clientWidth, height: aElement.clientHeight} :
			{ width: aElement.offsetWidth, height: aElement.offsetHeight };
				
    var els = aElement.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    
    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = '';
    
    var originalWidth = aElement.clientWidth;
    var originalHeight = aElement.clientHeight;
    
    els.display = 'none';
    els.position = originalPosition;
    els.visibility = originalVisibility;
    
    return {width: originalWidth, height: originalHeight};
}

function getWindowHeight() {
	var windowHeight=0;
	if (typeof(window.innerHeight)=='number') {
		windowHeight=window.innerHeight;
	}
	else {
		if (document.documentElement&&
		document.documentElement.clientHeight) {
			windowHeight=
			document.documentElement.clientHeight;
		}
		else {
			if (document.body&&document.body.clientHeight) {
				windowHeight=document.body.clientHeight;
			}
		}
	}
	return windowHeight;
}

function getPosition(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function isArray(obj) {
	if (obj.constructor.toString().indexOf("Array") == -1)
		return false;
	else
		return true;
}

function findInArray (obj, value, fromIndex, useCaps, subStringSearch) {
	if (!useCaps)
		useCaps = false;
		
	if (fromIndex == null) {
		fromIndex = 0;
	} else if (fromIndex < 0) {
		fromIndex = Math.max(0, obj.length + fromIndex);
	}
	for (var i = fromIndex; i < obj.length; i++) {
		if (useCaps) {
			if (obj[i].toLowerCase() === value.toLowerCase())
				return i;
		} else if (subStringSearch) {
			if (obj[i].indexOf(value) != -1)
				return i;
		} else {
			if (obj[i] === value)
				return i;
		}
	}
	return -1;
}

function ReplaceString(sString, sReplaceThis, sWithThis) {
	if (sReplaceThis != "" && sReplaceThis != sWithThis) {
		var counter = 0;
		var start = 0;
		var before = "";
		var after = "";
		while (counter<sString.length) {
			start = sString.indexOf(sReplaceThis, counter);
			if (start == -1){
				break;
			} else {
				before = sString.substr(0, start);
				after = sString.substr(start + sReplaceThis.length, sString.length);
				sString = before + sWithThis + after;
				counter = before.length + sWithThis.length;
			}
		}
	}
	return sString;
} 

function EncodeString(aString) {
	var sReplaceThis = "%";
	var sWithThis = "&#x";
	var sString = escape(aString);
	
	if (sReplaceThis != "" && sReplaceThis != sWithThis) {
		var counter = 0;
		var start = 0;
		var before = "";
		var after = "";
		while (counter<sString.length) {
			start = sString.indexOf(sReplaceThis, counter);
			if (start == -1){
				break;
			} else {
				before = sString.substr(0, start);
				after = sString.substr(start + sReplaceThis.length + 2, sString.length);
				sString = before + sWithThis + sString.substr(start + sReplaceThis.length, 2) + ";" + after;
				counter = before.length + sWithThis.length + 3;
			}
		}
	}
	return escape(sString);
} 

function do_showDashboard(object, enabledragging)
{
	var blackout = $fGet('blackout');
	
	if (!blackout)
		return;
		
	if (!blackout.dashboard)
		blackout.dashboard = new Dashboard(blackout);
	
	if (object) {
		object.style.position = "absolute";
		blackout.dashboard.add(object);
		if (enabledragging==undefined)
			do_enableDragging(object);
		else
			switch(enabledragging) 
			{
				case "Full":
					do_enableDragging(object);	
					break;
				case "None":
					break;
				default:
					var borderobject = $fGet('top_dash'+enabledragging);
					setStyle(borderobject, "cursor", "move");
					borderobject.onmousedown = function(event) {
						startDragOtherObject(event, object);
					}
					var borderobject = $fGet('left_dash'+enabledragging);
					setStyle(borderobject, "cursor", "move");
					borderobject.onmousedown = function(event) {
						startDragOtherObject(event, object);
					}
					var borderobject = $fGet('right_dash'+enabledragging);
					setStyle(borderobject, "cursor", "move");
					borderobject.onmousedown = function(event) {
						startDragOtherObject(event, object);
					}
					var borderobject = $fGet('bottom_dash'+enabledragging);
					setStyle(borderobject, "cursor", "move");
					borderobject.onmousedown = function(event) {
						startDragOtherObject(event, object);
					}
					break;
				
			}
		
	}
	var zindextoapply = 9100;
	for (var i in blackout.dashboard.widgets) {

			switch (i)
			{
				case 'each':
					break;
				case 'eachSlice':
					break;
				case 'all':
					break;
				case 'any':
					break;
				case 'collect':
					break;
				case 'detect':
					break;
				case 'findAll':
					break;
				case 'grep':
					break;
				case 'include':
					break;
				case 'inGroupsOf':
					break;
				case 'inject':
					break;
				case 'invoke':
					break;
				case 'max':
					break;
				case 'min':
					break;
				case 'partition':
					break;
				case 'pluck':
					break;
				case 'reject':
					break;
				case 'sortBy':
					break;
				case 'toArray':
					break;
				case 'zip':
					break;
				case 'size':
					break;
				case 'inspect':
					break;
				case 'find':
					break;
				case 'select':
					break;
				case 'member':
					break;
				case 'entries':
					break;
				case '_reverse':
					break;
				case '_each':
					break;
				case 'clear':
					break;
				case 'first':
					break;
				case 'last':
					break;
				case 'compact':
					break;
				case 'flatten':
					break;
				case 'without':
					break;
				case 'reduce':
					break;
				case 'uniq':
					break;
				case 'clone':
					break;
				case 'toJSON':
					break;
				case 'call':
					break;
				case 'indexOf':
					break;
				case 'map':
					break;
				default :
					blackout.dashboard.widgets[i].style.display = "";
					blackout.dashboard.widgets[i].style.zIndex = zindextoapply+1;
			}
	}

	blackout.style.display = "block";
	blackout.style.left = "0px";
	blackout.style.zIndex = zindextoapply;
}

function do_hideDashboard(object)
{
	var blackout = $fGet('blackout');
	
	if (!blackout)
		return;
		
	if (blackout.dashboard) {
		for (var i in blackout.dashboard.widgets) {
			switch (i)
			{
				case 'each':
					break;
				case 'eachSlice':
					break;
				case 'all':
					break;
				case 'any':
					break;
				case 'collect':
					break;
				case 'detect':
					break;
				case 'findAll':
					break;
				case 'grep':
					break;
				case 'include':
					break;
				case 'inGroupsOf':
					break;
				case 'inject':
					break;
				case 'invoke':
					break;
				case 'max':
					break;
				case 'min':
					break;
				case 'partition':
					break;
				case 'pluck':
					break;
				case 'reject':
					break;
				case 'sortBy':
					break;
				case 'toArray':
					break;
				case 'zip':
					break;
				case 'size':
					break;
				case 'inspect':
					break;
				case 'find':
					break;
				case 'select':
					break;
				case 'member':
					break;
				case 'entries':
					break;
				case '_reverse':
					break;
				case '_each':
					break;
				case 'clear':
					break;
				case 'first':
					break;
				case 'last':
					break;
				case 'compact':
					break;
				case 'flatten':
					break;
				case 'without':
					break;
				case 'reduce':
					break;
				case 'uniq':
					break;
				case 'clone':
					break;
				case 'toJSON':
					break;
				case 'call':
					break;
				case 'indexOf':
					break;
				case 'map':
					break;
				default :
					blackout.dashboard.widgets[i].style.display = "none";
					blackout.dashboard.widgets[i].style.zIndex = "";
			}
		}
	}

	if (object) {
		if (blackout.dashboard) {
			blackout.dashboard.remove(object);
		}	
	}
	
	if (aSidebar)
		do_redrawSidebar();
		
	blackout.style.display = "none";
	blackout.style.zIndex = "";
}

function do_enableDragging(object)
{
	setStyle(object, "cursor", "move");
	object.onmousedown = startDragObject;
}

function do_disableDragging(object)
{
	object.style.cursor = "auto";
	object.onmousedown = null;
}
function WindowManager_createNewWindow()
{
	var newWindow = null;
	try {
		newWindow = new Window();
   	} catch(e) {alert(e.description + e.message + e.number + e.name);}
   	return newWindow;
};

function WindowManager_insertWindow(aWindow)
{
	for (var i = 0; i < this.windows.length; i++) {
		if (this.windows[i] == aWindow) {
			return this.windows[i];
		}
	}
	if (!this.windowTarget)
		this.windowTarget = new WindowTarget();
		
	var target = this.windowTarget.area;
	target.insertBefore(aWindow.dom, null);
	return this.windows.push(aWindow);
};

function WindowManager_destroyWindow(aWindow)
{
	if (this.active == aWindow) {
		WindowManager.active = null;
	}
	var windowindex = -1;
	for (var i = 0; i < WindowManager.windows.length; i++)
		if (WindowManager.windows[i] == aWindow)
			windowindex = i;

	aWindow.close();
	WindowManager.windowTarget.area.removeChild(aWindow.dom);		
	if (windowindex > -1) {
		WindowManager.windows[windowindex] = null;
		WindowManager.windows.splice(windowindex, 1);			
	}
};

function WindowManager_hideWindow(aWindow)
{
	if (this.active == aWindow) {
		WindowManager.active = null;
	}
	do_accordion(aWindow.dom, 'top')
	setStyle(aWindow.dom,'display','none');
};

function WindowManager_redraw()
{
	var winObj;
	for (var i = 0; i < this.windows.length; i++) {
		winObj = this.windows[i];
		winObj.size(winObj.dom.offsetWidth, winObj.dom.offsetHeight);
	}
};

function WindowManager()
{
	this.active = null;
	this.maxZIndex = 0;
	this.maxZDashIndex = 9110;
	this.windowTarget = null;
	this.windows = new Array();
	this.scroll = null;	
	this.createNewWindow = WindowManager_createNewWindow;
	this.insertWindow = WindowManager_insertWindow;
	this.destroyWindow = WindowManager_destroyWindow;
	this.hideWindow = WindowManager_hideWindow;	
	this.redraw = WindowManager_redraw;
	return this;
}


var WindowManager = new WindowManager();
var browser = new Browser();
var os = new OS();
var itemfrom = 0;
var itemto = 0;
var labeledit = false;
var editedobject = 0;
var userlanguage = "";
var dax_uniqueId = 0;

var taskbar;
var aSidebar;
var STR = STR_EN;

var Controller = {

	focusedObject : null,
	setFocused : function(aObject)
	{
		if (aObject != this.focusedObject) {
			Controller.blur(this.focusedObject);
		}
		
		this.focusedObject = aObject;
	},
	focus : function(aObject)
	{
		this.setFocused(aObject);

	},
	blur : function(aObject)
	{
		if (this.focusedObject && this.focusedObject.blur)
			try {
				this.focusedObject.blur();
			} catch (e) { };

		this.focusedObject = null;
	},
		
	lockedRecords : new Array(),
	recordHash : function(tableId, recordId)
	{
		return tableId+"_"+recordId;
	},
	isLocked : function(tableId, recordId)
	{
		var hash = this.recordHash(tableId, recordId);
		return isDefined(this.lockedRecords[hash]) ? this.lockedRecords[hash] : false;
	},
	lockRecord : function(tableId, recordId)
	{
		this.lockedRecords[this.recordHash(tableId, recordId)] = true;
	},
	unlockRecord : function(tableId, recordId)
	{
		this.lockedRecords[this.recordHash(tableId, recordId)] = false;
	},
	
	uploading : false,
	uploads : new Array(), 	
	enqueue : function(aObject)
	{
		this.uploads.push(aObject);
		debugAlert('this.uploading = ' + this.uploading);
		debugAlert("!this.uploading");
		this.upload();
		debugAlert('uploaded');
		debugAlert('else');
	},
	dequeue : function()
	{
		return this.uploads.shift();
	},
	upload : function()
	{
		if (this.uploads.length <= 0){
			debugAlert('this.uploads.length <=0');
			return;
		}
		if (!this.uploading && this.isUploadReady()) {
			this.uploading = true;
			var object = this.dequeue();
			object.upload();
		} else {
			var controller = this;
			setTimeout(function() { controller.upload(); }, 15); 
		}
	},
	isUploadReady : function()
	{
		var upload = frames['upload'].document;
		debugAlert('.isUploadReady, upload= ' + upload);
		var state = upload.getElementById("state");
		debugAlert('.isUploadReady, state= ' + state);
		var uploadReply = state ? state.className == "ready" : false;
		if (((!state) & (!this.reloading) & (upload.location.pathname != "/dax/js/templates/upload.html")) | ((upload.getElementById("error")) & (upload.location.pathname != "/DAX/UploadBinary"))) {
			upload.location.href = "dax/js/templates/upload.html?random="+Math.random();
			this.reloading = true;
		}
		else
			if (state)
				this.reloading = false;
		debugAlert ('.isUploadReady, reply=' + uploadReply);
		return uploadReply;
	}
};
document.onkeydown = function(aEvent)
{
	if (Controller.focusedObject && Controller.focusedObject.onkeydown) {
		Controller.focusedObject.onkeydown(aEvent);
	}
};
document.onkeypress = function(aEvent)
{
	if (Controller.focusedObject && Controller.focusedObject.onkeypress) {
		Controller.focusedObject.onkeypress(aEvent);
	}
};
document.onkeyup = function(aEvent)
{
	if (Controller.focusedObject && Controller.focusedObject.onkeyup) {
		Controller.focusedObject.onkeyup(aEvent);
	}
};
document.onclick = function(aEvent)
{
	Controller.blur();
}

