var ajaxErrorReporting = false;

//AJAX
function ajaxObject(url, callbackFunction)
{
    var that=this;
    this.updating = false;
    this.abort = function()
    {
        if (that.updating)
        {
            that.updating = false;
            that.AJAX.abort();
            that.AJAX = null;
        }
    }
    this.update = function(passData, postMethod)
    {
        showLoadingScreen();
        if (that.updating)
        {
            return false;
        }

        that.AJAX = null;

        if (window.XMLHttpRequest)
        {
            that.AJAX = new XMLHttpRequest();
        }
        else
        {
            try
            {
                that.AJAX = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (err)
            {
                that.AJAX = new ActiveXObject("Microsoft.XMLHTTP");
            }
        }

        if (that.AJAX == null)
        {
            return false;
        }
        else
        {
            that.AJAX.onreadystatechange = function()
            {
                if (that.AJAX.readyState == 4)
                {
                    that.updating=false;
                    if (that.AJAX.status == 200)
                    {
                        var returnValue = that.callback(that.AJAX.responseText, that.AJAX.status, that.AJAX.responseXML);
                        if (returnValue == false)
                        {
                            that.handleJSerror();
                        }
                    }
                    else
                    {
                        that.handleJSerror();
                        if (!ajaxErrorReporting)
                        {
                            alert(that.AJAX.status + ' -- Error Processing Request. This has been logged.');
                        }
                    }
                    hideLoadingScreen();
                    that.AJAX = null;
                }
            }
            that.updating = new Date();
            if (/post/i.test(postMethod))
            {
                var uri = urlCall + '?' + that.updating.getTime();
                that.AJAX.open("POST", uri, true);
                that.AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                that.AJAX.setRequestHeader("Content-Length", passData.length);
                that.AJAX.send(passData);
            }
            else
            {
                var uri = urlCall + '?' + passData + '&timestamp=' + (that.updating.getTime());
                that.AJAX.open("GET", uri, true);
                that.AJAX.send(null);
            }
            return true;
        }
    }

    this.handleJSerror = function()
    {
        if (!ajaxErrorReporting)
        {
            ajaxErrorReporting = true;

            var ajaxRequest = new ajaxObject('jserror');
            var params = 'status=' + encodeURIComponent(that.AJAX.status) + '&response=' + encodeURIComponent(that.AJAX.responseText) + '&function=' + encodeURIComponent(that.callback);
            ajaxRequest.update(params, 'POST');
            ajaxErrorReporting = false;
        }
    }

    var urlCall = rootURL + url;
    this.callback = callbackFunction || function () { };
}

function showLoadingScreen()
{
    el = document.getElementById('loaderscreen');
    if (el)
    {
        el.style.display = 'block';
    }
}

function hideLoadingScreen()
{
    el = document.getElementById('loaderscreen');
    if (el)
    {
        el.style.display = 'none';
    }
}

String.prototype.trim = function ()
{
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

function getFormValues(fname)
{
   var str = "";
   var valueArr = null;
   var val = "";
   var cmd = "";

   for(var i = 0; i < document.forms[fname].elements.length; i++)
   {
       switch(document.forms[fname].elements[i].type)
       {
           case "text":
                str += document.forms[fname].elements[i].name + "=" + escape(document.forms[fname].elements[i].value) + "&";
                break;
           case "select-one":
                str += document.forms[fname].elements[i].name + "=" + document.forms[fname].elements[i].options[document.forms[fname].elements[i].selectedIndex].value + "&";
                break;
           case "radio":
                if(document.forms[fname].elements[i].checked)
                {
                    str += document.forms[fname].elements[i].name + "=" + document.forms[fname].elements[i].value + "&";
                }
                break;
           case "checkbox":
				if (document.forms[fname].elements[i].checked)
                {
                    //str += document.forms[fname].elements[i].name + "=" + document.forms[fname].elements[i].checked + "&";
                    if ((document.forms[fname].elements[i].value != '') &&
                        (document.forms[fname].elements[i].value != 'on'))
                    {
                        str += document.forms[fname].elements[i].name + "=" + document.forms[fname].elements[i].value + "&";
                    }
                    else
                    {
                        str += document.forms[fname].elements[i].name + "=on&";
                    }
                }
                break;
           case "password":
                str += document.forms[fname].elements[i].name + "=" + escape(document.forms[fname].elements[i].value) + "&";
                break;
           case "textarea":
                str += document.forms[fname].elements[i].name + "=" + escape(document.forms[fname].elements[i].value) + "&";
                break;
           case "button":
                str += document.forms[fname].elements[i].name + "=" + escape(document.forms[fname].elements[i].value) + "&";
                break;
           case "reset":
				break;
		   case "hidden":
				str += document.forms[fname].elements[i].name + "=" + escape(document.forms[fname].elements[i].value) + "&";
                break;
		   case "select-multiple":
				break;
		   case "submit":
				break;
		   case "file":
				break;
		   default:
                //alert(document.forms[fname].elements[i].type);
                break;
       }
   }
   str = str.substr(0,(str.length - 1));

   return str;
}

function getURLParam(strParamName)
{
	var strReturn = "";
	var strHref = window.location.href;
	if ( strHref.indexOf("?") > -1 )
	{
		var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
		var aQueryString = strQueryString.split("&");
		for ( var iParam = 0; iParam < aQueryString.length; iParam++ )
		{
			if ( aQueryString[iParam].indexOf(strParamName.toLowerCase() + "=") > -1 )
			{
				var aParam = aQueryString[iParam].split("=");
				strReturn = aParam[1];
				break;
			}
		}
	}
	return unescape(strReturn);
}

function isNumeric(value)
{
    return ((value != null) && (value.toString().match(/^[-]?\d*\.?\d*$/)));
}