/////////////////////
/// BASE
/////////////////////

var existsMenuSlide = false;
var ns4 = document.layers;
var ns6 = document.getElementById && !document.all;
var ie4 = document.all;
var uid = 0;
var gid = 0;
var oldElementConf = new Array(10);

function isAlien(a) {
   return isObject(a) && typeof a.constructor != 'function';
}

function isArray(a) {
    return isObject(a) && a.constructor == Array;
}

function isBoolean(a) {
    return typeof a == 'boolean';
}

function isEmpty(o) {
    var i, v;
    if (isObject(o)) {
        for (i in o) {
            v = o[i];
            if (isUndefined(v) && isFunction(v)) {
                return false;
            }
        }
    }
    return true;
}

function isFunction(a) {
    return typeof a == 'function';
}

function isNull(a) {
    return typeof a == 'object' && !a;
}

function isNumber(a) {
    return typeof a == 'number' && isFinite(a);
}

function isObject(a) {
    return (a && typeof a == 'object') || isFunction(a);
}

function isString(a) {
    return typeof a == 'string';
}

function isUndefined(a) {
    return typeof a == 'undefined';
}

function prepareCall() {
	Enturma.showLoadLayer();
}

function showTableRow(objId) {
   ie4 = document.all;
   obj = document.getElementById(objId);
   if (obj && Enturma.isIE()) {
      obj.style.display = 'block';
   } else if (obj){
      obj.style.display = 'table-row';
   }
}
function addTableRow(idTable, rowObj) {
   table = document.getElementById(idTable);
   if (table) {
	   if (!rowObj) return;
	   if (Enturma.isIE()) {
	   	  table = table.firstChild;
	   }
	   table.appendChild(rowObj);
   }
}

function showTableCell(objId) {
   ie4 = document.all;
   obj = document.getElementById(objId);
   if (obj && ie4) {
      obj.style.display = 'block';
   } else if (obj){
      obj.style.display = 'table-cell';
   }
}

function toggleCookie(id, block) {
	var elementX = document.getElementById(id);
	if (elementX) {
		var today = new Date();
		var zero_date = new Date(0,0,0);
		today.setTime(today.getTime() - zero_date.getTime());
		var cookie_expire_date = new Date(today.getTime() + (8 * 7 * 86400000));
		if (elementX.style.display=="" || elementX.style.visibility=="visible" || elementX.style.display=="none") {
			if (block) {
				Enturma.show(id);
			} else {
				fade(id, false, 15, 15);
			}
			Set_Cookie('grpBox'+id,'invisible',cookie_expire_date);
		} else {
			if (block) {
				Enturma.hide(id);
			} else {
				fade(id, true, 15, 15);
			}
			Set_Cookie('grpBox'+id,'visible',cookie_expire_date);
		}
	}
}

function removeElement(id) {
	//fade(id, false, 8, 25);
	Enturma.hide(id);
	var element = document.getElementById(id);
	if (element) {
		var parentNodeObj = element.parentNode;
		if (parentNodeObj) {
			parentNodeObj.removeChild(element);
			//window.setTimeout('parentNodeObj.removeChild(element)', 500);
		}
	}
}

// Show loading....
function wait() {
	Enturma.showLoadLayer();
}

// Hide loading....
function finished() {
	Enturma.hideLoadLayer();
}

function switchDocumentCursor(cursor) {
	//TODO: Testar a chamada abaixo
	//Enturma.setCursor(cursor);
	document.body.style.cursor = cursor;
	parent.document.body.style.cursor = cursor;
}

function addEventToElement(event, elem, func, useCapture) {
	if (elem.attachEvent) {
		elem.attachEvent("on"+event, func);
	} else if (elem.addEventListener) {
		elem.addEventListener(event, func, useCapture);
	}
}

function removeEventFromElement(event, elem, func, useCapture) {
	if (elem.detachEvent) {
		elem.detachEvent("on"+event, func);
	} else if (elem.removeEventListener) {
		elem.removeEventListener(event, func, useCapture);
	}
}

function getElementsByClassName (c) {
    var ret = new Array();
    var j = 0;
    var objs = document.all ?
        document.all : document.getElementsByTagName("*");
    for(i = 0;i<objs.length;i++){
        if(objs[i].className == c){
            ret[j] = objs[i];
            j++;
        } // if
    } // for
    return ret;
} // getElementsByClassName

function moveMenu (e, type) {
	if(ns4||ns6)
	{
		x = e.pageX;
		y = e.pageY;
		obj = e.target;
	}
	else
	{
		x = event.clientX + document.body.scrollLeft;
		y = event.clientY + document.body.scrollTop;
		obj = e.srcElement;
	}

	if (type == null)
		type = 'user';
	idA = obj.id.split("\_");
	if (idA[1] && idA[2]) {
		if (x > (document.body.clientWidth - 300)) {
			var menuB = document.getElementById(type+idA[1]+'_'+idA[2]);
			if (menuB) {
				diff = document.body.clientWidth - x;
				newPos = 250 - diff;
				if (newPos > 70)
					newPos = 70;
				if (newPos > 0)
					menuB.style.left = '-'+newPos+'px';
			}
		}
	}
	return true;
}

function moveMenuGroup(e) {
	moveMenu(e,'community');
}
function questionConfirm(question,idElement,func,event) {
	if (func) {
		displayConfirmBox(func);
	}
	var element = document.getElementById('questionInfo');
	element.innerHTML = question;
	var id = document.getElementById('actionConfirmId');
	id.value = idElement;

	Enturma.show('confirmBox');

	moveConfirm(event);
}

function questionConfirmClose() {
	Enturma.hide('confirmBox');
}

function moveConfirm (e) {
	/** nao usar Enturma.move **/
	var xx = 0;
	var xy = 0;
	if (ns4||ns6) {
		xx = e.pageX;
		xy = e.pageY;
	} else {
		if (event) {
			// fix: IE 7.0+ e DOCTYPE 4+ retorna 0 para body.scrollTop/scrollLeft, usar documentElement.scrollTop/Left ao invez
			if (Enturma.isIEVersionLessThanOrEqual6()) {
				xx = event.clientX + document.body.scrollLeft;
				xy = event.clientY + document.body.scrollTop;
			} else {
				xx = event.clientX + document.documentElement.scrollLeft;
				xy = event.clientY + document.documentElement.scrollTop;
			}
		}
	}

	var newX = xx + offsetX;
	var newY = xy + offsetY;
	var confirmBox = document.getElementById('confirmBox');
	if (confirmBox) {
		confirmBox.style.left = (newX+100) + 'px';
		confirmBox.style.top = (newY - 150) + 'px';
	}
	return true;
}

function showContextHelp(module, functionality, event) {
    callFunctionFrame('help/Index.html', 'contextHelp', 'helpBox', 'module='+module+'&amp;functionality='+functionality);
	helpBoxObj = document.getElementById('helpBox');
	Enturma.show('helpBox');
    if(Enturma.isIEVersionLessThanOrEqual6()) {
        iframeObj = document.getElementById("iframeHideControls");
        if(!iframeObj) {
            iframeObj = document.createElement('iframe');
            iframeObj.setAttribute('id', 'iframeHideControls');
            iframeObj.setAttribute('src', 'javascript:""');
            iframeObj.setAttribute('scrolling', 'no');
            iframeObj.setAttribute('frameborder', '0');
            iframeObj.setAttribute('style', 'display: none;');
            iframeObj.style.position = 'absolute';
            iframeObj.style.top = '0px';
            iframeObj.style.left = '0px';
            document.body.appendChild(iframeObj);
        }
        helpBoxObj.style.zIndex = 2;
        iframeObj.style.width = helpBoxObj.offsetWidth + "px";
        iframeObj.style.height = helpBoxObj.offsetHeight + "px";
        iframeObj.style.top = helpBoxObj.offsetTop + "px";
        iframeObj.style.left = helpBoxObj.offsetLeft + "px";
        iframeObj.style.zIndex = helpBoxObj.style.zIndex - 1;
        Enturma.show(iframeObj.id);
    }

	return false;
}

function hideHelpBox() {
	Enturma.hide('helpBox');
    if(Enturma.isIEVersionLessThanOrEqual6()) {
        Enturma.hide("iframeHideControls");
    }
}

function showError(result) {
	if (result && result['errors']) {
		var nErrors = result['errors'].length;
		for (x=0;x<nErrors;x++) {
			var error = result['errors'][x];
			writeError(error['class'],error['message'],error['description'],error['redirect']);
		}
	}
	if (result && result['systemErrors']) {
		var nErrors = result['systemErrors'].length;
		for (x=0;x<nErrors;x++) {
			var error = result['systemErrors'][x];
			writeSystemError(error['class'], error['message'], error['description'], error['trace']);
		}
	}
	finished();
}

function showMessage(result) {
	if (result && result['messages']) {
		var nMessages = result['messages'].length;
		for (x=0;x<nMessages;x++) {
			var message = result['messages'][x];
			writeMessage(message['class'],message['message'],message['description'],message['redirect']);
		}
	}
	finished();
}

function Get_Cookie(name) {
    var start = document.cookie.indexOf(name+"=");
    var len = start+name.length+1;
    if ((!start) && (name != document.cookie.substring(0,name.length))) return null;
    if (start == -1) return null;
    var end = document.cookie.indexOf(";",len);
    if (end == -1) end = document.cookie.length;
    return unescape(document.cookie.substring(len,end));
}

function Set_Cookie(name,value,expires,path,domain,secure) {
    document.cookie = name + "=" +escape(value) +
        ( (expires) ? ";expires=" + expires.toGMTString() : "") +
        ( (path) ? ";path=" + path : "") +
        ( (domain) ? ";domain=" + domain : "") +
        ( (secure) ? ";secure" : "");
}

function Delete_Cookie(name,path,domain) {
    if (Get_Cookie(name)) document.cookie = name + "=" +
       ( (path) ? ";path=" + path : "") +
       ( (domain) ? ";domain=" + domain : "") +
       ";expires=Thu, 01-Jan-70 00:00:01 GMT";
}

/*
*  Especificar o valor de um campo, e se ele ? readonly.
*  @param id  string - id do elemento
*  @param value string - valor do elemento
*  @param readonly boolean
*
*  @return object refer?ncia para o campo que foi requisitado
*/
function setValue(id, value, select) {
	try {
		var element = document.getElementById(id);
		if (element) {
			if (select)
				element.selectedIndex = value
			else
				element.value = value;
		}
	} catch(e) {
		alert(e);
		return null;
	}
}

function createInput(sType, sName, sId, sSize, sClass) {
/** Cria e retorna um novo elemento input.
**/
	var Obj;
	if (sType == "radio" && !window.addEventListener) {
		Obj = document.createElement('<input type="radio" class="'+sClass+'" id="'+sId+'" name="'+sName+'">');
	}
	else {
		Obj = document.createElement('input');
		Obj.setAttribute('type', sType);
		Obj.setAttribute('name', sName);
		if (sId) {
			Obj.setAttribute('id', sId);
		}
		if (sSize) {
			Obj.setAttribute('size', sSize);
		}
		if (sClass) {
			Obj.setAttribute('class', sClass);
			Obj.setAttribute('className', sClass); // for IE6
		}
	}
	return Obj;
}

//// SCRAP FUNCTIONS  /////
function sendScrapCallback(result, isError, callInfo) {
	if (isError) {
		showError(result);
	}
	if (callInfo['parameters']['redirect']) {
		window.location.href=window.location.href;
	}
	else {
		showMessage(result);
		fade('sendScrapForm', false, 8, 25);
		finished();
	}
}

function sendScrap(urlType, login, message, redirect) {
	var argArr = new Array(2);
	argArr['msg'] = escape(message);
	if (redirect) {
		argArr['redirect'] = 1;
	}
	callFunction(urlType+'/'+login+'/Scrapbook.html', 'saveScrap', sendScrapCallback, argArr);
}

//// COMMUNITY FUNCTIONS  /////
function deleteMemberCallback(result, isError, callInfo) {
	fade('confirmBox', false, 8, 25);
	if (isError) {
		finished();
		showError(result);
		return;
	}
	if (callInfo['parameters']['redirect']) {
		window.location.href= urlhome+'account/MySpace.html';
	} else {
		showMessage(result);
		removeElement('member_'+callInfo['parameters']['userId']);
	}
	finished();
}

function deleteMember(id, login, redirect) {
	var argArr = new Array(1);
	argArr['userId'] = id;
	argArr['redirect'] = redirect;
	callFunction('community/'+login+'/Members.html', 'deleteMember', deleteMemberCallback, argArr);
}

function popUp (url, width, height, name, center, scroll) {
	if (name == '')   name = 'janela';
	if (center == '') center = false;
	var args = "width="+width+",height="+height;
	if (center && screen && screen.availWidth) { // Centralizar
		var l = (screen.availWidth-10 - width) / 2;
		var t = (screen.availHeight-20 - height) / 2;
		args += ",left="+l+",top="+t+",screenX="+l+",screenY="+t;
	}
	if (scroll) {
		args += ",scrollbars=yes";
	} else {
		args += ",scrollbars=no";
	}
	args += ",resizable=yes,location=no";
	args += ",menubar=no,toolbar=no,status=yes,titlebar=no,directories=no";
	if (url.indexOf('?') == -1)
		url = url + '?popup=1';
	else
		url = url + '&popup=1';
	window.open(url, name, args);
	finished();
}

/*
 *  Seleciona todos os checkboxes de nome "objName" do documento atual
 *  @param obj(deprecated) object - refer?ncia para o elemento que seleciona todos
 *  @param objName string - nome dos checkboxes que ser?o selecionados.
*/
function selectAll(obj, objName) {
   elem = document.getElementsByTagName("input");
   for (i=0; i<elem.length; i++) {
      input = elem[i];
      if (input.type == "checkbox" && input.name==objName) {
            input.checked = obj.checked;
      }
   }
}

function getSelectedMultipleSelect(id) {
	var oSelect = $(id);
	var arSelect = new Array();
	for (var i=0; i<oSelect.options.length; i++) {
		if (oSelect.options[i].selected) {
			arSelect.push(oSelect.options[i].value);
		}
	}
	return arSelect;
}

// Lista todos os checkboxes que est?o selecionados.
function getSelected() {
	selected = new Array();
	elem = document.getElementsByTagName("input");
	for (i=0; i<elem.length; i++) {
		input = elem[i];
		if (input.type != "checkbox" || input.id == 'selAll' || input.id == 'allMsgWrap') continue;
		isSelected = input.checked;
		if (isSelected) selected.push(input.id);
	}
	return selected;
}

function selectListFromSearch(separator){
	selectFromSearch('', separator);
}

function selectFromSearch(valor, separator) {
	// Valor: string '<id>@<name>@<uid>'
	var formSel = document.getElementById('selall');
	if (window.opener) winparent = window.opener;
	else winparent = parent;
	if (valor || formSel) {
		var formId = document.getElementById('search_id');
		var formUid = document.getElementById('search_uid');
		var formName = document.getElementById('search_name');
		var elemento = winparent.document.getElementById(formId.value);
		var elementoUid = null;
		if (formUid && formUid.value)
			elementoUid = winparent.document.getElementById(formUid.value);

		if (!elemento && !elementoUid)
			return;

		// Se puder selecionar mais de um elemento, elemento "id" deve ser um array "id[]"
		if (formSel && !valor) {
			var sel = getSelected();
			var size = sel.length;
			var retorno = Array();
			var retornoName = Array();
			var retornoUid = Array();
			i = 0;
	    	for (i = 0; i < size; i++) {
    	    	valor = document.getElementById(sel[i]).value.split("@");
				retorno[i] = valor[0];
				// Pode se informar um id de um elemento para mostrar o nome do item pesquisado
				if (formName.value != '') {
					retornoName[i] = valor[1];
				}
				if (formUid && formUid.value != '') {
					retornoUid[i] = valor[2];
				}
			}
			if (separator) {
				 if (elemento.value)
					elemento.value += separator+replaceAll(retorno.toString(), ',', separator);
				else
					elemento.value = replaceAll(retorno.toString(), ',', separator);
			} else
				elemento.value = retorno;
			// Pode se informar um id de um elemento para mostrar o nome do item pesquisado
			if (formName.value != '') {
				elementoName = winparent.document.getElementById(formName.value);
				if (separator) {
					if (elementoName.value)
						elementoName.value += separator+replaceAll(retornoName.toString(), ',', separator);
					else
						elementoName.value = replaceAll(retornoName.toString(), ',', separator);
				} else
					elementoName.value = retornoName;
			}
			// Pode se informar um id de um elemento para mostrar o uid do item pesquisado
			if (formUid && formUid.value != '') {
				if (separator) {
					if (elementoUid.value)
						elementoUid.value += separator+replaceAll(retornoUid.toString(), ',', separator);
					else
						elementoUid.value = replaceAll(retornoUid.toString(), ',', separator);
				} else
					elementoUid.value = retornoUid;
			}
		}
		// Somente um elemento
		else {
		  	valor = valor.split("@"); // <id>@<name>@<uid>
			// Pode se informar um id de um elemento para mostrar o id do item pesquisado
			if (formId.value != '') {
				if (separator && elemento.value)
					elemento.value += separator+valor[0];
				else
					elemento.value = valor[0];
			}
			// Pode se informar um id de um elemento para mostrar o nome do item pesquisado
			if (formName.value != '') {
				elementoName = winparent.document.getElementById(formName.value);
				if (separator && elementoName.value)
					elementoName.value += separator+valor[1];
				else elementoName.value = valor[1];
			}
			// Pode se informar um id de um elemento para mostrar o uid do item pesquisado
			if (formUid && formUid.value != '') {
				if (separator && elementoUid.value)
					elementoUid.value += separator+valor[2];
				else elementoUid.value = valor[2];
			}
		}
		// Executa as funcoes, se existirem, incluir mais funcoes, se necessario
		if (elemento) {
			if (elemento.fireEvent) { // Soh para o IE
				elemento.fireEvent("onchange");
				elemento.fireEvent("onfocus");
			}
			else { // Mozilla e outros?
				if (elemento.onchange)  elemento.onchange();
				if (elemento.onfocus)   elemento.onfocus();
			}
		}
		// Executa as funcoes, se existirem, incluir mais funcoes, se necessario
		if (elementoUid) {
			if (elementoUid.fireEvent) { // Soh para o IE
				elementoUid.fireEvent("onchange");
				elementoUid.fireEvent("onfocus");
			}
			else { // Mozilla e outros?
				if (elementoUid.onchange)  elementoUid.onchange();
				if (elementoUid.onfocus)   elementoUid.onfocus();
			}
		}
		if (window.opener) window.close();
		else Enturma.hide('search');
	}
}

function show_props_R (obj, obj_name, equ, delim, depth) {
  var result = ''
  depth--
  for (var i in obj) {
    if (parseInt (navigator.appVersion)==2)
      var typ= 'number'     // Netscape 2.0 doesn't know about typeof
    else
      var typ= typeof (obj[i])
    if (typ=='number' && i=='length') continue
    var del= (typ=='string') ? '"' : ''
    var suf= (typ!='string' && typ!='number' && typ!='object') ?
              ' ('+typ+')' : ''
    result += obj_name+'.'+i+equ+del+obj[i]+del+suf+delim
    if (depth>0)// && typ=='object')
      result += show_props_R (obj[i], obj_name+'.'+i, equ, delim, depth)
  }
  return result;
}

function showObject (object, depth) {
  var str= show_props_R (eval (object), object, '=</TD><TD VALIGN=TOP>',
                         '</TD></TR>\n<TR><TD VALIGN=TOP>', depth)
  document.writeln ('<TABLE>\n<TR><TD>',str,'</TABLE>')
  document.close()
}

// Popup para compor mensagem no webmail
function createNewMessage(action, folder, id, to) {
	// Tamanho janela
	var width = 640;
	var height = 550;

	var args = "scrollbars=no,resizable=yes,location=0";
	args += ",width="+width+",height="+height;
	args += ",menubars=no,toolbar=0,status=0,titlebar=no";

	// Centralizar
	if (screen && screen.availWidth) {
		var l = (screen.availWidth-10 - width) / 2;
	    var t = (screen.availHeight-20 - height) / 2;
	    args += ",left="+l+",top="+t+",screenX="+l+",screenY="+t;
	}
	to = encodeURIComponent(to); // codifica o +
	href = urlhome + "old/component/webmail/novamsg.php?action="+action+"&folder="+folder+"&idMsg="+id+"&to="+to;
	window.open(href, 'newMessage', args);
}

function filterChars(e, chars) {
	var key, keychar;
	if (!e) e = window.event;
	if (e.keyCode) key = e.keyCode;
	else if (e.which) key = e.which;

	keychar = String.fromCharCode(key);
	keychar = keychar.toLowerCase();
	chars = chars.toLowerCase();

	// Verificando...
	if (chars.indexOf(keychar) != -1)
		return true;

	// Control keys
	if ( key==null || key==0 || key==8 || key==9 || key==13 || key==27 )
	   return true;
	return false;
}

function goToPage(e, page, limit, url, last, curreg, target) {
	if (!e) e = window.event;
	if (e.keyCode) key = e.keyCode;
	else if (e.which) key = e.which;

	page = parseInt(page);
	if (!isNaN(page) && !isNaN(limit) && key == 13) {
		if (key == 13) {
			if (page > last) page = last;
			else if (page < 1) page = 1;
			register = (page*limit) - limit;
			if (register < 0) register = 0;
			url = url.replace('register='+curreg, 'register='+register);
			if (target == 'fAction') {
				prepareCall();
				document.getElementById('fAction').src = url;
			}
			else {
				window.location.href = url;
			}
		}
	}
}

function replaceAll(str,text,by) {
// Replaces text with by in string
	var ret;
	text = text.replace(/\//g, "\\/");
	eval('ret = str.replace(/'+text+'/g, by);');
	return ret;
}

/* Funcao trim para strings
   Exemplo: var texto  = ' abc ';
            textotrimmed = texto.trim(); // 'abc'
*/
 String.prototype.trim = function() {
  var x=this;
  x=x.replace(/^\s*(.*)/, "$1");
  x=x.replace(/(.*?)\s*$/, "$1");
  return x;
}

function hideV(id) {
	var elementX = document.getElementById(id);
	if (elementX) {
		elementX.style.visibility="hidden";
	}
}
function showV(id) {
	var elementX = document.getElementById(id);
	if (elementX) {
		elementX.style.visibility="visible";
	}
}

function getWindowSize() {
	/** Retorna o tamanho (largura, altura) maior da janela
		@return Array(width, height)
	**/
	return Enturma.getWindowSize();
}

function checkCharsLimit(e, idElement, nl2br) {
	/** Verifica se chegou ao limite de caracteres de um elemento.
		@param nl2br: se verdadeiro, troca new lines por <br/>
	**/
	var taObj = document.getElementById(idElement);
	if (!taObj.maxLength) taObj.maxLength = 255;

	var checkstr = taObj.value;
	if (nl2br) {
		checkstr = replaceAll(checkstr, "\\r\\n", "<br/>");
		checkstr = replaceAll(checkstr, "\\n", "<br/>");
	}
	var length = checkstr.length;

	var key;
	if (!e) e = window.event;
	if (e) {
		if (e.keyCode) key = e.keyCode;
		else if (e.which) key = e.which;

		if (nl2br && key == 13) {
			if (Enturma.isIE()) length = length + 1
			else length = length + 3;
		}

		if (key==null || key==0 || key==37 || key==38 || key==39 || key==40 ||  key==8 || key==9 || key==27 || key==46) return true;
	}
	if (length >= taObj.maxLength*1) return false;
	else return true;
}

function countChars(e, idElement, idCounter, nl2br) {
	/** Verifica se chegou ao limite de caracteres de um elemento.
		Se existe idCounter, coloca valor de caracteres restantes nesse id.
		@param nl2br: se verdadeiro, troca new lines por <br/>
	**/
	var taObj = document.getElementById(idElement);
	if (!taObj.maxLength) taObj.maxLength = 255;

	var str = taObj.value;
	if (!checkCharsLimit(e, idElement, nl2br)) {
		if (nl2br) var reducedstr = replaceAll(str, '<br/>', "\\n");
		else var reducedstr = str;
		taObj.value = reducedstr.substring(0, taObj.maxLength*1);
	}

	var str = taObj.value;
	if (nl2br) {
		str = replaceAll(str, "\\r\\n", "<br/>");
		str = replaceAll(str, "\\n", "<br/>");
	}
	if (idCounter) {
		var visCnt = document.getElementById(idCounter);
		if (visCnt) {
			var count = taObj.maxLength-str.length;
			if (count < 0) count = 0;
			visCnt.innerHTML = count;
		}
	}
}
function maximize(id, ext) {
	var element = document.getElementById(id);
	oldElementConf[id] = new Array(2);
	oldElementConf[id]['w'] = element.style.width;
	oldElementConf[id]['h'] = element.style.height;
	element.style.position = 'absolute';
	element.style.width = '100%';
	element.style.height = '100%';
	element.style.left = '0px';
	element.style.top = '0px'
	element.style.zIndex = '140';
	if (ext) {
		var elementExt = document.getElementById(ext);
		oldElementConf[ext] = new Array(2);
		oldElementConf[ext]['w'] = elementExt.style.width;
		oldElementConf[ext]['h'] = elementExt.style.height;
	}
}
function minimize(id, ext) {
	if (oldElementConf[id]) {
		var element = document.getElementById(id);
		element.style.position = 'relative';
		element.style.width = oldElementConf[id]['w'];
		element.style.height = oldElementConf[id]['h'];
		if (ext) {
			var elementExt = document.getElementById(ext);
			elementExt.style.width = oldElementConf[ext]['w'] ;
			elementExt.style.height = oldElementConf[ext]['h'];
		}

	}
}

function _actionIMHandle(result, isError, callerInfo) {
	if (!isError) {
	 	window.location.reload();
	}
}

function subscribe(user, userId, userNick) {
	params = new Array(2);
	params['uid'] = userId;
	params['nick'] = userNick;
    callFunction('account/'+user+'/InstantMessenger.html', 'subscribe', _actionIMHandle, params);
}

function unsubscribe(user, userId) {
	params = new Array(2);
	params['uid'] = userId;
    callFunction('account/'+user+'/InstantMessenger.html', 'unsubscribe', _actionIMHandle, params);
}


/////////////////////
/// REQUEST
/////////////////////

var g_requestUrl = null;

function createRequest() {
	var xmlhttp;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
	// JScript gives us Conditional compilation, we can cope with old IE versions.
	// and security blocked creation of the objects.
	try {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			xmlhttp = null;
		}
	}
	@end @*/
	if (!this.xmlhttp && typeof XMLHttpRequest!='undefined') {
		xmlhttp = new XMLHttpRequest();
//		xmlhttp.setRequestHeader('Accept-Charset','ISO-8859-1');

	}
	return xmlhttp;
}

function callFunction(component, func, callback, args) {
	prepareCall();
	var xmlhttp = createRequest();
	if (xmlhttp) {
		if (xmlhttp.readyState != 4) {
			xmlhttp.abort();
		}

		var callerInfo = new Array(5);
		callerInfo['component'] = component;
		callerInfo['function'] = func;
		callerInfo['parameters'] = new Array();

		var queryString = "";
		var argArray = arguments[3];
		for (var i in argArray) {
			if (typeof( argArray[i]) == 'function')
				continue;
			argName = i;
			queryString += "&"+argName+"="+argArray[i];
			callerInfo['parameters'][argName] =argArray[i];
		}
		var url = urlocal+component;
		queryString = "module="+component+"&resultLayout=2&action="+func+queryString;
		xmlhttp.open("POST", url, true);
		xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp) {
				if (xmlhttp.readyState==1) {
					// carregando...
					wait();
				}
				if (xmlhttp.readyState==2) {
					// carregado;
				}
				if (xmlhttp.readyState==4) {
					// lido;
					var isError = false;
					var xmldoc = xmlhttp.responseXML;
					callerInfo['responseXML'] = xmlhttp.responseXML;
					callerInfo['responseText'] = xmlhttp.responseText;
					if (xmldoc) {
						var result = xml2Js(xmldoc, null);
						if (result) {
							if (result['systemErrors'] || result['errors'] || result == false) {
								showError(result);
								isError = true;
							}
							if (callback) {
								callback(result, isError, callerInfo);
								finished();
							}
						} else {
							isError = true;
							callback(result, isError, callerInfo);
							finished();
						}
					} else {
					  if (callback) {
						result = xmlhttp.responseText;
						callback(result,true, callerInfo);
						finished();
					  }
	 				}
				}
			}
		};
		xmlhttp.send(queryString);
	}
}
function callFunctionFrame(component, func, resultId, param, notprep) {
	var frame = document.getElementById('fAction');
	if (frame) {
		if (!notprep) {
			prepareCall();
		}
		fade(resultId,true,1,1);
	    if (param) param = '&'+replaceAll(param, '&amp;', '&');
	    else param = '';

	    //de alguns locais do admin o link vem na forma, por exemplo, admin/grupos2/VirtualDisk.html
	    // como nesse caso do exemplo, essa chamada é montada na ferramenta, que também é usada pelo
	    // account e pelo community, portanto mais fácil ajustar aqui, a princípio
		if (component.indexOf('admin/') > -1){
			var c = component.split('/');
			component = c[0]+'/'+c[c.length-1];
		}

		var url = component+ '?action='+func+'&resultID='+resultId+'&resultLayout=1'+param;
		if (component.indexOf('http://') == -1) {
			url = urlocal + url;
		}
		frame.src = url;

		finished();
	} else {
		alert('Favor esperar at&eacute; a p&aacute;gina carregar...');
	}
}
function openFrame (component, func, resultId, param) {
	var frame = document.getElementById(resultId);
	if (frame) {
		wait();
		fade(resultId,true,1,1);
		var url = urlocal+component+ '?action='+func+'&resultID='+resultId+'&resultLayout=3&'+param;
		//alert(param);
		//var windowS =  window.open(url,'janelinha');
		frame.src = url;
		finished();
	} else {
		alert('No function frame available!');
	}
}

function xml2Js(xmldoc, node) {
	var result;
	if (!xmldoc) return null;
	if (!node) {
		node = xmldoc.documentElement;
	}

	if (node) {
		var vartype = node.getAttribute("type");
		if (vartype == "object") {
			result = new Object();
			var length = node.childNodes.length;
			for (var x=0; x<length; x++) {
				if (node.childNodes.item(x).nodeType == 3) { continue; }

				var curnode = node.childNodes.item(x);
				var tagname = curnode.nodeName;
				var r = xml2Js(xmldoc, curnode);
				tagname = tagname.replace("-", "_");
				tagname = tagname.replace(" ", "");
				tagname = tagname.replace("private", "privado");
				// n?o sei porque ele n?o aceita private
				eval("result."+tagname+" = r");
			}
		}
		else if (vartype == "array") {
			var arrayLen = parseInt(node.getAttribute("length"));
			result = new Array(arrayLen);
			var items = node.getElementsByTagName("item");
			for (var i = 0; i < items.length; i++) {
				if (items.item(i).parentNode != node) {continue;}
				if (items.item(i).nodeType == 3) { continue; }

				var item = items.item(i);
				var key = item.getAttribute("key");
				result[key] = xml2Js(xmldoc, item);
			}
		}
		else {
			if (node.firstChild) {
				result = node.firstChild.nodeValue;
			} else {
				result = node.nodeValue;
			}
			if (vartype == "integer") {
				if (!result) result = 0;
				else  result = parseInt(result);
			}
			else if (vartype == "boolean")  {
				result = (result)?true:false;
			}
			if (isString(result)) {
				if (result.substring(0,17) == 'XML Parsing Error') {
					alert('XML Parsing Error');
					result = false;
				}
			}
		}
	}
	return result;
}

function getContent(url,id) {
	var xmlhttp = createRequest();
	var queryString = '';
	if (xmlhttp) {
		if (xmlhttp.readyState != 4) {
			xmlhttp.abort();
		}
		xmlhttp.open("GET", url, true);
		xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');

		xmlhttp.onreadystatechange = function() {
			if (xmlhttp) {
				if (xmlhttp.readyState==4) {
					var result = xmlhttp.responseText;
					var resultObj = document.getElementById(id);
					if (resultObj) {
						resultObj.innerHTML = result.replace(/\n|\r/g,"");
					}
				}
			}
		}
		xmlhttp.send(queryString);
	}
}


/////////////////////
/// FADE
/////////////////////


///////////////////////////////////////////////////////////////////////
//     This fade library was designed by Erik Arvidsson for WebFX    //
//                                                                   //
//     For more info and examples see: http://webfx.eae.net          //
//     or send mail to erik@eae.net                                  //
//                                                                   //
//     Feel free to use this code as long as this disclaimer is      //
//     intact.                                                       //
//                                                                   //
//     Last updated: 2000-11-22                                      //
///////////////////////////////////////////////////////////////////////

window.status = "Loading fade package...";

var fadeSteps = 4;				// Number of steps to loop
var fademsec = 25;				// The time between each step (note that most computer have problem
								// handling to small values due to hardware limitations)


var fadeArray = new Array();	// Needed to keep track of wich elements are animating

//////////////////  fade  ////////////////////////////////////////////////////////////
//                                                                                  //
//   parameter: fadeIn                                                              //
// description: A boolean value. If true the element fades in, otherwise fades out  //
//              The steps and msec are optional. If not provided the default        //
//              values are used                                                     //
//                                                                                  //
//////////////////////////////////////////////////////////////////////////////////////

function fade (el, fadeIn,steps,msec) {
	if (fadeIn) {
		Enturma.show(el);
	} else {
		Enturma.hide(el);
	}
	return;
//	alert(el);
	msec = msec * 5;
	window.setTimeout("finished()",msec-10);
	var ele = document.getElementById(el);
	if (ele) {
		if (fadeIn) {
			ele.style.filter = "alpha(opacity=0)";
			ele.style.MozOpacity = 0;
			ele.style.opacity = 0;
			Enturma.show(el);
			currentOpac(el,99,msec);
		} else {
			ele.style.filter = "alpha(opacity=99)";
			ele.style.MozOpacity = 0.99;
			ele.style.opacity = 0.99;
			currentOpac(el,1,msec);
			window.setTimeout("Enturma.hide('"+el+"')",msec+25);
		}
	}
}

function fadeA(el, fadeIn, steps, msec) {

	el = document.getElementById(el);
	if (steps == null) steps = fadeSteps;
	if (msec == null) msec = fademsec;

	if (el.fadeIndex == null)
		el.fadeIndex = fadeArray.length;
	fadeArray[el.fadeIndex] = el;

	if (el.fadeStepNumber == null) {
		if (el.style.visibility == "hidden" || el.style.display == "none")
			el.fadeStepNumber = 0;
		else
			el.fadeStepNumber = steps;
		if (fadeIn) {
			el.style.filter = "Alpha(Opacity=0)";
			el.style.MozOpacity = 0;
			el.style.opacity = 0;
		}
		else {
			el.style.filter = "Alpha(Opacity=99)";
			el.style.MozOpacity = 0.99;
			el.style.opacity = 0.99;
		}
	}

	window.setTimeout("repeatFade(" + fadeIn + "," + el.fadeIndex + "," + steps + "," + msec + ")", msec);
}

//////////////////////////////////////////////////////////////////////////////////////
//  Used to iterate the fading

function repeatFade(fadeIn, index, steps, msec) {
	el = fadeArray[index];
	c = el.fadeStepNumber;
	if (el.fadeTimer != null)
		window.clearTimeout(el.fadeTimer);
	if ((c == 0) && (!fadeIn)) {			//Done fading out
		el.style.display = "none";		// If the platform doesn't support filter it will hide anyway
		el.style.visibility = "hidden";		// If the platform doesn't support filter it will hide anyway
//		el.style.filter = "";
		stop = 0;
		finished();
		return;
	}
	else if ((c==steps) && (fadeIn)) {	//Done fading in!
		el.style.filter = "";
		el.style.MozOpacity = 1;
		el.style.visibility = "visible";
		el.style.display = " ";
		//alert(el.style.display);
		finished();
		return;
	}
	else {
		(fadeIn) ? 	c++ : c--;
		el.style.visibility = "visible";
		el.style.display = "";
		el.style.filter = "alpha(opacity=" + (100*c/steps)-1 + ")";
		el.style.MozOpacity = (c / steps) - 0.01;
		el.style.opacity = (c / steps) - 0.01;

		el.fadeStepNumber = c;
		el.fadeTimer = window.setTimeout("repeatFade(" + fadeIn + "," + index + "," + steps + "," + msec + ")", msec);
	}
}

window.status = "";


function opacity(id, opacStart, opacEnd, millisec) {
	//speed for each frame
	var speed = Math.round(millisec / 100);
	var timer = 0;

	//determine the direction for the blending, if start and end are the same nothing happens
	if(opacStart > opacEnd) {
		for(i = opacStart; i >= opacEnd; i--) {
			setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
			timer++;
		}
	} else if(opacStart < opacEnd) {
		for(i = opacStart; i <= opacEnd; i++)
			{
			setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
			timer++;
		}
	}
}

//change the opacity for different browsers
function changeOpac(opacity, id) {
	var object = document.getElementById(id)
	if (object) {
		object = object.style;
		object.opacity = (opacity / 100);
		object.MozOpacity = (opacity / 100);
		object.KhtmlOpacity = (opacity / 100);
		object.filter = "alpha(opacity=" + opacity + ")";
	}
}

function shiftOpacity(id, millisec) {
	//if an element is invisible, make it visible, else make it ivisible
	if(document.getElementById(id).style.opacity == 0) {
		opacity(id, 0, 100, millisec);
	} else {
		opacity(id, 100, 0, millisec);
	}
}

function blendimage(divid, imageid, imagefile, millisec) {
	var speed = Math.round(millisec / 100);
	var timer = 0;

	//set the current image as background
	document.getElementById(divid).style.backgroundImage = "url(" + document.getElementById(imageid).src + ")";

	//make image transparent
	changeOpac(0, imageid);

	//make new image
	document.getElementById(imageid).src = imagefile;

	//fade in image
	for(i = 0; i <= 100; i++) {
		setTimeout("changeOpac(" + i + ",'" + imageid + "')",(timer * speed));
		timer++;
	}
}

function currentOpac(id, opacEnd, millisec) {
	//standard opacity is 100
	var currentOpac = 100;
	//if the element has an opacity set, get it
	if(document.getElementById(id).style.opacity < 100) {
		currentOpac = document.getElementById(id).style.opacity * 100;
	}

	//call for the function that changes the opacity
	opacity(id, currentOpac, opacEnd, millisec)
}


/////////////////////
/// FLOAT
/////////////////////

/*
Floating Menu script-  Roy Whittle (http://www.javascript-fx.com/)
Script featured on/available at http://www.dynamicdrive.com/
This notice must stay intact for use
*/

//Enter verticalpos = "frombottom" or "fromtop"

function floatDiv(idFloat, verticalpos, frame, yVar)
{
	var startX = 3,
	startY = (yVar)?yVar:0;
	var ns = (navigator.appName.indexOf("Netscape") != -1);
	function ml(id, frame)
	{
		if (frame) {
			var d = parent.document;
		} else {
			var d = document;
		}
		if (typeof(id) == 'object') {
			var el=id;
		} else {
			var el=d.getElementById?d.getElementById(id):d.all?d.all[id]:d.layers[id];
		}
		if (!el) {
			return false
		}
		if(d.layers)el.style=el;

		el.sP=function(x,y){
			this.style.top=y+'px';
		};

		//el.x = startX;

		if (verticalpos=="fromtop")
			el.y = startY;
		else{
			el.y = ns ? pageYOffset + innerHeight : d.body.scrollTop + d.body.clientHeight;
			el.y -= startY;
		}
		return el;
	}
	window.stayTopLeft = function (frame)
	{
		if (verticalpos=="fromtop"){
			if (frame) {
				var pY = ns ? pageYOffset : parent.document.body.scrollTop;
			} else {
				var pY = ns ? pageYOffset : document.body.scrollTop;
			}
			ftlObj.y += (pY + startY - ftlObj.y)/8;
		}
		else{
			if (frame) {
				var pY = ns ? pageYOffset + innerHeight : parent.document.body.scrollTop + parent.document.body.clientHeight;
			} else {
				var pY = ns ? pageYOffset + innerHeight : document.body.scrollTop + document.body.clientHeight;
			}
			ftlObj.y += (pY - startY - ftlObj.y)/8;
		}
		ftlObj.sP(ftlObj.x, ftlObj.y);
		if(frame) {
			setTimeout("stayTopLeft("+frame+")", 10);
		}
	}
	ftlObj = ml(idFloat,frame);
	if (ftlObj) {
		stayTopLeft(frame);
	}

}


/////////////////////
/// TOOLTIP
/////////////////////

offsetX = -20;
offsetY = 20;
var toolTipSTYLE="";

function initToolTips()
{
	if(ns4||ns6||ie4)
	{
		if(ns4) toolTipSTYLE = document.toolTipLayer;
		else if(ns6 && document.getElementById("toolTipLayer")) toolTipSTYLE = document.getElementById("toolTipLayer").style;
		else if(ie4 && document.all.toolTipLayer) toolTipSTYLE = document.all.toolTipLayer.style;

		if(ns4)
			document.captureEvents(Event.MOUSEMOVE);
		else
		{
			toolTipSTYLE.visibility = "hidden";
			toolTipSTYLE.display = "none";
		}
		document.onmousemove = moveToMouseLoc;

	}
}

function toolTip(msg)
{
	if(toolTip.arguments.length < 1) // hide
	{
		if(ns4) toolTipSTYLE.visibility = "hidden";
		else toolTipSTYLE.display = "none";
	}
	else // show
	{
		//<img src="'+urlimg+'/system/tip.gif" alt="tip" title="tip" class="toolTipoImg alt=""/>
	    var content =  '<div class="toolTip">' +msg + '</div>';
		if(ns4)
		{
			toolTipSTYLE.document.write(content);
			toolTipSTYLE.document.close();
			toolTipSTYLE.visibility = "visible";
		}
		if(ns6)
		{
			elementToolTip = document.getElementById("toolTipLayer");
			if (elementToolTip) {
				elementToolTip.innerHTML = content;
				toolTipSTYLE.display='block'
				toolTipSTYLE.visibility = "visible";
			}
		}
		if(ie4)
		{
			if (document.all("toolTipLayer")) {
				document.all("toolTipLayer").innerHTML=content;
				toolTipSTYLE.display='block'
				toolTipSTYLE.visibility = "visible";
			}
		}
	}
}

function moveToMouseLoc(e)
{
	if (toolTipSTYLE) {
		var xx = null;
		var xy = null;
		if (!e) e = event;

		var srcElem = e.srcElement || e.target;
		var pos = (Position.cumulativeOffset(srcElem));
		xx = pos[0];
		xy = pos[1];

		newX = xx + offsetX;
		newY = xy + offsetY;

		toolTipSTYLE.left = newX + 'px';
		toolTipSTYLE.top = newY + 'px';
	}
	return true;
}

