function EstateWeb_Objects_HTTPManager(){
	this.Request = new EstateWeb_Objects_HTTPManager_Request();
	this.Browser = new EstateWeb_Objects_HTTPManager_Browser();
	this.Document = new EstateWeb_Objects_HTTPManager_Document();
}



//####################################################################
//####################################################################
// Request Object and supporting functions
//####################################################################
//####################################################################

function EstateWeb_Objects_HTTPManager_Request(){
	this.QueryString = EstateWeb_Objects_HTTPManager_Request_QueryString;
	this.AddToQueryString = EstateWeb_Objects_HTTPManager_Request_QueryString_Add;
}
//####################################################################
// -> Functions  follow
//####################################################################

function EstateWeb_Objects_HTTPManager_Request_QueryString_Add(key,value){
	//adds or replaces the value within the querystring with the key pair provided
	if ( this.QueryString().length > 0 ){
		var keys = this.QueryString().split("&");
		var matched = false;
		for ( var i = 0; i < keys.length; i ++ ){
			var item = keys[i].split("=");
			//alert(item[0] + '//'+key);
			if ( item[0].toLowerCase() == key.toLowerCase() ){
				//alert("matched");
				item[1] = value;
				keys[i] = item.join("=");
				matched = true;
				break;
			}
		}
		if (!matched){
			keys[keys.length] = key +"="+escape(value);
		}
		//reconstruct querystring
		return keys.join("&");
	}else{
		alert("blank");
		return key+"="+escape(value);
	}
}

function EstateWeb_Objects_HTTPManager_Request_QueryString(){
	//returns the querystring value of the key provided
	var queryString;
	queryString = document.location.href;
	if ( arguments.length > 0 ){
		if (queryString.toUpperCase().indexOf(arguments[0].toUpperCase()) >= 0 && queryString.indexOf("?") >= 0 ){
			var queryParams = queryString.split("?");
			var queryStringParams = queryParams[1].split("&");
			for (i=0;i<queryStringParams.length;i++){
				var queryParam = queryStringParams[i].split("=");
				if (queryParam[0].toUpperCase() == arguments[0].toUpperCase()){
					var oStringManager = new EstateWeb_Objects_HTTPManager_Strings();
					return oStringManager.Unescape(queryParam[1]);
				}
			}
		}
	}else{
		if ( queryString.indexOf("?") > 0 ){ return queryString.split("?")[1]; }
	}
	return "";
}

//####################################################################
//####################################################################
// BrowserObject and supporting functions
//####################################################################
//####################################################################

function EstateWeb_Objects_HTTPManager_Browser(){
	this.Type = EstateWeb_Objects_HTTPManager_Browser_Type;
	this.Types = new EstateWeb_Objects_HTTPManager_Browser_Types();
	this.HighCompatability = EstateWeb_Objects_HTTPManager_Browser_HighCompatability;
	this.Window = new EstateWeb_Objects_HTTPManager_Browser_Window();
}

function EstateWeb_Objects_HTTPManager_Browser_HighCompatability(){
	if ( this.Type() > 2 ){ return true }else{ return false}
}

function EstateWeb_Objects_HTTPManager_Browser_Type(){
	var oTypes = new EstateWeb_Objects_HTTPManager_Browser_Types();
	if ( window.opera ) { return oTypes.Opera }
	if ( document.layers ){ return oTypes.Netscape4 }
	if ( document.getElementById && !document.all ) { return oTypes.Mozilla }
	if ( document.getElementById && document.all ) { return oTypes.InternetExplorer5Plus }
	if ( document.all & !document.getElementById ) { return oTypes.InternetExplorer4Plus }
	
}

function EstateWeb_Objects_HTTPManager_Browser_Window(){
	this.Open = EstateWeb_Objects_HTTPManager_Browser_Window_Open;
}

function EstateWeb_Objects_HTTPManager_Browser_Window_Open(){
	window.open(arguments[0], arguments[1], arguments[2]);
}

function EstateWeb_Objects_HTTPManager_Browser_Types(){
	this.Netscape4 = 0;
	this.InternetExplorer4Plus = 1;
	this.Opera = 2;
	this.InternetExplorer5Plus = 3;
	this.Mozilla = 4;
}

//####################################################################
//####################################################################
// StringObject and supporting functions
//####################################################################
//####################################################################

function EstateWeb_Objects_HTTPManager_Strings(){
	this.Unescape = EstateWeb_Objects_HTTPManager_Strings_Unescape;
	this.isNumeric = EstateWeb_Objects_HTTPManager_Strings_IsNumeric;
}

function EstateWeb_Objects_HTTPManager_Strings_IsNumeric(s){
	if (isNaN(s)){
		return false;
	}else{
		return true;
	}
}

function EstateWeb_Objects_HTTPManager_Strings_Unescape(){
	if ( arguments.length > 0 ){
		// unescapes a string
		var val = arguments[0];
		val = val.replace("+", " ");
		return val;
	}
	return "";
}

//####################################################################
//####################################################################
// DocumentObject and supporting functions
//####################################################################
//####################################################################

function EstateWeb_Objects_HTTPManager_Document(){
	this.GetObject = EstateWeb_Objects_HTTPManager_Document_GetObject;
	this.SwapImageObject = EstateWeb_Objects_HTTPManager_Document_SwapImageObject;
	this.Scripts = new EstateWeb_Objects_HTTPManager_Document_Scripts();
	this.WaitForObject = EstateWeb_Objects_HTTPManager_Document_WaitForObject;
	this.InnerWidth = EstateWeb_Objects_HTTPManager_Document_InnerWidth;
	this.GetObjectPosition = EstateWeb_Objects_HTTPManager_Document_GetObjectPosition;
}

function EstateWeb_Objects_HTTPManager_Document_GetObjectPosition(ID){
	var oCoords = new Object();
	oCoords.x = 0;
	oCoords.y = 0;
	//set x and y coordinates 
	if ( this.GetObject(ID) ){
		var obj = this.GetObject(ID);
		if ( obj.offsetParent ){
			while ( obj.offsetParent ){
				oCoords.x += obj.offsetLeft;
				obj = obj.offsetParent;
			}
		}else if ( obj.x ) { oCoords.x += obj.x; }
		var obj = this.GetObject(ID);
		if ( obj.offsetParent ){
			while ( obj.offsetParent ){
				oCoords.y += obj.offsetTop;
				obj = obj.offsetParent;
			}
		}else if ( obj.y ) { oCoords.y += obj.y; }
	}
	return oCoords;
}

function EstateWeb_Objects_HTTPManager_Document_InnerWidth(){
	var oBrowser = new EstateWeb_Objects_HTTPManager_Browser();
	switch ( EstateWeb_Objects_HTTPManager_Browser_Type() ){
		case oBrowser.Types.InternetExplorer5Plus:oBrowser.Types.InternetExplorer4Plus
			return document.body.clientWidth;
			break;
		default:
			return window.innerWidth;
			break;
	}
}

function EstateWeb_Objects_HTTPManager_Document_WaitForObject(o){
	//waits for an object to become available then exists
	var isavailable = false;
	while (!isavailable){
		try{
			eval(o);
			isavailable = true;
		}catch (e){ }
	}
}

function EstateWeb_Objects_HTTPManager_Document_Scripts(){
    this.RegisterScriptLibrary = EstateWeb_Objects_HTTPManager_Document_Scripts_RegisterScriptLibrary;
}

function EstateWeb_Objects_HTTPManager_Document_Scripts_RegisterScriptLibrary(path){
    //registers a script library dynamically
   if ( document.getElementsByTagName ){
    if ( document.getElementsByTagName("head") ){
        var oScripts = document.getElementsByTagName("head")[0].childNodes;
        var bnewscript = true;
        if ( oScripts.length > 0 ){
            for(var i = 0; i < oScripts.length; i ++ ){
               if ( oScripts[i].attributes ){
                   for(var ii =0; ii< oScripts[i].attributes.length; ii++){
                        if ( oScripts[i].attributes[ii].nodeName.toLowerCase() == "src" ){
                            if ( oScripts[i].attributes[ii].nodeValue.toLowerCase() == path.toLowerCase() ){ bnewscript = false}
                            break; 
                        } 
                   } 
               }
            } 
        }  
         
        if (bnewscript){
            var oscript = document.createElement("script");
            oscript.setAttribute("type", "text/javascript");
            oscript.setAttribute("src", path);
            document.getElementsByTagName("head")[0].appendChild( oscript );
            //alert(document.getElementsByTagName("head")[0].innerHTML);
        }else{
           // alert("not new script");
       }  
    }  
  }  
}

function EstateWeb_Objects_HTTPManager_Document_SwapImageObject(){
	this.DestinationImageOriginalSRC;
	this.SourceImageFilename;
	this.DestinationImageID;
	this.Swap = EstateWeb_Objects_HTTPManager_Document_SwapImageObject_Swap;
	this.Restore = EstateWeb_Objects_HTTPManager_Document_SwapImageObject_Restore;
	this.GetDestinationImageOriginalSRC = EstateWeb_Objects_HTTPManager_Document_SwapImageObject_GetDestinationImageOriginalSRC;
}

function EstateWeb_Objects_HTTPManager_Document_SwapImageObject_Restore(){
	if ( HttpManager.Document.GetObject(this.DestinationImageID) ) {
		HttpManager.Document.GetObject(this.DestinationImageID).src = this.DestinationImageOriginalSRC;
	}
}

function EstateWeb_Objects_HTTPManager_Document_SwapImageObject_Swap(newImage,width,height){
	var newSRC = this.DestinationImageOriginalSRC;
	newSRC = newSRC.substring(0,newSRC.indexOf("&i=")+3) + newImage + newSRC.substring(newSRC.indexOf("&r="));
	newSRC = newSRC.substring(0,newSRC.indexOf("&h=")+3) + height + newSRC.substring(newSRC.indexOf("&w="));
	newSRC = newSRC.substring(0,newSRC.indexOf("&w=")+3) + width + newSRC.substring(newSRC.indexOf("&st="));
	if ( HttpManager.Document.GetObject(this.DestinationImageID) ) {
		HttpManager.Document.GetObject(this.DestinationImageID).src = newSRC;
	}
}

function EstateWeb_Objects_HTTPManager_Document_SwapImageObject_GetDestinationImageOriginalSRC(){
	if ( HttpManager.Document.GetObject(this.DestinationImageID) ){
		this.DestinationImageOriginalSRC = HttpManager.Document.GetObject(this.DestinationImageID).src;
	}
}

function EstateWeb_Objects_HTTPManager_Document_GetObject(){
	var oBrowser = EstateWeb_Objects_HTTPManager_Browser_Type();
	var oBrowserTypes = new EstateWeb_Objects_HTTPManager_Browser_Types();
	switch ( oBrowser ){
		case oBrowserTypes.Netscape4:
			return document.all[arguments[0]];
			break;
		case oBrowserTypes.InternetExplorer4Plus:
			return document.all[arguments[0]];
			break;
		case oBrowserTypes.Opera:
			return document.getElementById(arguments[0]);
			break;
		case oBrowserTypes.InternetExplorer5Plus:
			return document.getElementById(arguments[0]);
			break;
		case oBrowserTypes.Mozilla:
			return document.getElementById(arguments[0]);
			break;
		default:
			return document.getElementById(arguments[0]);
			break;
	}
	
}
