// JScript source code

var __startTime = new Date();

///////////////////
// UTILITY:JSOUT //

// MEMBERS:STATIC

// METHODS:STATIC
// +Ctor()
// +RegAlign(:int, :int, :int)::string

///////////////////

JSOut.defBase = 16;
JSOut.BaseChars = new String("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");


// STATIC:METHOD:JSOUT:CTOR
function JSOut()
{
	return false;
}

// STATIC:METHOD:JSOUT:REGALIGN
JSOut.RegAlign = function(num, regs, base)
{
	// DbgControl depends on this utility, thus only low-level tracing here
	if ((arguments.length > 1) && (parseInt(num) >= 0) && (parseInt(regs) > 0))
	{
		// maximum base can only be (JSOut.BaseChars.length - 1) so far // but does anyone really need more than that?
		base = (!isNaN(base) && base && (base < JSOut.BaseChars.length)) ? base : JSOut.defBase;
		var div = num/base;
		var whole = Math.floor(div);
		var part = (div - whole)*base;
		var left = JSOut.RegAlign(whole, (regs - 1), base);
		// only low-level tracing you know
		//alert("num = " + num + "\nregs = " + regs + "\nbase = " + base + "\nwhole = " + whole + "\npart = " + part + "\nleft: " + left);
		return left + JSOut.BaseChars.charAt(part);
	}
	return "";
}

/////////////////////////
// UTILITY:HOSTBROWSER //

// MEMERS:STATIC:
// +browserType:num

// MEHTODS:STATIC:
// +Determine()::int

/////////////////////////

// STATIC:MEHTOD:HOSTBROWSER:CTOR
function HostBrowser()
{
	return false;
}

HostBrowser.Determine = function()
{
	// types are defined as following:
	// 0 - IE 5.5+
	// 1 - Firefox 1+
	// 2 - NS 4.7+
	// 3 - Opera 8+
	// 4 - those others i don't care about
	if (navigator.userAgent.indexOf("Firefox") != -1)
	{
		var versionindex = navigator.userAgent.indexOf("Firefox") + 8;
		if (parseInt(navigator.userAgent.charAt(versionindex)) >= 1)
			return 1;
	}
	else if ((navigator.appName == "Netscape") && (parseFloat(navigator.appVersion) >= 4.7))
		return 2;
	else if (navigator.userAgent.indexOf("Opera") != -1)
	{
		var versionindex = navigator.userAgent.indexOf("Opera") + 6;
		if (parseInt(navigator.userAgent.charAt(versionindex)) >= 8)
			return 3;
	}
	else if (navigator.appVersion.indexOf("MSIE") != -1)
	{
		temp = navigator.appVersion.split("MSIE")
		version = parseFloat(temp[1])
		if (version >= 5.5)
			return 0;
	}
	return 4;
}

HostBrowser.CreateElement = function(tag, attrs)
{
	if (HostBrowser.browserType == 0)
	{
		var createStr = "<" + tag;
		if (attrs && attrs.length)
		{
			for (var i = 0; i < attrs.length; i++)
				createStr += " " + attrs[i] + "=" + attrs[++i];
		}
		createStr += ">";
		var domNode = document.createElement(createStr);
	}
	else
	{
		var domNode = document.createElement(tag);
		if (attrs && attrs.length)
		{
			for (var i = 0; i < attrs.length; i++)
				domNode.setAttribute(attrs[i], attrs[++i]);
		}
	}
	return domNode;
}

HostBrowser.CreateText = function(value)
{
	if (HostBrowser.browserType == 0)
	{
		var domNode = document.createTextNode(value);
	}
	else
	{
		return null;
	}
	return domNode;
}

HostBrowser.CreateIFrame = function(id, url, attrs)
{
	if (!document.createElement)
	{
		alert("!document.createElement");
		return null;
	}
	var IFrameDoc;
	//var URL = 'server.html';
	try
	{
		var tempIFrame=document.createElement('iframe');
		tempIFrame.setAttribute('id', id);
		tempIFrame.setAttribute('name', id);
		tempIFrame.style.border='0px';
		tempIFrame.style.width='0px';
		tempIFrame.style.height='0px';
		IFrameObj = document.body.appendChild(tempIFrame);
		alert(document.frames[id].id);

		if (document.frames)
		{
			// this is for IE5 Mac, because it will only
			// allow access to the document object
			// of the IFrame if we access it through
			// the document.frames array
			//alert(document.frames['factoryframe'].location);
			IFrameObj = document.frames[id];
		}
	}
	catch(exception)
	{
		// This is for IE5 PC, which does not allow dynamic creation
		// and manipulation of an iframe object. Instead, we'll fake
		// it up by creating our own objects.
		alert("BREAKPOINT:INNERHTML");
		iframeHTML='<iframe id="' + id +'" name="' + id + '" style="';
		iframeHTML+='border:0px;';
		iframeHTML+='width:0px;';
		iframeHTML+='height:0px;';
		iframeHTML+='"><\/iframe>';
		document.body.innerHTML+=iframeHTML;
		IFrameObj = new Object();
		IFrameObj.document = new Object();
		IFrameObj.document.location = new Object();
		IFrameObj.document.location.iframe = document.getElementById(id);
		IFrameObj.document.location.replace = function(location)
		{
			this.iframe.src = location;
		}
	}

	//alert(IFrameObj)

	if (IFrameObj.contentDocument)
	{
		// For NS6
		IFrameDoc = IFrameObj.contentDocument;
	}
	else if (IFrameObj.contentWindow)
	{
		// For IE5.5 and IE6
		IFrameDoc = IFrameObj.contentWindow.document;
	}
	else if (IFrameObj.document)
	{
		// For IE5
		IFrameDoc = IFrameObj.document;
	}
	else
	{
		alert("EXCEPTION:BREAKPOINT");
		return null;
	}

	IFrameDoc.location.replace(url);
	return IFrameObj;
}

HostBrowser.CloneElement = function(source_element, depth)
{
	if (source_element && source_element.cloneNode)
	{
		var depth = depth ? true : false;
		return source_element.cloneNode(depth);
	}
	return false;
}

// STATIC:MEMBER:HOSTBROWSER:BROWSERTYPE
HostBrowser.browserType = HostBrowser.Determine();
//alert("HOSTBROWSER:BROWSERTYPE:" + HostBrowser.browserType);
