function AppIsLocal() {
	var url = location.href;
	var temp = url.split("/");
	if(temp[2].toLowerCase()  == "localhost") {
		return true;
	}
	
	return false;
}

var Bjax = {
	SendRequest: function(method, url, data, callback) {
		var request = null;
		if(window.XMLHttpRequest) {
			request = new XMLHttpRequest();
		}
		else if(window.ActiveXObject) {
			try {
				request = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch(e) {
				try {
					request = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch(e) {
					alert("Your browser doesn't support AJaX");
					return false;
				}
			}
		}
		else {
			alert("Your browser doesn't support AJaX");
			return false;
		}
		
		request.onreadystatechange = function() {
			switch(request.readyState) {
				case 0:
					break;
				case 1:
					window.status = "Loading...";
					break;
				case 2:
					window.status = "Loaded...";
					break;
				case 3:
					window.status = "Interactive...";
					break;
				case 4:
					window.status = "Complete...";
					try {
						if(request.status == 200) {
							window.status = "Done";
							callback(request);
							//request.abort();
						}
						else {
							window.status = "Done";
							alert("AJaX request failed. Try refreshing/reloading the page.");
							return false;
						}
					}
					catch(e) {
					}
					
				default:
					break;
			}
		}
		//alert(this.method);
		var strictPost = false;
		if(method.toLowerCase() == "strictpost") {
			strictPost = true;
			method = "POST";
		}
		
		request.open(method, url, true); //asynchronous
		if(strictPost) {
			request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		}
		
		request.send(data);
	}
}

var Script = {
	funcName: "",
	params: "",
	interval: null,
	
	//jsUrl: URL of the JS file to include.
	//funcName:  string representation of the first function that needs to be called.
	//params: string representation of the parameters of the first function to be called.
	Load: function(jsUrl, funcName, params) {
		this.funcName = funcName ? funcName : "";
		this.params = params ? params : "";
		
		if(funcName) {
			var temp = funcName.split(".");
			if(eval("self." + temp[0])) {
				//alert("exists");
				this.Invoke();
			}
			else {
				//alert("non-existent");
				Bjax.SendRequest("GET", jsUrl, null, Script.Append);
			}
		}
		else {
			Bjax.SendRequest("GET", jsUrl, null, Script.Append);
		}
	},
	
	Append: function(request) {
		var temp = document.createElement("script");
		document.body.appendChild(temp);
		temp.text = request.responseText;
		
		if(this.funcName != "")
			Script.Invoke();
		else
			alert("Script not loaded.");
	},
	
	Invoke: function() {
		var i = 0;
		var temp = this.funcName.split(".");
		var obj = eval("self." + temp[0]);
		if(obj) {
			clearInterval(this.interval);
			var func = this.funcName + "(" + this.params + ")";
			eval(func);
		}
		else {
			i++;
			clearInterval(this.interval);
			window.status = i;
			this.interval = window.setInterval("Script.Invoke()", 100);
		}
	}
}

var Content = {
	id: "",
	callback: null,
	
	Load: function(url, id, callback) {
		this.id = id;
		this.callback = callback;
		Bjax.SendRequest("GET", url, null, Content.LoadComplete);
	},
	
	LoadComplete: function(request) {
		var txt = request.responseText;
		this.Update(txt);
	},
	
	Update: function(txt) {
		var id = document.getElementById(this.id);
		id.innerHTML = txt;
		this.callback();
	}
}

var Profile = {
	isPublic: false,
	isPrivate: false,
	isEditable: false,
	editMode: false,
	
	UserID: 0
}
