function DRLoadData()
{
	var onLoadData;
	this.data = null,
	
	this.loadJson = function(urlData, callback)
	{
		var scope = this;
		onLoadData = callback;
				 
		 $.getJSON(urlData, function(data)
		 {
			 scope.data = data;
			 				
			if(onLoadData)
			{
				onLoadData();
			}
		});	
	}
}

function DRNotification()
{
	var observers = [];
	var totalObservers = 0;
	
	this.addObserver = function(observer)
	{
		observers.push(observer);
		totalObservers = observers.length;
	}
	
	this.removeObserver = function(observer)
	{
		for(var i = 0; i < totalObservers; i++)
		{
			if(observers[i] === observer)
			{
				observers[i].splice(i,1);
			}
		}
		
		totalObservers = observers.length;
	}
	
	this.notify = function(eventName)
	{
		updateObservers(eventName)
	}
	
	function updateObservers(eventName)
	{
		for(var i = 0; i < totalObservers; i++)
		{
			observers[i].listenNotification(eventName);
		}
	}
}

function DREvent()
{
	var listeners = [];
	
	this.addListener = function(listener,eventName,handler)
	{
		listeners.push({listener:listener,eventName:eventName,handler:handler});
	}
	
	this.removeListener = function(listener, eventName)
	{
		for(var i = 0; i < listeners.length; i++)
		{
			if(listeners[i].listener === listener && listeners[i].eventName === eventName)
			{
				listeners.splice(i, 1);
			}
		}
	}
	
	
	this.dispatch = function(eventName, params)
	{
		if(!params)
		{
			params = {}
		}
		
		for(var i = 0; i < listeners.length; i++)
		{
			if(listeners[i].eventName === eventName)
			{
				params.listener = listeners[i].listener;
				params.eventName = eventName;
				listeners[i].handler(params);
			}
		}
	}
}

var DRDepthManagement = function()
{
	this.getHighestDepth = function(element)
	{
		var highestZ = 0;
		
		$(element).each(function()
		{
			if($(element).css("z-index") > highestZ)
			{
				highestZ = $(element).css("z-index");
			}
		});
		
		return highestZ;
	}
}

var DRDepth = new DRDepthManagement();

function selectText(element) {
    var text = element;
    if ($.browser.msie) {
        var range = document.body.createTextRange();
        range.moveToElementText(text);
        range.select();
    } else if ($.browser.mozilla || $.browser.opera) {
        var selection = window.getSelection();
        var range = document.createRange();
        range.selectNodeContents(text);
        selection.removeAllRanges();
        selection.addRange(range);
    } else if ($.browser.webkit) {
        var selection = window.getSelection();
        selection.setBaseAndExtent(text, 0, text, text.innerText.length - 1);
    }
}

