/********************************************************************************
Copyright (C)  2001-2003 Datarroba
All rights reserved. Unauthorized usage, reproduction, modification and
distribution of this software is strictly prohibited.
Company....: Datarroba - Consultoria Informática, Lda.
Author.....: Paulo Matos
File.......: util.js
Version....: 3.0
Description: Main JavaScript include file for onload functions and
	     Generic functions for:
	      - DOM
	      - prototyping
********************************************************************************/

var appVersion	= window.navigator.appVersion.toLowerCase();
var isIE5	= appVersion.indexOf("msie 5.0") != - 1;
var isIE5_5	= appVersion.indexOf("msie 5.5") != - 1;
var isIE6	= appVersion.indexOf("msie 6.")  != - 1;

var locationStr;
var mainFrameName	= "main";
var cookieExpireDate	= new Date(2999, 11, 31);


// myBodyObj é do tipo Body Object
function getXOnLoadBefore(myBodyObj) {
	return myBodyObj.getAttribute("xOnLoadBefore");
}

// myBodyObj é do tipo Body Object
function getXOnLoadAfter(myBodyObj) {
	return myBodyObj.getAttribute("xOnLoadAfter");
}

onload = function(event) {
	locationStr = location.protocol + "//" + location.host;

	var onLoadBefore = getXOnLoadBefore(document.body);

	if((onLoadBefore != null) && (onLoadBefore != "")) {
		eval(onLoadBefore);
	}

	if(this.onLoadDialog)
		onLoadDialog();

	if(this.onLoadForm)
		onLoadForm();

	if(this.onLoadGUI)
		onLoadGUI();

	if(this.onLoadDCM)
		onLoadDCM();

	var onLoadAfter = getXOnLoadAfter(document.body);

	if((onLoadAfter != null) && (onLoadAfter != "")) {
		eval(onLoadAfter);
	}
}

function filterPropEvent() {
	// !event	- para permitir a chamada através do código
	// event.type	- para permitir a chamada quando a página carrega
	// event.pName	- para permitir sempre que o valor muda
	return( !event ||
		event.type != "propertychange" ||
		(event.type == "propertychange" && event.propertyName == "value") );
}


// myObj é do tipo Object
function objectToArray(myObj) {
	if(myObj)
		if(myObj.length)
			return myObj;
		else
			return new Array(myObj);

	return new Array();
}

// myObj é do tipo Object
// tagName e tagId são do tipo String
function getParentObject(myObj, tagName, tagId) {
	while(((tagName && myObj.tagName.toUpperCase() != tagName.toUpperCase()) ||
	       (tagId && myObj.id.toUpperCase() != tagId.toUpperCase())) &&
	      myObj.parentElement)
		myObj = myObj.parentElement;

	return myObj;
}

// myId, parentName e parentId são do tipo String
// startObj é do tipo Object
function getObjArrayById(myId, startObj, parentName, parentId) {
	var tmpObj = getParentObject(startObj, parentName, parentId);
	var retObj = new Array();

	if(tmpObj.tagName.toUpperCase() != "HTML") {
		if(retObj.id != myId)
			retObj = tmpObj.all(myId);
		retObj = objectToArray(retObj);
	}

	return retObj;
}

// myObj é do tipo Object
// tagName e tagId são do tipo String
function searchParentObject(myObj, tagName, tagId) {
	var tmpObj;
	var tmpObjLength;

	while((( tagName &&  tagId) ||
	       ( tagName && !tagId && !myObj.all.tags(tagName.toUpperCase())) ||
	       (!tagName &&  tagId && !myObj.all(tagId))) &&
	      myObj.parentElement) {
		myObj  = myObj.parentElement;
		if(tagName && tagId && (tmpObj = myObj.all(tagId))) {
			tmpObj = objectToArray(tmpObj);
			tmpObjLength = tmpObj.length;
			for(var i = 0; i < tmpObjLength; i++)
				if(tmpObj[i].tagName.toUpperCase() == tagName.toUpperCase())
					return myObj;
		}
	}

	return myObj;
}

// myObj é do tipo Object
// myName e myId são do tipo String
// isBefore é do tipo boolean
function searchObjArrayById(myObj, myName, myId, isBefore) {
	var retObj;
	var tmpObj = myObj;

	do {
		retObj = searchParentObject(tmpObj, myName, myId);
		if(retObj.tagName.toUpperCase() == "HTML")
			return new Array();
		if(retObj.id != myId)
			retObj = retObj.all(myId);
		retObj = objectToArray(retObj);
		tmpObj = tmpObj.parentElement;
	} while(isBefore && (retObj[0].sourceIndex > myObj.sourceIndex));

	return retObj;
}

// myObj é do tipo IFrame Object
function getDOMPath(myObj) {
	var DOMPath = "";

	while(myObj.name != mainFrameName) {
		DOMPath = myObj.name + "." + DOMPath;
		myObj = myObj.parent;
	}

	return DOMPath;
}

// str, old, firstNew e restNew são do tipo String
function replaceStr(str, old, firstNew, restNew) {
	var re = new RegExp(old);

	str = str.replace(re, firstNew);
	re = new RegExp(old, "g");
	str = str.replace(re, restNew);

	return str;
}


// ARRAY

Array.prototype.indexOf = arrayIndexOf;
Array.prototype.copy	= arrayCopy;

function arrayIndexOf(str) {
	for(var i = 0; i < this.length; i++)
		if(this[i] == str)
			return i;
	return -1;
}

function arrayCopy(arr) {
	for(var i = 0; i < arr.length; i++)
		if(arr[i][0]) {
			this[i] = new Array();
			this[i].copy(arr[i]);
		}
		else {
			this[i] = arr[i];
		}

	return this;
}


// STRING

String.prototype.format = stringFormat;

function stringFormat(len, chr, toLeft) {
	var retStr = this;

	if(!chr)
		chr = " ";

	for(var i = this.length; i < len; i++)
		if(toLeft == false)
			retStr = retStr + chr;
		else
			retStr = chr + retStr;

	return retStr;
}
