function JavascriptPackage(){
    var d = document;
	var w = window;
	var n = navigator;
	var browserFactoryObject = null;
	
	var ie = (n.appName.indexOf('Microsoft') != -1);
	//internet explorer version 6
	var ie6 = (ie && n.appVersion.indexOf('MSIE 6.0') != -1);
	//internet explorer version 7
	var ie7 = (ie && n.appVersion.indexOf('MSIE 7.0') != -1);
	//internet explorer prior to version 6
	var iep = (ie && !ie6 && !ie7);
	
	//opera
	var op = (n.appName.indexOf('Opera') != -1);
	
	//netscape based browser
	var ns = (n.appName.indexOf('Netscape') != -1);
	//safari
	var sf = (ns && n.appVersion.indexOf('Safari') != -1);
	//firefox
	var ff = (ns && !sf && !op);
	//windows firefox (or gecko-based windows browser)
	var ff_win = (ns && !sf && !op && n.appVersion.indexOf('Windows') != -1);
	//macintoch firefox (or gecko-based macintosh browser)
	var ff_mac = (ns && !sf && !op && n.appVersion.indexOf('Macintosh') != -1);
	//linux firefox (or gecko-based linux browser)
	var ff_lin = (ns && !sf && !op && n.appVersion.indexOf('X11') != -1);
	
	this.isIE = function(){return ie;}
	this.isIE6 = function(){return ie6;}
	this.isIE7 = function(){return ie7;}
	this.isIEP = function(){return iep;}
	this.isOpera = function(){return op;}
	this.isNetscape = function(){return ns;}
	this.isSafari = function(){return sf;}
	this.isFirefox = function(){return ff;}
	this.isFirefoxWin = function(){return ff_win;}
	this.isFirefoxLin = function(){return ff_lin;}
	this.isFirefoxMac = function(){return ff_mac;}
	this.n = function(){return n;}
	this.d = function(){return d;}
	this.w = function(){return w;}
	
	if(this.isIE()){
		browserFactoryObject = new IEBrowserFactoryObject;
	}
	else if(this.isOpera()){
		browserFactoryObject = new OperaBrowserFactoryObject;
	}
	else if(this.isSafari()){
		browserFactoryObject = new SafariBrowserFactoryObject;
	}
	else if(this.isFirefox()){
		browserFactoryObject = new FirefoxBrowserFactoryObject;
	}
	
	this.getBrowserObject = function(){return browserFactoryObject;};
}

JavascriptPackage.prototype.AJAXGetRequest = function(requestObj, url, stateChangeFunction){
	eval(requestObj + ' = createRequest()');
	eval(requestObj + '.onreadystatechange = stateChangeFunction');
	eval(requestObj + '.open("GET", url, true)');
	eval(requestObj + '.send(null)');
}

JavascriptPackage.prototype.AJAXPostRequest = function(requestObj, url, form_name, stateChangeFunction){
	var parameters = buildPostParameterString(form_name);
	eval(requestObj + ' = createRequest();');
	eval(requestObj + '.onreadystatechange = stateChangeFunction');
	eval(requestObj + '.open("POST", url, true)');
	eval(requestObj + '.setRequestHeader("Content-type", "application/x-www-form-urlencoded")');
    eval(requestObj + '.setRequestHeader("Content-length", parameters.length)');
    eval(requestObj + '.setRequestHeader("Connection", "close")');
	eval(requestObj + '.send(parameters)');
}


/************************************************
 *         BROWSER SPECIFIC FUNCTIONALITY
 ************************************************/
/*Create Abstract Class*/
//Browser Default is Firefox since most browsers follow suit
function BrowserFactoryObject(){
}
BrowserFactoryObject.prototype.addEventListener = function(object,event,functionPointer,phase){object.addEventListener(event,functionPointer,phase);}
BrowserFactoryObject.prototype.removeEventListener = function(object,event,functionPointer,phase){object.removeEventListener(event,functionPointer,phase);}
BrowserFactoryObject.prototype.getEvent = function(event){return event;}
BrowserFactoryObject.prototype.getTarget = function(event){return event.target;}
BrowserFactoryObject.prototype.stopPropogation = function(event){event.stopPropagation();}
BrowserFactoryObject.prototype.setStyle = function(object,property,value){eval('object.style.'+property+' = value;');}
BrowserFactoryObject.prototype.createXMLObject = function(xmlString){return (new DOMParser()).parseFromString(xmlString, "text/xml");}

/*Create Sub Classes, Mimic Inheritance*/
function FirefoxBrowserFactoryObject(){
}
FirefoxBrowserFactoryObject.prototype = new BrowserFactoryObject;

function IEBrowserFactoryObject(){
}
IEBrowserFactoryObject.prototype = new BrowserFactoryObject;
IEBrowserFactoryObject.prototype.addEventListener = function(object,event,functionPointer,phase){object.attachEvent('on'+event,functionPointer);}
IEBrowserFactoryObject.prototype.removeEventListener = function(object,event,functionPointer,phase){object.detachEvent('on'+event,functionPointer);}
IEBrowserFactoryObject.prototype.getEvent = function(event){return window.event;}
IEBrowserFactoryObject.prototype.getTarget = function(event){return window.event.srcElement;}
IEBrowserFactoryObject.prototype.stopPropogation = function(event){event.cancelBubble = true;}
IEBrowserFactoryObject.prototype.setStyle = function(object,property,value){
	if(property == 'cssFloat'){
		property = 'styleFloat';
	}
	eval('object.style.'+property+' = value;');
}
IEBrowserFactoryObject.prototype.createXMLObject = function(xmlString){
	var xmlObject = new ActiveXObject("Microsoft.XMLDOM");
	xmlObject.async = "false";
	xmlObject.loadXML(xmlString);
	return xmlObject;
}

function OperaBrowserFactoryObject(){
}
OperaBrowserFactoryObject.prototype = new BrowserFactoryObject;

function SafariBrowserFactoryObject(){
}
SafariBrowserFactoryObject.prototype = new BrowserFactoryObject;
SafariBrowserFactoryObject.prototype.getTarget = function(event){
	var target = event.target;
	if(target && (event.target.nodeType == 3 || event.target.nodeType == 4)){
	  target = target.parentNode;
	}
	
	return target;
}









function $(id){
	return document.getElementById(id);
}

function removePX(text){
	if(text.indexOf('px') != -1)
		return parseInt(text.substring(0,text.length-2));
	else
		return text != '' ? parseInt(text) : 0;
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
