﻿/// <reference name="MicrosoftAjax.js"/>

var DomElement =
{
	extend: function(name, method)
	{
		if(!document.all)
		{
			eval("HTMLElement.prototype." + name + " = method");
		}
		else
		{
			var oldCreateElement = document.createElement;
			document.createElement = function(tag)
			{
				var element = oldCreateElement(tag);
				eval("element." + name + " = method");
				return element;
			}

			var oldGetElementById = document.getElementById;
			document.getElementById = function(id)
			{
				var element = oldGetElementById(id);
				eval("element." + name + " = method");
				return element;
			}

			var oldGetElementsByTagName = document.getElementsByTagName;
			document.getElementsByTagName = function(tag)
			{
				var arrayOfElements = oldGetElementsByTagName(tag);
				for(var index = 0; index < arrayOfElements.length; index++)
					eval("arrayOfElements[index]." + name + " = method");
				return arrayOfElements;
			}
		}
	}
};


DomElement.extend
(
    "removeSiblings"
    , function()
    {
        while (this.childNodes[0])
            this.removeChild(this.childNodes[0]);
        
        return this;
    }
);

DomElement.extend
(
    "addElement"
    , function(element)
    {
        this.appendChild(element);
        return this;
    }
);
DomElement.extend
(
    "addClass"
    , function(className)
    {
        Sys.UI.DomElement.addCssClass(this, className);
        return this;
    }
);
DomElement.extend
(
    "removeClass"
    , function(className)
    {
        Sys.UI.DomElement.removeCssClass(this, className);
        return this;
    }
);
DomElement.extend
(
    "containsClass"
    , function(className)
    {
        return Sys.UI.DomElement.containsCssClass(this, className);
    }
);

String.prototype.elementize = function()
{
    var element = document.createElement(this);
    return element;
}

String.prototype.nodize = function()
{
    var textNode = document.createTextNode(this);
    return textNode;
}

function removeChildNodes(element)
{
    while (element.childNodes[0])
        element.removeChild(element.childNodes[0]);
}

function checkValidators()
{
    var validated = true;
    if (typeof Page_Validators != "undefined")
    {
        for (var index = 0; index < Page_Validators.length; index++)
        {
            validated &= Page_Validators[index].isvalid;
        }
    }
    
    return validated;
}

function forceValidation()
{
    if (typeof Page_Validators != "undefined")
    {
        for (var index = 0; index < Page_Validators.length; index++)
        {
            Page_Validators[index].isvalid = true;
        }
    }
}

function $getChild(parent, idEndsWith, tag)
{
    var children = parent.getElementsByTagName(tag);
    
    for (var index = 0; index < children.length; index++)
    {
        if (children[index].id.indexOf(idEndsWith) > -1)
            return children[index];
    }
    
    return null;
}

Function.prototype.addCallback = function(element, eventName, handler, context)
{
    var callback = Function.createCallback(handler, context);
    $addHandler(element, eventName, callback);
}