﻿	function HttpHandler(){
		
		this.doIt = function(response_){}
		
		this.doErr = function(status_){}
	}
	
	function HttpHandleFactory(){
		var self = this;
		
		this._do = null;
		this._response = null;
		this._request = null;
		this._status = null;
		this.req = null;
		
		this.initialize = function(){
			try {
				self._request = new XMLHttpRequest();
			} catch (e) {
				try {
					self._request = new ActiveXObject('Msxml2.XMLHTTP');
				} catch (e) {
					try {
						self._request = new ActiveXObject('Microsoft.XMLHTTP');
					} catch (e) {
						self._request = false;
					}  
				}
			}
			if(!self._request)
				alert('Error initalizing XMLHttpRequest!');
		};
		
		this.connection = function(uri_, obj){
			try {
				self._request.open('get', self.formatURI(uri_), true);
				self._do = obj;
	     	self._request.onreadystatechange = self.getPageFromService;
				self._request.send(null);
			} catch(e) {
				alert(e);
			}
		};
		/**
		 ** encode url	
		 **/
		this.encodeURI = function(uri_){
			return encodeURIComponent(uri_);
		};
		
		this.getPageFromService = function(){
			try{
				if(self._request.readyState == 4 && self._request.status == 200){
					self._response = self._request.responseText;
					self._do.doIt(self._response);
				}else if(self._request.readyState == 4){
					self._status = self._request.status;
					self._do.doErr(self._status);
				}
			} catch(e) {
				self._do.doErr(e);
			}
		};
		
		this.formatURI = function(uri_){
			var rnd = parseInt(Math.random()*10000);
			if(uri_.indexOf('\?') != -1)
				return uri_ + '&amp;' + rnd;
			else
				return uri_ + '?' + rnd;
		}
		
		this.initialize();
	}