	
	Application.connect = {
		
		ajax: null,
		
		init: function()
		{
			// Init AjaxConn
			if(Application.util.browserInformation.browser == "Explorer")
			{
				if(!window.ActiveXObject)
				{
					alert("This browser does not support ActiveX controls calls");
					
					return false;
				}
				
				Application.connect.ajax = this.ajaxConnIE;
			}
			else
			{
				if(!window.XMLHttpRequest)
				{
					alert("This browser does not support AJAX calls");
					
					return false;
				}
				
				Application.connect.ajax = this.ajaxConnFF;
			}
			
			Application.connect.ajax.addVariable =	function(varName, varValue)
													{
														args.vars[varName] = varValue;
													};
			
			Application.connect.ajax.removeVariable = 	function(varName)
														{
															args.vars[varName] = undefined;
														};
			
			Application.connect.ajax.addHeader = 	function(headerName, headerValue)
													{
														args.headers[headerName] = headerValue;
													};
			
			Application.connect.ajax.removeHeader = 	function(headerName)
														{
															args.headers[headerName] = undefined;
														};
		},
		
		/*
			--------
			AjaxConn
			--------
		*/
		
		ajaxConnFF: function(args)
		{
			if(!args.url)
			{
				return false;
			}
			
			var variables = [];
			var headers = [];
			var xmlObj = null;
			
			if(!args.vars)
			{
				args.vars = [];
			}
			
			if(!args.headers)
			{
				args.headers = [];
			}
			
			this.execute = 	function()
							{
								try
								{
									var xmlObj = new XMLHttpRequest();
								}
								catch(e)
								{
									alert('An error has occured creating window.XMLHttpRequest\nErrorName: ' + e.name + '\nErrorMessage: ' + e.message);
									
									return false;
								}
								
								xmlObj.onprogress = args.onprogress ? args.onprogress:	function()
																						{
																							
																						};
								
								xmlObj.onerror = args.onerror ? args.onerror:	function()
																				{
																					
																				};
								
								xmlObj.onload = args.onload?args.onload:	function()
																			{
																				
																			};
								
								args.resultAsXML = (args.resultAsXML == undefined) ? true : args.resultAsXML;
								args.username = args.username?args.username:null;
								args.password = args.password?args.password:null;
								args.requestType = args.requestType ? args.requestType : "GET";
								
								args.onload = args.onload ? args.onload: function() { };
								args.successFunction = args.successFunction ? args.successFunction:	function(domEl)
																									{
																										alert("URL:" + args.url + "\n\nStatus: " + xmlObj.status + "\n\nStatusText: " + xmlObj.statusText + "\n\nReturn value: " + domEl);
																									};
								
								var txt = "";
								
								for(var i in args.vars)
								{
									txt = txt + '&' + (i) + '=' + escape(args.vars[i]);
								}
								
								try
								{
									xmlObj.onreadystatechange = function()
																{
																	if(xmlObj.readyState != 4)
																	{
																		return;
																	}
																	
																	if (xmlObj.status == 200)
																	{
																		if(args.resultAsXML == true)
																		{
																			args.successFunction(xmlObj.responseXML);
																		}
																		else
																		{
																			args.successFunction(xmlObj.responseText);
																		}
																	}
																	else
																	{
																		if(args.onFailure)
																		{
																			args.onFailure(xmlObj);
																		}
																		else
																		{
																			alert("There was a problem retrieving the XML data:\nServer: " + args.url + "\nServer status: " + xmlObj.status + "\nServer message: " + xmlObj.statusText);
																		}
																	}
																};
									
									var sendArguments = null;
									var reqPath = args.url;
									
									switch(args.requestType)
									{
										case "GET":
											
											reqPath = args.url + txt.replace(/&/, '?');
											
										break;
										case "POST":
											
											sendArguments = txt;
											addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
											
										break;
									}
									
									xmlObj.open(args.requestType, reqPath, true, args.username, args.password);
									
									for(var i in args.headers)
									{
										xmlObj.setRequestHeader(i, args.headers[i]);
									}
									
									xmlObj.send(sendArguments);
								}
								catch (e)
								{
									
								}
							}
			
			if( !args.dontExecute )
			{
				this.execute();
			}
		},
		
		ajaxConnIE: function(args)
		{
			if(!args.url)
			{
				return false;
			}
			
			var variables = [];
			var headers = [];
			var xmlObj = null;
			
			if(!args.vars)
			{
				args.vars = [];
			}
			
			if(!args.headers)
			{
				args.headers = [];
			}
			
			this.execute = 	function()
							{
								try
								{
									var xmlObj = new ActiveXObject("Msxml2.XMLHTTP");
								}
								catch(e)
								{
									alert('An error has occured calling the external site:\nErrorName: ' + e.name + '\nErrorMessage: ' + e.message);
									
									return false;
								}
								
								args.resultAsXML = (args.resultAsXML == undefined) ? true : args.resultAsXML;
								args.username = args.username?args.username:null;
								args.password = args.password?args.password:null;
								args.requestType = args.requestType?args.requestType:"GET";
								
								args.onload = args.onload ? args.onload: function() { };
								args.successFunction = args.successFunction ? args.successFunction:	function(domEl)
																									{
																										alert("URL:" + args.url + "\n\nStatus: " + xmlObj.status + "\n\nStatusText: " + xmlObj.statusText + "\n\nReturn value: " + domEl);
																									};
								
								var txt = "";
								
								for(var i in args.vars)
								{
									txt = txt + '&' + (i) + '=' + escape(args.vars[i]);
								}
								
								try
								{
									xmlObj.onreadystatechange = function()
																{
																	switch( xmlObj.readyState )
																	{
																		case 1:
																		case 2:
																		case 3:
																			
																			// Onload Event for IE
																			args.onload(xmlObj);
																			
																		break;
																		case 4:
																			
																			if (xmlObj.status == 200)
																			{
																				if(args.resultAsXML == true)
																				{
																					args.successFunction(xmlObj.responseXML);
																				}
																				else
																				{
																					args.successFunction(xmlObj.responseText);
																				}
																			}
																			else
																			{
																				if(args.onFailure)
																				{
																					args.onFailure(xmlObj);
																				}
																				else
																				{
																					alert("There was a problem retrieving the XML data:\nServer: " + args.url + "\nServer status: " + xmlObj.status + "\nServer message: " + xmlObj.statusText);
																				}
																			}
																			
																		break;
																	}
																};
									
									var sendArguments = null;
									var reqPath = args.url;
									
									switch(args.requestType)
									{
										case "GET":
											
											reqPath = args.url + txt.replace(/&/, '?');
											
										break;
										case "POST":
											
											sendArguments = txt;
											addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
											
										break;
									}
									
									xmlObj.open(args.requestType, reqPath, true, args.username, args.password);
									
									for(var i in args.headers)
									{
										xmlObj.setRequestHeader(i, args.headers[i]);
									}
									
									xmlObj.send(sendArguments);
								}
								catch (e)
								{
									
								}
							};
			
			if( !args.dontExecute )
			{
				this.execute();
			}
		}
		
	}
	
