/************************************************
 * A set of utility methods for common operations
 ************************************************/

var Utils = new function() {

	// Functions accessed by Utils.XML.*
	this.XML = new function() {
		this.alert = function(node) {
			var string = (new XMLSerializer()).serializeToString(node);
			alert(string)
		}
		
		this.toString = function(node) {
			return (new XMLSerializer()).serializeToString(node);
		}

		this.newDocument = function() {
			var rootName = "";
			
			if (document.implementation && document.implementation.createDocument) {
				return document.implementation.createDocument("",rootName,null);
			} else if (window.ActiveXObject) {
		
				var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
				if (rootName != null && rootName != "") {
					xmlDoc.appendChild(xmlDoc.createElement(rootName));
				}
				return xmlDoc;
		 	}

			//alexgru do not commit
			alert("ERROR: Your Browser Does Not Support The Creation of XML Documents");
			return null;
		}
	}

	// Functions accessed by Utils.AJAX.*
	this.AJAX = new function() {
		this.createRequest = function() {
			var request = null;
			if (window.XMLHttpRequest) {
				request = new XMLHttpRequest();
				if ( typeof request.overrideMimeType != 'undefined') {
				    request.overrideMimeType('text/xml');
	  			}
			} else if (window.ActiveXObject) {
	 		 	request = new ActiveXObject("Microsoft.XMLHTTP");
			} else {
	  			alert('Perhaps your browser does not support xmlhttprequests?');
			}
			return request;
		}
		
		/*
		 * Use as follows:
		 * 
		 * var url = Utils.makeRequestURL("http://myservlet", "operation", "login", "user", 2);
		 * 
		 * Then url == "http://myservlet?operation=login&user=2"
		 */
		this.makeRequestURL = function() {
			if (arguments.length < 1 || arguments.length%2 != 1) {
				throw "Utils.AJAX.makeRequestURL does not contain enough arguments.";
				return;
			}
	
			var body = arguments[0] + '?timeDummyParam=' + new Date().getTime();
			for (var i = 1; i < arguments.length - 1; i += 2) {
				body = body + '&' + arguments[i] + '=' + arguments[i+1];
			}
	
			return body;
		}
	}
	
	// Functions accessed by Utils.DOM.*
	this.DOM = new function() {	
		this.createEmptyLink = function() {
			var emptyLink=document.createElement('a');
			emptyLink.setAttribute('href','#');
			emptyLink.onclick = function () { return false; }
			return emptyLink;
		}

		this.clearChildren = function(e) {
			while(e.childNodes && e.childNodes.length > 0) {
				e.removeChild(e.childNodes[0]);
			}
		}
		
		this.createRadioButton = function(id, name, value) {
			/*@cc_on @if (@_jscript)
				var rdo =document.createElement("<input type='radio' name='"+name+"'>");
			@else */
				var rdo = document.createElement("input");
				rdo.setAttribute('name', name);
				rdo.setAttribute('type','radio');
				
			/* @end @*/
		
			rdo.setAttribute('id', id);
			rdo.setAttribute('value', value);
			return rdo;
		}

		this.createOnClickImage = function(src, onClickCommand) {
			var icon = document.createElement('img');
			icon.src = src;
			var emptyLink = Utils.DOM.createEmptyLink();
		  	emptyLink.appendChild(icon);
		  	emptyLink.icon = icon;
			emptyLink.onclick = function() { eval(onClickCommand); return false };
			return emptyLink;
		}
	}
	
	// Functions accessed by Utils.String.*
	this.String = new function() {
		this.trim = function(sString) {
			while (sString.substring(0,1) == ' ') {
				sString = sString.substring(1, sString.length);
			}
			while (sString.substring(sString.length-1, sString.length) == ' ') {
				sString = sString.substring(0,sString.length-1);
			}
			return sString;
		}
		
		/* private */
		function leftTrim(sString) {
			while (sString.substring(0,1) == ' ') {
				sString = sString.substring(1, sString.length);
			}
			return sString;
		}
	
		function rightTrim(sString) {
			while (sString.substring(sString.length-1, sString.length) == ' ') {
				sString = sString.substring(0,sString.length-1);
			}
			return sString;
		}
	}
	

}