var facewall = {

	animations: {
		jump: {
			frames: null,
			loops: null
		},
		shake: {
			frames: null,
			loops: null
		},
		shift: {
			frames: null,
			loops: null
		},
		pop: {
			frames: null,
			loops: null
		}
	},

	buddyList: null,
	
	rows: null,
	cols: null,
	pageLeft: null,
	pageTop: null,
	space: null,
	
	rollover: null,
	
	basediv: null,
	
	statusdivwidth: null,
	statusdivheight: null,
	trunkwords: null,
	sourceurl: null,
	picdim: null,
	bigpicdim: null,

	effectTimeout: null,
	effectDelay: 0,
	effectList: new Array(),
	
	Movement: function(counter, max, min, top, left, position, div, pic, loop, animation, loops) {
		this.counter = counter;
		this.max = max;
		this.min = min;
		this.top = top;
		this.left = left;
		this.position = position;
		this.div = div;
		this.pic = pic;
		this.loop = loop;
		this.loops = loops;
		this.animation = animation;
	},
	
	Frame: function(counter, x, y, top, left, div, pic, presence, username, loop, animation, loops) {
		this.counter = counter;
		this.x = x;
		this.y = y;
		this.top = top;
		this.left = left;
		this.div = div;
		this.pic = pic;
		this.presence = presence;
		this.username = username;
		this.loop = loop;
		this.loops = loops;
		this.animation = animation;
	},
	
	Buddy: function(id, minipic, screenname, presence, username, location, age, sex, row, col, top, left) {
		this.idbuddy = id;
		this.minipic = minipic;
    this.screenname = screenname;
		this.presence = presence;
		this.username = username;
		this.location = location;
		this.age = age;
		this.sex = sex;
		this.row = row;
		this.col = col;
		this.top = top;
		this.left = left;
		this.status='null';
		this.timeout = 0;
		this.actiontimeout = 0;
		this.opacity = 100;
		this.statustop = 0;
		this.maxstatustop = 0;
		this.actionsqueue = new Array();
		this.rolloverqueue = new Array();
		this.action = 0;
		this.effectList = new Array();
	},

	Effect: function(event, shoutout, idbuddy) {
		this.event = event;
		this.shoutout = shoutout;
		this.idbuddy = idbuddy;
	},
	
	CounterAction: function(what, delay){
		this.what=what;
		this.delay=delay;
	},
	
	Action: function(kind, score, loops, text, event, other){
		this.kind=kind;
		this.score=score;
		this.loops=loops;
		this.text=text;
		this.event=event;
		this.other=other;
	},

	initFacewall: function() {
		facewall.animations.jump.frames = jump_frames;
		facewall.animations.jump.loops = jump_loops;
		facewall.animations.shake.frames = shake_frames
		facewall.animations.shake.loops = shake_loops;
		facewall.animations.shift.frames = shift_frames;
		facewall.animations.shift.loops = shift_loops;
		facewall.animations.pop.frames = pop_frames;
		facewall.animations.pop.loops = pop_loops;
		facewall.rows = rows;
		facewall.cols = cols;
		facewall.pageLeft = pageLeft;
		facewall.pageTop = pageTop;
		facewall.space = space;
		facewall.rollover = rollover;
		facewall.statusdivheight = statusdivheight;
		facewall.statusdivwidth = statusdivwidth;
		facewall.sourceurl = sourceurl;
		facewall.trunkwords = trunkwords;
		facewall.picdim = picdim;
		facewall.bigpicdim = bigpicdim;
		
		document.getElementById(divcontainer).innerHTML += '<div id="basediv" class="base">';
		//document.getElementById(divcontainer).innerHTML += '<div id="sfondodiv" class="sfondo"></div>';
		document.getElementById(divcontainer).innerHTML += '</div>';

		facewall.flshownameunder = true;

		facewall.basediv = document.getElementById("basediv");
		facewall.basediv.style.top = facewall.pageTop + 'px';
		facewall.basediv.style.left = facewall.pageLeft + 'px';
		facewall.basediv.style.width = (facewall.cols * (facewall.picdim + (facewall.space * 2))) + 'px';
		facewall.basediv.style.height = (facewall.rows * (facewall.picdim + (facewall.space * 2) + 25)) + 'px';

		facewall.loadBuddyList(facewall.sourceurl);
		
		//NUOVE VARIABILI
		facewall.rolloveronoffline = false;
		facewall.baloonspermanence = 6000;
	},
	
	loadBuddyList: function(current_url) {
		facewall.basediv.innerHTML = '<div align="center"><table><tr><td><p style="text-align:center;">'
			+ '<br />Loading...<br /></td></tr></table></div>';		  
    try{
			dojo.io.bind({
				url: current_url,
				//url: "http://192.168.1.20/test/bbm2/buddylist.xml",
				load: function(type, data, evt){ facewall.loadXML(data); },
				mimetype: "text/html"
			});
		}
		catch(tErr){
			try{
				dojo.io.bind({
				url: "http://http://mac.evectors.it/test/bbm2/buddylist.xml",
					load: function(type, data, evt){ facewall.loadXML(data); },
					mimetype: "text/xml"
				});
			}
			catch(tErr){
				dojo.io.bind({
				url: "http://bipower.local/~simone/facewall/buddylist.xml",
					load: function(type, data, evt){ facewall.loadXML(data); },
					mimetype: "text/xml"
				});
			}
		}
	},

	loadPage: function(pagenr) {
		facewall.loadBuddyList(facewall.sourceurl + '?p=' + pagenr);
	},

	loadXML: function(data) {
    data = dojo.dom.createDocumentFromText(data);//fix made to make code work in IE
		var root = data.getDocumentElement;
		var buddies = data.getElementsByTagName("buddy");    
		var rowc = 0;
		facewall.buddyList = new Array();
		for(var i = 0; (i < buddies.length) && (i < (facewall.rows * facewall.cols)); i++) {
			var buddy = buddies.item(i);
      try {
			 var idbuddy = buddy.getElementsByTagName("idbuddy")[0].childNodes[0].nodeValue;
			 var minipic = buddy.getElementsByTagName("thumbnail")[0].childNodes[0].nodeValue;
        var screenname = buddy.getElementsByTagName("screenname")[0].childNodes[0].nodeValue;
			 var presence = buddy.getElementsByTagName("presence")[0].childNodes[0].nodeValue;
			 var username = buddy.getElementsByTagName("username")[0].childNodes[0].nodeValue;
			 var location = buddy.getElementsByTagName("location")[0].childNodes[0].nodeValue;
			 var age = buddy.getElementsByTagName("age")[0].childNodes[0].nodeValue;
			 var sex = buddy.getElementsByTagName("sex")[0].childNodes[0].nodeValue;
     } catch (msg)  {
       //catching the error message.
     }
			var col = (i % facewall.cols) + 1;
			if(col == 1) rowc++;
			var row = rowc;
			var btop = (row - 1) * (facewall.picdim + (facewall.space * 2) + ((facewall.flshownameunder)?25: 0));
			var bleft = (col - 1) * (facewall.picdim + (facewall.space * 2));

			var newBuddy = new facewall.Buddy(idbuddy, minipic, screenname, presence, username, location, 
				age, sex, row, col, btop, bleft);
			var effects = buddy.getElementsByTagName("effect");
			for(var j = 0; j < effects.length; j++) {
				var event = effects[j].getElementsByTagName("event")[0].childNodes[0].nodeValue;
				var shoutout = effects[j].getElementsByTagName("shoutout")[0].childNodes[0].nodeValue;
				var newEffect = new facewall.Effect(event, shoutout, idbuddy);
				newBuddy.effectList.push(newEffect);
			}

			facewall.buddyList.push(newBuddy);
		}
		facewall.showFaces();
	},
	
	showFaces: function() {
		facewall.basediv.innerHTML = '';
		if(facewall.buddyList.length > 0) {
			for(var i = 0; i < facewall.buddyList.length; i++) {
				facewall.basediv.innerHTML += facewall.getBuddyHTML(facewall.buddyList[i]);
			}
		}
		facewall.showEffects();
	},

	showEffects: function() {
		if(facewall.buddyList.length > 0) {
			facewall.fillEffectQueue();
			facewall.effectInterval = window.setInterval('facewall.popEffect()', 5000);
			//alert(facewall.effectInterval);
			facewall.effectDelay=0;
		}
	},

	fillEffectQueue: function() {
		for(var i = 0; i < facewall.buddyList.length; i++) {
			for(var j = 0; j < facewall.buddyList[i].effectList.length; j++) {
				//facewall.startEffect(facewall.buddyList[i].effectList[j].event, facewall.buddyList[i].idbuddy, facewall.buddyList[i].effectList[j].shoutout);
				var jeffect = facewall.buddyList[i].effectList[j];
				facewall.effectList.push(jeffect);
			}
		}
	},

	popEffect: function() {
	   if (!facewall.baloonon){
            if(facewall.effectList.length > 0) {
                if(facewall.effectDelay == 0) {
                    var k = Math.floor(Math.random() * facewall.effectList.length);
                    var keffect = facewall.effectList.slice(k, k + 1);
                    //facewall.startEffect(keffect[0].event, keffect[0].idbuddy, keffect[0].shoutout + " ["+facewall.effectDelay+"-"+facewall.effectList.length+"]");
                    facewall.startEffect(keffect[0].event, keffect[0].idbuddy, keffect[0].shoutout);
                    facewall.effectList.splice(k, 1);
                }
                else {
                    facewall.effectDelay--;
                    //alert(facewall.effectDelay);
                }
            }
            else
            facewall.fillEffectQueue();
		}
	},

	getBuddyHTML: function(buddy) {
		var isleft=((buddy.col <= Math.ceil(facewall.cols / 2)) || (facewall.cols < 3));
		var istop=((buddy.row <= Math.ceil(facewall.rows / 2)) || (facewall.rows < 3));
		var html = '';
		var nickname = (buddy.username.length > facewall.trunkwords) ? buddy.username.substr(0, facewall.trunkwords - 3) + ' ...' : buddy.username;
		//icon
		html += '<div id="imgcontainer_' + buddy.idbuddy + '"  class="buddyimg" style="display: block; height: '+(facewall.picdim + (facewall.space * 2))+';" >'
			+ '<a href="' + base_url + '/user_blog.php?uid=' + buddy.idbuddy + '"><img id="img_' + buddy.idbuddy + '" src="' + buddy.minipic + '" width="' + facewall.picdim 
			+ '" height="' + facewall.picdim 
			+ '" alt="" style="border:' + facewall.space 
			+ 'px;border-style:solid;border-color:#E0E0E0; display: block;" '
			+ 'onmouseover="facewall.startRolloverEffect(\'' + buddy.idbuddy + '\')" /></a></div>';
		//text label under
		html += '<div id="label_' + buddy.idbuddy + '" style="top: '+buddy.top +(facewall.picdim + (facewall.space * 2))+'px; left: '+ buddy.left +'px; width: ' + facewall.picdim + 'px; height: 25px;"> '
			+ '<p class="buddytext" style="display: ' + ((facewall.flshownameunder)?'block': 'none') + ';" align="center">';
    
    if (buddy.screenname != 1)   {
      if (!AIM_API_KEY)
	AIM_HEAD ='<a href="aim:GoIM?screenname=' + buddy.screenname;
      else 
	AIM_HEAD = '<a onclick="AIM.widgets.IM.launch(\'' + buddy.screenname + '\'); return false;"' + ' href="nojavascript.html"'

      html += AIM_HEAD
	+ '"><img id="statusicn2_' + buddy.idbuddy 
	+ '" src="http://api.oscar.aol.com/SOA/key=' + AIM_PRESENCE_KEY + '/presence/' + buddy.screenname + '" align="absmiddle" width="16" height="16" alt="" /></a>' ;
    } else {
      html += '<img id="statusicn2_' + buddy.idbuddy 
      + '" src="' + facewall_path + '/presence/' + buddy.presence 
      + '" align="absmiddle" width="16" height="16" alt="" />' ;
    }
      
    html += nickname + '</p>'
			+ '</div>';
		//enclose in div
		html = '<div id="' + buddy.idbuddy + '" class="photo" style="opacity:1; top: '+ buddy.top +'px; left: '+ buddy.left +'px; width: '+facewall.picdim+'px; height: '+facewall.picdim+'px;"> '
					+ html + '</div>';
		//metadata layer
		html += '<div id="metadata_' + buddy.idbuddy + '" class="metadata" style="top: '+(buddy.top - 10) + 'px; left: '+(buddy.left + ((isleft)?-10:facewall.pageLeft - 380)) + 'px; width: '+(facewall.bigpicdim + (facewall.space * 2) + 150)+'px; height: '+(facewall.bigpicdim + (facewall.space * 2) + 10)+'px;">'
			+ '<div class="metatext_'+((isleft)?'left':'right')+'">'
			+ '<p style="font-weight:bold;font-size:13px;margin-bottom:3px;margin-top:3px; ">'
			+  buddy.username + '</p>'
			+ '&nbsp;&nbsp;&nbsp;' + buddy.location + '<br />'
			+ '&nbsp;&nbsp;&nbsp;' + buddy.age + '<br />'
			+ '&nbsp;&nbsp;&nbsp;' + buddy.sex + '</div></div>';
		
		//magnified photo layer
		html += '<div id="bigphoto_' + buddy.idbuddy + '" class="photoup" style="display:none; top: '
			+ buddy.top + 'px; left: '
			+ buddy.left + 'px;">'
			+ '<a href="' + base_url + '/user_blog.php?uid=' + buddy.idbuddy + '"><img id="imgbig_' + buddy.idbuddy + '" src="' + buddy.minipic +'" width="' + facewall.picdim
			+ '" height="' + facewall.picdim
			+ '" alt="" style="border:' + facewall.space 
			+ 'px;border-style:solid;border-color:#E0E0E0;" '
			+ 'onmouseout="facewall.stopRolloverEffect(\'' + buddy.idbuddy + '\')" '
			+ 'onmouseover="facewall.startMagnify(\'' + buddy.idbuddy + '\')" /></a></div>';
		//event superimpose layer
		html += '<div id="event_' + buddy.idbuddy + '" class="event" style="display:none; top: '
			+ (buddy.top + facewall.space) + 'px; left: '
			+ (buddy.left + facewall.space) + 'px;">'
			+ '<a href="#"><img id="eventimg_' + buddy.idbuddy + '" src="' + buddy.minipic 
			+ '" width="' + facewall.picdim
			+ '" height="' + facewall.picdim
			+ '" onmouseover="facewall.startRolloverEffect(\'' + buddy.idbuddy + '\')" /></a></div>';
		//status layer
		html += '<div id="status_' + buddy.idbuddy + '" class="status" style="left: ' + (buddy.left + ((facewall.picdim - facewall.statusdivwidth) / 2)) +'px;">'
			+ '<p style="margin:2px;padding:0px">'
			+ '<img id="statusicn_' + buddy.idbuddy + '" src="' + facewall_path + '/presence/' + buddy.presence + '" width="16" height="16" align="left" hspace="3" alt="" />' + nickname + '</p></div>';
		//Baloon layer
		buddy.bubblepos=(((istop)?'t':'b') + ((isleft)?'l':'r'));
		html += '<div id="baloon_' + buddy.idbuddy + '" class="bubble" style="top: '
			+(buddy.top + ((istop)?40:-120)) + 'px; left: ' + (buddy.left + ((isleft)?40:-120)) + 'px;filter alpha(opacity=0); opacity: 0;'
			+'" onmouseover="facewall.startRolloverEffect(\'' + buddy.idbuddy + '\')"></div>'
			+'<div id="baloontext_' + buddy.idbuddy + '" class="bubbletext" style="top: '+(buddy.top + ((istop)?105:-90)) + 'px; left: ' + (buddy.left + ((isleft)?70:-90)) + 'px;"></div>';
		return "<!--"+buddy.username+"-->\n\n" + html + "<!--=================-->";
	},
	
	getBuddy: function(idbuddy) {
		if (typeof(idbuddy) != "object"){
			var buddy;
			for(var i = 0; i < facewall.buddyList.length; i++) {
				if(facewall.buddyList[i].idbuddy == idbuddy) {
					buddy = facewall.buddyList[i];
					break;
				}
			}
			return buddy;
			}
		else
			return idbuddy;
	},
	
	clearBuddyRolloverTimeOut: function(buddy, donextaction){
		if (!donextaction){
			buddy.rolloverqueue = new Array();
		}
		clearTimeout(buddy.timeout);

		if (buddy.rolloverqueue.length > 0) {
			var tCounter = buddy.rolloverqueue.shift();
			buddy.timeout = setTimeout(tCounter.what, tCounter.delay);
		}
	},
	
	justwait: function(divimage){
		var buddy = facewall.getBuddy(divimage);
		facewall.clearBuddyActionTimeOut(buddy, true);
	},
	
	clearBuddyActionTimeOut: function(buddy, donextaction){
		if (!donextaction) {
			buddy.actionsqueue=new Array();
		}
		clearTimeout(buddy.actiontimeout);
		if (buddy.actionsqueue.length>0) {
			var tCounter=buddy.actionsqueue.shift();
			switch (tCounter.kind) {
				case 'animation': {
					facewall.startAnimate(tCounter , buddy.idbuddy);
					break;
				}
				case 'event': {
					facewall.startEvent(tCounter , buddy.idbuddy);
					break;
				}
				case 'baloon': {
					facewall.startBubble(tCounter , buddy.idbuddy);
					break;
				}
				case 'status': {
					facewall.startStatus(tCounter , buddy.idbuddy);
					break;
				}
			}
		}
	},
	
	resetAllRollover: function(){
		for(var i = 0; i < facewall.buddyList.length; i++) {
			facewall.stopRolloverEffect(facewall.buddyList[i].idbuddy);
		}
	},
	
	startRolloverEffect: function(divimage) {
		facewall.effectDelay = 4;
		if 	(facewall.baloonon){
            facewall.stopBubble(facewall.baloonbuddy);
		  }
		var buddy = facewall.getBuddy(divimage);
		if (((buddy.status=='null') || (buddy.status=='rollover') || (buddy.status=='animation')) && (buddy.presence != 'offline' || facewall.rolloveronoffline)) {
			buddy.status='rollover';
			facewall.showBigIcon(buddy.idbuddy);
			switch (facewall.rollover) {
				case 'Magnification': {
					var newCounter = new facewall.CounterAction('facewall.showMetadata(\'' + buddy.idbuddy + '\')', 800);
					buddy.rolloverqueue.push(newCounter);
					break;
				}
				case 'Status': {
					var newCounter = new facewall.CounterAction('facewall.startSlider(\'' + buddy.idbuddy + '\')', 0);
					buddy.rolloverqueue.push(newCounter);
					break;
				}
				case 'Both': {
					var newCounter = new facewall.CounterAction('facewall.startSlider(\'' + buddy.idbuddy + '\')', 0);
					buddy.rolloverqueue.push(newCounter);
					var newCounter2 = new facewall.CounterAction('facewall.showMetadata(\'' + buddy.idbuddy + '\')', 800);
					buddy.rolloverqueue.push(newCounter2);
					break;
				}
			}
		}
	},

	stopRolloverEffect: function(divimage) {
		var buddy = facewall.getBuddy(divimage);
		if ((buddy.status == 'null') || (buddy.status == 'rollover') || (buddy.status == 'animation')) {
			facewall.clearBuddyRolloverTimeOut(buddy, false);
			facewall.hideMetadata(buddy.idbuddy);
			facewall.hideSlider(buddy.idbuddy);
			facewall.stopMagnify(buddy.idbuddy);
			if (buddy.status == 'animation'){
				facewall.stopBubble(buddy.idbuddy);
			}
			else{
				buddy.status = 'null';
			}
		}
	},

//MAGNIFY

	showBigIcon: function(divimage){
		var buddy = facewall.getBuddy(divimage);
		if (buddy.status=='rollover'){
			document.getElementById("bigphoto_" + buddy.idbuddy).style.display = 'block';
		}
	},
	
	startMagnify: function(divimage) {
		var buddy = facewall.getBuddy(divimage);
		if (buddy.status=='rollover'){
			document.getElementById("bigphoto_" + buddy.idbuddy).style.filter = document.getElementById('imgcontainer_' + buddy.idbuddy).style.filter;
			document.getElementById("bigphoto_" + buddy.idbuddy).style.opacity = document.getElementById('imgcontainer_' + buddy.idbuddy).style.opacity;
			buddy.magnification = 0;
			buddy.timeout = setTimeout('facewall.doMagnify(\'' + buddy.idbuddy + '\')', 10);
		}
	},
	
	doMagnify: function(divimage) {
		var buddy = facewall.getBuddy(divimage);
		if(buddy.magnification <= ((facewall.bigpicdim - facewall.picdim) / 2)) {
			buddy.magnification  += 2;
			document.getElementById("bigphoto_" + buddy.idbuddy).style.top = (buddy.top-(buddy.magnification/2)) + "px";
			document.getElementById("bigphoto_" + buddy.idbuddy).style.left = (buddy.left-(buddy.magnification/2)) + "px";
			document.getElementById("imgbig_" + buddy.idbuddy).width +=2;
			document.getElementById("imgbig_" + buddy.idbuddy).height +=2;
			buddy.timeout = setTimeout('facewall.doMagnify(\'' + buddy.idbuddy + '\')', 10);
		}
		else {
			facewall.clearBuddyRolloverTimeOut(buddy, true);
			//for(var j = 0; j < buddy.effectList.length; j++) {
			//	facewall.startEffect(buddy.effectList[j].event, buddy.idbuddy, buddy.effectList[j].shoutout);
			//}
		}
	},
		
	stopMagnify: function(divimage) {
		var buddy = facewall.getBuddy(divimage);
		document.getElementById("bigphoto_" + buddy.idbuddy).style.display = 'none';
		document.getElementById("bigphoto_" + buddy.idbuddy).style.top = buddy.top + "px";
		document.getElementById("bigphoto_" + buddy.idbuddy).style.left = buddy.left + "px";
		document.getElementById("imgbig_" + buddy.idbuddy).width  = document.getElementById("img_" + buddy.idbuddy).width;
		document.getElementById("imgbig_" + buddy.idbuddy).height = document.getElementById("img_" + buddy.idbuddy).height;
	},

//METADATA

	showMetadata: function(divimage) {
		var buddy = facewall.getBuddy(divimage);
		if (buddy.status=='rollover'){
			document.getElementById("metadata_" + buddy.idbuddy).style.filter = 'alpha(opacity=0)';
			document.getElementById("metadata_" + buddy.idbuddy).style.opacity = 0;
			document.getElementById("metadata_" + buddy.idbuddy).style.display = 'block';
			buddy.metaopacity=0;
			buddy.timeout = setTimeout('facewall.fadeMetadata(\'' + buddy.idbuddy + '\')', 500);
		}
	},
	
	fadeMetadata: function(divimage) {
		var buddy = facewall.getBuddy(divimage);
		if(buddy.metaopacity < 80) {
			buddy.metaopacity  += 4;
			document.getElementById("metadata_" + buddy.idbuddy).style.filter = 'alpha(opacity=' + buddy.metaopacity  + ')';
			document.getElementById("metadata_" + buddy.idbuddy).style.opacity = buddy.metaopacity  / 100;
			buddy.timeout = setTimeout('facewall.fadeMetadata(\'' + buddy.idbuddy + '\')', 10);
		}
		else {
			facewall.clearBuddyRolloverTimeOut(buddy, true);
		}
	},
	
	hideMetadata: function(divimage) {
		var buddy = facewall.getBuddy(divimage);
		document.getElementById("metadata_" + buddy.idbuddy).style.display = 'none';
		document.getElementById("metadata_" + buddy.idbuddy).style.filter = 'alpha(opacity=0)';
		document.getElementById("metadata_" + buddy.idbuddy).style.opacity = 0;
		buddy.metaopacity=0;
	},

//SLIDER

	startSlider: function(divimage) {
		var buddy = facewall.getBuddy(divimage);
		if (buddy.status == 'rollover'){
			buddy.statustop = buddy.top + facewall.bigpicdim + (facewall.space * 2) - facewall.statusdivheight - (facewall.bigpicdim - facewall.picdim);
			buddy.maxstatustop = buddy.statustop + facewall.statusdivheight+2;
			document.getElementById("status_" + buddy.idbuddy).style.top = buddy.statustop + 'px';
			document.getElementById("status_" + buddy.idbuddy).style.left = (buddy.left + ((facewall.picdim - facewall.statusdivwidth) / 2)) + 'px';
			document.getElementById("status_" + buddy.idbuddy).style.display = 'block';
			buddy.timeout = setTimeout('facewall.showSlider(\'' + buddy.idbuddy + '\')', 10);
		}
	},
	
	showSlider: function(divimage) {
		var buddy = facewall.getBuddy(divimage);
		if(buddy.statustop < buddy.maxstatustop) {
			buddy.statustop++;
			document.getElementById("status_" + buddy.idbuddy).style.top = buddy.statustop + 'px';
			buddy.timeout = setTimeout('facewall.showSlider(\'' + buddy.idbuddy + '\')', 10);
		}
		else {
			facewall.clearBuddyRolloverTimeOut(buddy, true);
		}
	},
	
	hideSlider: function(divimage) {
		var buddy = facewall.getBuddy(divimage);
		document.getElementById("status_" + buddy.idbuddy).style.display = 'none';
	},
	
//STATUS
	
	startStatus: function(theAction, divimage) {
		var buddy = facewall.getBuddy(divimage);
		if (buddy.status == 'null'){
			buddy.status='animation';
			switch (theAction.event){
				case 'online':{
					facewall.startOnline(buddy.idbuddy);
					break;
				}
				case 'offline':{
					facewall.startOffline(buddy.idbuddy);
					break;
				}
				default:{
					facewall.startOnline(buddy.idbuddy);
				}
			}
		buddy.presence = theAction.event;
		document.getElementById('statusicn2_' + buddy.idbuddy).src = facewall_path+'/presence/' + buddy.presence + '.png';
		document.getElementById('statusicn_' + buddy.idbuddy).src = facewall_path+'/presence/' + buddy.presence + '.png';

		}
		else {
			buddy.actionsqueue.push(theAction);
		}
	},
		
	startOnline: function(divimage) {
		var buddy = facewall.getBuddy(divimage);
		if((buddy.opacity < 100) && (parseInt(document.getElementById('imgcontainer_' + buddy.idbuddy).style.opacity) < 1)) {
			buddy.opacity++;
			document.getElementById('imgcontainer_' + buddy.idbuddy).style.filter = 'alpha(opacity=' + buddy.opacity + ')';
			document.getElementById('imgcontainer_' + buddy.idbuddy).style.opacity = buddy.opacity / 100;
			buddy.actiontimeout = setTimeout('facewall.startOnline(\'' + divimage + '\')', 10);
		}
		else {
			buddy.status = 'null';
			facewall.clearBuddyActionTimeOut(buddy, true);
		}
	},

	startOffline: function(divimage) {
		var buddy = facewall.getBuddy(divimage);
		if((buddy.opacity > 40) && (parseFloat(document.getElementById(divimage).style.opacity) > 0.2)) {
			buddy.opacity--;
			document.getElementById('imgcontainer_' + divimage).style.filter = 'alpha(opacity=' + buddy.opacity + ')';
			document.getElementById('imgcontainer_' + divimage).style.opacity = buddy.opacity / 100;
			buddy.actiontimeout = setTimeout('facewall.startOffline(\'' + divimage + '\')', 10);
		}
		else {
			buddy.status = 'null';
			facewall.clearBuddyActionTimeOut(buddy, true);
		}
	},

//EFFECTS LAUNCHER
	startEffect: function(effect, divimage, shoutout) {
		switch(effect) {
			case 'Online': {
				facewall.startOnline(divimage, 20);
				break;
			}
			case 'Offline': {
				facewall.startOffline(divimage, 100);
				break;
			}
			default: {
				var tAction = effect.split(".")
				switch (tAction[0]) {
					case 'animation': {
						try{
							var newAnimation = new facewall.Action("animation", facewall.animations[tAction[1]].frames, facewall.animations[tAction[1]].loops, "", "", "");
							facewall.startAnimate(newAnimation , divimage);
						}
						catch( myError ){alert(myError.message);}
						break;
					}
					case 'event': {
						try{
							var newAnimation = new facewall.Action("event", "", "", "", tAction[1], "", "", "");
							facewall.startEvent(newAnimation , divimage);
						}
						catch( myError ){alert(myError.message);}
						break;
					}
					case 'baloon': {
						try{
							var newAnimation = new facewall.Action("baloon", "", "", shoutout, tAction[1], "", "", "");
							facewall.startBubble(newAnimation , divimage);
						}
						catch( myError ){alert(myError.message);}
						break;
					}
					case 'status': {
						try{
							var newAnimation = new facewall.Action("status", "", "", "", tAction[1], "", "", "");
							facewall.startStatus(newAnimation , divimage);
						}
						catch( myError ){alert(myError.message);}
						break;
					}
				}
			}
		}
	},

//ANIMATION

	startAnimate: function(theAction, divimage) {
		var buddy = facewall.getBuddy(divimage);
		if (buddy.status=='null'){
			buddy.status='animation';
			buddy.animation = new facewall.Frame(0, buddy.top, buddy.left, null, null, "bigphoto_" + buddy.idbuddy, buddy.minipic, buddy.presence, buddy.username, 0, theAction.score, theAction.loops);
			document.getElementById('img_' + buddy.idbuddy).style.display = 'none';
			document.getElementById('event_' + buddy.idbuddy).style.zIndex = 110;
			document.getElementById("bigphoto_" + buddy.idbuddy).style.display = 'block';
			document.getElementById("bigphoto_" + buddy.idbuddy).style.filter = document.getElementById('imgcontainer_' + buddy.idbuddy).style.filter;
			document.getElementById("bigphoto_" + buddy.idbuddy).style.opacity = document.getElementById('imgcontainer_' + buddy.idbuddy).style.opacity;
			facewall.Animate(buddy.idbuddy);
		}
		else {
			buddy.actionsqueue.push(theAction);
		}
	},
	
	Animate: function(divimage) {
		var buddy = facewall.getBuddy(divimage);
		if(buddy.animation.counter>=buddy.animation.animation.length & buddy.animation.loop<buddy.animation.loops){
				buddy.animation.counter = 0;
				buddy.animation.loop++
		}
		else {
		}
		if(buddy.animation.counter<buddy.animation.animation.length){
			buddy.animation.y += buddy.animation.animation[buddy.animation.counter][1];
			buddy.animation.x += buddy.animation.animation[buddy.animation.counter][2];
			document.getElementById(buddy.animation.div).style.top = buddy.animation.x + "px";
			document.getElementById(buddy.animation.div).style.left = buddy.animation.y + "px";
			document.getElementById('event_' + buddy.idbuddy).style.top = (buddy.animation.x+facewall.space) + "px";
			document.getElementById('event_' + buddy.idbuddy).style.left = (buddy.animation.y+facewall.space) + "px";
			buddy.actiontimeout = setTimeout('facewall.Animate(' + buddy.idbuddy + ')', buddy.animation.animation[buddy.animation.counter][0]);
			buddy.animation.counter++;
			}
		else {
			facewall.stopAnimate(buddy, true);
		}
	},
	
	
	stopAnimate: function(divimage, donext) {
		var buddy = facewall.getBuddy(divimage);
		document.getElementById('event_' + buddy.idbuddy).style.zIndex = 90;
		document.getElementById(buddy.animation.div).style.top = buddy.top + "px";
		document.getElementById(buddy.animation.div).style.left = buddy.left + "px";
		document.getElementById('event_' + buddy.idbuddy).style.top = (buddy.top+facewall.space) + "px";
		document.getElementById('event_' + buddy.idbuddy).style.left = (buddy.left+facewall.space) + "px";
		document.getElementById(buddy.animation.div).style.display = "none";
		document.getElementById('img_' + buddy.idbuddy).style.display = 'block';
		buddy.status='null';
		facewall.clearBuddyActionTimeOut(buddy, donext);
	},
	
//BALOONS
	startBubble: function(theAction, divimage) {
		var buddy = facewall.getBuddy(divimage);
		if ((buddy.status=='null') || (buddy.status=='rollover')) {
			if (!facewall.baloonon){
				buddy.status='animation';
				facewall.baloonon=true;
				facewall.baloonbuddy=divimage;
				try{
					document.getElementById("baloon_" + buddy.idbuddy).innerHTML = '<img src="' + facewall_path + '/bubbles/' + theAction.event + '_' +  buddy.bubblepos
						+ '.png" width="150" height="150" alt="" />';
					document.getElementById("baloontext_" + buddy.idbuddy).innerHTML = theAction.text;
					document.getElementById("baloon_" + buddy.idbuddy).style.filter = 'alpha(opacity=0)';
					document.getElementById("baloon_" + buddy.idbuddy).style.opacity = 0;
					document.getElementById("baloon_" + buddy.idbuddy).style.display = 'block';
					buddy.bubbleopacity=0;
					facewall.fadeBubble(buddy.idbuddy);
				}
				catch(tErr){
					alert(tErr.message);
				}
			}
			else {
				buddy.actiontimeout = setTimeout('facewall.justwait(\'' + buddy.idbuddy + '\')', 100);
				buddy.actionsqueue.push(theAction);
				}
			}
		else {
			buddy.actionsqueue.push(theAction);
			}
		
		
	},
	
	
	fadeBubble: function(divimage) {
		var buddy = facewall.getBuddy(divimage);
		if(buddy.bubbleopacity < 100) {
			buddy.bubbleopacity += 10;
			document.getElementById("baloon_" + buddy.idbuddy).style.filter = 'alpha(opacity=' + buddy.bubbleopacity + ')';
			document.getElementById("baloon_" + buddy.idbuddy).style.opacity = buddy.bubbleopacity / 100;
			buddy.actiontimeout = setTimeout('facewall.fadeBubble(\'' + buddy.idbuddy + '\')', 10);
		}
		else {
			document.getElementById("baloontext_" + buddy.idbuddy).style.display = 'block';
			buddy.actiontimeout = setTimeout('facewall.stopBubble(\'' + buddy.idbuddy + '\')', facewall.baloonspermanence);
		}
	},
	
	stopBubble: function(divimage) {
		var buddy = facewall.getBuddy(divimage);
		document.getElementById("baloontext_" + buddy.idbuddy).style.display = 'none';
		document.getElementById("baloon_" + buddy.idbuddy).style.display = 'none';
		buddy.status='null';
		facewall.baloonon=false;
		facewall.clearBuddyActionTimeOut(buddy, true);
	}, 

//EVENTS
	startEvent: function(theAction, divimage) {
		var buddy = facewall.getBuddy(divimage);
		if (buddy.status=='null'){
			if (theAction.event!=""){
				buddy.status='animation';
				buddy.event=theAction.event;
				document.getElementById("event_" + buddy.idbuddy).innerHTML = '<img src="' + facewall_path + '/actions/'+ buddy.event +'.png" width="'+facewall.picdim+'" height="'+facewall.picdim+'" style="border:1px;" alt="" onmouseover="facewall.startRolloverEffect(\'' + buddy.idbuddy + '\')"  />';
				document.getElementById("event_" + buddy.idbuddy).style.filter = 'alpha(opacity=0)';
				document.getElementById("event_" + buddy.idbuddy).style.opacity = 0;
				document.getElementById("event_" + buddy.idbuddy).style.display = 'block';
				buddy.bubbleopacity=0;
				facewall.fadeEvent(divimage);
				}
			else {
				facewall.stopEvent(divimage);
			}
		}
		else {
			buddy.actionsqueue.push(theAction);
		}
	},

	fadeEvent: function(divimage) {
		var buddy = facewall.getBuddy(divimage);
		if(buddy.bubbleopacity < 100) {
			buddy.bubbleopacity += 10;
			document.getElementById("event_" + buddy.idbuddy).style.filter = 'alpha(opacity=' + buddy.bubbleopacity + ')';
			document.getElementById("event_" + buddy.idbuddy).style.opacity = buddy.bubbleopacity / 100;
			buddy.actiontimeout = setTimeout('facewall.fadeEvent(\'' + buddy.idbuddy + '\')', 10);
		}
		else {
			buddy.status='null';
		}
	},
	
	stopEvent: function(divimage) {
		var buddy = facewall.getBuddy(divimage);
		buddy.event="";
		document.getElementById("event_" + buddy.idbuddy).style.display = 'none';
		buddy.status='null';
		facewall.clearBuddyActionTimeOut(buddy, true);
	}

}

