var IS_MSIE		= navigator.userAgent.indexOf("MSIE") >= 0;
var IS_MSIE6	= IS_MSIE && navigator.userAgent.indexOf("MSIE 6") >= 0;
var IS_MSIE7	= IS_MSIE && navigator.userAgent.indexOf("MSIE 7") >= 0;
var IS_MSIE8	= IS_MSIE && navigator.userAgent.indexOf("MSIE 8") >= 0;
var IS_OPERA	= navigator.userAgent.indexOf("Opera") >= 0;
var IS_FIREFOX	= navigator.userAgent.indexOf("Firefox") >= 0;
var IS_FIREFOX3	= navigator.userAgent.indexOf("Firefox") >= 0 && navigator.userAgent.indexOf("3.0") >= 0;
var IS_SAFARI	= navigator.userAgent.indexOf("Safari") >= 0;
var IS_CHROME	= navigator.userAgent.indexOf("Chrome") >= 0;

var IN_IFRAME	= window.parent != null && window.parent.document != null;

function getRealDocument() {
	if (IN_IFRAME) {
		return window.parent.document;
	}
	
	return document;
}

function getRealWindow() {
	if (IN_IFRAME) {
		return window.parent.window;
	}
	
	return window;
}

function getElementById(id) {
	if (typeof(id) == "object") return id;
	
	var obj = document.getElementById(id);
	if (obj == null) {
		if (IN_IFRAME) {
			obj = getRealDocument().getElementById(id);
		}
	}

	return obj
}

function getElementOfElementById(element, id) {
	element = getElementById(element);
	
	if (element == null) return null;
	
	var elements = element.getElementsByTagName("*");
	
	if (elements != null) {
		for (var i = 0; i < elements.length; i++) {
			if (elements[i].id == id) return elements[i];
		}
	}
	
	return null;
}

function getStageWidth(){
	if(IS_MSIE || IS_OPERA){
		return getRealDocument().body.parentElement.clientWidth;	
	}else{
		return getRealDocument().body.offsetWidth;
	}
}

function getStageHeight(){
	if(IS_MSIE){
		var height = getRealDocument().body.parentElement.clientHeight;
		if(getRealDocument().body.parentElement.clientHeight == 0){
			height = getRealDocument().body.clientHeight;
		}
		return height;
	}else{
		return height = getRealWindow().innerHeight;
	}
}

function getScrollHeight() {
	if(IS_MSIE) {
		return getRealDocument().documentElement.scrollTop;
	} else {
		return getRealWindow().pageYOffset;
	}
}

function getWindowHieght() {
	var nonFooter = getElementById("nonFooter");
	var footer = getElementById("footer");
	
	return nonFooter.offsetHeight + footer.offsetHeight;
}

function getObjectOffsetTop(obj) {
	if (obj == null) return -1;
	var x = obj.offsetTop;
	
	while (obj = obj.offsetParent) {
		x += obj.offsetTop;
	}
	
	return x;
}

function getObjectOffsetLeft(obj) {
	if (obj == null) return -1;
	var x = obj.offsetLeft;
	
	while (obj = obj.offsetParent) {
		x += obj.offsetLeft;
	}
	
	return x;
}

function processMaxLength(text, length) {
	if (text != null && text.length > length) {
		return text.substring(0, length - 3) + "...";
	} else {
		return text;
	}
}

function mouseCoords(ev){
	if (ev == null) { 
		return {x:0, y:0};
	}
	
	if(ev.pageX || ev.pageY){
		return {x:ev.pageX, y:ev.pageY};
	}
	return {
		x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		y:ev.clientY + document.body.scrollTop  - document.body.clientTop
	};
}

function getMouseOffset(target, ev){
	ev = ev || window.event;

	var docPos    = getPosition(target);
	var mousePos  = mouseCoords(ev);
	return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}

function getEvent(ev) {
	return ev || window.event;
}

function toBoolean(value) {
	if (value == null) return false;
	if (typeof(value) == "string") return "true" == value || "on" == value || "1" == value || "y" == value;
	if (typeof(value) == "boolean") return value;
	if (typeof(value) == "number") return 1 == value;
	if (typeof(value) == "object") return value != null;

	return false;
}

function findParentElement(element, tag) {
	if (element == null) return null;
	var parentelement = element.parentNode;
	while (parentelement != null && parentelement.tagName != tag) parentelement = parentelement.parentNode;
	return parentelement;
}


function getACssRule(ruleName, deleteFlag) {
	if (document.styleSheets) {
		for (var i=0; i<document.styleSheets.length; i++) {
			var styleSheet=document.styleSheets[i];
			var ii=0;
			var cssRule=false;
			var useCssRules = IS_MSIE && styleSheet.cssRules;
			var cssRulesLength = 0;
			do {
				if (useCssRules) {
					cssRule = styleSheet.cssRules[ii];
				} else if (styleSheet.rules) {
					cssRule = styleSheet.rules[ii];
				}
				if (cssRule) {
					if (cssRule.selectorText==ruleName) {
						if (deleteFlag=='delete') {
							if (useCssRules) {
								styleSheet.deleteRule(ii);
							} else {
								styleSheet.removeRule(ii);
							}
							return true;
						} else {
							return cssRule;
						}
					}
				}
				ii++;
				cssRulesLength = useCssRules ? styleSheet.cssRules.length : styleSheet.rules ? styleSheet.rules.length : 0;
			} while (cssRule && ii < cssRulesLength)
		}
	}
	return false;
}

function doLink(url) {
	document.location = url;
}

/**
 * Validates the form fields, to determinate if:
 * 	the numbers are numbers
 * 	the required have value
 * 
 * A field is invalid, an alert vill be shown a the curso will be set on the field.
 * 
 * @param form	A form o form id to validate
 * @return		true if the form is valid, false otherwise
 */
//function validateForm(form) {
//	var aForm = getElementById(form);
//	
//	if (aForm != null) {
//		var fields = aForm.elements;
//		for (var i = 0; i < fields.length; i++) {
//			var field = fields[i];
//			if (toBoolean(field.getAttribute("required")) && ! validateRequiredField(field)) return false;
//			//if (toBoolean(field.getAttribute("numeric")) && ! validateNumericField(field)) return false;
//		}
//	}
//	
//	return true;
//}
//
//function validateRequiredField(field) {
//	if (field == null) return true;
//	
//	if (field.value == null || field.value == "") {
//		alert(replaceTok(ALE_VAL_FORM_REQ,field.getAttribute("label")));
//		try { element.focus(); } catch (e) {}
//		return false;
//	}
//	
//	return true;
//}

function replaceTok(tok, value) {
	var i = tok.indexOf("<TOK1>");
	if (i == -1) return tok;
	return tok.substring(0,i)+ value + tok.substring(i+6,tok.length);
}

function isInArray(anArray, value) {
	if (anArray == null) return false;
	
	for (var i = 0; i < anArray.length; i++) {
		if (anArray[i] != null && anArray[i] == value) return true;
	}
	
	return false;
}

function fireEvent(element,evtName){
	if (element.fireEvent) {
		element.fireEvent("on"+evtName, null);
	} else {
		var evt = null;
		if(evtName == "mousedown" || evtName == "mouseup" || evtName == "click" || evtName == "mousemove"){
			evt = window.document.createEvent("MouseEvent");
			evt.initEvent(evtName, false, true); 
        	element.dispatchEvent(evt);
		} 
		evt = {target:element};
		try { element["on"+evtName](evt);} catch (e) {}
	}
}

function returnIfNull(value, defValue) {
	return (value == null) ? defValue : value;
}

function submitAction(frmId, action) {
	getElementById('frmAction').value = action;
	getElementById(frmId).submit();
}

function doAjaxSubmitAction(frmId, action) {
	getElementById('frmAction').value = action;
	doAjaxSubmit(getElementById(frmId),true,null,true);
}

function doAjaxSubmitActionNoWait(frmId, action) {
	getElementById('frmAction').value = action;
	doAjaxSubmit(getElementById(frmId),false,null,false);
}

function getPositionChild(parent, tag, position) {
	if (parent == null) return null;

	var count = 0;
	for (var i = 0; i < parent.childNodes.length; i++) {
		var td = parent.childNodes[i];
		if (td.tagName != undefined && td.tagName.toUpperCase() == tag.toUpperCase()) {
			count ++;
			if (count == position) return td;
		}
	}
	
	return null;
}

function getFirstChild(parent, tag) {
	return getPositionChild(parent, tag, 1);
}


