var is_ie = (navigator.userAgent.indexOf('MSIE') >= 0) ? 1 : 0;
var is_ie5 = (navigator.appVersion.indexOf("MSIE 5.5")!=-1) ? 1 : 0;
var is_opera = ((navigator.userAgent.indexOf("Opera6")!=-1)||(navigator.userAgent.indexOf("Opera/6")!=-1)) ? 1 : 0;
//netscape, safari, mozilla behave the same???
var is_netscape = (navigator.userAgent.indexOf('Netscape') >= 0) ? 1 : 0; 

function XmlHttpRequest()
{
	this.xmlHttp = null;	//this will store the xml request for the entire process
	this.GetHtmlRequest = XmlHttpRequest_GetHtmlRequest;
	this.SendRequest = XmlHttpRequest_SendRequest;
	
	//get the Html Request depending on the browser
	function XmlHttpRequest_GetHtmlRequest()
	{
		// code for Mozilla, etc.
		if (window.XMLHttpRequest)
		{
			this.xmlHttp = new XMLHttpRequest();
		}
		// code for IE
		else if (window.ActiveXObject)
		{
			this.xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		//return this.xmlHttp;
	}
	
	//send the request to the url we've passed
	function XmlHttpRequest_SendRequest( url )
	{
		this.xmlHttp.open("GET",url,true);
		this.xmlHttp.send(null);
		
		return this.xmlHttp;
	}
}

function GetXmlHttpObject(handler)
{
    var objXmlHttp = null;    //Holds the local xmlHTTP object instance

    //Depending on the browser, try to create the xmlHttp object
    if (is_ie)
    {
        //The object to create depends on version of IE
        //If it isn't ie5, then default to the Msxml2.XMLHTTP object
        var strObjName = (is_ie5) ? 'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP';
        
        //Attempt to create the object
        try
        {
            objXmlHttp = new ActiveXObject(strObjName);
            objXmlHttp.onreadystatechange = handler;
        }
        catch(e)
        {
	        //Object creation errored
            alert('IE detected, but object could not be created. Verify that active scripting and activeX controls are enabled');
            return;
        }
    }
    else if (is_opera)
    {
        //Opera has some issues with xmlHttp object functionality
        alert('Opera detected. The page may not behave as expected.');
        return;
    }
    else
    {
        // Mozilla | Netscape | Safari
        objXmlHttp = new XMLHttpRequest();
        objXmlHttp.onload = handler;
        objXmlHttp.onerror = handler;
        //objXmlHttp.onreadystatechange = handler;
    }
    //Return the instantiated object
    return objXmlHttp;
}

    function getFormValues(fobj,valFunc)
    {
       var str = "";
       var valueArr = null;
       var val = "";
       var cmd = "";

       for(var i = 0;i < fobj.elements.length;i++)
       {
           switch(fobj.elements[i].type)
           {
               case "text":
               case "textarea":
                    if(valFunc)
                    {
                       //use single quotes for argument so that the value of
                        //fobj.elements[i].value is treated as a string nota literal
                        cmd = valFunc + "(" + 'fobj.elements[i].value' + ")";
                        val = eval(cmd)
                    }
                    str += fobj.elements[i].name +
                     "=" + escape(fobj.elements[i].value) + "&";
                     break;

               case "select-one":
                    str += fobj.elements[i].name +
                    "=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&";
                    break;
           }
       }
       str = str.substr(0,(str.length - 1));
       return str;
    }
