/* this script has 3 main sections
 *  Line #	Function
 *  4		Ajax
 *  127		xhtmlTools
 *  230		util
 *  614		onloader
 **/

function Ajax() {
 this.req = null;
 this.url = null;
 this.method = 'GET';
 this.async = true;
 this.status = null;
 this.statusText = '';
 this.postData = null;
 this.readyState = null;
 this.responseText = null;
 this.responseXML = null;
 this.handleResp = null;
 this.responseFormat = 'text', // 'text', 'xml', or 'object'
 this.mimeType = null;

 this.init = function() {
  if (!this.req) {
   try {
     // Try to create object for Firefox, Safari, IE7, etc.
     this.req = new XMLHttpRequest();
   }
   catch (e) {
     try {
       // Try to create object for later versions of IE.
       this.req = new ActiveXObject('MSXML2.XMLHTTP');
     }
     catch (e) {
       try {
         // Try to create object for early versions of IE.
         this.req = new ActiveXObject('Microsoft.XMLHTTP');
       }
       catch (e) {
         // Could not create an XMLHttpRequest object.
         return false;
       }
     }
   }
 }
 return this.req;
 };
 
 this.doReq = function() {
	if (!this.init()) {
		alert('Could not create XMLHttpRequest object.');
		return;
	}
	this.req.open(this.method, this.url, this.async);
	var self = this; // Fix loss-of-scope in inner function
	this.req.onreadystatechange = function() {
		if (self.req.readyState == 4) {
		    switch (self.responseFormat) { 
				case 'text':
					resp = self.req.responseText;
					break;
				case 'xml':
					resp = self.req.responseXML;
					break;
				case 'object':
					resp = req;
					break;
			}
			if (self.req.status >= 200 && self.req.status <= 299) {
				self.handleResp(resp);
			} else {
				self.handleErr(resp);
			} 
   		}
	};
	
	this.req.send(this.postData);
  };
  
  this.doGet = function(url, hand, format) {
  	this.url = url;
	this.handleResp = hand;
	this.responseFormat = format || 'text';
	this.method="GET";
	this.doReq();
  };
  
  this.abort = function() {
  	if (this.req) {
		this.req.onreadystatechange = function() { };
		this.req.abort();
		this.req = null;
	}
  };

  this.setHandlerBoth = function(funcRef) {
	this.handleResp = funcRef;
	this.handleErr = funcRef;
  };
  
  this.setHandlerErr = function(funcRef) {
  	this.handleErr = funcRef;  
  }


	this.handleErr = function() {
		var errorWin;
	try {
		errorWin = window.open('', 'errorWin');
		errorWin.document.body.innerHTML = this.responseText;
	}
	catch (e) {
		alert('An error occurred, but the error message cannot be '
     + 'displayed. This is probably because of your browser\'s '
     + 'pop-up blocker.\n'
     + 'Please allow pop-ups from this web site if you want to '
     + 'see the full error messages.\n'
     + '\n'
     + 'Status Code: ' + this.req.status + '\n'
     + 'Status Description: ' + this.req.statusText);
	}
	};

	this.setMimeType = function(mimeType) {
	 this.mimeType = mimeType;
	};
}


function insertAtCursor(myField, myValue) {
//IE support
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
	}
	//MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == '0') {
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		myField.value = myField.value.substring(0, startPos)
		+ myValue
		+ myField.value.substring(endPos, myField.value.length);
	} else {
		myField.value += myValue;
	}
	return false;
}

var onloader = new function() {
	this.functions = new Array();

	this.add = function(func) {
		onloader.functions.push(func);
	};
	
	this.init = function() {
		for(var i in onloader.functions) {
			eval(onloader.functions[i]);
		}
	};
}
window.onload = onloader.init;