var xmlHttp = null;

//
//	CXMLHttpData
//
//	
//
////////////////////////////////////////////////////////////
function CXMLHttpData(data)
{
    this.data       = data;
    this.aData      = data.split("|");
    this.length     = length;
    this.getElement = getElement;
    
    // The first element is always a return value so remove invalid
    // characters
    if (this.length() > 0)
    {
        this.aData[0] = this.aData[0].replace(/\n/g, "");
    }
    
    function length()
    {
        return this.aData.length;
    }
    
    function getElement(nIndex)
    {
        var element = null;
        
        if (nIndex < this.length())
        {
            element = this.aData[nIndex];
        }
        
        return element;
    }
}


//
//	GetXmlHttpObject
//
//	returns an xmlhttp object
//
////////////////////////////////////////////////////////////
function GetXmlHttpObject()
{
// Creates a XMLHTTP object, used to query the server, AJAX style

    try
    {
        // Firefox, Opera 8.0+, Safari
        xmlHttp = new XMLHttpRequest();
    }
    catch (e)
    {
        // Internet Explorer
        try
        {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }

    return xmlHttp;
}


//
//	makePOSTRequest
//
//	creates a post request
//
////////////////////////////////////////////////////////////
function makePOSTRequest(url, parameters, callback) 
{
	// Sends a Post request to the server
	xmlHttp = null;
	xmlHttp = GetXmlHttpObject();
	
	if (!xmlHttp) 
	{
		 alert('Cannot create XMLHTTP instance');
		 return false;
	}

	xmlHttp.onreadystatechange = callback;
	xmlHttp.open('POST', url, true);
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlHttp.setRequestHeader("Content-length", parameters.length);
	xmlHttp.setRequestHeader("Connection", "close");
	xmlHttp.send(parameters);
}
	 

//
//	getElementsArrayFromForm
//
//	creates an array with a form elements
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function getElementsArrayFromForm(frmObj, criteria, bIgnoreFieldsWithNoDisplay)
{
	// Creates a array of elements from a form
	nCount = frmObj.length;

	if (bIgnoreFieldsWithNoDisplay == undefined)
	{
	   bIgnoreFieldsWithNoDisplay = false;
	}
	
	astrElements = "";
	
	for (i=0;i<nCount;i++)
	{
		var bAdd      = false;
		var bContinue = true;
		
		// Check if field name complies to criteria
        if (criteria != undefined)
        {
            if (frmObj.elements[i].name.indexOf(criteria) == -1)
            {
                bContinue = false;
            }
        }
        
        // Check if style is set to none for display
        if (bIgnoreFieldsWithNoDisplay)
        {
            if (frmObj.elements[i].style.display == "none")
            {
                alert(frmObj.elements[i].name);
                bContinue = false;
            }
        }
        
		if (bContinue)
		{
            switch (frmObj.elements[i].type)
            {
                case "radio":
                {
                    if (frmObj.elements[i].checked)
                    {
                        bAdd = true;	
                    }
                    
                    break;
                }
                
                case "checkbox":
                {
                    bAdd = true;
                    
                    if (!frmObj.elements[i].checked)
                    {
                        frmObj.elements[i].value = 0;
                    }
                    
                    break;
                }
                
                default:
                {
                    bAdd = true;
                    break;
                }
            }
            
            if (bAdd)
            {
                if (frmObj.elements[i].multiple)
                {
                    astrElements += frmObj.elements[i].name + "=";
                    
                    //We have an element with possible multiple values
                    for (var j=0;j<frmObj.elements[i].options.length;j++)
                    {
                        if (frmObj.elements[i].options[j].selected)
                        {
                             astrElements += encodeURI(frmObj.elements[i].options[j].value) + "|";
                        }
                    }
                    
                    astrElements = astrElements.substr(0, astrElements.length - 1);
                    astrElements += "&";
                }
                else
                {
                    astrElements += frmObj.elements[i].name + "=" + encodeURI(frmObj.elements[i].value) + "&";
                }
            }
        }
	}

	return astrElements;
}