String.prototype.trim = function()
{
	return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
};
framework.util = {
setDebugEnabled:function(enabled)
{
	if ((typeof enabled != framework.DataType.BOOLEAN) || (framework.util.isUndefinedOrNull(enabled)))
	{
		return framework.Status.UNDEFINED_ARGUMENT;
	}
	framework.util._isDebugEnabled = enabled;
},
getDebugEnabled:function()
{
	return framework.util._isDebugEnabled;
},
debug:function(message)
{
	if (framework.util._isDebugEnabled)
	{
		window.alert(message);
	}
},
getTime:function()
{
	var today = new Date();
	return today.getTime();
},
isEmpty:function(element)
{
    if (framework.util._isString(element))
    {
    	if (element.match(/^\s*$/))
    	{
    		return true;
    	}
    }
    else if (framework.util._isObject(element))
	{
		for (index in element) 
        {
        	return false;
        }
        return true;
    }
    else if (framework.util._isArray(element))
    {
    	if (element.length === 0)
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
    }
    return false;
},
isUndefinedOrNull:function(element)
{
	if (framework.util._isUndefined(element) || framework.util._isNull(element))
    {
    	return true;
    }
    return false;
},
isType:function(element, type)
{
	if (!framework.util._isString(type) && !framework.util._isNull(type))
	{
		return null;
	}
	switch (type)
	{
		case framework.DataType.ARRAY:
			return framework.util._isArray(element);
		case framework.DataType.NUMBER:
			return framework.util._isNumber(element);
		case framework.DataType.NULL:
			return framework.util._isNull(element);
		case framework.DataType.NAN:
			return (framework.util._isNumber(element) && isNaN(element));
		case framework.DataType.FINITE:
			return (framework.util._isNumber(element) && isFinite(element));
		case framework.DataType.STRING:
			return framework.util._isString(element);
		case framework.DataType.OBJECT:
			return framework.util._isObject(element);
		case framework.DataType.UNDEFINED:
			return framework.util._isUndefined(element);
		case framework.DataType.BOOLEAN:
			return framework.util._isBoolean(element);
		case framework.DataType.FUNCTION:
			return framework.util._isFunction(element);
		case framework.DataType.DATE:
			return framework.util._isDate(element);
		case framework.DataType.REGEXP:
			return framework.util._isRegExp(element);
		case framework.DataType.ERROR:
			return framework.util._isError(element);
		default:
			return null;
	}
},
setInnerHTML:function(elementId, htmlText)
{
	if (!framework.util.isType(elementId, framework.DataType.STRING) ||
		!framework.util.isType(htmlText, framework.DataType.STRING))
	{
		
		return framework.Status.UNDEFINED_ARGUMENT;
	}
	var element = document.getElementById(elementId);
	if (framework.util.isUndefinedOrNull(element))
	{
		
		return framework.Status.ELEMENT_DOES_NOT_EXIST;
	}
	element.innerHTML = htmlText;
	return framework.Status.SUCCESS;
},
showElement:function(elementId)
{
	if (!framework.util.isType(elementId, framework.DataType.STRING))
	{
		
		return framework.Status.UNDEFINED_ARGUMENT;
	}
	var element = document.getElementById(elementId);
	if (framework.util.isUndefinedOrNull(element))
	{
		
		return framework.Status.ELEMENT_DOES_NOT_EXIST;
	}
	element.style.display = "block";
	return framework.Status.SUCCESS;
},
hideElement:function(elementId)
{
	if (!framework.util.isType(elementId, framework.DataType.STRING))
	{
		
		return framework.Status.UNDEFINED_ARGUMENT;
	}
	var element = document.getElementById(elementId);
	if (framework.util.isUndefinedOrNull(element))
	{
		
		return framework.Status.ELEMENT_DOES_NOT_EXIST;
	}
	element.style.display = "none";
	return framework.Status.SUCCESS;
},
setElementVisible:function(elementId, visible)
{
	if (!framework.util.isType(elementId, framework.DataType.STRING))
	{
		
		return framework.Status.UNDEFINED_ARGUMENT;
	}
	if (!framework.util.isType(visible, framework.DataType.BOOLEAN))
	{
		
		return framework.Status.UNDEFINED_ARGUMENT;
	}
	var element = document.getElementById(elementId);
	if (framework.util.isUndefinedOrNull(element))
	{
		
		return framework.Status.ELEMENT_DOES_NOT_EXIST;
	}
	if (visible === true)
	{
		element.style.visibility = "";
	}
	else
	{
		element.style.visibility = "hidden";
	}
	return framework.Status.SUCCESS;
},
setClassName:function(elementId, className)
{
	if (!framework.util.isType(elementId, framework.DataType.STRING) ||
		!framework.util.isType(className, framework.DataType.STRING))
	{
		
		return framework.Status.UNDEFINED_ARGUMENT;
	}
	var element = document.getElementById(elementId);
	if (framework.util.isUndefinedOrNull(element))
	{
		
		return framework.Status.ELEMENT_DOES_NOT_EXIST;
	}
	element.className = className;
	return framework.Status.SUCCESS;
},
getElementPosition:function(elementId)
{
	if (!framework.util.isType(elementId, framework.DataType.STRING))
	{
		
		return null;
	}
	var element = document.getElementById(elementId);
	if (framework.util.isUndefinedOrNull(element))
	{
		
		return null;
	}
	var elementLeft = 0;
	var elementTop = 0;
	if (!framework.util.isUndefinedOrNull(element.offsetParent))
	{
		elementLeft = element.offsetLeft;
		elementTop = element.offsetTop;
		element = element.offsetParent;
		while (!framework.util.isUndefinedOrNull(element))
		{
			elementLeft = elementLeft + element.offsetLeft;
			elementTop = elementTop + element.offsetTop;
			if (!framework.util.isUndefinedOrNull(element.clientLeft))
			{
				elementLeft = elementLeft + element.clientLeft;
			}
			if (!framework.util.isUndefinedOrNull(element.clientTop))
			{
				elementTop = elementTop + element.clientTop;
			}
			element = element.offsetParent;
		}
	}
	return [elementLeft, elementTop];
},
clone:function(object)
{
	if (framework.util.isUndefinedOrNull(object))
	{
		return null;
	}
	if (framework.util.isType(object, framework.DataType.ARRAY))
	{
		var clonedArray = [];
		for (var element = 0; element<object.length; element += 1)
		{
			clonedArray[element] = framework.util.clone(object[element]);
		}
		return clonedArray;
	}
	if (framework.util.isType(object, framework.DataType.BOOLEAN))
	{
		return new Boolean(object.toString());
	}
	if (framework.util.isType(object, framework.DataType.DATE))
	{
		return new Date(object.getTime());
	}
	if (framework.util.isType(object, framework.DataType.NUMBER))
	{
		return new Number(object.toString());	
	}
	if (framework.util.isType(object, framework.DataType.OBJECT))
	{
		var clonedObject;
		for (var property in object)
		{
			clonedObject[property] = framework.util.clone(object[property]);
		}
		return clonedObject;
	}
	if (framework.util.isType(object, framework.DataType.STRING))
	{
		return "".concat(object.toString());
	}
},
setZIndex:function(elementId, zIndex)
{
	if (!framework.util.isType(elementId, framework.DataType.STRING) ||
		!framework.util.isType(zIndex, framework.DataType.NUMBER))
	{
		
		return framework.Status.UNDEFINED_ARGUMENT;
	}
	if (framework.util.isEmpty(elementId) ||
		!framework.util.isType(zIndex, framework.DataType.FINITE))
	{
		
		return framework.Status.INVALID_ARGUMENT_VALUE;
	}
	var element = document.getElementById(elementId);
	element.style.zIndex = zIndex;
},
makeTextUnbreakable:function(text)
{
	if (framework.util.isUndefinedOrNull(text))
	{
		
		return null;
	}
	if (!framework.util.isType(text, framework.DataType.STRING))
	{
		
		return null;
	}
	var unbreakableText = "<nobr>";
	var tempChar = null;
	var currentCharacter = null;
	for (var index = 0; index < text.length; index += 1)
	{
		currentCharacter = text.charAt(index);
		tempChar = framework.util.characterToEntity(currentCharacter);
		if (framework.util.isUndefinedOrNull(tempChar))
		{
			return null;
		}
		unbreakableText += tempChar;
	}
	return unbreakableText + "</nobr>";
},
characterToEntity:function(character)
{
	if (!framework.util.isType(character, framework.DataType.STRING))
	{
		
		return null;
	}
	if (framework.util.isUndefinedOrNull(character))
	{
		
		return null;
	}
	if (character == "<")
	{
		return "&lt;";
	}
	if (character == ">")
	{
		return "&gt;";
	}
	return character;
},
isInternetExplorer:function()
{
	return (!!window.navigate && !!(typeof(document.getElementById) == 'object'));
},
isIE7:function()
{
	if (!!window.navigate && !!(typeof(document.getElementById) == 'object'))
	{
		return !!(typeof document.body.style.maxHeight != "undefined");
	}
	else
	{
		return false;
	}
},
isSupportedBrowser:function()
{
	if (navigator.platform.indexOf('Win') == -1 &&
		navigator.platform.indexOf('Mac') == -1)
	{
		return false;
	}
	var trident = (!!document.getElementById && !!(typeof(document.getElementById) == 'object') && (document.fireEvent));
	if (trident)
	{
		return true; 
	}
	var gecko = (!!String.prototype.__defineGetter__ && !!window.crypto);
	if (gecko)
	{
		if ((navigator.userAgent.indexOf("Firefox") != -1) &&
		    (navigator.userAgent.indexOf("Flock") == -1))
		{
			return true; 
		}
		else if (navigator.userAgent.indexOf("Netscape") != -1)
		{
			if (!!window.content && !!document.compatMode)
			{
				return true; 
			}
		}
	}
	var WebCore = (!!document.implementation && 
			       !!document.implementation.createHTMLDocument && 
				   !document.fileCreatedDate && 
				   !!window.XMLHttpRequest &&
				   !window.opera);
	if (WebCore)
	{
		if (navigator.vendor.indexOf("Apple") != -1)
		{
			return true; 
		}
	}
	return false;
},
mouseInsideElement:function(elementId, event)
{
	try
	{
		var element = document.getElementById(elementId);
		if (framework.util.isUndefinedOrNull(element))
		{
			return null;
		}
		var movedToTarget = (event.relatedTarget) ? event.relatedTarget : event.toElement;
		while (movedToTarget != element && movedToTarget.nodeName != 'BODY')
		{
			movedToTarget = movedToTarget.parentNode;
		}
		if (movedToTarget.nodeName == 'BODY' ||framework.util.isEmpty(movedToTarget.id) || !movedToTarget == element)
		{
			return false;
		}
		else
		{
			return true;
		}
	}
	catch (ex) 
	{
		return false;
	}
},
purgeElement:function(element)
{
	if (framework.util.isUndefinedOrNull(element))
	{
		
		return framework.Status.INVALID_ARGUMENT_VALUE;
	}
	if (!framework.util.isType(element, framework.DataType.OBJECT))
	{
		return framework.Status.UNDEFINED_ARGUMENT;
	}
    var attributes = element.attributes;
    if (!framework.util.isUndefinedOrNull(attributes))
    {
	    var attributeName = "";
	    var stop = attributes.length;
        for (var attributeIndex = 0; attributeIndex < stop; attributeIndex += 1)
        {
            attributeName = attributes[attributeIndex].name;
            if (framework.util.isType(element[attributeName], framework.DataType.FUNCTION))
            {
                element[attributeName] = null;
            }
        }
    }
    var childNodes = element.childNodes;
    if (!framework.util.isUndefinedOrNull(childNodes))
    {
    	stop = childNodes.length;
        for (var childNodeIndex = 0; childNodeIndex < stop; childNodeIndex += 1)
        {
            framework.util.purgeElement(childNodes[childNodeIndex]);
            stop -= 1;
        }
    }
    return framework.Status.SUCCESS;
},
hideSelects:function(elementId, rect)
{
	if (framework.util.isUndefinedOrNull(elementId))
	{
		
		return framework.Status.INVALID_ARGUMENT_VALUE;
	}
	if (framework.util.isUndefinedOrNull(rect))
	{
		
		return framework.Status.INVALID_ARGUMENT_VALUE;
	}
	if (!framework.util.isType(elementId, framework.DataType.STRING))
	{
		
		return framework.Status.UNDEFINED_ARGUMENT;
	}
	if (!framework.util.isType(rect, framework.DataType.ARRAY))
	{
		
		return framework.Status.UNDEFINED_ARGUMENT;
	}
	if (rect.length != 4)
	{
		
		return framework.Status.INVALID_ARGUMENT_VALUE;
	}
	if (!framework.util.isType(rect[0], framework.DataType.NUMBER))
	{
		
		return framework.Status.INVALID_ARGUMENT_VALUE;
	}
	if (!framework.util.isType(rect[1], framework.DataType.NUMBER))
	{
		
		return framework.Status.INVALID_ARGUMENT_VALUE;
	}
	if (!framework.util.isType(rect[2], framework.DataType.NUMBER))
	{
		
		return framework.Status.INVALID_ARGUMENT_VALUE;
	}
	if (!framework.util.isType(rect[3], framework.DataType.NUMBER))
	{
		
		return framework.Status.INVALID_ARGUMENT_VALUE;
	}
	if (!framework.util.isUndefinedOrNull(framework.util._selectElements[elementId]))
	{
		
		return framework.Status.INVALID_ARGUMENT_VALUE;
	}
	framework.util._selectElements[elementId] = new Array();
	var elementTop = rect[0];
	var elementBottom = rect[2];
	var elementLeft = rect[3];
	var elementRight = rect[1];
	var selects = document.getElementsByTagName("SELECT");
	var retVal = framework.Status.SUCCESS;
	for (var index = selects.length - 1; index >= 0; index -= 1)
	{
		var select = selects[index];
		if (select.style.display == "none" || select.style.visibility == "hidden")
		{
			continue;
		}
		var selectPosition = framework.util.getElementPosition(select.id);
		var selectTop = selectPosition[1];
		var selectBottom = selectTop + select.offsetHeight;
		var selectLeft = selectPosition[0];
		var selectRight = selectLeft + select.offsetWidth;
		if ((selectTop >= elementTop && selectTop <= elementBottom) ||
			(selectBottom >= elementTop && selectBottom <= elementBottom))
		{
			if ((selectLeft >= elementLeft && selectLeft <= elementRight) ||
				(selectRight >= elementLeft && selectRight <= elementRight))
			{
				framework.util.setElementVisible(select.id, false);
				framework.util._selectElements[elementId].push(select);
			}
		}
	}
	return framework.Status.SUCCESS;
},
showSelects:function(elementId)
{
	if (!framework.util.isType(elementId, framework.DataType.STRING))
	{
		
		return framework.Status.UNDEFINED_ARGUMENT;
	}
	if (framework.util.isEmpty(elementId))
	{
		
		return framework.Status.INVALID_ARGUMENT_VALUE;
	}
	if (framework.util.isUndefinedOrNull(framework.util._selectElements[elementId]))
	{
		return framework.Status.SUCCESS;
	}
	var selects = framework.util._selectElements[elementId];
	for (var i = 0; i < selects.length; i = i + 1)
	{
		var selectElement = selects[i];
		if (framework.util.isUndefinedOrNull(selectElement))
		{
			
			return framework.Status.ELEMENT_DOES_NOT_EXIST;
		}
		framework.util.setElementVisible(selectElement.id, true);
	}
	selects = [];
	framework.util._selectElements[elementId] = null;
	return framework.Status.SUCCESS;
},
_isArray:function(element)
{
	if ((typeof(element) === framework.DataType.UNDEFINED) || 
		(element === null) || 
		(framework.util.isUndefinedOrNull(element.length)))
	{
		return false;
	}
	return (typeof(element) === framework.DataType.OBJECT && 
			typeof(element.length) === framework.DataType.NUMBER);
},
_isNumber:function(element)
{
	return typeof(element) === framework.DataType.NUMBER;
},
_isNull:function(element)
{
	return (element === null);
},
_isObject:function(element)
{
	if ((element === null) || 
		(framework.util._isArray(element)) ||
		(framework.util._isError(element)) ||
		(framework.util._isRegExp(element)) ||		
		(framework.util._isDate(element)))
	{
		return false;
	}
	return ((typeof(element) === framework.DataType.OBJECT));
},
_isString:function(element)
{
	return (typeof(element) === framework.DataType.STRING);
},
_isUndefined:function(element)
{
	return (typeof(element) === framework.DataType.UNDEFINED);
},
_isBoolean:function(element)
{
	return (typeof(element) === framework.DataType.BOOLEAN);
},
_isFunction:function(element)
{
	if (typeof(element) === framework.DataType.FUNCTION)
	{
		if ((!framework.util.isUndefinedOrNull(element.constructor)) && 
		    (element.constructor.toString().match(/RegExp/i) == "RegExp"))
		{
			return false;
		}
		return true;
	}
	return false;
},
_isDate:function(element) 
{
	if ((typeof(element) === framework.DataType.OBJECT) && 
		!(element === null) && 
		(!framework.util.isUndefinedOrNull(element.constructor)) && 
		(element.constructor == Date)) 
	{
		return true;
 	}
 	return false;
},
_isRegExp:function(element) 
{
	if (!(typeof(element) === framework.DataType.UNDEFINED) && 
		!(element === null) &&
		(!framework.util.isUndefinedOrNull(element.constructor))) 
	{
		return (element.constructor == RegExp);
 	}
 	return false;
},
_isError:function(element) 
{
	if ((typeof(element) === framework.DataType.OBJECT) && !(element === null) && (!framework.util.isUndefinedOrNull(element.constructor)))
	{
 		return (element.constructor == Error);
 	}
 	return false;
},
getScrollX:function() 
{
        var scrollX = 0;
        if (framework.util.isUndefinedOrNull(window.pageXOffset))
		{
		    scrollX = document.documentElement.scrollLeft;
        }
		else
		{
            scrollX = window.pageXOffset;
        }
        return scrollX;
},
getScrollY:function() 
{
        var scrollY = 0;
        if (framework.util.isUndefinedOrNull(window.pageYOffset))
		{
		    scrollY = document.documentElement.scrollTop;
        }
		else
		{
            scrollY = window.pageYOffset;
        }
        return scrollY;
},
_isDebugEnabled:false,
_selectElements:[],
loaded:true
};
//Version 3.4
