function HTTPRequest(strName)
{
	this.className = strName + new Date().getTime();
	
	this.lang = _lang;
	this.charset = _charset;
	
	this.imageStyled = 'n';
	
	this.imageLoading = (_strLoading != '') ? '<img src="'+_strLoading+'" alt="Loading ..." \/>' : '';
	this.textLoading = (_strLoading != '') ? 'Loading ...' : '';
	
	this.imageFail = (_strFail != '') ? '<img src="'+_strFail+'" alt="Fail" \/>' : '';
	this.textFail = (_strFail != '') ? 'Fail' : '';
	
	this.imageSuccess = (_strSuccess != '') ? '<img src="'+_strSuccess+'" alt="Success" \/>' : '';
	this.textSuccess = (_strSuccess != '') ? 'Success' : '';
	
	this.imageBlank = (_strBlank != '') ? '<img src="'+_strBlank+'" alt="." \/>' : '';
	
	this._d = function()
	{
		var elements = new Array();
		for (var i = 0; i < arguments.length; i++)
		{
			var element = arguments[i];
			if (element && typeof element == 'string') element = document.getElementById(element);
			if (arguments.length == 1) return element;
			elements.push(element);
		}
		return elements;
	}

	this._c = function(oParent, strTagName, strClassName)
	{
		var arrElements = (strTagName == "*" && oParent.all)? oParent.all : oParent.getElementsByTagName(strTagName);
		var arrReturnElements = new Array();
		strClassName = strClassName.replace(/\-/g, "\\-");
		var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
		var oElement;
		for(var i=0; i<arrElements.length; i++)
		{
			oElement = arrElements[i];
			if(oRegExp.test(oElement.className))
			{
				arrReturnElements.push(oElement);
			}
		}
		return (arrReturnElements);
	}
	
	this._a = function(strAttribute)
	{
		var a;
		var i = 0;
		var arrObj = document.getElementsByTagName("*");
		var aLen = arrObj.length;
		strAttribute = strAttribute.toLowerCase();
		arrResult = [];
		for(a = 0; a < aLen; a++)
		{
			switch(strAttribute)
			{
				case 'accesskey': status = arrObj[a].accesskey; break;
				case 'alt': status = arrObj[a].alt; break;
				case 'checked': status = arrObj[a].checked; break;
				case 'class': status = arrObj[a].className; break;
				case 'disabled': status = arrObj[a].disabled; break;
				case 'href': status = arrObj[a].href; break;
				case 'id': status = arrObj[a].id; break;
				case 'rel': status = arrObj[a].rel; break;
				case 'src': status = arrObj[a].src; break;
				case 'style': status = arrObj[a].style; break;
				case 'tabindex': status = arrObj[a].tabIndex; break;
				case 'title': status = arrObj[a].title; break;
				case 'type': status = arrObj[a].type; break;
			}
			if(status) { arrResult[i] = arrObj[a]; i++; }
		}
		return arrResult;
	}
	
	this._t = function(strTitle)
	{
		var obj = document.getElementsByTagName("*");
		var maxI = obj.length;
		var i, j = 0;
		var result = new Array();
		for(i=0; i<maxI;i++)
		{
			if(obj[i].title && obj[i].title === strTitle)
			{
				result[j] = obj[i];
				j++;
			}
		}
		return result;
	}
	
	this.setCookie = function(c_name, c_value, c_expiredays)
	{
		var exdate = new Date();
		exdate.setDate(exdate.getDate()+c_expiredays);
		document.cookie = c_name+'='+escape(c_value)+((c_expiredays==null) ? '' : ';expires='+exdate.toGMTString());
		return true;
	}
	
	this.getCookie = function(c_name)
	{
		if (document.cookie.length>0)
		{
			var c_start = document.cookie.indexOf(c_name + '=');
			if (c_start != -1)
			{
				c_start = c_start + c_name.length+1;
				var c_end = document.cookie.indexOf(';', c_start);
				if (c_end == -1) c_end = document.cookie.length;
				return unescape(document.cookie.substring(c_start, c_end));
			}
			else
			{
				return '';
			}
		}
		return '';
	}
	
	this.checkCookie = function(c_name)
	{
		var self = this;
		var value = self.getCookie(c_name);
		return (value != null && value != '') ? value : '';
	}
	
	this.deleteCookie = function(c_name)
	{
		var self = this;
		if(self.checkCookie(c_name) != '')
		{
			document.cookie = c_name+'=;expires=Thu, 01-Jan-1970 00:00:01 GMT';
		}
		return true;
	}
	
	this.getWindowDimension = function (self)
	{
		var intW = 0;
		var intH = 0;
		var adjW = 18;
		var adjH = 0;
		if(window.innerHeight)
		{
			intW = window.innerWidth - adjW;
			intH = window.innerHeight - adjH;
		} 
		else
		{
			if(document.documentElement && document.documentElement.clientHeight)
			{
				intW = document.documentElement.clientWidth;
				intH = document.documentElement.clientHeight;
			}
			else
			{
				if(document.body && document.body.clientHeight)
				{
					intW = document.body.clientWidth;
					intH = document.body.clientHeight;
				}
			}
		}
		var arrDim = [intW, intH];
		return arrDim;
	}
	
	this.appendChildElement = function (self, obj)
	{
		try
		{
			if (document.body)
			{
				document.body.appendChild(obj);
			}
			else
			{
				var documentbody = document.getElementsByTagName('body');
				documentbody[0].appendChild(obj);
				documentbody[0].innerHTML = documentbody[0].innerHTML;
			}
		}
		catch(e)
		{
			setTimeout(function(){self.appendChildElement(self, obj);}, 10, self);
		}
		return true;
	}
	
	this.setPreload = function (self)
	{
		try
		{
			if(!self._d('_preloaded'))
			{
				var el = document.createElement('div');
				el.setAttribute('id', '_preloaded');
				with(el.style)
				{
					position='absolute';
					left='-999999px';
					top='-999999px';
					zIndex='100';
				}
				self.appendChildElement(self, el);
			}
			self._d('_preloaded').innerHTML = self.imageLoading + self.imageFail + self.imageSuccess + self.imageBlank;
			
			if(!self._d('_blocked_content_'))
			{
				var arrDim = self.getWindowDimension(self);
				var el = document.createElement('div');
				el.setAttribute('id', '_blocked_content_');
				with(el.style)
				{
					backgroundColor='transparent';
					position='absolute';
					left='-999999px';
					top='-999999px';
					width=arrDim[0]+'px';
					height=arrDim[1]+'px';
					zIndex='1';
				}
				self.appendChildElement(self, el);
			}
		}
		catch(e)
		{
			setTimeout(function(){self.setPreload(self);}, 10, self);
		}
		return true;
	}
	
	this.noSpellChecked = function(self)
	{
		var oTextInput = self._c(document, 'input', '_nospellcheck');
		var oTextArea = self._c(document, 'textarea', '_nospellcheck');
		var obj = oTextInput.concat(oTextArea);
		var ol = obj.length;
		var o;
		for(o = 0; o < ol; o++)
		{
			obj[o].setAttribute('spellcheck', 'false');
		}
		return true;
	}
	
	this.spellChecked = function(self)
	{
		var oTextInput = self._c(document, 'input', '_spellcheck');
		var oTextArea = self._c(document, 'textarea', '_spellcheck');
		var obj = oTextInput.concat(oTextArea);
		var ol = obj.length;
		var o;
		for(o = 0; o < ol; o++)
		{
			obj[o].setAttribute('spellcheck', 'true');
		}
		return true;
	}
	
	this.newWindow = function(self)
	{
		var oAnchor = self._c(document, 'a', '_newwindow');
		var oArea = self._c(document, 'area', '_newwindow');
		var oForm = self._c(document, 'form', '_newwindow');
		var obj = oAnchor.concat(oArea).concat(oForm);
		var ol = obj.length;
		var o;
		for(o = 0; o < ol; o++)
		{
			obj[o].setAttribute('target', '_blank');
		}
		return true;
	}
	
	this.defaultBehaviour = function(self)
	{
		var oTextInput = self._c(document, 'input', '_default');
		var oTextArea = self._c(document, 'textarea', '_default');
		var obj = oTextInput.concat(oTextArea);
		var ol = obj.length;
		var o;
		for(o = 0; o < ol; o++)
		{
			if(navigator.userAgent.indexOf('MSIE 7')!=-1)
			{
				obj[o].onfocus = function() { defaultFocusHandler(this); }
				obj[o].onblur = function() { defaultBlurHandler(this); }
			}
			else
			{
				obj[o].setAttribute("onfocus", "defaultFocusHandler(this)");
				obj[o].setAttribute("onblur", "defaultBlurHandler(this)");
			}
		}
		return true;
	}
	
	this.clearElements = function (strDestinationIds, strDivider)
	{
		var self = this;
		var id = strDestinationIds.split(strDivider);
		for(var i=0; i<id.length; i++)
		{
			self.doWrite(id[i], '', self);
		}
		return true;
	}
	
	this.showBlockedContent = function (self)
	{
		var arrDim = self.getWindowDimension(self);
		if(self._d('_blocked_content_'))
		{
			with(self._d('_blocked_content_').style)
			{
				width=arrDim[0]+'px';
				height=arrDim[1]+'px';
				left='0';
				top='0';
			}
		}
		return true;
	}
	
	this.hideBlockedContent = function (self)
	{
		if(self._d('_blocked_content_'))
		{
			with(self._d('_blocked_content_').style)
			{
				left='-999999px';
				top='-999999px';
			}
		}
		return true;
	}
	
	this.getImagePosition = function (strId, self)
	{
		var s = '';
		if(self._d(strId))
		{
			var w = self.getWriteableById(strId);
			if(w == 'innerHTML')
			{
				s = 'margin:'+0.5*(parseInt(self._d(strId).offsetHeight)-32)+'px 0 0 '+0.5*(parseInt(self._d(strId).offsetWidth)-32)+'px';
			}
		}
		return s;
	}
	
	this.showLoading = function (strId, self)
	{
		if(self._d(strId))
		{
			self.showBlockedContent(self);
			var w = self.getWriteableById(strId);
			switch(w)
			{
				case 'value': self._d(strId).value = self.textLoading; break;
				case 'innerHTML': self._d(strId).innerHTML = self.imageLoading; break;
			}
		}
		return true;
	}
	
	this.stopLoading = function (e)
	{
		if(!e) e = window.event;
		
		var self = this;
		self.hideBlockedContent(self);
		
		try { window.stop(); }
		catch(err) { document.execCommand("Stop"); }
		
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
		
		e.returnValue = false;
		if (e.preventDefault) e.preventDefault();
		
		return true;
	}
	
	this.chr = function (codePt)
	{
		if (codePt > 0xFFFF)
		{
			codePt -= 0x10000;
			return String.fromCharCode(0xD800 + (codePt >> 10), 0xDC00 + (codePt & 0x3FF));
		}
		else
		{
			return String.fromCharCode(codePt);
		}
	}

	this.stripslashes = function (strText)
	{
		strText = (strText+'').toString();
		return strText.replace('/\0/g', '0').replace('/\(.)/g', '$1');
	}

	this.strip_tags = function (strText, strAllowedTags)
	{
		strText = (strText+'').toString();
		var key = '', tag = '', arAllowedArray;
		var matches = arAllowedArray = [];
		var arAllowedKeys = {};
		if (strAllowedTags)
		{
			strAllowedTags = strAllowedTags.replace(/[\<\> ]+/g, '');
			arAllowedArray = strAllowedTags.split(',');

			for (key in arAllowedArray)
			{
				tag = arAllowedArray[key];
				arAllowedKeys['<' + tag + '>']   = true;
				arAllowedKeys['<' + tag + ' />'] = true;
				arAllowedKeys['</' + tag + '>']  = true;
			}
		}
		matches = strText.match(/(<\/?[^>]+>)/gi);
		for (key in matches)
		{
			tag = matches[key];
			if (!arAllowedKeys[tag])
			{
				strText = strText.replace(tag, "");
			}
		}
		return strText;
	}

	this.doubleLines = function (strText)
	{
		strText = (strText+'').toString();
		return strText.replace(/\n/g, '\n\n');
	}

	this.removeLineBreaks = function (strText)
	{
		var self = this;
		strText = (strText+'').toString();
		return strText.replace(/\r\n/g,'').replace(/\r/g,'').replace(/\n/g,'').replace(/\f/g,'').replace(/\v/g,'').replace(self.chr(9),'').replace(self.chr(13),'');
	}

	this.getWriteableById = function (strId)
	{
		var self = this;
		if(self._d(strId))
		{
			var el = self._d(strId);
			return (el.type) ? 'value' : 'innerHTML';
		}
		return true;
	}

	this.doWrite = function (strId, strContent, self)
	{
		if(self._d(strId))
		{
			var w = self.getWriteableById(strId);
			strContent = self.removeLineBreaks(strContent);
			if(strContent.toLowerCase() === 'fail')
			{
				switch(w)
				{
					case 'value': self._d(strId).value = self.textFail; break;
					case 'innerHTML': self._d(strId).innerHTML = self.imageFail; break;
				}
			}
			else
			{
				switch(w)
				{
					case 'value': self._d(strId).value = self.doubleLines(self.strip_tags(self.stripslashes(strContent))); break;
					case 'innerHTML': self._d(strId).innerHTML = self.stripslashes(strContent); break;
				}
			}
		}
		self.hideBlockedContent(self);
		return true;
	}

	this.urlencode = function (strText)
	{
		strText = (strText+'').toString();
		return encodeURIComponent(strText).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
	}

	this.urldecode = function (strText)
	{
		strText = (strText+'').toString();
		return decodeURIComponent(strText).replace(/\+/g, '%20');
	}

	this.getFormElements = function (strParentId)
	{
		var self = this;
		if(self._d(strParentId))
		{
			var els = self._d(strParentId).getElementsByTagName("*");
			var i;
			var j = 0;
			var maxI = els.length;
			var eInput = new Array();
			var el,eName,eId,eType,eSize,eSelIndex,eMaxLength,eAlt,eRel,eTitle,eValue,eDefaultValue,eSrc,eHref,eData,eTarget,eChecked,eDefaultChecked,eReadOnly,eDisabled;
			for(i=0; i<maxI; i++)
			{
				el = els[i];
				if(el.type)
				{
					eName = (el.name) ? self.urlencode(el.name) : '';
					eId = (el.id) ? self.urlencode(el.id) : '';
					if(eName != '' && eId != '')
					{
						eType = (el.type) ? self.urlencode(el.type) : '';
						eSize = (el.size) ? self.urlencode(el.size) : '';
						eSelIndex = (el.selectedIndex) ? self.urlencode(el.selectedIndex) : '';
						eMaxLength = (el.maxLength) ? self.urlencode(el.maxLength) : '';
						eAlt = (el.alt) ? self.urlencode(el.alt) : '';
						eRel = (el.rel) ? self.urlencode(el.rel) : '';
						eTitle = (el.title) ? self.urlencode(el.title) : '';
						eValue = (el.value) ? self.urlencode(el.value) : '';
						eDefaultValue = (el.defaultValue) ? self.urlencode(el.defaultValue) : '';
						eSrc = (el.src) ? self.urlencode(el.src) : '';
						eHref = (el.href) ? self.urlencode(el.href) : '';
						eData = (el.data) ? self.urlencode(el.data) : '';
						eTarget = (el.target) ? self.urlencode(el.target) : '';
						eChecked = (el.checked) ? self.urlencode(el.checked) : '';
						eDefaultChecked = (el.defaultChecked) ? self.urlencode(el.defaultChecked) : '';
						eReadOnly = (el.readOnly) ? self.urlencode(el.readOnly) : '';
						eDisabled = (el.disabled) ? self.urlencode(el.disabled) : '';
						eInput[j] = new Array(eName,eId,eType,eSize,eSelIndex,eMaxLength,eAlt,eRel,eTitle,eValue,eDefaultValue,eSrc,eHref,eData,eTarget,eChecked,eDefaultChecked,eReadOnly,eDisabled);
						j++;
					}
				}
			}
			return eInput;
		}
		else
		{
			return false;
		}
	}

	this.getQuery = function (strParentId)
	{
		var self = this;
		var strQuery = '';
		var els = self.getFormElements(strParentId);
		if(els)
		{
			var maxEl = els.length;
			var i;
			for(i=0;i<maxEl;i++)
			{
				strQuery += self.urldecode(els[i][0]) + '=' + self.urldecode(els[i][9]) + '&';
			}
			strQuery += '---';
			strQuery = strQuery.replace(/&---/g,'').replace(/---/g,'');
			strQuery = (strQuery+'').toString();
		}
		return strQuery;
	}

	this.encodeQuery = function (strQuery, self)
	{
		var r = '';
		var q = strQuery.split('&');
		var pair;
		for(var p=0; p<q.length; p++)
		{
			if(q[p] !== '')
			{
				pair = q[p].split('=');
				r += pair[0]+'='+(pair[1] ? self.urlencode(pair[1]) : '')+'&';
			}
		}
		r = ((r+'').toString()+'lang='+self.lang+'&charset='+self.charset+'&jsid='+Math.random()).replace(/\&\&+/g, '&');
		return r;
	}
	
	this.httpResponse = function (intStatus)
	{
		var self = this;
		var strResponse;
		switch(intStatus)
		{
			case 301: strResponse = 'Resource page was moved permanently'; break;
			case 307: strResponse = 'Temporarily redirected'; break;
			case 400: strResponse = 'Bad request'; break;
			case 401: strResponse = 'Unauthorized'; break;
			case 403: strResponse = 'Access is forbidden'; break;
			case 404: strResponse = 'File is not found'; break;
			case 405: strResponse = 'Method is not allowed'; break;
			case 408: strResponse = 'Time out'; break;
			case 413: strResponse = 'Request entity is too large'; break;
			case 414: strResponse = 'Request URI is too long'; break;
			case 423: strResponse = 'Resource is locked'; break;
			case 450: strResponse = 'Blocked by Windows Parental Controls'; break;
			case 500: strResponse = 'Internal Server Error'; break;
			case 503: strResponse = 'Service is currently unavailable'; break;
			case 504: strResponse = 'Gateway Timeout'; break;
			case 509: strResponse = 'Bandwidth Limit Exceeded'; break;
			default: strResponse = 'Fail'; break;
		}
		return strResponse;
	}
	
	this.getRequest = function (strUrl, strQuery, strPrefix, strSuffix, strDestinationId, strLoaderIsDisplayed)
	{
		var self = this;
		self.xmlhttp = false;
		if((strLoaderIsDisplayed == 'y' || strLoaderIsDisplayed == 's') && self.srcLoading != '')
		{
			if(strLoaderIsDisplayed == 's')
			{
				self.imageStyled = 'y';
				self.imageLoading = (_strLoading != '') ? '<img src="'+_strLoading+'" alt="Loading ..." style="'+self.getImagePosition(strDestinationId, self)+'" \/>' : '';
			}
			self.showLoading(strDestinationId, self);
		}
		strPrefix = (strPrefix+'').toString().replace(/\[br\]/g, '<br \/>');
		strSuffix = (strSuffix+'').toString().replace(/\[br\]/g, '<br \/>');
		strUrl += '?'+self.encodeQuery(strQuery, self);
		if (window.XMLHttpRequest)
		{
			self.xmlhttp = new XMLHttpRequest();
			if (self.xmlhttp.overrideMimeType) { self.xmlhttp.overrideMimeType('text/html'); }
		}
		else if (window.ActiveXObject)
		{
			try
			{
				self.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			} 
			catch (e)
			{
				try { self.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } 
				catch (e) {}
			}
		}
		if (!self.xmlhttp)
		{
			self.stopLoading;
		}
		else
		{
			with(self.xmlhttp)
			{
				onreadystatechange = function()
				{
					switch(readyState)
					{
						case 1: break; //Connection was opened
						case 2: break; //Request was sent
						case 3: break; //Response received
						case 4: //Completed
							var strResponse = '';
							switch(status)
							{
								case 200: strResponse = responseText; break;
								default: strResponse = self.httpResponse(status); break;
							}
							self.doWrite(strDestinationId, strPrefix+strResponse+strSuffix, self);
							if(status !== 200) self.stopLoading;
							abort();
							break;
						default: break;
					}
				}
				open("GET", strUrl, true);
				setRequestHeader("HOST", window.location.hostname);
				setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset="+self.charset);
				setRequestHeader("Content-Language", self.lang);
				setRequestHeader("Content-Length", strUrl.length);
				setRequestHeader("Cache-Control", "no-cache, no-store, must-revalidate");
				setRequestHeader("Pragma", "no-cache");
				setRequestHeader("Accept-Encoding", "compress, gzip");
				setRequestHeader("Transfer-Encoding", "chunked");
				setRequestHeader("Connection", "close");
				if (window.XMLHttpRequest) { send(null); }
				else if (window.ActiveXObject) { send(); }
			}
		}
		return true;
	}

	this.postRequest = function (strUrl, strQuery, strPrefix, strSuffix, strDestinationId, strLoaderIsDisplayed)
	{
		var self = this;
		self.xmlhttp = false;
		if((strLoaderIsDisplayed == 'y' || strLoaderIsDisplayed == 's') && self.srcLoading != '')
		{
			if(strLoaderIsDisplayed == 's')
			{
				self.imageStyled = 'y';
				self.imageLoading = (_strLoading != '') ? '<img src="'+_strLoading+'" alt="Loading ..." style="'+self.getImagePosition(strDestinationId, self)+'" \/>' : '';
			}
			self.showLoading(strDestinationId, self);
		}
		strPrefix = (strPrefix+'').toString().replace(/\[br\]/g, '<br \/>');
		strSuffix = (strSuffix+'').toString().replace(/\[br\]/g, '<br \/>');
		strQuery = self.encodeQuery(strQuery, self);
		if (window.XMLHttpRequest)
		{
			self.xmlhttp = new XMLHttpRequest();
			if (self.xmlhttp.overrideMimeType) { self.xmlhttp.overrideMimeType('text/html'); }
		}
		else if (window.ActiveXObject)
		{
			try
			{
				self.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			} 
			catch (e)
			{
				try { self.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } 
				catch (e) {}
			}
		}
		if (!self.xmlhttp)
		{
			self.stopLoading;
		}
		else
		{
			with(self.xmlhttp)
			{
				onreadystatechange = function()
				{
					switch(readyState)
					{
						case 1: break; //Connection was opened
						case 2: break; //Request was sent
						case 3: break; //Response received
						case 4: //Completed
							var strResponse = '';
							switch(status)
							{
								case 200: strResponse = responseText; break;
								default: strResponse = self.httpResponse(status); break;
							}
							self.doWrite(strDestinationId, strPrefix+strResponse+strSuffix, self);
							if(status !== 200) self.stopLoading;
							self.xmlhttp.abort();
							break;
						default: break;
					}
				}
				open("POST", strUrl, true);
				setRequestHeader("HOST", window.location.hostname);
				setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset="+self.charset);
				setRequestHeader("Content-Language", self.lang);
				setRequestHeader("Content-Length", strQuery.length);
				setRequestHeader("Cache-Control", "no-cache, no-store, must-revalidate");
				setRequestHeader("Pragma", "no-cache");
				setRequestHeader("Accept-Encoding", "compress, gzip");
				setRequestHeader("Transfer-Encoding", "chunked");
				setRequestHeader("Connection", "close");
				send(strQuery);
			}
		}
		return true;
	}
	
	this.file_get_contents = function (strUrl)
	{
		var self = this;
		self.xmlhttp = false;
		var strResponse = '';
		
		if (window.XMLHttpRequest)
		{
			self.xmlhttp = new XMLHttpRequest();
			if (self.xmlhttp.overrideMimeType) { self.xmlhttp.overrideMimeType('text/xml'); }
		}
		else if (window.ActiveXObject)
		{
			try
			{
				self.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			} 
			catch (e)
			{
				try { self.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } 
				catch (e) {}
			}
		}
		
		if(!self.xmlhttp)
		{
			return false;
		}
		else
		{
			with(self.xmlhttp)
			{
				open("GET", strUrl, false);
				setRequestHeader("HOST", window.location.hostname);
				setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset="+self.charset);
				setRequestHeader("Content-Language", self.lang);
				setRequestHeader("Content-Length", strUrl.length);
				setRequestHeader("Cache-Control", "no-cache, no-store, must-revalidate");
				setRequestHeader("Pragma", "no-cache");
				setRequestHeader("Accept-Encoding", "compress, gzip");
				setRequestHeader("Transfer-Encoding", "chunked");
				setRequestHeader("Connection", "close");
				if (window.XMLHttpRequest) { send(null); }
				else if (window.ActiveXObject) { send(); }
				strResponse = responseText;
			}
		}
		return strResponse;
	}
	
	this.parse_xml_file = function(strXmlPath, strParentNode, strChildNodes, strTargetIds, strDivider)
	{
		var self = this;
		var arrChildNodes = strChildNodes.split(strDivider);
		var arrTargetIds = strTargetIds.split(strDivider);
		
		self.xmlhttp = false;
		if (window.XMLHttpRequest)
		{
			self.xmlhttp = new XMLHttpRequest();
			if (self.xmlhttp.overrideMimeType) { self.xmlhttp.overrideMimeType('text/xml'); }
		}
		else if (window.ActiveXObject)
		{
			try
			{
				self.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			} 
			catch (e)
			{
				try { self.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } 
				catch (e) {}
			}
		}
		
		if(!self.xmlhttp)
		{
			return false;
		}
		else
		{
			with(self.xmlhttp)
			{
				open("GET", strXmlPath, false);
				if (window.XMLHttpRequest) { send(null); }
				else if (window.ActiveXObject) { send(); }
				
				self.xmlDoc = responseXML;
				
				var maxI = self.xmlDoc.getElementsByTagName(strParentNode).length;
				var maxJ = arrChildNodes.length;
				var iX, jX, cNode, tNode;
				for (iX=0; iX<maxI; iX++)
				{
					for(jX=0; jX<maxJ; jX++)
					{
						cNode = arrChildNodes[jX];
						tNode = arrTargetIds[jX];
						self.doWrite(tNode+iX, self.xmlDoc.getElementsByTagName(cNode)[iX].childNodes[0].nodeValue, self);
					}
				}
			}
			return true;
		}
	}
}

/* Common Functions */
function _$()
{
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++)
	{
		var element = arguments[i];
		if (element && typeof element == 'string') element = document.getElementById(element);
		if (arguments.length == 1) return element;
		elements.push(element);
	}
	return elements;
}

function _c(oParent, strTagName, strClassName)
{
	var arrElements = (strTagName == "*" && oParent.all)? oParent.all : oParent.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++)
	{
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className))
		{
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements);
}

function _a(strAttribute)
{
	var a;
	var i = 0;
	var arrObj = document.getElementsByTagName("*");
	var aLen = arrObj.length;
	strAttribute = strAttribute.toLowerCase();
	arrResult = [];
	for(a = 0; a < aLen; a++)
	{
		switch(strAttribute)
		{
			case 'accesskey': status = arrObj[a].accesskey; break;
			case 'alt': status = arrObj[a].alt; break;
			case 'checked': status = arrObj[a].checked; break;
			case 'class': status = arrObj[a].className; break;
			case 'disabled': status = arrObj[a].disabled; break;
			case 'href': status = arrObj[a].href; break;
			case 'id': status = arrObj[a].id; break;
			case 'rel': status = arrObj[a].rel; break;
			case 'src': status = arrObj[a].src; break;
			case 'style': status = arrObj[a].style; break;
			case 'tabindex': status = arrObj[a].tabIndex; break;
			case 'title': status = arrObj[a].title; break;
			case 'type': status = arrObj[a].type; break;
		}
		if(status) { arrResult[i] = arrObj[a]; i++; }
	}
	return arrResult;
}

function _t(strTitle)
{
	var obj = document.getElementsByTagName("*");
	var maxI = els.length;
	var i, j = 0;
	var result = new Array();
	for(i=0; i<maxI;i++)
	{
		if(obj[i].title && obj[i].title === strTitle)
		{
			result[j] = obj[i];
			j++;
		}
	}
	return result;
}

function toggle(strChildID, strParentID, strPosition, intAdjWidth, intAdjHeight)
{
	var child = _$(strChildID);
	if(child.style.top == '-999999px')
	{
		var parent = _$(strParentID);
		var x = parseInt(parent.offsetLeft);
		var y = parseInt(parent.offsetTop);
		
		switch(strPosition)
		{
			case 'top':
				y  -= parseInt(child.offsetHeight);
				break;
			case 'right':
				x += parseInt(parent.offsetWidth);
				break;
			case 'below':
				y += parseInt(parent.offsetHeight);
				break;
			case 'left':
				x -= parseInt(child.offsetWidth);
				break;
			default:
				y += parseInt(parent.offsetHeight);
		}
		
		var sParent = parent;
		while (sParent.offsetParent)
		{
			sParent = sParent.offsetParent;
			x += parseInt(sParent.offsetLeft);
			y += parseInt(sParent.offsetTop);
		}
		
		with(child.style)
		{
			position = 'absolute';
			left = (x + intAdjWidth)+'px';
			top = (y + intAdjHeight)+'px';
		}
	}
	else
	{
		with(child.style)
		{
			position = 'absolute';
			left = '-999999px';
			top = '-999999px';
		}
	}
	return true;
}

/* The instances MUST be created inside a function so they can be destroyed. */
function setACookie(c_name, c_value, c_expiredays)
{
	var sc = new HTTPRequest('SC');
	var rc = sc.setCookie(c_name, c_value, c_expiredays);
	sc = null;
	rc = null;
	return true;
}

function checkACookie(c_name)
{
	var cc = new HTTPRequest('CC');
	var rc = cc.checkCookie(c_name);
	cc = null;
	return (rc != '') ? rc : false;
}

function getACookie(c_name)
{
	var gc = new HTTPRequest('GC');
	var rc = gc.getCookie(c_name);
	gc = null;
	return rc;
}

function deleteACookie(c_name)
{
	var dc = new HTTPRequest('DC');
	var rc = dc.deleteCookie(c_name);
	dc = null;
	rc = null;
	return true;
}

function clearElements(strDestinationIds, strDivider)
{
	var ce = new HTTPRequest('CE');
	ce.clearElements(strDestinationIds, strDivider);
	ce = null;
	return true;
}

function createQuery(strParentId)
{
	var cq = new HTTPRequest('CQ');
	var s = cq.getQuery(strParentId);
	cq = null;
	return s;
}

function get(strUrl, strQuery, strParentId, strPrefix, strSuffix, strDestinationId, strLoaderIsDisplayed)
{
	if(strQuery == '')
	{
		if(strParentId == '')
		{
			var bd = document.getElementsByTagName('body');
			strParentId = (bd[0].id) ? bd[0].id : bd[0].setAttribute('id', 'bodyId');
		}
		strQuery = createQuery(strParentId);
	}
	var gr = new HTTPRequest('GR');
	gr.getRequest(strUrl, strQuery, strPrefix, strSuffix, strDestinationId, strLoaderIsDisplayed);
	gr = null;
	return true;
}

function post(strUrl, strQuery, strParentId, strPrefix, strSuffix, strDestinationId, strLoaderIsDisplayed)
{
	if(strQuery == '')
	{
		if(strParentId == '')
		{
			var bd = document.getElementsByTagName('body');
			strParentId = (bd[0].id) ? bd[0].id : bd[0].setAttribute('id', 'bodyId');
		}
		strQuery = createQuery(strParentId);
	}
	var pr = new HTTPRequest('PR');
	pr.postRequest(strUrl, strQuery, strPrefix, strSuffix, strDestinationId, strLoaderIsDisplayed);
	pr = null;
	return true;
}

function file_get_contents(strUrl)
{
	var fc = new HTTPRequest('FC');
	var s = fc.file_get_contents(strUrl);
	fc = null;
	return s;
}

function parseAnXML(strXmlPath, strParentNode, strChildNodes, strTargetIds, strDivider)
{
	strXmlPath = (strXmlPath+'').toString();
	var px = new HTTPRequest('PX');
	px.parse_xml_file(strXmlPath, strParentNode, strChildNodes, strTargetIds, strDivider);
	px = null;
	return true;
}

function display_wishlist()
{
	if(_$('wishlistbox'))
	{
		get(__BASE_URL__+'inc/wishlist.php', 'do=display&wid='+_wid, 'wishlistbox', '', '', 'wishlistbox', 'y');
	}
	return true;
}

function preload()
{
	var pre = new HTTPRequest('PRE');
	pre.setPreload(pre);
	pre.noSpellChecked(pre);
	pre.spellChecked(pre);
	pre.newWindow(pre);
	pre.defaultBehaviour(pre);
	
	if(!checkACookie('WID'))
	{
		setACookie('WID', _sid, 365);
	}
	
	_wid = getACookie('WID');
	display_wishlist();
	
	pre = null;
	return true;
}

function defaultFocusHandler(obj)
{
	if(obj.value == obj.title) obj.value = '';
	return true;
}

function defaultBlurHandler(obj)
{
	if(obj.value == '') obj.value = obj.title;
	return true;
}

function add_to_wishlist(P_QueryId, P_RefId, P_SearchType, P_Type, P_SubType, P_Area, P_Location, P_Currency, P_Lang, P_Price, P_Bedrooms, P_Bathrooms, P_Link, P_Description)
{
	if(_$('wishlistbox'))
	{
		_wid = getACookie('WID');
		var q = '';
		q += 'do=store&wid='+_wid;
		q += '&P_QueryId='+P_QueryId;
		q += '&P_RefId='+P_RefId;
		q += '&P_SearchType='+P_SearchType;
		q += '&P_Type='+P_Type;
		q += '&P_SubType='+P_SubType;
		q += '&P_Area='+P_Area;
		q += '&P_Location='+P_Location;
		q += '&P_Currency='+P_Currency;
		q += '&P_Lang='+P_Lang;
		q += '&P_Price='+P_Price;
		q += '&P_Bedrooms='+P_Bedrooms;
		q += '&P_Bathrooms='+P_Bathrooms;
		q += '&P_Link='+P_Link;
		q += '&P_Description='+P_Description;
		
		post(__BASE_URL__+'inc/wishlist.php', q, 'wishlistbox', '', '', 'wishlistbox', 'y');
	}
	return true;
}

function clear_wisthlist()
{
	if(_$('wishlistbox'))
	{
		_wid = getACookie('WID');
		get(__BASE_URL__+'inc/wishlist.php', 'do=clear&wid='+_wid, 'wishlistbox', '', '', 'wishlistbox', 'y');
	}
	return true;
}

function delete_wishlist(sid, P_RefId)
{
	if(_$('wishlistbox'))
	{
		get(__BASE_URL__+'inc/wishlist.php', 'do=delete&wid='+sid+'&P_RefId='+P_RefId, 'wishlistbox', '', '', 'wishlistbox', 'y');
	}
	return true;
}

function open_wisthlist()
{
	window.open(__BASE_URL__+'wishlist.php', '_blank');
	return true;
}

function loadAJAX()
{
	if (window)
	{
		if (typeof window.addEventListener != "undefined")
		{
			window.addEventListener('load', preload, true);
		}
		else if (typeof window.attachEvent != "undefined")
		{
			window.attachEvent('onload', preload);
		}
		else
		{
			window.onload = function() { setTimeout('preload()', 10); }
		}
	}
	return true;
}

var _wid;
var _lang = 'en-us';
var _charset = 'iso-8859-15';
var _strImgDir = __BASE_URL__+'inc/images/';
var _strLoading = _strImgDir+'loading.gif';
var _strFail = _strImgDir+'fail.gif';
var _strSuccess = _strImgDir+'success.gif';
var _strBlank = _strImgDir+'blank.gif';
loadAJAX();


