function AjaxRequest()
{
	this.InitAjax();
}

function AjaxRequest_InitAjax()
{
	this.isAsync = false;
	this.callBackMethod = null;
	this.command = "Unknown";
	this.dataToSend = "";
	this.objectType = "Unknown";
	this.methodName = "Unknown";
	this.response = "";
	this.xmlhttp = null;
}

function AjaxRequest_Invoke()
{
	this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	this.xmlhttp.Open("Post", "http://www.electricalsexchange.com//page.ashx?AjaxCommand=" + this.command, this.isAsync);
	this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	this.xmlhttp.setRequestHeader("Accept-Encoding", "gzip, deflate");
	
	if (this.isAsync)
	{
		this.xmlhttp.onReadyStateChange = this.AsyncCallback;
	}
	
	if (this.dataToSend != null && this.dataToSend != "")
	{
	    //
	    //  If there are any plus signs in the data, replace them with a token
	    //
	    //this.dataToSend = this.dataToSend.replace("+", "#~#");
	    this.dataToSend = this.dataToSend.replace(/\+/g, "#~#");
	    this.dataToSend = this.dataToSend.replace(/\&/g, "amp;");	    
	    //
	    // Encode the data and send it
	    //     
		var encodedData = encodeURI(this.dataToSend);
		this.xmlhttp.send(encodedData);
	}
	else
	{
		this.xmlhttp.send();
	}
	
	if (!this.isAsync)
	{
		this.status = this.xmlhttp.status;
		this.response = this.xmlhttp.responseText;
	}
}

function AjaxRequest_SetCallback(callback)
{
	this.isAsync = true;
	this.callBackMethod = callback;
}

function AjaxRequest_AsyncCallback()
{
	if (xmlhttp.readyState ==4)
	{
		this.response = xmlhttp.responseText
		this.status = poster.status;

		this.xmlhttp = null;

		// Make callback here
		this.callBackMethod(this);
	}
}

AjaxRequest.prototype.InitAjax = AjaxRequest_InitAjax;
AjaxRequest.prototype.Invoke = AjaxRequest_Invoke;
AjaxRequest.prototype.SetCallback = AjaxRequest_SetCallback;
AjaxRequest.prototype.AsyncCallback = AjaxRequest_AsyncCallback;


// Helper functions
function toServerDateString(theDate)
{
    var returnString = "";
    
    var month = theDate.getMonth() + 1;
    var day = theDate.getDate();
    
    returnString = theDate.getFullYear().toString() + month.toString() + day.toString();
    
    return returnString;
}

//  InformationItem class
function InformationItem()
{
}

function InformationItem_Init(dataString)
{
    //
    //  Split the data string on the back tick
    var strings = dataString.split("`");
    //
    //  Populate the flag values
    //
    this.isDirty = strings[1];
    this.isNew = strings[2];
    this.isNull = strings[3];
    this.isDeleted = strings[4];
    this.isReadOnly = strings[5];
    this.isRequired = strings[6];
    this.isEncrypted = strings[7];
    this.caption = strings[8];
    this.description = strings[9];
    this.name = strings[10];
    this.editTemplate = strings[11];
    this.defaultValue = strings[12];
    this.validationType = strings[13];
    this.isDate =  false;
    //
    //  Populate the value itself
    //
    if (strings[0].indexOf("#") > -1)
    {
		var dateString = strings[0].substr(1, strings[0].length);
		dateString = dateString.substr(0, dateString.length - 1);
		this.Item = new Date(Date.parse(dateString));
		this.isDate = true;
    }
    else
    {
        this.Item = strings[0];
        this.isDate = false;
    }
}

function InformationItem_Serialize()
{
    var valueString = "";
    if (this.isDate == true)
    {
        valueString += this.Item.toDateString();
    }
    else
    {
        valueString += this.Item.toString();
    }
    
    valueString += "`" + this.isDirty.toString();
    valueString += "`" + this.isNew.toString();
    valueString += "`" + this.isNull.toString();
    valueString += "`" + this.isDeleted.toString();
    valueString += "`" + this.isReadOnly.toString();
    valueString += "`" + this.isRequired.toString();
    valueString += "`" + this.isEncrypted.toString();
    valueString += "`" + this.caption;
    valueString += "`" + this.description;
    valueString += "`" + this.name;
    valueString += "`" + this.editTemplate;
    valueString += "`" + this.defaultValue;
    valueString += "`" + this.validationType;

    return valueString;    
}

function InformationItem_SetDate(dateString)
{
    this.Item = new Date(Date.parse(dateString));
    this.isDirty = true;
    this.isDate = true;
}

function InformationItem_SetValue(theValue)
{
    this.Item = theValue;
    this.isDirty = true;
}

InformationItem.prototype.Init = InformationItem_Init;
InformationItem.prototype.Serialize = InformationItem_Serialize;
InformationItem.prototype.SetDate = InformationItem_SetDate;
InformationItem.prototype.SetValue = InformationItem_SetValue;

