function validateSearchString(query) {
	if (query != null && query.value != "") {
		var result = doCheckLuceneQuery(query);
		
		if (result) AJAX_PANEL.showLoading();
		return result;
	}
	AJAX_PANEL.showLoading();
	return true;
}

function showElement(elementName,event) {
	var divElement = getElementById(elementName);
	if (divElement != null) divElement.style.display = "block";
}

function showElementFull(elementName,event) {
	var divElement = getElementById(elementName);
	if (divElement != null) {
		divElement.style.display = "block";
		divElement.style.height = getWindowHieght() + "px";
		divElement.style.width = getStageWidth() + "px";
	}
}

function showAtFront(elementNameFirst,elementNameSecond) {
	var elementFirst = document.getElementById(elementNameFirst);
	var elementSecond = document.getElementById(elementNameSecond);
	
	if (elementFirst != null && elementSecond != null) {
		elementFirst.style.zIndex = elementSecond.style.zIndex + 1;
	}

}

function showElementInLine(elementName,event) {
	var divElement = getElementById(elementName);
	divElement.style.display = "inline";
}

function removeTooltip(src, event) {
	var tooltip = src.getAttribute("tooltip");
	
	if (tooltip == "") return true;
	
	src.setAttribute("tooltip","");
	try { Effect.Fade(getElementById(tooltip), { duration: 0.5 }); } catch (e) { hiddeElement(tooltip,event); }
}

function removeTooltipNow(src, event) {
	var tooltip = src.getAttribute("tooltip");
	
	if (tooltip == "") return true;
	
	src.setAttribute("tooltip","");
	removeElement(tooltip,event);
}


function justCreateTooltip(text, orientation, algin, src, event) {
	var id = src.getAttribute("tooltip");
	if (id != null && id != "") return;
	
	var tooltip = document.createElement("DIV");
	document.body.appendChild(tooltip);

	var img = "";
	
	tooltip.id = "tooltip" + (new Date()).getTime();
	tooltip.className = "tooltip";
	tooltip.innerHTML = "<div>" + text + "</div>";
	
	src.setAttribute("tooltip",tooltip.id);
	orientation = showElementRelative(tooltip,orientation,algin, true, src, event);

	switch (orientation) {
		case 'n': img = IMG_TOOLTIP_NORTH; break;
		case 's': img = IMG_TOOLTIP_SOUTH; break;
		case 'w': img = IMG_TOOLTIP_WEST; break;
		case 'e': img = IMG_TOOLTIP_EAST; break;
	}

	return tooltip.id;
}

function createTooltip(text, orientation, algin, src, event) {
	var tooltipId = justCreateTooltip(text, orientation, algin, src, event);
	setTimeout("Effect.Appear('" + tooltipId + "', { duration: 0.5 })",1000);
	return tooltipId;
}

function createTooltipNoWait(text, orientation, algin, src, event) {
	var tooltipId = justCreateTooltip(text, orientation, algin, src, event);
	
//	var element = getElementById(tooltipId);
//	alert(element.style.top);

	showElement(tooltipId);
	scrollToElementIfCutted(tooltipId);
	
	return tooltipId;
}


function showElementRelative(elementName,orientation,align,updateCss,src,event) {
	var element = getElementById(elementName);
	
	if (element != null) {
		element.style.visibility = "hidden";
		element.style.display = "block";
		
		var mouseCoord = mouseCoords(getEvent(event));
		var visualOk = true;
		var changesMade = 0;
		
		var extraLocationTop = 0;
		
		if (src.tagName == "INPUT")	extraLocationTop = 5;
		if (src.tagName == "DIV")	extraLocationTop = 10;
		if (src.tagName == "A")		extraLocationTop = 8;
		
		do {
			visualOk = true;
			var locationTop		= getObjectOffsetTop(src);
			var locationLeft	= getObjectOffsetLeft(src);
			
			var cssName			= " ";
			
			switch (orientation) { //calcular nueva posición y estilo visual
				case 'n':
					cssName += "north";
					locationTop += - element.offsetHeight - src.offsetHeight + extraLocationTop;
					switch (align) {
						case 'r': cssName += "Right"; locationLeft += - element.offsetWidth + src.offsetWidth + 0; break;
						case 'l': cssName += "Left"; locationLeft += -6; break;
						case 'c': cssName += "Center"; locationLeft += - (element.offsetWidth / 2) + (src.offsetWidth / 2); break;
					}
					break;
				case 's':
					cssName += "south";
					locationTop += src.offsetHeight + 5 - extraLocationTop;
					switch (align) {
						case 'r': cssName += "Right"; locationLeft += - element.offsetWidth + src.offsetWidth; break;
						case 'l': cssName += "Left"; locationLeft += -6; break;
						case 'c': cssName += "Center"; locationLeft += - (element.offsetWidth / 2) + (src.offsetWidth / 2); break;
					}
					
					break;
				case 'w':
					cssName += "west";
					locationLeft += - element.offsetWidth - 5;
					locationTop += -5;
					switch (align) {
						case 'd': cssName += "Down"; locationTop += - element.offsetHeight + src.offsetHeight; break;
						case 'u': cssName += "Up"; locationTop += 0; break;
						case 'c': cssName += "Center"; locationTop += - (element.offsetHeight / 2) + (src.offsetHeight / 2) + extraLocationTop; break;
					}
					break;
				case 'e':
					cssName += "east";
					locationLeft += src.offsetWidth + 2;
					locationTop += -5;
					switch (align) {
						case 'd': cssName += "Down"; locationTop += - element.offsetHeight + src.offsetHeight; break;
						case 'u': cssName += "Up"; locationTop += 0; break;
						case 'c': cssName += "Center"; locationTop += - (element.offsetHeight / 2) + (src.offsetHeight / 2) + extraLocationTop; break;
					}
					break;
			}
			
			//Hacer verificación visual
			if (locationTop <= getScrollHeight()) {
				visualOk = false;
				if (orientation == 'n') orientation = 's';
				if (orientation == 'w' || orientation == 'e') align = (align != 'c') ? 'c' : 'u';
			} else if ((locationTop + element.offsetHeight) > (getScrollHeight() + getStageHeight())) {
				visualOk = false;
				if (orientation == 's') orientation = 'n';
				if (orientation == 'w' || orientation == 'e') align = (align != 'c') ? 'c' : 'd';
			} else if (locationLeft <= 0) {
				visualOk = false;
				if (orientation == 'n' || orientation == 's') align = (align != 'c') ? 'c' : 'l';
				if (orientation == 'w') orientation = 'e';
			} if ((locationLeft + element.offsetWidth) > getStageWidth()) {
				visualOk = false;
				align = (align != 'c') ? 'c' : 'r';
				if (orientation == 'n' || orientation == 's') align = (align != 'c') ? 'c' : 'r';
				if (orientation == 'e') orientation = 'w';
			}
			
			if (! visualOk) changesMade ++;

		} while ((! visualOk) && changesMade < 3);
		
		element.style.visibility = "";
		element.style.display = "none";
		if (updateCss) element.className += cssName;
		
		element.style.top = locationTop + "px";
		element.style.left = locationLeft + "px";
	}
	
	return orientation;
}

function hiddeElement(elementName,event) {
	var divElement = getElementById(elementName);
	if (divElement != null) divElement.style.display = "none";
}

function removeElement(elementName,event) {
	var divElement = getElementById(elementName);
	if (divElement != null && divElement.parentNode != null) divElement.parentNode.removeChild(divElement);
}

function isElementVisible(elementName,event) {
	var divElement = getElementById(elementName);
	return divElement.style.display != "none";
}

function isElementVisibleNotUndefined(elementName,event) {
	var divElement = getElementById(elementName);
	return divElement.style.display != "none" && divElement.style.display != "";
}

/**
 * Re center an element in the screen. If the screen is smaller than the
 * element height, the elements is positioned at the top of the screen.
 * 
 * @param elementName	the element to center
 * @param event			the event caller
 * @return				<code>true</code> if the element has been center, <code>false</code> otherwise.
 */
function reShowElementCenter(elementName,event) {
	var divElement = getElementById(elementName);
	if (divElement != null && divElement.style.display == "block") {
		var x = (getStageWidth() / 2) - (divElement.offsetWidth / 2);
		var y = (getStageHeight() / 2) + getScrollHeight() - (divElement.offsetHeight / 2);
		
		if (x < 0) x = 0;
		if (y < 0 || getStageHeight() < divElement.offsetHeight) y = 0;
		
		divElement.style.top = y + "px";
		divElement.style.left = x + "px";
	}
	
	if (divElement != null && divElement.style.top == "0px") return false;
	return divElement != null;
}

function showElementCenter(elementName,event) {
	var divElement = getElementById(elementName);
	if (divElement != null) {
		divElement.style.display = "block";
		return reShowElementCenter(elementName,event);
	}
	
	return false;
}

function showTab(container,tab,cssTabOn,cssTabOff) {
	var theContainer = getElementById(container);
	var tabs = theContainer.childNodes;
	
	if (tab == null) tab = parseInt(theContainer.getAttribute("currentTab"));
	if (tab == "+") tab = parseInt(theContainer.getAttribute("currentTab")) + 1;
	if (tab == "-") tab = parseInt(theContainer.getAttribute("currentTab")) - 1;
	
	if (tab == null) tab = 0;
	if (tab < 0) tab = 0;
	
	var count = 0;
	var tabFocused = false;
	var lastTabFound = null;
	var lastTabCount = null;
	for (var i = 0; i < tabs.length; i++) {
		if (tabs[i].nodeType == 1) {
			if (count == tab) {
				tabs[i].style.display = "block";
				getElementById(container + "Tabber" + count).className = cssTabOn;
				theContainer.setAttribute("currentTab",count);
				tabFocused = true;
			} else {
				tabs[i].style.display = "none";
				getElementById(container + "Tabber" + count).className = cssTabOff;
				lastTabFound = i;
				lastTabCount = count;
			}
			count ++;
		}
	}
	
	if ((! tabFocused) && lastTabFound != null) {
		tabs[lastTabFound].style.display = "block";
		getElementById(container + "Tabber" + lastTabCount).className = cssTabOn;
		theContainer.setAttribute("currentTab",lastTabCount);
	}
	
	return true;
}

function adjustDivCode() {
	if (IS_MSIE || IS_SAFARI || IS_FIREFOX3 || true) {
		var tdContent = getElementById("tdContent");
		if (tdContent != null) {
			//get style information
			var codeCssRule = getACssRule(".code",null);
			
			if (codeCssRule == null || ! codeCssRule) return false;
			
			var maxWidth = codeCssRule.style.maxWidth;
			var maxHeight = codeCssRule.style.maxHeight;
			
			var maxScreenWidth = getStageWidth() - 20;

			//calculate other tds space
			var trContent = findParentElement(tdContent,"TR");

			var tdsWidth = 0;

			for (var i = 0; i < trContent.cells.length; i++) {
				if (trContent.cells[i].id != "tdContent") {
					tdsWidth += parseInt(trContent.cells[i].offsetWidth);
				}
			}
			
			//calculate max values
			var maxCodeWidth = maxScreenWidth - tdsWidth;
			if (maxWidth.indexOf("px") != -1) maxCodeWidth = parseInt(maxWidth.substring(0, maxWidth.indexOf("px")));
			if (maxWidth.indexOf("%") != -1) maxCodeWidth = maxCodeWidth * (parseInt(maxWidth.substring(0, maxWidth.indexOf("%"))) / 100);
			
			var maxCodeHeight = maxHeight;
			if (maxHeight.indexOf("px") != -1) maxCodeHeight = parseInt(maxHeight.substring(0, maxHeight.indexOf("px")));
			
			var divs = tdContent.getElementsByTagName("DIV");
			for (var i = 0; i < divs.length; i++) {
				if (divs[i].className == "code") {
					var applyMaxWidth = false;
					var applyMaxHeight = false;
				
					applyMaxHeight = divs[i].offsetHeight > maxCodeHeight;
					applyMaxWidth = divs[i].offsetWidth > maxCodeWidth;
					
					if (applyMaxHeight) divs[i].style.height = maxCodeHeight + "px";
					if (applyMaxWidth) divs[i].style.width = maxCodeWidth + "px";
				}
			}
		}
	}
}

//--- Tabs functions [START]---------------------
var TOGGLE_TABS_LAST_FOCUSED = null;

function toggleTabs(elementId, initialState, onlyOne, src) {
	toggleTabsAdvance(elementId, initialState,"[ - ]","[ + ]", onlyOne, src);
}

function toggleTabsImage(elementId, initialState, hiddenImgSrc, visibleImgSrc, onlyOne, src) {
	toggleTabsAdvance(elementId, initialState,"<img src=\"" + hiddenImgSrc + "\" border=\"0\">","<img src=\"" + visibleImgSrc + "\" border=\"0\">", onlyOne, src);
}

function setBiggetZIndex(eleId1,eleId2) {
	var ele1 = getElementById(eleId1);
	var ele2 = getElementById(eleId2);
	
	var zIndex1 = parseInt(ele1.style.zIndex);
	var zIndex2 = parseInt(ele2.style.zIndex);
	
	ele1.style.zIndex = (zIndex1 > zIndex2)?zIndex2:zIndex1;
	ele2.style.zIndex = (zIndex1 > zIndex2)?zIndex1:zIndex2;
}

function toggleTabsAdvance(elementId, initialState, hiddenHtml, visibleHtml, onlyOne, src) {
	if (onlyOne == null) onlyOne = false;
	
	if (onlyOne && TOGGLE_TABS_LAST_FOCUSED != null && elementId != TOGGLE_TABS_LAST_FOCUSED[0]) {
		setBiggetZIndex(elementId,TOGGLE_TABS_LAST_FOCUSED[0]);
		toggleTabsAdvance(TOGGLE_TABS_LAST_FOCUSED[0],TOGGLE_TABS_LAST_FOCUSED[1],TOGGLE_TABS_LAST_FOCUSED[2],TOGGLE_TABS_LAST_FOCUSED[3],false, src);
	}
	
	if (onlyOne) {
		TOGGLE_TABS_LAST_FOCUSED = new Array();
		TOGGLE_TABS_LAST_FOCUSED[0] = elementId;
		TOGGLE_TABS_LAST_FOCUSED[1] = initialState;
		TOGGLE_TABS_LAST_FOCUSED[2] = hiddenHtml;
		TOGGLE_TABS_LAST_FOCUSED[3] = visibleHtml;
	}
	
	var container = getElementById(elementId);
	if (container != null) {
		var isHidden = container.style.display == "none" || (container.style.display == "" && initialState == "none");
		var togglerString = isHidden?hiddenHtml:visibleHtml;
		
		if (! isHidden) {
			if (onlyOne) {
				Effect.BlindUp(container, { duration: 0.5 });
			} else {
				container.style.display = "none";
			}
		}
		if (isHidden) { //verificar si el elemento tiene que ser reacomodado visualmente
			showElementRelative(elementId,'s','w',false,src,null);
			container.style.display = "block"
		}
		
		var toggler = getElementById(elementId + "Toggle");
		if (toggler != null) {
			toggler.innerHTML = togglerString;
		}
		
		if (onlyOne && ! isHidden) TOGGLE_TABS_LAST_FOCUSED = null;
	}
}
//--- Tabs functions [END]-----------------------

function setFocusAdvance(elementId, initialState, hiddenFocus, visibleFocus) {
	var container = getElementById(elementId);
	if (container != null) {
		if (container.style.display == "none" || (container.style.display == "" && initialState == "none")) {
			var hiddenElement = document.getElementById(hiddenFocus);
			if (hiddenElement != null) hiddenElement.focus();
		} else {
			var visibleElement = document.getElementById(visibleFocus);
			if (visibleElement != null) visibleElement.focus();
		}

	}
}

function keepHeight(element) {
	if (element != null) {
		element.style.height = element.offsetHeight + "px";
	}
}

function removeHeight(element) {
	if (element != null) {
		element.style.height = "";
	}
}

function scrollDown(element) {
	element = getElementById(element);
	if (element != null) element.scrollTop = element.scrollHeight;
}

function scrollToElementIfCutted(element) {
	element = getElementById(element);
	var mustScroll = getObjectOffsetTop(element) < getScrollHeight() || (getObjectOffsetTop(element) + element.offsetHeight) > (getStageHeight() + getScrollHeight());
	if (mustScroll) scrollToElement(element);
}

function scrollToElement(element) {
	element = getElementById(element);
	if (element != null) {
		var scrollTo = getObjectOffsetTop(element) + element.offsetHeight - getStageHeight();
		getRealDocument().documentElement.scrollTop = scrollTo;
	}
}

function changeFlashVisibility(visible) {
	var visibility = toBoolean(visible) ? "" : "hidden";
	
	var flashs = document.getElementsByTagName("object");
	for (var i = 0; i < flashs.length; i++) {
		var modalFlash = flashs[i].getAttribute("modalFlash");
		if (modalFlash == null || modalFlash != "true") flashs[i].style.visibility = visibility;
	}
}