if (typeof(ShB.Scope) == "undefined")
	ShB.Scope = { };

/** scope is used to define the current active scope in the application
  * used to define the modal dialog scope. */
ShB.Scope.scopes = document;

ShB.Scope.events = ["onchange","onclick","ondbclick","onfocus","onkeypress", 
					"onkeyup","onmousedown","onmousemove","onmouseover","onmouseup",
					"onselect"]

ShB.Scope.formElements = ["INPUT","TEXTAREA","SELECT","BUTTON"]


ShB.Scope.getScope= function(){
	var scopeId = this.scopes;
	if (scopeId==document)
		return document;
	
	return (scopeId==null)?null:document.getElementById(scopeId);
		
}
ShB.Scope.getScopeId = function(){
	var scopeId = this.scopes;	
	if (scopeId==document)
		return document;
	
	return scopeId;
}

ShB.Scope.newScope = function(newScopeId, prevScopeId, useMask)
{
	var scope = this.getScope();	
	if (scope!=null && scope!=document && newScopeId==scope.id)
		return;

	var newScope = document.getElementById(newScopeId)
	if (useMask==true){
		if (scope!=null)
			this.desactivateForm(scope);
		this.activateForm(newScope);
	}
	else{
		if (scope!=null)
			this.desactivate(scope, newScope);
		this.activate(newScope);
	}
	
	this.scopes = newScopeId;
}

ShB.Scope.previousScope = function()
{
	var scope = this.scopes;
	this.goToScope((scope==document)?null:scope)
	
}

ShB.Scope.goToScope = function(scopeId)
{
	this.scopes = scopeId;
}

ShB.Scope.isFormElement = function(element){
	return element.nodeName=="INPUT" || element.nodeName=="TEXTAREA" || element.nodeName=="SELECT" || element.nodeName=="BUTTON";
}
ShB.Scope.desactivateForm = function(scope){
	for(var i =0; i<this.formElements.length; i++)
	{
		var el = scope.getElementsByTagName(this.formElements[i]);
		for(var p = 0; p<el.length; p++){
			if (el[p].id==null || el[p].id.length==0 || (el[p].form!=null && el[p].id.indexOf(el[p].form.id+"_hf_")==-1)){
				if(el[p].tmpDisabled==null)
					el[p].tmpDisabled = el[p].disabled;
				el[p].disabled=true;
			}
		}
	}
	for(var p = 0; p <ShB.Dialog.dialogs.length; p++){
		if (ShB.Dialog.dialogs[p].scopeId==scope.id)
			this.desactivateForm(ShB.Dialog.dialogs[p].divObj);
	}
		
}

ShB.Scope.activateForm = function(scope){
	for(var i =0; i<this.formElements.length; i++)
	{		
		var el = scope.getElementsByTagName(this.formElements[i]);
		for(var p = 0; p<el.length; p++){
			if (el[p].tmpDisabled!=null)
				el[p].disabled=el[p].tmpDisabled;
			el[p].tmpDisabled=null;
		}		
	}
	for(var p = 0; p <ShB.Dialog.dialogs.length; p++){
		if (ShB.Dialog.dialogs[p].scopeId==scope.id)
			this.activateForm(ShB.Dialog.dialogs[p].divObj);
	}
	
}
ShB.Scope.desactivate = function(component, newScope){
	//TODO use check for wicket debugger
	if (component.id!=null && component.id=="wicketAjaxDebugWindow")
		return;


	//recorremos todos los hijos del componente
	for(var i=0; i<component.childNodes.length;i++)
	{
		var node = component.childNodes[i];		
		if (node.nodeType=="3" || node.nodeName=="HEAD" || node.nodeName=="SCRIPT" || node.nodeName=="LINK")
			continue;
			
		if (node==newScope)
			continue;

		if (node.getAttribute("scope")==null)
		{
			if (this.isFormElement(node))
			{
				if (node["tmpDisabled"]==null)
				{
					var id = node.id;
					//Hack to don't disable wicket fields need to make the submit
					if (id==null || id.length==0 || (node.form!=null && id.indexOf(node.form.id+"_hf_")==-1)){
						node.tmpDisabled= node.disabled;
						node.disabled=true		
					}
				}
			}
			else
			{
				for(var p=0; p<this.events.length; p++)
				{
					if (node[this.events[p]]!=null && node["tmp"+this.events[p]]==null){
						node["tmp"+this.events[p]]= node[this.events[p]];
						node[this.events[p]]= function(){return false};
					}
				}
			}
		}
		this.desactivate(node, newScope)
	}
	
}
ShB.Scope.activate = function(component){

	//TODO use check for wicket debugger
	if (component.id!=null && component.id=="wicketAjaxDebugWindow")
		return;

	//recorremos todos los hijos del componente
	for(var i=0; i<component.childNodes.length;i++)
	{
		var node = component.childNodes[i];
		
		if (node.nodeType=="3" || node.nodeName=="HEAD" || node.nodeName=="SCRIPT" || node.nodeName=="LINK")
			continue;

		if (this.isFormElement(node))
		{
			if (this.isFormElement(node) && node.tmpDisabled!=null)
			{
				node.disabled=node.tmpDisabled
				node.tmpDisabled=null;
			}
		}
		else
		{
			for(var p=0; p<this.events.length; p++)
			{
				if (node["tmp"+this.events[p]]!=null){
					node[this.events[p]]= node["tmp"+this.events[p]];
					node["tmp"+this.events[p]]=null;
				}
			}
		}
		this.activate(node)
	}
}


ShB.Scope.showMask= function(scopeId)
{
	if(document.getElementById(scopeId+"_mask")!=null){
		document.getElementById(scopeId+"_mask").style.zIndex= ShB.Dialog.z_index++;	
		return;		
	}
	var element = document.createElement("div");
	element.id= scopeId+"_mask";
	element.className="mask";
	element.style.width=YAHOO.util.Dom.getViewportWidth()+"px";
	element.style.height=YAHOO.util.Dom.getViewportHeight()+"px";
	//var c = ShB.Dialog.findContainer(scope);
	var c = document.body;
	c.appendChild(element);
	element.style.zIndex= ShB.Dialog.z_index++;
	
	/*window.onscroll = window.onresize = function(){
		if (document.getElementById(ShB.Scope.getScope().id+"_mask")!=null){
			document.getElementById(ShB.Scope.getScope().id+"_mask").style.width=YAHOO.util.Dom.getViewportWidth()+"px"
			document.getElementById(ShB.Scope.getScope().id+"_mask").style.height=YAHOO.util.Dom.getViewportHeight()+"px"
		}
	};*/
}

ShB.Scope.hideMask= function(scopeId){
	if (document.getElementById(scopeId+"_mask")!=null){
		document.getElementById(scopeId+"_mask").parentNode.removeChild(document.getElementById(scopeId+"_mask"));
		return true;
	}
	return false;
}

