// DATASOURCE HELPER FUNCTIONS

function getChildElementById(element, childElementId)
{
    var ret = null;
    var children = element.children;
    var len = children.length;
    
    for (var i = 0; i < len; i++)
    {
        var childElement = children[i];
        
        if (childElement.id && childElement.id == childElementId)
        {
            return childElement;
        }
        else
        {
            ret = getChildElementById(childElement, childElementId);
        }

        if (ret != null)
        {
            break;
        }
    }
    
    return ret;
}

function selectElementByNameAndIndex(elementName, index)
{
    var element = getElementByNameAndIndex(elementName, index);
    
    with(element)
    {
        focus();
        select();
    }
}

function focusElementByNameAndIndex(elementName, index)
{
    var element = getElementByNameAndIndex(elementName, index);
    
    with(element)
    {
        focus();
    }
}

function selectLastElementByName(elementName)
{
    var element = getLastElementByName(elementName);
    
    with(element)
    {
        focus();
        select();
    }
}

function getElementByNameAndIndex(elementName, index)
{
    var ret = null;
    var elements = document.getElementsByName(elementName);
    
    if (elements.length >= index)
    {
        ret = elements[index];
    }
    
    return ret;
}

function getLastElementByName(elementName)
{
    var ret = null;
    var elements = document.getElementsByName(elementName);
    
    if (elements.length > 0)
    {
        ret = elements[elements.length - 1];
    }
    
    return ret;
}

function getRecordNumber(ref)
{
    var element = ref;

    while (element.tagName != "TR")
    {
        element = element.parentElement;
    }
	return element.recordNumber;
}



// MISC HELPER FUNCTIONS


// XML HELPER FUNCTIONS
function escapeXML(str){
	return str
		.replace(/</g, "&lt;")
		.replace(/>/g, "&gt;")
		.replace(/&/g, "&amp;")
		.replace(/'/g, "&apos;")
		.replace(/"/g, "&quot;");
}
function deEscapeXML (str)
{
	return str
		.replace(/&lt;/g, "<")
		.replace(/&gt;/g, ">")
		.replace(/&amp;/g, "&")
		.replace(/&apos;/g, "'")
		.replace(/&quot;/g, "\"");
}


// URL HELPER FUNCTIONS

function QueryStringBuilder()
{
    // NOTE: max URI length in IE6.0 is 2084 bytes!

	var uriComponents = new Array();
    var uri = "";

    this.add = function (parameterName, parameterValue)
    {
		
        var map = new Object();
        map.key = parameterName;
        map.value = encodeURIComponent(parameterValue);

        uriComponents[uriComponents.length] = map;

        return this;
    }

    this.setURI = function (value)
    {
		uri = value;
    }

    this.get = function ()
    {
        var queryString = uri;
        
        var length = uriComponents.length;
        for (var i = 0; i < length; i ++)
        {
            var uriComponent = uriComponents[i];

            queryString += ((i > 0) ? "&" : "?") + uriComponent.key + "=" + uriComponent.value;
            // sorun olursa baska yontem dusunulsun, turkce karakterleri encode etmemesi icin
			// queryString += ((i > 0) ? "&" : "?") + uriComponent.key + "=" + encodeURIComponent(uriComponent.value);
        }

        return queryString;
    }
}



// ERROR HANDLING FUNCTIONS

function GenericError(description, detail)
{
    this.name = "GenericError";
    this.number = -1;
    this.message = description || "";
    this.description = description || "";
    this.detail = detail || "";
}

function XmlHttpError(description, detail)
{
    this.base = GenericError;
    this.base(description, detail);
    this.name = "XmlHttpError";
}
XmlHttpError.prototype = new GenericError;

function showErrorDialog(error)
{
    window.showModalDialog("dialog.html", error, 
            "status:0;center:1;help:0;resizable:0;dialogWidth:436px;dialogHeight:145px;");
}

function showMessageBox(message)
{
    alert(message);
}
