var existsMenuSlide = false;
var ns4 = document.layers;
var ns6 = document.getElementById && !document.all;
var ie4 = document.all;
var uid = 0;
var gid = 0;
var elementTemp = null;
var parentTemp = null;
var HTMLArea = null;


function focusInput(element,blur) {
	if (blur) {
		element.style.backgroundColor='white';
	} else {
		element.style.backgroundColor='#e8e8e8';
	}
}

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;
}
function createSpan(sId, sClass){
/** Cria e retorna um novo elemento input.
**/
	var Obj;
	Obj = document.createElement('span');
	if (sId) {
		Obj.setAttribute('id', sId);
	}
	if (sClass) {
		Obj.setAttribute('class', sClass);
	}
	return Obj;
}
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()
}

function hide(id) {
	var elementX = document.getElementById(id);
	if (elementX) {
		elementX.style.display="none";
		elementX.style.visibility="hidden";
	}
	finished(true);
}

function show(id,loading) {
	var elementX = document.getElementById(id);
	if (elementX) {						
		elementX.style.visibility="visible";		
		elementX.style.display="";
	}
	if (!loading) {
		finished();
	}
}

function troggle(id) {
	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") {			
			fade(id, false, 15, 15);
			Set_Cookie('grpBox'+id,'invisible',cookie_expire_date);
		} else {
			fade(id, true, 15, 15);						
			Set_Cookie('grpBox'+id,'visible',cookie_expire_date);
		}
	}
		
}

function removeElement(id) {
	fade(id, false, 8, 25);
	elementTemp = document.getElementById(id);
	if (elementTemp) {
		parentTemp = elementTemp.parentNode;
		if (parentTemp) {
			window.setTimeout('parentTemp.removeChild(elementTemp)',50);
		}
	}
}

// Show loading....
function wait() {
	show('loading',1);
	switchDocumentCursor('wait');
}

// Hide loading....
function finished(fromHide) {
	if (!fromHide) {
		hide('loading');	
	}
	switchDocumentCursor('auto');	
	
}

function switchDocumentCursor(cursor) {
	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 prepareWait() {
	var elements = document.getElementsByTagName('a');
	for (var i=0;i<elements.length;i++) {
		addEventToElement('click',elements[i],wait,true);	
		addEventToElement('click',elements[i],moveConfirm,true);	
	}
	var elements = document.getElementsByTagName('form');
	for (var i=0;i<elements.length;i++) {
		addEventToElement('submit',elements[i],wait,true);	
	}	
	var elements = document.getElementsByName('submit[confirmButton]');
	for (var i=0;i<elements.length;i++) {
		addEventToElement('click',elements[i],moveConfirm,true);	
	}
	if (existsMenuSlide) {
		var elements = getElementsByClassName('userInfoBox');
		for (var i=0;i<elements.length;i++) {
			addEventToElement('mouseover',elements[i],moveMenu,true);	
		}
		var elements = getElementsByClassName('userInfoMove');
		for (var i=0;i<elements.length;i++) {
			addEventToElement('mouseover',elements[i],moveMenu,true);	
		}
		var elements = getElementsByClassName('groupInfoMove');
		for (var i=0;i<elements.length;i++) {
			addEventToElement('mouseover',elements[i],moveMenu,true);	
		}
		var elements = getElementsByClassName('groupInfoItem');
		for (var i=0;i<elements.length;i++) {
			addEventToElement('mouseover',elements[i],moveMenuGroup,true);	
		}
	}
	//addEventToElement('resize',window,correctFooter,true);	
	if (HTMLArea) {
		HTMLArea.init();
	}
	//JSFX_FloatTopDiv('sendScrapForm');
}

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 questionConfirm(question,idElement,func) {
	if (func) {
		displayConfirmBox(func);
	}
	var element = document.getElementById('questionInfo');	
	element.innerHTML = question;
	var id = document.getElementById('actionConfirmId');	
	id.value = idElement;
	
	var confirm = document.getElementById('confirmbox');
	confirm.style.display = 'block';
	confirm.style.visibility = 'visible';
	
		
	if (ns6) {
		fade('confirmbox',true,8,50);
	} else {
		show('confirmbox');
		window.setTimeout('finished()',50);
	}
	
}

function questionConfirmClose() {
	if (ns6) {
		fade('confirmbox', false,8,50); 
	} else {
		hide('confirmbox');		
		window.setTimeout('finished()',50);
	}
	
	
}

function moveConfirm (e) {
	if(ns4||ns6)
	{
		x = e.pageX;
		y = e.pageY;
	}
	else
	{
		x = event.x + document.body.scrollLeft;
		y = event.y + document.body.scrollTop;
	}	
	newX = x + offsetX;
	newY = y + offsetY;
	var confirmBox = document.getElementById('confirmbox');
	if (confirmBox) {
		confirmBox.style.left = (newX - 170) + 'px';
		confirmBox.style.top = (newY - 360) + 'px'; 		
	}
	return true;
}


function moveMenu (e, type) {
	if(ns4||ns6)
	{
		x = e.pageX;
		y = e.pageY;
		obj = e.target;
	}
	else
	{
		x = event.x + document.body.scrollLeft;
		y = event.y + 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 = 215 - diff;			
				if (newPos > 135)
					newPos = 135;
				if (newPos > 0)
					menuB.style.left = '-'+newPos+'px';
				//menuB.style.top = (newY - 150) + 'px'; 		
			}			
		}
	}
	return true;
}
function moveMenuGroup(e) {
	moveMenu(e,'group');
}

function showError(result) {
	if (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']);
		}
	}
}

function showResult(result) {
	var nParts = result.length;
	if (nParts) {
		alert('Partes XML: ' + nParts);			
	} else {
		writeResult(result);
	}
}

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

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";
}

function getValue(id,select) {
	var element = document.getElementById(id);
	if (element) {
		if (select) 
			return element[element.selectedIndex].value
		else
			return element.value;	
	}	
}

function setValue(id, value,select) {
	var element = document.getElementById(id);
	if (element) {
		if (select) 
			element.selectedIndex = value
		else
			element.value = value;	
	}	
}

//// FRIEND FUNCTIONS  /////

function addFriendCallback(result, isError, callInfo) {
	
	if (isError) {
		showError(result);
	} else {
		showMessage(result);		
	}		
	fade('addFriendForm',false,8,25)	
}
function addFriend(login, relationshipId) {
	var argArr = new Array(1);
	argArr['friendGroupId'] = relationshipId;	
	callFunction('friend/'+login+'/','invite',addFriendCallback,argArr);
}
function acceptFriendCallback(result, isError, callInfo) {
	if (isError) {
		showError(result);
	}
	var login = callInfo['parameters']['loginFriend'];	
	fade('invite'+login,false,8,25)	
}
function acceptFriend(login, relationshipId) {
	var argArr = new Array(2);
	argArr['friendGroupId'] = relationshipId;	
	argArr['loginFriend'] =login;
	callFunction('friend/'+login+'/','accept',acceptFriendCallback,argArr);
}
function rejectFriendCallback(result, isError, callInfo) {
	if (isError) {
		showError(result);
	}
	var login = callInfo['parameters']['loginFriend'];	
	fade('invite'+login,false,8,25)	
}
function rejectFriend(login) {
	var argArr = new Array(1);
	argArr['loginFriend'] =login;
	callFunction('friend/'+login+'/','reject',rejectFriendCallback, argArr);
}

//// SCRAP FUNCTIONS  /////
function sendScrapCallback(result, isError, callInfo) {	
	if (isError) {
		showError(result);
	} else {
		showMessage(result);
	}
	fade('friendSendForm',false,8,25)	
	fade('sendScrapForm',false,8,25)	
}
function sendScrap(login, message) {
	var argArr = new Array(1);
	argArr['msg'] = message;
	callFunction('account/'+login+'/Scrap.html','index',sendScrapCallback,argArr);
}

//// GROUP FUNCTIONS  /////

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

function deleteMember(login, redirect) {
	var id = document.getElementById('actionConfirmId');	
	var argArr = new Array(2);
	argArr['userId'] = id.value;	
	argArr['redirect'] = redirect;	
	callFunction('group/'+login+'/Members.html','deleteMember',deleteMemberCallback,argArr);
}



function  inviteGroupCallback(result, isError, callInfo) {	
	if (isError) {
		showError(result);
	} else {		
	}	
	var login = callInfo['parameters']['loginGroup'];	
	fade('invite'+login,false,8,25)	
	showMessage(result);
}
function acceptGroup(login, email, code, who) {
	var argArr = new Array(1);
	argArr['code'] = code;	
	argArr['userId'] = who;	
	argArr['email'] = email;	
	argArr['loginGroup'] =login;
	callFunction('group/'+login+'/','confirmInvite', inviteGroupCallback,argArr);
}

function rejectGroup(login) {
	var argArr = new Array(1);
	argArr['loginGroup'] = login;
	callFunction('group/'+login+'/','reject', inviteGroupCallback, argArr);
}

function  moderatedMessageCallback(result, isError, callInfo) {	
	if (isError) {
		showError(result);
	}
	if (callInfo['parameters']['redirect']) {
		window.location.href = 'Messages.html?action=moderated';
	} else {			
		showMessage(result);
		var login = callInfo['parameters']['loginGroup'];	
		var id = callInfo['parameters']['id'];	
		fade('moderated'+id,false,8,25)	
	}
}
function acceptMessage(login, id, redirect) {
	var argArr = new Array(3);
	argArr['id'] = id;	
	argArr['loginGroup'] =login;
	argArr['redirect'] = redirect;
	callFunction('group/'+login+'/Messages.html?action=moderated','accept', moderatedMessageCallback,argArr);
}

function rejectMessage(login, id, redirect) {
	var argArr = new Array(3);
	argArr['id'] = id;	
	argArr['loginGroup'] =login;
	argArr['redirect'] = redirect;
	callFunction('group/'+login+'/Messages.html?action=moderated','reject', moderatedMessageCallback, argArr);
}


function bannerExpand()
{
	var banner = document.getElementById('banner2');
//	show('banner2');
	if (banner) {
		banner.style.visibility = 'visible';
	}
	banner = document.getElementById('banner1');
	if (banner) {
		banner.style.visibility = 'hidden';
	}
//	hide('banner1');
}

function bannerFull()
{
//	hide('banner2');
	var banner = document.getElementById('banner2');
	if (banner) {	
		banner.style.visibility = 'hidden';
	}
	banner = document.getElementById('banner1');
	if (banner) {
		banner.style.visibility = 'visible';
	}
}


/**
 * Adiciona um evento ao objeto
 * @param object Objeto que recebe o novo evento
 * @param string evType Nome do evento (sem o 'on')
 * @param function fn Nome da função a ser usada no evento
 */ 
function addEvent( obj , evType , fn ){
	if ( ! obj ) {
		return false;
	}
    if ( obj.addEventListener )
        obj.addEventListener(evType, fn, true)
    if ( obj.attachEvent )
        obj.attachEvent("on"+evType, fn)
}


/**
 * Conta os caracteres de uma textarea, limita e mostra a quantidade restante
 * @param textarea	field	Objeto textarea 
 * @param int		limit	Quantidade de caracteres possíveis
 * @param object	counter	Objeto de elemento html para receber o valor restante
 */
function maxlengthCount( field , limit , counter ) {
	if ( field.value.length > limit ) {
		field.value = field.value.substr( 0 , limit );
	}
	counter.innerHTML = limit - field.value.length;
}

