function hssJX()
{
	this.xmlHttp = false;
    this.verbose = false;
    this.ajaxImage = "/start/image/ajax-loader.gif";
    this.jFuncExecInnerCompleted = false;
    this.textLoading = "loading!";

	this.Create = function()
	{
		if (window.XMLHttpRequest){
			// If IE7, Mozilla, Safari, etc: Use native object
			this.xmlHttp = new XMLHttpRequest();
		}
		if (!this.xmlHttp)
		{
			if (typeof XMLHttpRequest != 'undefined') {
				this.xmlHttp = new XMLHttpRequest();
			}
		}
		if (!this.xmlHttp) {
			try {
				this.xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) 
			{
				try {
					this.xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
				} catch(e) {
					this.xmlHttp  = false;
				}
			}
		}
		return this.xmlHttp;
	};
	
	this.ArrayToString = function(aArgs)
	{
		s = '';	i = 0;
		for (var sKey in aArgs)
		{
			s = s + '&' + sKey + "=" + aArgs[sKey];
			i++;
		}
		return s;
	};
	
	// xmlHttpReq.setRequestHeader('Content-Type', 'text/html');
	
	this.Exec = function(scriptName, sArgs, aArgs, sRequestTyp, jFunc)
	{
		if (sRequestTyp == '' || !sRequestTyp)
		{
			sRequestTyp = 'GET';
		}
	
	
		this.xmlHttp = this.Create();
	    rnd  = parseInt(Math.random()*99999999);
	    sXml = scriptName + "?rnd=" + rnd;
	    
	    var params = '';
	    
		if( sArgs != '') params = params + sArgs;
	    params = params + this.ArrayToString(aArgs);
	    
	    this.xmlHttp.onreadystatechange = jFunc;
	    
	    if (sRequestTyp == 'GET')
	    {
	    	this.xmlHttp.open('GET', sXml + '&' + params, true);	
	    	this.xmlHttp.send(null);	
	    }
	    else if (sRequestTyp == 'POST')
	    {
	    	this.xmlHttp.open("POST", sXml, true);
			this.xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			this.xmlHttp.setRequestHeader("Content-length", params.length);
			this.xmlHttp.setRequestHeader("Connection", "close");
			this.xmlHttp.send(params);

	    }
	    		
	};

	this.ExecSync = function(scriptName, sArgs, aArgs, sRequestTyp, jFunc)
	{
		this.xmlHttp = this.Create();
	    rnd  = parseInt(Math.random()*99999999);
	    sXml = scriptName + "?rnd=" + rnd;
	    if( sArgs != '') sXml = sXml + "&" + sArgs;
	    sXml = sXml + this.ArrayToString(aArgs);
	    if( this.verbose ) alert( sXml );
	    this.xmlHttp.open(sRequestTyp, sXml, false);
	    this.xmlHttp.onreadystatechange = jFunc;
	    this.xmlHttp.send(null);		
	};

    this.setImage = function(imgFile)
    {
        this.ajaxImage = imgFile;
    };

    this.theObj = null;

	this.ExecInner = function(scriptName, sArgs, aArgs, theObj, imgFile, jFuncExecInnerCompleted, sRequestTyp)
    {
 		if (imgFile != null)
        {
            this.setImage(imgFile);
        }
        
        this.theObj = theObj;
        
        if( jFuncExecInnerCompleted )
        {
        	this.jFuncExecInnerCompleted = jFuncExecInnerCompleted;
        }

		this.setLoadImage(this.theObj);
		
		this.Exec(scriptName, sArgs, aArgs, sRequestTyp, this.insertInner.bind(this));
    }

	this.setLoadImage = function(Obj,center)
	{
		if(!Obj)
		{
			return;
		}		
		var imgStr = "<img src='" + this.ajaxImage + "' alt='" + this.textLoading + "'/>";
		if(center)
		{
			imgStr = "<div style='text-align: center;'>" + imgStr + "</div>";
		}
		
        Obj.innerHTML = imgStr;		
	}
	
    this.insertInner = function()
    {
        if (this.IsReady())
        {
            this.theObj.innerHTML = this.GetResponseText();
            
            if( this.jFuncExecInnerCompleted )
            {
            	this.jFuncExecInnerCompleted(this);
            }
        }
    }
        
    
	
	this.IsReady = function()
	{
		if( ! this.xmlHttp ) return false;
		return this.xmlHttp.readyState == 4;
	}
	
	this.GetResponse = function()
	{
		return this.xmlHttp.responseXML;
    }

    this.GetResponseText = function()
    {
        if (this.verbose)
        {
            if(!this.xmlHttp)
			    alert("No xmlhttp");
		    if(!this.xmlHttp.responseText)
                alert("no xmlhttp.response");
        }
		
        return this.xmlHttp.responseText;
    }
	
	this.GetDocumentElement = function()
	{
        if (this.verbose)
        {
            if(!this.xmlHttp)
		    	alert("No xmlhttp");
		    if(!this.xmlHttp.responseXML)
			    alert("no xmlhttp.response");
        }
			
		return this.xmlHttp.responseXML.documentElement;
	}
	
	this.getDataFromXml = function(XMLdata)
	{		
		XMLdataStr = "";
		for(var i = 0; i < XMLdata.childNodes.length; i++)
		{
			XMLdataStr += XMLdata.childNodes[i].data;
		}
		return XMLdataStr;
	}	
}

Function.prototype.bind = function(obj, inputs)
{
    if (inputs == null)
        inputs = new Array();

    var method = this,
    temp = function()
    {
        return method.apply(obj,inputs);
    };
    return temp;
}

//JSON Parser

if(!this.JSON){this.JSON={};}
(function(){function f(n){return n<10?'0'+n:n;}
if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+
f(this.getUTCMonth()+1)+'-'+
f(this.getUTCDate())+'T'+
f(this.getUTCHours())+':'+
f(this.getUTCMinutes())+':'+
f(this.getUTCSeconds())+'Z':null;};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf();};}
var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);})+'"':'"'+string+'"';}
function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);}
if(typeof rep==='function'){value=rep.call(holder,key,value);}
switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}
gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null';}
v=partial.length===0?'[]':gap?'[\n'+gap+
partial.join(',\n'+gap)+'\n'+
mind+']':'['+partial.join(',')+']';gap=mind;return v;}
if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}
v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+
mind+'}':'{'+partial.join(',')+'}';gap=mind;return v;}}
if(typeof JSON.stringify!=='function'){JSON.stringify=function(value,replacer,space){var i;gap='';indent='';if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' ';}}else if(typeof space==='string'){indent=space;}
rep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify');}
return str('',{'':value});};}
if(typeof JSON.parse!=='function'){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v;}else{delete value[k];}}}}
return reviver.call(holder,key,value);}
cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return'\\u'+
('0000'+a.charCodeAt(0).toString(16)).slice(-4);});}
if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j;}
throw new SyntaxError('JSON.parse');};}}());
