// ==============================================================================================================================
// Class DOM1
// ==============================================================================================================================
function DOM1 () {
	this.construct();
}

//-----------------------------------------------------------------
// Method DOM1.construct()
//-----------------------------------------------------------------
DOM1.prototype.construct = function () {
}

//-----------------------------------------------------------------
// Method DOM1.getElementById()
//-----------------------------------------------------------------
DOM1.prototype.getElementById = function (sId) {
	var oEl = document.getElementById(sId);
	if ( oEl )
		return new DOMElement1(oEl);
	else
		return false;
}

//-----------------------------------------------------------------
// Method DOM1.httpRequest()
//-----------------------------------------------------------------
DOM1.prototype.httpRequest = function (sURL) {
	var oHTTP = new HTTPRequest1(sURL, false, 'GET');
	oHTTP.request();
	return oHTTP.getResponse();
	/*
	var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	xmlHttp.open("GET", sURL, false)
	xmlHttp.send();
	return xmlHttp.responseText;
	*/
}

//-----------------------------------------------------------------
// Method DOM1.createXMLObject()
//-----------------------------------------------------------------
DOM1.prototype.createXMLObject = function (sXML) {
	var oXML = new XML1(sXML);
	if ( oXML.parseError != 0 ) 
		return false;
	else
		return oXML;
}

//-----------------------------------------------------------------
// Method DOM1.xmlRootNode()
//-----------------------------------------------------------------
DOM1.prototype.xmlRootNode = function (oXML) {
	if ( oXML ) {
		if ( oXML.nodeName == '#document' )
			return oXML.childNodes.item(1);
		else
			return oXML;
	} else {
		return false;
	}
}

//-----------------------------------------------------------------
// Method DOM1.xmlEscape()
//-----------------------------------------------------------------
DOM1.prototype.xmlEscape = function (sStr) {
	var sXML = sStr;
	sXML = sXML.replace(/&/g,	'&amp;');
	sXML = sXML.replace(/\"/g,	'&quot;');
	sXML = sXML.replace(/>/g,	'&gt;');
	sXML = sXML.replace(/</g,	'&lt;');
	return sXML;
}

//-----------------------------------------------------------------
// Method DOM1.xmlUnescape()
//-----------------------------------------------------------------
DOM1.prototype.xmlUnescape = function (sXML) {
	var sStr = sXML;
	sStr = sStr.replace(/&lt;/g,		'<');
	sStr = sStr.replace(/&gt;/g,		'>');
	sStr = sStr.replace(/&quot;/g,	'"');
	sStr = sStr.replace(/&amp;/g,		'&');
	return sStr;
}


// ==============================================================================================================================
// Class DOMElement1
// ==============================================================================================================================
function DOMElement1 (oBrowserElement) {
	if ( arguments.length > 0 ) this.construct(oBrowserElement);
}

//-----------------------------------------------------------------
// Method DOM1.construct()
//-----------------------------------------------------------------
DOMElement1.prototype.construct = function (oBrowserElement) {
	this.element = oBrowserElement;
}

//-----------------------------------------------------------------
// Method DOM1.get()
//-----------------------------------------------------------------
DOMElement1.prototype.get = function (sField) {
	var aMatch = sField.match(/^([^\.]*)\.(.*)$/); 

	if ( aMatch ) {
		
		return this.get(aMatch[1]).get(aMatch[2]);

	} else {

		switch ( sField ) {

			case 'options':
				var aOptions = new Array();
				for ( var i = 0; i < this.element.options.length; i++ )
					aOptions.push(new DOMOption1(this.element.options[i]));
				return aOptions;
	
			case 'style':
				return new DOMStyle1(this.element.style);
	
			case 'parentElement':
				return new DOMElement1(this.element[sField]);
	
			case 'disabled':
			case 'multiple':
			case 'selected':
			case 'value':
			case 'className':
			case 'checked':
			case 'clientHeight':
			case 'scrollHeight':
				return this.element[sField];
			
			default:
				alert('DOMElement1::get - \'' + sField + '\' is not supported');
				return false;
		}
	
	}

}

//-----------------------------------------------------------------
// Method DOM1.set()
//-----------------------------------------------------------------
DOMElement1.prototype.set = function (sField, Value) {
	var aMatch = sField.match(/^([^\.]*)\.(.*)$/); 

	if ( aMatch ) {
		
		this.get(aMatch[1]).set(aMatch[2], Value);
	
	} else {
		
		switch ( sField ) {
	
			case 'disabled':
			case 'multiple':
			case 'selected':
			case 'value':
			case 'className':
			case 'checked':
			case 'clientHeight':
				this.element[sField] = Value;
				break;
			
			default:
				alert('DOMElement1::set - \'' + sField + '\' is not supported');
		}	

	}
}

// ==============================================================================================================================
// Class DOMStyle1
// ==============================================================================================================================
DOMStyle1.prototype = new DOMElement1;
DOMStyle1.prototype.constructor = DOMStyle1;
DOMStyle1.superclass = DOMElement1.prototype;

function DOMStyle1 (oBrowserElement) {
	if ( arguments.length > 0 ) this.construct(oBrowserElement);
}

//-----------------------------------------------------------------
// Method DOM1.get()
//-----------------------------------------------------------------
DOMStyle1.prototype.get = function (sField) {
	var aMatch = sField.match(/^([^\.]*)\.(.*)$/); 

	if ( aMatch ) {
		
		return this.get(aMatch[1]).get(aMatch[2]);

	} else {

		switch ( sField ) {

			case 'height':
			case 'width':
			case 'display':
				return this.element[sField];
			
			default:
				alert('DOMStyle1::get - \'' + sField + '\' is not supported');
				return false;
		}
	
	}

}

//-----------------------------------------------------------------
// Method DOMStyle1.set()
//-----------------------------------------------------------------
DOMStyle1.prototype.set = function (sField, Value) {
	var aMatch = sField.match(/^([^\.]*)\.(.*)$/); 

	if ( aMatch ) {
		
		this.get(aMatch[1]).set(aMatch[2], Value);
	
	} else {
		
		switch ( sField ) {
	
			case 'height':
			case 'width':
			case 'display':
				this.element[sField] = Value;
				break;
			
			default:
				alert('DOMStyle1::set - \'' + sField + '\' is not supported');
		}	

	}
}

// ==============================================================================================================================
// Class DOMOption1
// ==============================================================================================================================
DOMOption1.prototype = new DOMElement1;
DOMOption1.prototype.constructor = DOMOption1;
DOMOption1.superclass = DOMElement1.prototype;

function DOMOption1 (oBrowserElement) {
	if ( arguments.length > 0 ) this.construct(oBrowserElement);
}

//-----------------------------------------------------------------
// Method DOM1.get()
//-----------------------------------------------------------------
DOMOption1.prototype.get = function (sField) {
	var aMatch = sField.match(/^([^\.]*)\.(.*)$/); 

	if ( aMatch ) {
		
		return this.get(aMatch[1]).get(aMatch[2]);

	} else {

		switch ( sField ) {

			case 'text':
			case 'value':
			case 'selected':
				return this.element[sField];
			
			default:
				alert('DOMOption1::get - \'' + sField + '\' is not supported');
				return false;
		}
	
	}

}

//-----------------------------------------------------------------
// Method DOMOption1.set()
//-----------------------------------------------------------------
DOMOption1.prototype.set = function (sField, Value) {
	var aMatch = sField.match(/^([^\.]*)\.(.*)$/); 

	if ( aMatch ) {
		
		this.get(aMatch[1]).set(aMatch[2], Value);
	
	} else {
		
		switch ( sField ) {
	
			case 'text':
			case 'value':
			case 'selected':
				this.element[sField] = Value;
				break;
			
			default:
				alert('DOMOption1::set - \'' + sField + '\' is not supported');
		}	

	}
}

