var $id = function(id) { return document.getElementById(id); }
var $body = function() { return document.doctype ? document.documentElement : document.body; }
var bb = { };

bb.loadingPanel = {
	block: function() {
	 	if(!document.getElementById("blockDiv")) {
		 	var blockDiv = document.createElement("div");
		 	if(document.addEventListener) {
			 	blockDiv.style.opacity = "0.30";
			}
			else { 	
				blockDiv.style.filter = "alpha(opacity=30)";
			}
			
		 	blockDiv.setAttribute("id","blockDiv");
		 	blockDiv.style.backgroundColor = "white";
		 	blockDiv.style.position = "absolute";
		 	blockDiv.style.left = "0%";
		 	blockDiv.style.top = "0%";
		 	blockDiv.style.width = "100%";
		 	blockDiv.style.height = "300%";
		 	$body().appendChild(blockDiv);
	 	}
	 	if(!document.getElementById("blockMessageDiv")) {
		 	var blockMessageDiv = document.createElement("div");	
		 	blockMessageDiv.setAttribute("id","blockMessageDiv");
		 	blockMessageDiv.style.backgroundColor = "transparent";
		 	blockMessageDiv.style.position = "absolute";
		 	blockMessageDiv.style.left = "50%";
		 	blockMessageDiv.style.top = "50%";
		 	blockMessageDiv.style.zIndex = "9999";
		 	blockMessageDiv.style.fontWeight = "bolder";
		 	blockMessageDiv.style.fontSize = "32px";
		 	blockMessageDiv.style.color ="white";
		 	$body().appendChild(blockMessageDiv);
	 	}
		document.getElementById("blockMessageDiv").innerHTML = "<img src=\"images/ajax-loader.gif\">";
		document.getElementById("blockMessageDiv").style.display = "";	
	 	document.getElementById("blockDiv").style.display = "";		
	},
	unblock_success: function() {
		document.getElementById("blockMessageDiv").style.display = "none";	
		document.getElementById("blockDiv").style.display = "none";		
	},
	unblock_failure: function() {
		document.getElementById("blockMessageDiv").innerHTML = "...Error ......";
		setTimeout("bb.loadingPanel.unblock_failure2()",1000);	
	},
	unblock_failure2: function() {
		document.getElementById("blockMessageDiv").style.display = "none";	
		document.getElementById("blockDiv").style.display = "none";		
	}	
};

bb.Net = function() 
{	
	this.newRequest = function() 
	{
		var req = null;
		if(typeof ActiveXObject != "undefined") {
			req = new ActiveXObject("Microsoft.XMLHTTP");	
		}
		else if(typeof XMLHttpRequest != "undefined") {
			req = new XMLHttpRequest();	
		}
		else {
			// should throw exception	
		}		
		return req;
	};
	
	this.loadFileFromUrl = function(url) {
		bb.loadingPanel.block();
		
		var req = this.newRequest();		
		try {
	 		req.open("GET", url, false);
	 	}
	 	catch(e) {
	 		// should throw exception again	indicating user security preference has specifically disallowed ajax
	 	}	 	
	 	
		req.send(null);    
		if (req.status == 200 || req.status == 0) {			
			bb.loadingPanel.unblock_success();		
		}	
		else {
			bb.loadingPanel.unblock_failure();
		}
		return req.responseText;			
	};
	
	this.post = function(url, keyValuePairs) {
		bb.loadingPanel.block();

		var req = this.newRequest();		
		try {
	 		req.open("POST", url, false);
	 	}
	 	catch(e) {
	 		// should throw exception again	indicating user security preference has specifically disallowed ajax
	 	}
 		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	 	 
		req.send(keyValuePairs);    
		if (req.status == 200 || req.status == 0) {
			bb.loadingPanel.unblock_success();		
		}	
		else {
			bb.loadingPanel.unblock_failure();
		}
		return req.responseText;
	
	};
	
	this.asyncPost = function(url, keyValuePairs, callback, failurefun,feedbackType, quiet) {
		if(!quiet) { bb.loadingPanel.block();}
		
		var req = this.newRequest();		
	 req.onreadystatechange = function() 
		{
			try
			{
	 		if(req.readyState == 4) {
	 			var status = null;
	 			status = req.status;
					 			
	 			if (status==200) {
						if (feedbackType != "XML") 
							callback(req.responseText);
						else
							callback(req.responseXML);
		
						if(!quiet) 
							bb.loadingPanel.unblock_success();	
					} 	
					else {
						if (!quiet) {
							bb.loadingPanel.unblock_failure();
						}		
						if (failurefun)
							failurefun(status);
	 			}
	 	} 
		}
		catch (e)
		{
				if (!quiet) {
				 	bb.loadingPanel.unblock_failure();
				}
				throw e;
		}
		}
		try {		
	 	req.open("Post", url, true);
			req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			req.send(keyValuePairs);	
	 	}
	 	catch(e) {	
				if (!quiet) {
				 bb.loadingPanel.unblock_failure();
				}		
				alert(e.message);
	 		// should throw exception again	indicating user security preference has specifically disallowed ajax
	 	}
 		
	};
			
	this.loadClass = function(url) {
		var res = this.loadFileFromUrl(url);
		return eval(res);
	}
};

bb.net = new bb.Net();