
/*
 * funcoes.js
 * Funções genéricas para utilizar com os demais códigos JavaScript
 */

/** sourceIndex by vice-versa - Mit Style License
 * @target  FireFox, Safari, Chrome
 */
if(typeof document.documentElement.sourceIndex == "undefined") HTMLElement.prototype.__defineGetter__("sourceIndex", (function(indexOf){return function sourceIndex(){return indexOf.call(this.ownerDocument.getElementsByTagName("*"), this);};})(Array.prototype.indexOf));;

/*
 * findPosX, findPosY, findPosZ
 * Localização de objetos no eixo XYZ
 * O eixo Z é o zIndex
 */
function findPosX(obj){var curleft = 0;var proximo_offset;if (obj.parentNode) {curleft += ( obj.offsetLeft ? obj.offsetLeft : obj.clientLeft );proximo_offset = ( obj.offsetParent ? obj.offsetParent.sourceIndex : false );while (1) {if (obj.scrollLeft) curleft -= obj.scrollLeft;if (proximo_offset == obj.sourceIndex) {curleft += ( obj.offsetLeft ? obj.offsetLeft : obj.clientLeft );proximo_offset = ( obj.offsetParent ? obj.offsetParent.sourceIndex : false );}if (!obj.parentNode) break;obj = obj.parentNode;}}else if (obj.x) curleft += obj.x;curleft += Math.max(document.body.scrollLeft, document.documentElement.scrollLeft);return curleft;}function findPosY(obj){var curtop = 0;var proximo_offset;if (obj.parentNode) {curtop += ( obj.offsetTop ? obj.offsetTop : obj.clientTop );proximo_offset = ( obj.offsetParent ? obj.offsetParent.sourceIndex : false );while (1) {if (obj.scrollTop) curtop -= obj.scrollTop;if (proximo_offset == obj.sourceIndex) {curtop += ( obj.offsetTop ? obj.offsetTop : obj.clientTop );proximo_offset = ( obj.offsetParent ? obj.offsetParent.sourceIndex : false );}if (!obj.parentNode) break;obj = obj.parentNode;}}else if (obj.y) curtop += obj.y;curtop += Math.max(document.body.scrollTop, document.documentElement.scrollTop);return curtop;}function findPosZ(){var ultimo_zIndex = 100;var allElems = (document.getElementsByTagName ? document.getElementsByTagName('DIV') : document.all);for (var i = 0; i < allElems.length; i++) {var elem = allElems[i];var cStyle = null;if (elem.currentStyle) {cStyle = elem.currentStyle;}else if (document.defaultView && document.defaultView.getComputedStyle) {cStyle = document.defaultView.getComputedStyle(elem, '');}var sNum;if (cStyle) {sNum = Number(cStyle.zIndex);}else {sNum = Number(elem.style.zIndex);}if (!isNaN(sNum)) {ultimo_zIndex = Math.max(ultimo_zIndex, sNum);}}return ultimo_zIndex;}

// Manipulação de texto

var histogram = get_html_translation_table('HTML_ENTITIES', 'ENT_QUOTES'); delete(histogram['&']); histogram['&'] = '&amp;';  function html_entity_decode(string){var symbol = '', tmp_str = '', entity = '';tmp_str = string.toString();if (!histogram) {return false;}for (symbol in histogram) {entity = histogram[symbol];tmp_str = tmp_str.split(entity).join(symbol);}return tmp_str;}function get_html_translation_table (table, quote_style) {var entities = {}, hash_map = {}, decimal = 0, symbol = '';var constMappingTable = {}, constMappingQuoteStyle = {};var useTable = {}, useQuoteStyle = {};constMappingTable[0]  = 'HTML_SPECIALCHARS';constMappingTable[1]  = 'HTML_ENTITIES';constMappingQuoteStyle[0] = 'ENT_NOQUOTES';constMappingQuoteStyle[2] = 'ENT_COMPAT';constMappingQuoteStyle[3] = 'ENT_QUOTES';useTable   = !isNaN(table) ? constMappingTable[table] : table ? table.toUpperCase() : 'HTML_SPECIALCHARS';useQuoteStyle = !isNaN(quote_style) ? constMappingQuoteStyle[quote_style] : quote_style ? quote_style.toUpperCase() : 'ENT_COMPAT';if (useTable !== 'HTML_SPECIALCHARS' && useTable !== 'HTML_ENTITIES') {throw new Error("Table: "+useTable+' not supported');}entities['38'] = '&amp;';if (useTable === 'HTML_ENTITIES') {entities['160'] = '&nbsp;';entities['161'] = '&iexcl;';entities['162'] = '&cent;';entities['163'] = '&pound;';entities['164'] = '&curren;';entities['165'] = '&yen;';entities['166'] = '&brvbar;';entities['167'] = '&sect;';entities['168'] = '&uml;';entities['169'] = '&copy;';entities['170'] = '&ordf;';entities['171'] = '&laquo;';entities['172'] = '&not;';entities['173'] = '&shy;';entities['174'] = '&reg;';entities['175'] = '&macr;';entities['176'] = '&deg;';entities['177'] = '&plusmn;';entities['178'] = '&sup2;';entities['179'] = '&sup3;';entities['180'] = '&acute;';entities['181'] = '&micro;';entities['182'] = '&para;';entities['183'] = '&middot;';entities['184'] = '&cedil;';entities['185'] = '&sup1;';entities['186'] = '&ordm;';entities['187'] = '&raquo;';entities['188'] = '&frac14;';entities['189'] = '&frac12;';entities['190'] = '&frac34;';entities['191'] = '&iquest;';entities['192'] = '&Agrave;';entities['193'] = '&Aacute;';entities['194'] = '&Acirc;';entities['195'] = '&Atilde;';entities['196'] = '&Auml;';entities['197'] = '&Aring;';entities['198'] = '&AElig;';entities['199'] = '&Ccedil;';entities['200'] = '&Egrave;';entities['201'] = '&Eacute;';entities['202'] = '&Ecirc;';entities['203'] = '&Euml;';entities['204'] = '&Igrave;';entities['205'] = '&Iacute;';entities['206'] = '&Icirc;';entities['207'] = '&Iuml;';entities['208'] = '&ETH;';entities['209'] = '&Ntilde;';entities['210'] = '&Ograve;';entities['211'] = '&Oacute;';entities['212'] = '&Ocirc;';entities['213'] = '&Otilde;';entities['214'] = '&Ouml;';entities['215'] = '&times;';entities['216'] = '&Oslash;';entities['217'] = '&Ugrave;';entities['218'] = '&Uacute;';entities['219'] = '&Ucirc;';entities['220'] = '&Uuml;';entities['221'] = '&Yacute;';entities['222'] = '&THORN;';entities['223'] = '&szlig;';entities['224'] = '&agrave;';entities['225'] = '&aacute;';entities['226'] = '&acirc;';entities['227'] = '&atilde;';entities['228'] = '&auml;';entities['229'] = '&aring;';entities['230'] = '&aelig;';entities['231'] = '&ccedil;';entities['232'] = '&egrave;';entities['233'] = '&eacute;';entities['234'] = '&ecirc;';entities['235'] = '&euml;';entities['236'] = '&igrave;';entities['237'] = '&iacute;';entities['238'] = '&icirc;';entities['239'] = '&iuml;';entities['240'] = '&eth;';entities['241'] = '&ntilde;';entities['242'] = '&ograve;';entities['243'] = '&oacute;';entities['244'] = '&ocirc;';entities['245'] = '&otilde;';entities['246'] = '&ouml;';entities['247'] = '&divide;';entities['248'] = '&oslash;';entities['249'] = '&ugrave;';entities['250'] = '&uacute;';entities['251'] = '&ucirc;';entities['252'] = '&uuml;';entities['253'] = '&yacute;';entities['254'] = '&thorn;';entities['255'] = '&yuml;';} if (useQuoteStyle !== 'ENT_NOQUOTES') {entities['34'] = '&quot;';} if (useQuoteStyle === 'ENT_QUOTES') {entities['39'] = '&#39;';} entities['60'] = '&lt;'; entities['62'] = '&gt;'; for (decimal in entities) { symbol = String.fromCharCode(decimal); hash_map[symbol] = entities[decimal];} return hash_map; }

/**
 * 
 * PARA DEBUG APENAS
 * Acrescentei a variável level_maximo para definir quantos level exibir
 * 
* Function : dump()
* Arguments: The data - array,hash(associative array),object
*The level - OPTIONAL
* Returns  : The textual representation of the array.
* This function was inspired by the print_r function of PHP.
* This will accept some data as the argument and return a
* text that will be a more readable version of the
* array/hash/object that is given.
*/
function dump(arr, level_maximo, level){
	var dumped_text = "";
	if (!level) 
		level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for (var j = 0; j < level + 1; j++) 
		level_padding += "";
	
	if (typeof(arr) == 'object') { //Array/Hashes/Objects
		for (var item in arr) {
			var value = arr[item];
			
			if (typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";

				if (level < level_maximo)
					dumped_text += dump(value, level_maximo, level + 1);
			}
			else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	}
	else { //Stings/Chars/Numbers etc.
		dumped_text = "===>" + arr + "<===(" + typeof(arr) + ")";
	}
	return dumped_text;
}

