
var requireXh = false;

function include(src)
{
	document.write("<script type=\"text/javascript\" src=\"" + src + "\"></script>");
}

function showObjectByName(name)
{
	document.getElementById(name).style.visibility = 'visible';
	return false;
}

function hideObjectByName(name)
{
	document.getElementById(name).style.visibility = 'hidden';
	return false;
}

function getObjPosition(obj)
{
	var posLeft = 0;
	var posTop = 0;
	if(obj.offsetParent)
	{
		posLeft = obj.offsetLeft;
		posTop = obj.offsetTop;
		while(obj = obj.offsetParent)
		{
			posLeft += obj.offsetLeft;
			posTop += obj.offsetTop;
		}
	}
	return [posLeft,posTop];
}

function getDocumentProps()
{
	var height = 0;
	var width = 0;
	if(window.innerHeight)
	{
		height = window.innerHeight;
		width = window.innerWidth;
	}
	else
	{
		height = document.documentElement.clientHeight;
		width = document.documentElement.clientWidth;
	}
	return [width,height];
}

function loadTo(id,url,no_loading)
{
	XH.init();
	if(!no_loading)
		document.getElementById(id).innerHTML = "<div class=\"xh_loading\"></div>";
	XH.loadTo(id,url,'GET');
}

function loadToEx(id,url,fields,no_loading)
{
	XH.init();
	if(!no_loading)
		document.getElementById(id).innerHTML = "<div class=\"xh_loading\"></div>";
	XH.loadToEx(id,url,'POST',xhBuildPostData(fields));	
}

function highlight(obj)
{
	obj.focus();
	obj.select();	
}

function element_hover(obj, pre)
{
	obj.className = pre + '_hover';
}

function element_unhover(obj, pre)
{
	obj.className = pre;
}

function image_hover(obj, pre, post)
{
	obj.src = pre + '_hover' + post;
}

function image_unhover(obj, pre, post)
{
	obj.src = pre + post;
}

function button_disable(id)
{
	var obj = document.getElementById(id);
	if(obj)
	{
		obj.disabled = true;
		obj.className = 'button_disabled';
	}
}

function button_enable(id)
{
	var obj = document.getElementById(id);
	if(obj)
	{
		obj.disabled = false;
		obj.className = 'button';
	}
}

function text_disable(id)
{
	var obj = document.getElementById(id);
	if(obj)
	{
		obj.disabled = true;
		obj.className = 'text_disabled';
	}
}

function text_enable(id)
{
	var obj = document.getElementById(id);
	if(obj)
	{
		obj.disabled = false;
		obj.className = 'text';
	}
}


function CEmoticons()
{
	this.replaceIn = function(str)
	{
		str = str.replace(/\:\)/g, '<img src="/images/emoticons/smile.png" border="0" alt="" />');
str = str.replace(/=\)/g, '<img src="/images/emoticons/smile.png" border="0" alt="" />');
str = str.replace(/\:\(/g, '<img src="/images/emoticons/sad.png" border="0" alt="" />');
str = str.replace(/=\(/g, '<img src="/images/emoticons/sad.png" border="0" alt="" />');
str = str.replace(/\:D/g, '<img src="/images/emoticons/happy.png" border="0" alt="" />');
str = str.replace(/=D/g, '<img src="/images/emoticons/happy.png" border="0" alt="" />');

		return str;
	}
}


var XH =
{
	xh : null,
	xhEvent : null,
	xhTarget : null,
	
	create : function()
	{
		var objXMLHttp = null;
		try
		{
			objXMLHttp=new XMLHttpRequest();
		}
		catch(e)
		{
			try
			{
				objXMLHttp=new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch(e)
			{
				try
				{
					objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch(e)
				{
					return false;	
				}
			}
		}
		return objXMLHttp;
	},
	
	supported : function()
	{
		if(!window.XMLHttpRequest && !window.ActiveXObject)
			return false;
		else
			return true;
	},
	
	stateChanged : function()
	{
		if(XH.xh.readyState == 4 || XH.xh.readyState == 'complete')
		{
			if(XH.Event == 'load' && XH.Target)
				document.getElementById(XH.Target).innerHTML = XH.xh.responseText;
		}
	},
	
	init : function()
	{
		XH.xh = XH.create();
		if(!XH.xh) return false;
		XH.xh.onreadystatechange = XH.stateChanged;
		return true;
	},
	
	loadTo : function(targetID,openURL,method)
	{
		if(!method)
			method = "GET";
		XH.Event = "load";
		XH.Target = targetID;
		XH.xh.open(method,openURL,true);
		XH.xh.send(null);
	},
	
	loadToEx : function(targetID,openURL,method,data)
	{
		if(!method)
			method = "GET";
		XH.Event = "load";
		XH.Target = targetID;
		XH.xh.open(method,openURL,true);
		XH.xh.send(data);
	},
	
	load : function(openURL,method)
	{
		XH.Event = "load";
		XH.Target = false;
		XH.xh.open(method,openURL,true);
		XH.xh.send(null);	
	},
	
	loadEx : function(openURL,method,data)
	{
		if(!method)
			method = "GET";
		XH.Event = "load";
		XH.Target = false;
		XH.xh.open(method,openURL,true);
		XH.xh.send(data);
	},
	
	buildPostData : function(arr)
	{
		var data = '';
		for(var n = 0; n < arr.length; n++)
		{
			if(data.length > 0)
				data += '&';
			data = arr[n] + '=' + document.getElementById(arr[n]).value;
		}
		return data;
	},
	
	filterParam : function(str)
	{
		str = str.replace(/&/g, '{AMP}');
		str = str.replace(/=/g, '{EQ}');
		return str;
	},
	
	makeUrlFriendly : function(str)
	{
		return this.filterParam(str);
	}
	
};

function CXH()
{
	var objXMLHttp = null;
	try
	{
		objXMLHttp=new XMLHttpRequest();
	}
	catch(e)
	{
		try
		{
			objXMLHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			try
			{
				objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e)
			{
				objXMLHttp = null;
			}
		}
	}
	this.XH = objXMLHttp;
	this.Target = null;
}

CXH.prototype.reinit = function()
{
	var objXMLHttp = null;
	try
	{
		objXMLHttp=new XMLHttpRequest();
	}
	catch(e)
	{
		try
		{
			objXMLHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			try
			{
				objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e)
			{
				objXMLHttp = null;
			}
		}
	}
	this.XH = objXMLHttp;
}

CXH.prototype.load = function(openUrl, method)
{
	if(this.XH != null)
	{
		this.XH.open(method, openUrl, true);
		this.XH.send(null);
	}
}

CXH.prototype.post = function(openUrl, data)
{
	if(this.XH != null)
	{
		this.XH.open('POST', openUrl, true);
		this.XH.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		this.XH.setRequestHeader("Content-length", data.length);
		this.XH.setRequestHeader("Connection", "close");
		this.XH.send(data);
	}
}

CXH.prototype.callback = function()
{
	if(this.XH.readyState == 4 || this.XH.readyState == 'complete')
	{
		var obj = document.getElementById(this.Target);
		if(obj)
			obj.innerHTML = this.XH.responseText;
	}
}

CXH.prototype.loadTo = function(targetId, openUrl, method)
{
	this.Target = targetId;
	this.setCallback(this.callback);
	this.load(openUrl, method);
}

CXH.prototype.setCallback = function(callback)
{
	if(this.XH != null)
		this.XH.onreadystatechange = callback;
}



var Abuse =
{
	X : new CXH,
	
	submitReport : function(session)
	{
		var type = this.getValue('type');
		var aux = this.getValue('aux');
		var info = this.getValue('info');
		
		XWind.show('/abuse/?xh=do_report&type=' + type + '&aux=' + aux + '&session=' + session + '&info=' + Base64.encode(info));
		return true;
	},
	
	openViewPhoto : function(server, id)
	{
		XWind.showStatic('<img src=\"http://' + server + '/uploads/' + id + '.image\" border=\"0\" alt=\"\" style=\"max-width: 600px; max-height: 600px;\" /><br /><input type="button" value="Close" class="button" onclick="javascript:XWind.close();" />');
	},
	
	getValue : function(name)
	{
		var objs = document.getElementsByName(name);
		if(objs.length < 1)
			return '';
		return objs[0].value;
	}
};


var Account =
{
	refreshVerification : function()
	{
		var obj = document.getElementById('verification');
		obj.src = '/account/verification.jpg?' + Math.random();
		return false;
	}
};


var Base64 = {

    // private property
    _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",

    // public method for encoding
    encode : function (input) {
        var output = "";
        var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
        var i = 0;

        input = Base64._utf8_encode(input);

        while (i < input.length) {

            chr1 = input.charCodeAt(i++);
            chr2 = input.charCodeAt(i++);
            chr3 = input.charCodeAt(i++);

            enc1 = chr1 >> 2;
            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
            enc4 = chr3 & 63;

            if (isNaN(chr2)) {
                enc3 = enc4 = 64;
            } else if (isNaN(chr3)) {
                enc4 = 64;
            }

            output = output +
            this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
            this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);

        }

        return output;
    },

    // public method for decoding
    decode : function (input) {
        var output = "";
        var chr1, chr2, chr3;
        var enc1, enc2, enc3, enc4;
        var i = 0;

        input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

        while (i < input.length) {

            enc1 = this._keyStr.indexOf(input.charAt(i++));
            enc2 = this._keyStr.indexOf(input.charAt(i++));
            enc3 = this._keyStr.indexOf(input.charAt(i++));
            enc4 = this._keyStr.indexOf(input.charAt(i++));

            chr1 = (enc1 << 2) | (enc2 >> 4);
            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
            chr3 = ((enc3 & 3) << 6) | enc4;

            output = output + String.fromCharCode(chr1);

            if (enc3 != 64) {
                output = output + String.fromCharCode(chr2);
            }
            if (enc4 != 64) {
                output = output + String.fromCharCode(chr3);
            }

        }

        output = Base64._utf8_decode(output);

        return output;

    },

    // private method for UTF-8 encoding
    _utf8_encode : function (string) {
        string = string.replace(/\r\n/g,"\n");
        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }

        return utftext;
    },

    // private method for UTF-8 decoding
    _utf8_decode : function (utftext) {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;

        while ( i < utftext.length ) {

            c = utftext.charCodeAt(i);

            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            }
            else if((c > 191) && (c < 224)) {
                c2 = utftext.charCodeAt(i+1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else {
                c2 = utftext.charCodeAt(i+1);
                c3 = utftext.charCodeAt(i+2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }

        }

        return string;
    }

}


var BCard =
{
	X : new CXH(),
	Fields : new Array('session', 'full_name', 'company', 'email', 'phone', 'fax', 'position'),
	Cache : null,
	CurrentTID : 0,
	
	showCard : function(id)
	{
		XWind.show('/bcard/?xh=view&id=' + id);
		return false;
	},
	
	doEdit : function()
	{
		var data = '';
		for(var n = 0; n < this.Fields.length; n++)
		{
			if(data.length > 0)
				data += '&';
			data += this.Fields[n] + '=' + document.getElementById(this.Fields[n]).value;
		}
		var buttonsObj = document.getElementById('bcard-buttons');
		if(this.Cache == null)
			this.Cache = buttonsObj.innerHTML;
		buttonsObj.innerHTML = '<img src="/images/loading.gif" border="0" alt="" /> Processing...';
		this.X.reinit();
		this.X.setCallback(BCard.doEdit_callback);
		this.X.post('/bcard/?xh=doedit', data);
		return false;
	},
	
	doEdit_callback : function()
	{
		if(BCard.X.XH.readyState == 4 || BCard.X.XH.readyState == 'complete')
		{
			if(BCard.X.XH.responseText == '0')
				XWind.close();
			else
				document.getElementById('bcard-buttons').innerHTML = BCard.Cache + '\n<div style="color: #ff0000;">An error ocurred.</div>';
		}
	},
		
	sendTo : function(tid, session)
	{
		if(!confirm('Are you sure you want to send your card?'))
			return false;
		this.CurrentTID = tid;
		this.X.reinit();
		this.X.setCallback(BCard.sendTo_callback);
		this.X.load('/bcard/?xh=send&tid=' + tid + '&session=' + session, 'GET');
		return false;
	},
		
	sendTo_callback : function()
	{
		if(BCard.X.XH.readyState == 4 || BCard.X.XH.readyState == 'complete')
		{
			var r = BCard.X.XH.responseText;
			
			if(r == 0)
			{
				var obj = document.getElementById('bcard-send_' + BCard.CurrentTID);
				if(obj)
					obj.innerHTML = 'Card Sent';
			}
		}
	}

};


var Card =
{
	open : function(uid)
	{
		var tmp = window.open('http://tweecard.com/card/?xh=card&uid=' + uid, 'card' + uid ,'width=560, height=340, scrollbars=0, resizable=0,status=0,menubar=0,location=0,toolbar=0');
		return false;
	}
};


function collapseDiv(id)
{
	var obj = document.getElementById(id);
	obj.style.visibility = 'hidden';
	obj.style.height = '0px';
}

function expandDiv(id)
{
	var obj = document.getElementById(id);
	obj.style.visibility = 'visible';
	obj.style.height = 'auto';
}


function CColorPalet()
{
	var _self = this;
	this.Hex = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
	this.Colors = new Array();
	this.ColorsCount = 0;
	this.FieldObj = null;
	this.PaletObj = null;
	this.PickObj = null;
	
	
	this.show = function(fieldId, paletId)
	{
		if(_self.PaletObj)
		{
			_self.PaletObj.innerHTML = '';
			_self.PaletObj.style.visibility = 'hidden';
		}
		_self.FieldObj = document.getElementById(fieldId);
		_self.PaletObj = document.getElementById(paletId);
		var buf = '';
		var lb = 0;
		for(var n = 0; n < this.ColorsCount; n++)
		{
			buf += '<a href="#" onclick="javascript:return ColorPalet.select(\'' + this.Colors[n] + '\');" onmouseover="javascript:ColorPalet.hover(\'' + this.Colors[n] + '\');" style="background-color: #' + this.Colors[n] + ';">&nbsp;&nbsp;&nbsp;&nbsp;</span>';
			lb++;
			if(lb >= 24)
			{
				buf += '<br />';
				lb = 0;
			}
		}
		_self.PaletObj.innerHTML = '<div class="wtop"><img src="/images/windows/close.gif" border="0" alt="[X]" onclick="javascript:hideObjectByName(\'' + paletId + '\');" /></div>' + buf + '<div id="' + paletId + '-pick" style="border: 1px solid #000000; background-color: #' + _self.FieldObj.value + '; height: 40px;"></div>';
		_self.PaletObj.style.visibility = 'visible';
		_self.PickObj = document.getElementById(paletId + '-pick');
		return false;
	}
	
	this.select = function(h)
	{
		_self.FieldObj.value = h;
		_self.PaletObj.innerHTML = '';
		_self.PaletObj.style.visibility = 'hidden';
		_self.FieldObj = null;
		_self.PaletObj = null;
		_self.PickObj = null;
		return false;
	}
	
	this.hover = function(h)
	{
		_self.PickObj.style.backgroundColor = '#' + h;
	}
	
	this.initColors = function()
	{
		for(var c1 = 0; c1 < this.Hex.length; c1 += 3)
		{
			for(var c2 = 0; c2 < this.Hex.length; c2 += 3)
			{
				for(var c3 = 0; c3 < this.Hex.length; c3 += 3)
				{
					this.Colors[this.ColorsCount] = this.Hex[c1] + this.Hex[c1] + this.Hex[c2] + this.Hex[c2] + this.Hex[c3] + this.Hex[c3];
					this.ColorsCount++;
				}
			}
		}
	}
	
	this.initColors();
}


function setCookie( name, value, expires, path, domain, secure ) 
{
	var today = new Date();
	today.setTime( today.getTime() );
	if(expires)
		expires = expires * 1000 * 60 * 60 * 24;
	var expires_date = new Date( today.getTime() + (expires));
	document.cookie = name + "=" +escape(value) +
	((expires) ? ";expires=" + expires_date.toGMTString() : "") + 
	((path) ? ";path=" + path : "") + 
	((domain) ? ";domain=" + domain : "") +
	((secure) ? ";secure" : "");
}

function getCookie( 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 deleteCookie( name, path, domain ) {
	if(getCookie(name))
		document.cookie = name + "=" +
		((path) ? ";path=" + path : "") +
		((domain) ? ";domain=" + domain : "" ) +
		";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}



function CCrash()
{
	var _self = this;
	this.Type = 0;
	this.X = new CXH();
	
	this.begin = function(type)
	{
		_self.Type = type;
		_self.refresh();
	};
	
	this.refresh = function()
	{
		_self.X.reinit();
		_self.X.setCallback(_self.refresh_callback);
		_self.X.load('/crash/?xh=check', 'GET');
		setTimeout(function() { _self.refresh(); }, 5000);
	};
	
	this.refresh_callback = function()
	{
		if(_self.X.XH.readyState == 4 || _self.X.XH.readyState == 'complete')
		{
			var r = _self.X.XH.responseText;
			if(r.length > 0 && r != '0')
			{
				document.location.assign('/crash/error?out=' + UEnc.encode(r) + '&ret=' + UEnc.encode(document.location.href) + '&type=' + _self.Type);
			}
		}
	};
}

var Crash = new CCrash();


var CSS =
{

	getClass : function(selname)
	{
	    var rule = null;
	    var sheets = document.styleSheets;
	    for (i=0; i<sheets.length && rule == null; i++)
	    {
	        var rules = sheets[i].rules
	        for (j=0; j<rules.length && rule == null; j++)
	        {
	            if (rules[j].selectorText == selname)
	            {
	                rule = rules[j];        
	            }
	        }
	    }      

	    return rule;
	}

};


var Dragger =
{
	StartX : 0,
	StartY : 0,
	OffsetX : 0,
	OffsetY : 0,
	DragElement : null,
	OldIndex : 0,

	init : function()
	{
		document.onmousedown =  Dragger.OnMouseDown;
		document.onmouseup = Dragger.OnMouseUp; 
	},
		
	OnMouseDown : function(e)
	{
		
		if(e == null)
			e = window.event;
		
		var target = e.target != null ? e.target : e.srcElement; 
		
		if ((e.button == 1 && window.event != null || e.button == 0) && target.className == 'drag')
		 {
			Dragger.StartX = e.clientX; 
			Dragger.StartY = e.clientY;
			
			Dragger.OffsetX = Dragger.extractNumber(target.style.left);
			Dragger.OffsetY = Dragger.extractNumber(target.style.top);
			
			target.style.zIndex = 10000;
			
			Dragger.DragElement = target;
			
			document.onmousemove = Dragger.OnMouseMove; 
			
			document.body.focus();
			
			document.onselectstart = function () { return false; }; 
			target.ondragstart = function() { return false; }; 
			
			return false;
		 }
	},
		
	OnMouseMove : function(e)
	{
		if(e == null)
			var e = window.event;
		
		Dragger.DragElement.style.left = (Dragger.OffsetX + e.clientX - Dragger.StartX) + 'px';
		Dragger.DragElement.style.top = (Dragger.OffsetY + e.clientY - Dragger.StartY) + 'px'; 
		
	},
		
		
	OnMouseUp : function(e)
	{
		if (Dragger.DragElement != null)
		{
			
			 document.onmousemove = null;
			 document.onselectstart = null;
			 Dragger.DragElement.ondragstart = null; 
			 Dragger.DragElement = null;
		}
	},
		
		
	extractNumber : function(value)
	{
		var n = parseInt(value); 
		
		return n == null || isNaN(n) ? 0 : n; 
	}
		
	
};


function insertText(id,myValue) {
	
	myField = document.getElementById(id);
	if (document.selection)
	{
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
	}
	else if (myField.selectionStart || myField.selectionStart == '0')
	{
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		myField.value = myField.value.substring(0, startPos)+ myValue+ myField.value.substring(endPos, myField.value.length);
	}
	else
	{
		myField.value += myValue;
	}
} 

function addLink(id)
{
	var url = prompt('Enter a HyperLink URL:','http://');
	if(url != null)
		insertText(id,'[link]' + url + '[/link]');
	return false;
}

function addImage(id)
{
	var url = prompt('Enter a Image URL:','http://');
	if(url != null)
		insertText(id,'[img]' + url + '[/img]');
}

function addBoldText(id)
{
	var txt = prompt('Enter the text you want bold:','');
	if(txt != null)
		insertText(id,'[b]' + txt + '[/b]');	
	return false;
}

function addItalicText(id)
{
	var txt = prompt('Enter the text you want italic:','');
	if(txt != null)
		insertText(id,'[i]' + txt + '[/i]');	
	return false;
}

function addUnderlinedText(id)
{
	var txt = prompt('Enter the text you want underlined:','');
	if(txt != null)
		insertText(id,'[u]' + txt + '[/u]');	
	return false;
}

function showFlexCodeButtons(id)
{
	document.write('<div class="flexcode"><a href="#" onclick="javascript:return addBoldText(\'' + id + '\');" class="tt"><img src="/images/icons/bold.gif" alt="[B]" /><span>Bold</span></a> <a href="#" onclick="javascript:return addItalicText(\'' + id + '\');" class="tt"><img src="/images/icons/italic.gif" alt="[I]" /><span>Italic</span></a> <a href="#" onclick="javascript:return addUnderlinedText(\'' + id + '\');" class="tt"><img src="/images/icons/underline.gif" alt="[U]" /><span>Underlined</span></a> <a href="#" onclick="javascript:return addLink(\'' + id + '\');" class="tt"><img src="/images/icons/link.gif" alt="[L]" /><span>Insert&nbsp;Hyperlink</span></a> <a href="#" onclick="javascript:return addImage(\'' + id + '\');" class="tt"><img src="/images/icons/image.gif" alt="[I]" /><span>Insert&nbsp;Image</span></a></div>');
}

function showFlexCodeButtonsOnObject(objName, id)
{
	var obj = document.getElementById(objName);
	if(obj)
		obj.innerHTML = '<div class="flexcode"><a href="#" onclick="javascript:return addBoldText(\'' + id + '\');" class="tt"><img src="/images/icons/bold.gif" alt="[B]" /><span>Bold</span></a> <a href="#" onclick="javascript:return addItalicText(\'' + id + '\');" class="tt"><img src="/images/icons/italic.gif" alt="[I]" /><span>Italic</span></a> <a href="#" onclick="javascript:return addUnderlinedText(\'' + id + '\');" class="tt"><img src="/images/icons/underline.gif" alt="[U]" /><span>Underlined</span></a> <a href="#" onclick="javascript:return addLink(\'' + id + '\');" class="tt"><img src="/images/icons/link.gif" alt="[L]" /><span>Insert&nbsp;Hyperlink</span></a> <a href="#" onclick="javascript:return addImage(\'' + id + '\');" class="tt"><img src="/images/icons/image.gif" alt="[I]" /><span>Insert&nbsp;Image</span></a></div>';
}

var FlexCode =
{
	doInsertImage : function(id)
	{
		insertText(id, '[img]' + document.getElementById('insert-url').value + '[/img]');
		XWind.close();
		return false;
	}
};


function CForm()
{
	var _self = this;
	this.Good = false;
	this.Fields = new Array();
	this.FieldCount = 1;
	this.CurrentIndex = 0;
	this.Submit = false;
	this.X = new CXH();
	
	this.addField = function(name, baseId, minLength, badValue, checkUrl)
	{
		var _self = this;
		var objField = document.getElementById(baseId);
		var objImage = document.getElementById(baseId + '_img');
		var objMsg = document.getElementById(baseId + '_msg');
		var c = this.FieldCount;
		objField.onchange = function() { _self.verify(c); };
		this.Fields[this.FieldCount] = new Array(name, objField, objImage, objMsg, minLength, badValue, checkUrl, 0);
		this.FieldCount++;
	};
	
	this.verify = function(idx)
	{
		this.Good = true;
		this.GoodCount = 0;
		
		if(idx && this.Fields[idx] && this.Fields[idx][6])
		{
			this.CurrentIndex = idx;
			this.X.reinit();
			this.X.setCallback(_self.checkUrl_callback);
			this.X.load(this.Fields[idx][6].replace(/%/g, this.Fields[idx][1].value) , 'GET');
			return false;
		}
		
		for(i in this.Fields)
		{
			var f = this.Fields[i];
			if(f[4] > 0 && f[1].value.length < 1)
			{
				if(f[2])
					f[2].src = '/images/icons/blank.png';
				if(f[3])
					f[3].innerHTML = '';
				this.Good = false;
			}
			else if(f[1].value.length < f[4])
			{
				if(f[2])
					f[2].src = '/images/icons/error.png';
				if(f[3])
					f[3].innerHTML = f[0] + ' is too short.';
				this.Good = false;
			}
			else if(f[1].value == f[5])
			{
				if(f[2])
					f[2].src = '/images/icons/error.png';
				if(f[3])
					f[3].innerHTML = f[0] + ' is not selected.';
				this.Good = false;
			}
			else if(f[7] != 0)
			{
				if(f[2])
					f[2].src = '/images/icons/error.png';
				if(f[3])
					f[3].innerHTML = f[7];
				this.Good = false;
			}
			else
			{
				this.GoodCount++;
				if(f[2])
					f[2].src = '/images/icons/check.png';
				if(f[3])
					f[3].innerHTML = '';
			}
		}
		
		return this.verifySubmit();
		
	};
	
	this.verifySubmit = function()
	{
		if(this.Submit)
		{
			if(this.Good)
			{
				this.Submit.disabled = false;
				this.Submit.className = 'button';
				return true;
			}
			else
			{
				this.Submit.disabled = true;
				this.Submit.className = 'button_disabled';
				return false;
			}
		}
	};
	
	this.checkUrl_callback = function()
	{
		if(_self.X.XH.readyState == 4 || _self.X.XH.readyState == 'complete')
		{
			var r = _self.X.XH.responseText;
			_self.Fields[_self.CurrentIndex][7] = r;
			_self.verify(null);
		}
	};
}


var Glance =
{
	OldTab : null,
	X : new CXH,
	ContactID : 0,

	tabClick : function(name)
	{
		var _self = this;
		var objTab = document.getElementById('glance-tab_' + name);
		
		if(!this.OldTab)
			this.OldTab = document.getElementById('glance-tab_planner');
		
		this.OldTab.className = '';
		objTab.className = 'current';
		this.OldTab = objTab;
		
		this.X.reinit();
		this.X.setCallback(_self.tabClick_Callback);
		this.X.load('/glance/?xh=' + name, 'GET');
		return false;
	},
	
	tabClick_Callback : function()
	{
		if(Glance.X.XH.readyState == 4 || Glance.X.XH.readyState == 'complete')
		{
			var objContent = document.getElementById('glance-content');
			if(objContent)
				objContent.innerHTML = Glance.X.XH.responseText;
		}
	},
	
	filterContacts : function(c)
	{
		if(!c)
			c = '';
		var _self = this;
		this.X.reinit();
		this.X.setCallback(_self.tabClick_Callback);
		this.X.load('/glance/?xh=contacts&filter=' + c, 'GET');
		return false;
	},
	
	searchContacts : function()
	{
		var _self = this;
		var obj = document.getElementById('contacts-search');
		if(obj)
		{
			var q = obj.value;
			this.X.reinit();
			this.X.setCallback(_self.tabClick_Callback);
			this.X.load('/glance/?xh=contacts&search=' + q, 'GET');
		}
		return false;
	},
	
	showContactsPage : function(p,filter,search)
	{
		var _self = this;
		this.X.reinit();
		this.X.setCallback(_self.tabClick_Callback);
		this.X.load('/glance/?xh=contacts&page=' + p + '&filter' + filter + '&search=' + search, 'GET');
		return false;
	},
	
	addContact : function(id, session)
	{
		var _self = this;
		this.ContactID = id;
		this.X.reinit();
		this.X.setCallback(_self.addContact_callback);
		this.X.load('/glance/?xh=add_contact&id=' + id + '&session=' + session, 'GET');
		return false;
	},
	
	addContact_callback : function()
	{
		if(Glance.X.XH.readyState == 4 || Glance.X.XH.readyState == 'complete')
		{
			var r = Glance.X.XH.responseText;
			if(r > 0)
			{
				var obj = document.getElementById('contacts-item_' + Glance.ContactID);
				if(obj)
					obj.style.display = 'block';
				XWind.show('/bcard/?xh=view&added=1&id=' + Glance.ContactID);
			}
			else
				XWind.show('/bcard/?xh=view&err=' + r + '&id=' + Glance.ContactID);
		}
	},
	
	removeContact : function(id, session)
	{
		var _self = this;
		this.ContactID = id;
		this.X.reinit();
		this.X.setCallback(_self.removeContact_callback);
		this.X.load('/glance/?xh=remove_contact&id=' + id + '&session=' + session, 'GET');
		return false;
	},
	
	removeContact_callback : function()
	{
		if(Glance.X.XH.readyState == 4 || Glance.X.XH.readyState == 'complete')
		{
			var r = Glance.X.XH.responseText;
			var obj = document.getElementById('contacts-item_' + Glance.ContactID);
			if(obj)
				obj.style.display = 'none';
			XWind.show('/bcard/?xh=view&removed=1&id=' + Glance.ContactID);
		}
	}

};


var GrandRoom =
{
	showTool : function(gid, tool, func)
	{
		loadTo('grand_room-content', '/grand_room/' + gid + '?xh=tool&tool=' + tool + '&func=' + func);
		return false;
	},
		
	showGalleryImage : function(gid, iid)
	{
		loadTo('grand_room-content', '/grand_room/' + gid + '?xh=tool&tool=gallery&image=' + iid);
		return false;
	},
	
	showVideo : function(gid, vid)
	{
		loadTo('grand_room-content', '/grand_room/' + gid + '?xh=tool&tool=videos&func=view&vid=' + vid);
		return false;
	},
	
	showAlerts : function(gid)
	{
		loadTo('groops-alerts_' + gid, '/grand_room/?xh=show_alerts&gid=' + gid);
		document.getElementById('groops-alerts_' + gid).style.visibility = 'visible';
		document.getElementById('groops-alerticon_' + gid).src = '/images/icons/alert_f.gif';
		return false;
	},
	
	showAnnouncement : function(gid)
	{
		loadTo('groops-announcement_' + gid, '/grand_room/?xh=show_latest_announcement&gid=' + gid);
		document.getElementById('groops-announcement_' + gid).style.visibility = 'visible';
		return false;
	},
	
	doPostFunc : function(gid, func)
	{
		document.getElementById('grand_room-func').value = func;
		document.getElementById('grand_room-form').submit();
		return false;
	},
	
	disableButtons : function()
	{
		var obj = document.getElementById('grand_room-buttons');
		if(obj)
			obj.innerHTML = '<img src="/images/loading.gif" border="0" alt="" /> Processing...';
	},
	
	templateChanged : function(obj)
	{
		document.getElementById('grand_room-tpl_preview').innerHTML = '<a href="#" onclick="javascript:return GrandRoom.showTemplatePreview(\'' + obj.value + '\');"><img src="/images/networks/layouts/' + obj.value + '/preview_small.jpg" border="0" alt="" /></a>';
	},
	
	showTemplatePreview : function(tpl)
	{
		XWind.showStatic('<div style="text-align: right;"><input type="button" value="X" class="button2" onclick="javascript:XWind.close();" /><img src="/images/networks/layouts/' + tpl + '/preview.jpg" border="0" alt="" style="max-width: 500px;" />');
		return false;
	}
};


var GroopChat =
{
	GID : null,
	Username : '',
	Session : '',
	Delay : 2000,
	XRoom : new CXH,
	XChat : new CXH,
	
	send : function()
	{
		var objSend = document.getElementById('groop_chat-send');
		
		//loadTo('groop_chat-content', '/groop_chat/?xh=send&gid=' + GroopChat.GID + '&content=' + Base64.encode(objSend.value) + '&session=' + session,true);
		
		var tmp = objSend.value;
		
		if(tmp.length > 0)
		{
			var objChat = document.getElementById('groop_chat-content');
			objChat.innerHTML += '<span style="color: #ff0000;">' + GroopChat.Username + ':</span> ' + tmp + "<br />\n";
			XH.init();
			XH.xh.onreadystatechange = GroopChat.send_;
			XH.loadTo(null, '/groop_chat/?xh=send&gid=' + GroopChat.GID + '&content=' + Base64.encode(tmp) + '&session=' + GroopChat.Session, 'GET');
			GroopChat.scroll();
		}
		objSend.value = '';
		
		return false;
		
	},
	
	send_ : function()
	{ },
	
	open : function(gid)
	{
		var tmp = window.open('/groop_chat/?xh=show&gid=' + gid, 'gchat' + gid, 'width=610, height=420, scrollbars=0, resizable=0,status=0,menubar=0,location=0,toolbar=0');
		return false;
	},
		
	begin : function(gid, username, session)
	{
		GroopChat.GID = gid;
		GroopChat.Username = username;
		GroopChat.Session = session;
		GroopChat.refresh();
		GroopChat.refreshB();
	},
		
	refreshB : function()
	{
		GroopChat.XChat.reinit();
		GroopChat.XChat.setCallback(GroopChat.refreshB_);
		GroopChat.XChat.load('/groop_chat/?xh=query_content&gid=' + GroopChat.GID + '&session=' + GroopChat.Session, 'GET');
		setTimeout('GroopChat.refresh();', GroopChat.Delay);
	},
	
	refreshB_ : function()
	{
		if(GroopChat.XChat.XH.readyState == 4 || GroopChat.XChat.XH.readyState == 'complete')
		{
			var tmp = GroopChat.XChat.XH.responseText;
			if(tmp.length > 0)
			{
				var obj = document.getElementById('groop_chat-content');
				
				obj.innerHTML += tmp;
				
				GroopChat.scroll();
			
			}
			
		}
	},
	
	refresh : function()
	{
		//loadTo('groop_chat-room', '/groop_chat/?xh=out_room&gid=' + GroopChat.GID,true);
		
		GroopChat.XRoom.reinit();
		GroopChat.XRoom.setCallback(GroopChat.refresh_);
		GroopChat.XRoom.load('/groop_chat/?xh=out_room&gid=' + GroopChat.GID, 'GET');
		
		setTimeout('GroopChat.refreshB();', GroopChat.Delay);
	},
	
	refresh_ : function()
	{
		if(GroopChat.XRoom.XH.readyState == 4 || GroopChat.XRoom.XH.readyState == 'complete')
		{
			var tmp = GroopChat.XRoom.XH.responseText;
			if(tmp.length > 0)
			{
				var obj = document.getElementById('groop_chat-room');
				
				obj.innerHTML = tmp;
			
			}
			
		}
	},
	
	scroll : function()
	{
		var obj = document.getElementById('groop_chat-content');
		obj.scrollTop = obj.scrollHeight;
	},
	
	showInvite : function()
	{
		var tmp = window.open('/groop_chat/?xh=show_invite&gid=' + GroopChat.GID, 'gchatinvite' + GroopChat.GID, 'width=200, height=400, scrollbars=1, resizable=0,status=0,menubar=0,location=0,toolbar=0');
		return false;
	},
	
	invite : function(gid, fid, session)
	{
		XH.init();
		XH.xh.onreadystatechange = null;
		XH.loadTo(null, '/groop_chat/?xh=invite&gid=' + gid + '&fid=' + fid + '&session=' + session, 'GET');
		document.getElementById('groop_chat-invite_' + fid).innerHTML = 'Invitation Sent.';
	}
	
};



var Groops =
{
	ListStart : 0,

	showAddMember : function(uid)
	{
		var obj = document.getElementById('groops-addmember_' + uid);
		obj.innerHTML = "<div class=\"wtop\"><img src=\"/images/windows/close.gif\" onclick=\"javascript:return hideObjectByName('groops-addmember_" + uid + "');\" border=\"0\" alt=\"[X]\" /></div><a href=\"#\" onclick=\"javascript:return Groops.showAddMemberB(" + uid + ",0)\">Social</a> | <a href=\"#\" onclick=\"javascript:return Groops.showAddMemberB(" + uid + ",1)\">Pro</a>";
		obj.style.visibility = 'visible';
		return false;
	},
	
	showAddMemberB : function(uid, tp)
	{
		document.getElementById('groops-addmember_' + uid).style.visibility = 'visible';
		loadTo('groops-addmember_' + uid, '/groops/?xh=add_member_form&mid=' + uid + '&type=' + tp);
		return false;
	},
	
	addMemberToGroop : function(uid, session)
	{
		loadTo('groops-addmember_' + uid, '/groops/?xh=add_member&parent=' + document.getElementById('groops_parent').value + '&mid=' + uid + '&session=' + session);
		setTimeout('hideObjectByName(\'groops-addmember_' + uid + '\');', 2000);
		return false;
	},
	
	deleteMember : function(groop, mid)
	{
		if(!confirm('Are you sure you want to delete this member?'))
			return false;
		loadTo('groops_member-' + mid, '/groops/?xh=delete_member&groop=' + groop + '&mid=' + mid);
		setTimeout('Groops.deleteMemberB(' + mid + ');', 2000);
		return false;
	},
	
	deleteMemberB : function(mid)
	{
		document.getElementById('groops_member-' + mid).style.display = 'none';
	},
	
	showCategorize : function(gid, tp, dflt)
	{
		loadTo('groops-categorize_' + gid, '/groops/?xh=show_categorize&gid=' + gid + '&type=' + tp + '&default=' + dflt);
		document.getElementById('groops-categorize_' + gid).style.visibility = 'visible';
		return false;
	},
	
	showNextGroops : function(uid, gtype, world)
	{
		Groops.ListStart += 3;
		loadTo('profile-groops_list_social', '/groops/?xh=show_groops&uid=' + uid + '&type=' + gtype + '&start=' + Groops.ListStart + '&world=' + world);
		return false;
	},
	
	showPrevGroops : function(uid, gtype, world)
	{
		Groops.ListStart -= 3;
		loadTo('profile-groops_list_social', '/groops/?xh=show_groops&uid=' + uid + '&type=' + gtype + '&start=' + Groops.ListStart + '&world=' + world);
		return false;
	},
	
	showSetRank : function(gid, mid)
	{
		loadTo('groops-setrank_' + gid + '-' + mid, '/groops/?xh=rank&gid=' + gid + '&mid=' + mid);
		document.getElementById('groops-setrank_' + gid + '-' + mid).style.visibility = 'visible';
		return false;
	},
	
	setRank : function(gid, mid, session)
	{
		var obj = document.getElementById('groops-rank_' + gid + '-' + mid);
		if(obj)
		{
			var rank = obj.value;
			loadTo('groops-setrank_' + gid + '-' + mid, '/groops/?xh=rank&gid=' + gid + '&mid=' + mid + '&rank=' + rank + '&session=' + session);
			var objRank = document.getElementById('groops-mrank_' + mid);
			if(objRank)
			{
				if(rank == -1)
				{
					objRank.innerHTML = 'Visitor';
					objRank.className = 'groops-rank_visitor';
				}
				else if(rank == 0)
				{
					objRank.innerHTML = 'Member';
					objRank.className = 'groops-rank_member';
				}
				else if(rank == 1)
				{
					objRank.innerHTML = 'Moderator';
					objRank.className = 'groops-rank_moderator';
				}
				else if(rank == 2)
				{
					objRank.innerHTML = 'Admin';
					objRank.className = 'groops-rank_admin';
				}
				else if(rank == -2)
				{
					objRank.innerHTML = 'Manager';
					objRank.className = 'groops-rank_manager';
				}
				else if(rank == -3)
				{
					objRank.innerHTML = 'Band';
					objRank.className = 'groops-rank_band';
				}
				else if(rank == -4)
				{
					objRank.innerHTML = 'Fan';
					objRank.className = 'groops-rank_fan';
				}
			}
			setTimeout("hideObjectByName('groops-setrank_" + gid + "-" + mid + "');", 2000);
		}
		return false;
	},
		
	rename : function(gid, session)
	{
		var obj = document.getElementById('groops-newname');
		if(obj)
		{
			XWind.show('/groops/?xh=rename&gid=' + gid + '&sub=edit&session=' + session + '&name=' + Base64.encode(obj.value).replace(/=/g,''));
		}
		return false;
	}
};


function CIcon()
{
	_self = this;
	this.Head = document.getElementsByTagName('head')[0];
	this.IconList = null;
	this.Iter = 0;
	this.IterTimer = null;

	this.addIconLink = function(url, name)
	{
		var link = document.createElement('link');
		link.type = 'image/x-icon';
		link.rel = name;
		link.href = url;
		_self.removeLink(name);
		_self.Head.appendChild(link);
	}
	
	this.removeLink = function(name)
	{
		var links = _self.Head.getElementsByTagName('link');
		for(var n = 0; n < links.length; n++)
		{
			var l = links[n];
			if(l.type == 'image/x-icon' && l.rel == name)
			{
				_self.Head.removeChild(l);
				return true;
			}
		}
		return false;
	}

	this.change = function(url)
	{
		_self.addIconLink(url, 'icon');
		_self.addIconLink(url, 'shortcut icon');
	}
	
	this.setList = function(lst)
	{
		_self.IconList = lst;
	}
	
	this.start = function()
	{
		if(_self.IterTimer != null)
			return;
		_self.Iter = 0;
		if(_self.IconList.length < 1)
			return;
		_self.iterate(true);
	}
	
	this.stop = function()
	{
		clearTimeout(_self.IterTimer);
		_self.IterTimer = null;
		_self.change(_self.IconList[0]);
	}
	
	this.iterate = function(loop)
	{
		_self.Iter++;
		if(_self.Iter > _self.IconList.length)
			_self.Iter = 0;
		_self.change(_self.IconList[_self.Iter]);
		if(loop)
			_self.IterTimer = setTimeout(function() { _self.iterate(true); }, 1000);
	}
}


var IM =
{
	FID : 0,
	Session : '',
	Username : '',
	Friendname : '',
	Mute : false,
	XH : new CXH,
	Emotes : new CEmoticons,
	Icon : null,
	
	adjustBar : function()
	{
		var obj = document.getElementById('im-requests');
		if(obj)
		{
			var props = getDocumentProps();
			obj.style.top = (props[1] - 50) + 'px';
		}
	},

	refreshRequests : function()
	{
		if(IM.Icon == null)
		{
			IM.Icon = new CIcon();
			IM.Icon.setList(new Array('/images/favicon.ico', '/images/favicon2.ico'));
		}
		IM.XH.reinit();
		IM.XH.setCallback(IM.refreshRequests_);
		IM.XH.load('/im/?xh=requests', 'GET');
		setTimeout('IM.refreshRequests();', 4000);
	},
	
	refreshRequests_ : function()
	{
		if(IM.XH.XH.readyState == 4 || IM.XH.XH.readyState == 'complete')
		{
			var tmp = IM.XH.XH.responseText;
			if(tmp == '0')
			{
				var obj = document.getElementById('im-requests');
				if(obj)
				{
					obj.innerHTML = '';
					obj.style.visibility = 'hidden';
					IM.Icon.stop();
				}
			}
			else
			{
				var obj = document.getElementById('im-requests');
				if(obj)
				{
					obj.innerHTML = tmp;
					obj.style.visibility = 'visible';
					IM.Icon.start();
				}
			}
		}
	},
	
	open : function(fid, fname)
	{
		var tmp = window.open('/im/?xh=chat&fid=' + fid + '&fname=' + fname, 'im' + fid, 'width=310, height=400, scrollbars=0, resizable=0,status=0,menubar=0,location=0,toolbar=0');
		return false;
	},
	
	openSendFile : function(fid, fname)
	{
		var tmp = window.open('/im/?xh=send_file&fid=' + fid + '&fname=' + fname, 'imf' + fid, 'width=300, height=100, scrollbars=0, resizable=0,status=0,menubar=0,location=0,toolbar=0');
		return false;
	},
	
	begin : function(fid, username, friendname, session)
	{
		IM.FID = fid;
		IM.Username = username;
		IM.Friendname = friendname;
		IM.Session = session;
		IM.queryChat();
	},
	
	queryChat : function()
	{
		XH.init();
		XH.xh.onreadystatechange = IM.queryChat_;
		XH.loadTo(null, '/im/?xh=query&fid=' + IM.FID + '&session=' + IM.Session, 'GET');
		setTimeout('IM.queryChat();', 3000);
	},
	
	queryChat_ : function()
	{
		if(XH.xh.readyState == 4 || XH.xh.readyState == 'complete')
		{
			var tmp = XH.xh.responseText;
			if(tmp.length > 0)
			{
				var obj = document.getElementById('im-chat');
				if(obj)
				{
					obj.innerHTML += IM.Emotes.replaceIn(tmp);
					document.title = '* ' + IM.Friendname + ' [IM]';
					IM.scroll();
				}
				if(!IM.Mute)
					soundManager.play('IMSound', '/media/mp3/im.mp3');
			}
		}
	},
	
	say : function()
	{
		var obj = document.getElementById('im-chat');
		var objSend = document.getElementById('im-say');
		if(obj && objSend && objSend.value.length > 0)
		{
			var txt = objSend.value.replace(/</g,'&lt;');
			txt = txt.replace(/>/g,'&gt;');
			obj.innerHTML += '<span style="color: #ff0000;">' +IM.Username + ':</span> ' + IM.Emotes.replaceIn(txt) + "<br />\n";
			XH.init();
			XH.xh.onreadystatechange = IM.say_;
			XH.loadTo(null, '/im/?xh=say&fid=' + IM.FID + '&msg=' + Base64.encode(objSend.value) + '&session=' + IM.Session, 'GET');
			objSend.value = '';
			document.title = IM.Friendname + ' [IM]';
			IM.scroll();
		}
		return false;
	},
		
	scroll : function()
	{
		var obj = document.getElementById('im-chat');
		obj.scrollTop = obj.scrollHeight;
	},
	
	say_ : function()
	{ },
	
	muteChange : function(obj)
	{
		IM.Mute = obj.checked;
	},
	
	getFile : function(id, code)
	{
		var tmp = window.open('/im/?xh=get_file&id=' + id + '&code=' + code, 'imgf', 'width=100, height=100, scrollbars=0, resizable=0,status=0,menubar=0,location=0,toolbar=0');
		return false;
	}
};


function _init()
{
	if(requireXh && !xhSupported())
		document.write("<div class=\"alert\">AJAX is not supported by your browser. Some website features might be broken.</div>");
}

function _load()
{

}

function _resized()
{
	QuickView.adjustBar();
}


var Interact =
{
	OldTab : null,
	OldName : null,
	CurrentTab : 'non',
	X : new CXH,
	CurrentMonth : 0,
	MonthToggle : new Array(),
	Aux : null,
	CurCID : 0,
	CurComment : null,
	CurrentRID : 0,
	Session : null,
	CurrentPhotos : new Array(),

	tabClick : function(name)
	{
		var objTab = document.getElementById('interact-tab_' + name);
		
		if(!Interact.OldTab)
			Interact.OldTab = document.getElementById('interact-tab_recent');
		
		Interact.OldTab.className = '';
		objTab.className = 'current';
		Interact.OldTab = objTab;
		Interact.OldName = name;
		
		if(name == 'friends')
		{
			this.MonthToggle = new Array();
		}
		
		this.CurrentTab = name;
		
		Interact.X.reinit();
		Interact.X.setCallback(Interact.tabClick_Callback);
		Interact.X.load('/interact/?xh=' + name, 'GET');
		return false;
	},
		
	navClick : function(name)
	{
		if(name == 'friends')
		{
			this.MonthToggle = new Array();
		}
		
		Interact.X.reinit();
		Interact.X.setCallback(Interact.tabClick_Callback);
		Interact.X.load('/interact/?xh=' + name, 'GET');
		return false;
	},
		
		
	navClickX : function(name, aux)
	{
		this.Aux = aux;
		this.navClick(name);
		return false;
	},
		
	tabClickX : function(name, aux)
	{
		this.Aux = aux;
		this.tabClick(name);
		return false;
	},
		
	showEvent : function(id)
	{
		this.X.reinit();
		this.X.setCallback(Interact.tabClick_Callback);
		this.X.load('/interact/?xh=events&event=' + id, 'GET');
		return false;
	},
		
	events_showCalendar : function()
	{
		this.tabClick('events');
		return false;
	},
		
	events_showCalendarB : function(year, month)
	{
		this.X.reinit();
		this.X.setCallback(Interact.tabClick_Callback);
		this.X.load('/interact/?xh=events&year=' + year + '&month=' + month, 'GET');
		return false;
	},
		
	events_delete : function(id, session)
	{
		if(!confirm('Are you sure you want to delete this event from your calendar?'))
			return false;
		this.X.reinit();
		this.X.setCallback(Interact.tabClick_Callback);
		this.X.load('/interact/?xh=events&func=delete&id=' + id + '&session=' + session, 'GET');
		return false;
	},
	
	tabClick_Callback : function()
	{
		if(Interact.X.XH.readyState == 4 || Interact.X.XH.readyState == 'complete')
		{
			var objContent = document.getElementById('interact-content');
			if(objContent)
			{
				objContent.innerHTML = Interact.X.XH.responseText;
				if(Interact.OldName == 'friends')
					Interact.toggleMonthBirthdays(Interact.Aux);
			}
		}
	},
		
	toggleMonthBirthdays : function(m)
	{
		var _self = this;
		var obj = document.getElementById('interact-bmonth_' + m);
		if(obj)
		{
			if(!this.MonthToggle[m])
			{
				this.MonthToggle[m] = true;
				this.CurrentMonth = m;
				document.getElementById('interact-bicon_' + m).src = '/images/panel/expanded.gif';
				this.X.reinit();
				this.X.setCallback(_self.toggleMonthBirthdays_callback);
				this.X.load('/interact/?xh=birthdays&month=' + m, 'GET');
			}
			else
			{
				this.MonthToggle[m] = false;
				obj.style.display = 'none';
				obj.innerHTML = '';
				document.getElementById('interact-bicon_' + m).src = '/images/panel/collapsed.gif';
			}
		}
		return false;
	},
		
	toggleMonthBirthdays_callback : function()
	{
		if(Interact.X.XH.readyState == 4 || Interact.X.XH.readyState == 'complete')
		{
			var obj = document.getElementById('interact-bmonth_' + Interact.CurrentMonth);
			
			if(obj)
			{
				obj.innerHTML = Interact.X.XH.responseText;
				obj.style.display = 'block';
			}
		}
	},
		
	showCommentPhotoForm : function(id, session)
	{
		var obj = document.getElementById('interact-pcomment_' + id);
		if(obj)
		{
			obj.innerHTML = '<form action="#" method="post" onsubmit="javascript:return Interact.postPhotoComment(' + id + ',\'' + session + '\');"><textarea id="comment-content_' + id + '" cols="80" rows="3"></textarea><br /><input type="submit" value="Comment" class="button" /> <input type="button" value="Cancel" class="button" onclick="javascript:Interact.closePostComment(' + id + ');" /></form>';
		}
		return false;
	},
		
	closePostComment : function(id)
	{
		var obj = document.getElementById('interact-pcomment_' + id);
		if(obj)
			obj.innerHTML = '';
	},
		
	postPhotoComment : function(id, session)
	{
		var objContent = document.getElementById('comment-content_' + id);
		
		this.CurCID = id;
		this.CurComment = objContent.value;
		
		if(objContent.value.length < 2)
			alert('Comment is too short.');
		
		this.X.reinit();
		this.X.setCallback(Interact.postComment_callback);
		this.X.load('/photos/?xh=post_comment&id=' + id + '&session=' + session + '&content=' + Base64.encode(objContent.value), 'GET');
		return false;
	},
	
	postComment_callback : function()
	{
		if(Interact.X.XH.readyState == 4 || Interact.X.XH.readyState == 'complete')
		{
			var r = Interact.X.XH.responseText;
			
			var objForm = document.getElementById('interact-pcomment_' + Interact.CurCID);
			
			if(objForm)
				objForm.innerHTML = '';
			
			var obj = document.getElementById('interact-pcomlist_' + Interact.CurCID);
			
			if(obj)
				obj.innerHTML += r;
		}
	},
	
	showRecentMenu : function(obj, id, session)
	{
		this.CurrentRID = id;
		this.Session = session;
		var menuObj = document.getElementById('interact-alerts_menu');
		if(menuObj)
		{
			var pos = getObjPosition(obj);
			menuObj.style.left = pos[0] + 'px';
			menuObj.style.top = (pos[1]+10) + 'px';
			menuObj.style.visibility = 'visible';
			this.setRecentMenuTimer();
		}
		return false;
	},
	
	setRecentMenuTimer : function()
	{
		var _self = this;
		_self.MenuTimer = setTimeout(function() { _self.hideRecentMenu(); }, 500);
	},
	
	cancelRecentMenuTimer : function()
	{
		var _self = this;
		if(_self.MenuTimer)
			clearTimeout(_self.MenuTimer);
		_self.MenuTimer = null;
	},
	
	hideRecentMenu : function()
	{
		var menuObj = document.getElementById('interact-alerts_menu');
		if(menuObj)
			menuObj.style.visibility = 'hidden';
	},
	
	deleteRecentItem : function()
	{
		this.hideRecentMenu();
		this.X.reinit();
		this.X.setCallback(Interact.deleteRecentItem_callback);
		this.X.load('/interact/?xh=delete_alert&id=' + this.CurrentRID + '&session=' + this.Session,'GET');
		return false;
	},
	
	deleteRecentItem_callback : function()
	{
		if(Interact.X.XH.readyState == 4 || Interact.X.XH.readyState == 'complete')
		{
			var r = Interact.X.XH.responseText;
			if(r == 0)
			{
				var obj = document.getElementById('interact-alertitem_' + Interact.CurrentRID);
				if(obj)
					obj.style.display = 'none';
			}
		}
	},
	
	setCurrentPhoto : function(t, id)
	{
		this.CurrentPhotos[t] = id;
	},
	
	showPhotoInfo : function(t, id)
	{
		var objOldImg = document.getElementById('interact-photo_' + this.CurrentPhotos[t]);
		var objOldDiv = document.getElementById('interact-pcomwrapper_' + this.CurrentPhotos[t]);
		if(!objOldImg || !objOldDiv)
			return false;
		objOldImg.style.border = '0';
		objOldDiv.style.display = 'none';
		var objImg = document.getElementById('interact-photo_' + id);
		var objDiv = document.getElementById('interact-pcomwrapper_' + id);
		objImg.style.border = '1px solid #ff0000';
		objDiv.style.display = 'block';
		this.CurrentPhotos[t] = id;
		return false;
	}
};


var Invite =
{
	X : new CXH(),
	Fields : new Array('type', 'session', 'emails', 'message', 'gid'),
	Type : null,
	Imported : new Array(),
	ImportedCount : 0,
	TargetField : null,

	go : function(type)
	{
		this.Type = type;
		var data = '';
		
		for(var n = 0; n < this.Fields.length; n++)
		{
			var val = this.getValue(this.Fields[n]);
			if(data.length > 0)
				data += '&';
			data += this.Fields[n] + '=' + val;
		}
		
		document.getElementById('invite-buttons').innerHTML = '<img src="/images/loading.gif" border="0" alt="" /> Processing...';
		
		this.X.reinit();
		this.X.setCallback(Invite.do_callback);
		this.X.post('/invite/?xh=invite', data);
		return false;
	},
	
	do_callback : function()
	{
		if(Invite.X.XH.readyState == 4 || Invite.X.XH.readyState == 'complete')
		{
			var r = Invite.X.XH.responseText;
			if(r > 0)
			{
				XWind.show('/invite/?xh=done&sent=' + r);
			}
			else
				XWind.show('/invite/?xh=show_' + Invite.Type + '&err=1');
		}
	},
	
	getValue : function(name)
	{
		var objs = document.getElementsByName(name);
		if(objs.length < 1)
			return '';
		return objs[0].value;
	},
		
	addEmail : function(email)
	{
		this.Imported[this.ImportedCount] = email;
		this.ImportedCount++;
	},
		
	showImportAB : function()
	{
		XWind.show('/invite/?xh=show_import');
		return false;
	},
		
	doImportAB : function()
	{
		var euser = document.getElementById('import-email').value;
		var epass = document.getElementById('import-pass').value;
		
		if(euser.search(/@/) == -1 || euser.search(/\./) == -1)
		{
			alert('Invalid E-Mail address.');
			return false;
		}
		
		if(euser.search(/gmail/) == -1 && euser.search(/hotmail/) == -1 && euser.search(/live/) == -1 && euser.search(/yahoo/) == -1)
		{
			alert('Unsupported E-Mail address.');
			return false;
		}
		
		document.getElementById('invite-abform').style.display = 'none';
		document.getElementById('invite-abprocess').style.display = 'block';
		
		var data = 'euser=' + euser + '&epass=' + epass;
		
		this.X.reinit();
		this.X.setCallback(Invite.doImportAB_callback);
		this.X.post('/invite/?xh=import_ab&do=import', data);
		return false;
	},
		
	doImportAB_callback : function()
	{
		if(Invite.X.XH.readyState == 4 || Invite.X.XH.readyState == 'complete')
		{
			var r = Invite.X.XH.responseText;
			if(r.length > 1)
			{
				if(Invite.TargetField && Invite.TargetField.value.length > 0)
					Invite.TargetField.value += '\n';
				
				if(r.search(/;/) != -1)
				{
					var lst = r.split(';');
					for(i in lst)
					{
						Invite.addEmail(lst[i]);
						if(Invite.TargetField)
							Invite.TargetField.value += lst[i] + '\n';
					}
				}
				else
				{
					Invite.addEmail(r);
					if(Invite.TargetField)
						Invite.TargetField.value += r + '\n';
				}
				
			}
			else
				alert('Failed to access address book.');
			XWind.close();
		}
	},
		
	emailFocus : function(obj)
	{
		if(obj.value == 'Your E-Mail Address')
			obj.value = '';
	},
		
	passFocus : function(obj)
	{
		if(obj.value == 'Password')
			obj.value = '';
	}
};


var Login =
{
	fieldFocus : function(obj)
	{
		if(obj)
			obj.style.backgroundImage = "none";
	},
	
	fieldBlur : function(obj, name)
	{
		if(obj)
		{
			if(obj.value.length < 1)
				obj.style.backgroundImage = "url('images/login-" + name + ".gif')";
		}
	}
};


var Market =
{
	X : new CXH,
	CartItemCount : 0,

	getFormElement : function(subId)
	{
		return document.getElementById('market-form_' + subId);
	},

	addMarketFormSubmit : function()
	{
		if(Market.getFormElement('name').value.length < 1)
			alert('Business name is blank.');
		else
			return true;
		return false;
	},

	setLocationSearch : function(obj)
	{
		for(var n = 1; n <= 3; n++)
			document.getElementById('market_loc-' + n).style.display = 'none';
		document.getElementById('market_loc-' + obj.value).style.display = 'block';
	},
	
	addItemToCart : function(bid, iid, session)
	{
		loadTo('market-addcart_' + iid, '/market/?xh=add_cart&bid=' + bid + '&iid=' + iid + '&session=' + session, true);
		Market.CartItemCount++;
		Market.bufferCartItemCount();
		return false;
	},
	
	updateCartItemCount : function(bid)
	{
		XH.init();
		XH.xh.onreadystatechange = Market.updateCartItemCountB;
		XH.loadTo(null, '/market/?xh=cart_item_count&bid=' + bid, 'GET');
	},
	
	updateCartItemCountB : function()
	{
		if(XH.xh.readyState == 4 || XH.xh.readyState == 'complete')
		{
			Market.CartItemCount = XH.xh.responseText;
			Market.bufferCartItemCount();
		}
	},
	
	bufferCartItemCount : function()
	{
		obj = document.getElementById('market-cart_itemcount');
		if(obj)
			obj.innerHTML = ' (' + Market.CartItemCount + ')';
	},
		
	cats_showChilds : function()
	{
		var parent = document.getElementById('market-cat0').value;
		var objCat = document.getElementById('market-category');
		if(parent > 0)
		{
			objCat.value = parent;
			loadTo('market-subcats', '/market/?xh=show_catsel&parent=' + parent, true);
		}
		else
		{
			objCat.value = 0;
			document.getElementById('market-subcats').innerHTML = '';
		}
	},
		
	cats_update : function(obj)
	{
		var objCat = document.getElementById('market-category');
		if(objCat && objCat.value > 0)
			objCat.value = obj.value;
	},
		
	prefs_init : function()
	{
		loadTo('market-editcats', '/market/?xh=prefs_showcats', true);
	},
		
	prefs_addCategory : function(session)
	{
		var objCat = document.getElementById('market-category');
		
		if(objCat.value > 0)
		{
			loadTo('market-editcats', '/market/?xh=prefs_addcat&cat=' + objCat.value + '&session=' + session, true);
			document.getElementById('market-subcats').innerHTML = '';
			document.getElementById('market-cat0').value = 0;
			objCat.value = 0;
		}
		else
			alert('You must select a category or sub-category to add.');
		return false;
	},
		
	prefs_removeCategories : function(session)
	{
		var objCatList = document.getElementById('market-catlist');
		var strCats = '';
		var n = 0;
		
		while(objCatList.selectedIndex != -1)
		{
			strCats += objCatList.options[objCatList.selectedIndex].value + ',';
			n++;
			objCatList.options[objCatList.selectedIndex].selected = false;
		}
		
		if(n == 0)
			return false;
		
		loadTo('market-editcats', '/market/?xh=prefs_removecats&catlist=' + strCats + '&session=' + session, true);
		return false;
	},
	
	wishlist_add : function(id, session)
	{
		loadTo('wishlist-item_' + id, '/market/?xh=add_wishlist&iid=' + id + '&session=' + session, true);
		return false;
	},
	
	wishlist_remove : function(id, session)
	{
		this.X.reinit();
		this.X.setCallback(Market.wishlist_remove_callback);
		this.X.load('/market/?xh=remove_wishlist&id=' + id + '&session=' + session, 'GET');
		return false;
	},
	
	wishlist_remove_callback : function()
	{
		if(Market.X.XH.readyState == 4 || Market.X.XH.readyState == 'complete')
		{
			var r = Market.X.XH.responseText;
			var objList = document.getElementById('market-wishlist');
			var objItem = document.getElementById('market-wishlist_' + r);
			
			if(objList && objItem)
			{
				objList.removeChild(objItem);
			}
		}
	}
	
	
};


function CMatches()
{
	var _self = this;
	this.X = new CXH();
	this.FrameName = 'interact-content';
	this.Frame = null;
	this.Country = null;
	this.Gender = null;
	this.FromAge = null;
	this.ToAge = null;
	
	this.showPage = function(name)
	{
		this.X.reinit();
		this.X.setCallback(this.showPage_callback);
		this.X.load('/interact/?xh=matches&sub=' + name, 'GET');
		return false;
	}
	
	this.showPage_callback = function()
	{
		if(_self.X.XH.readyState == 4 || _self.X.XH.readyState == 'complete')
		{
			var obj = document.getElementById('interact-content');
			if(obj)
			{
				obj.innerHTML = _self.X.XH.responseText;
			}
		}
	}
	
	this.setGender = function(id)
	{
		document.getElementById('gender_id').value = id;
	}
	
	this.getFrame = function()
	{
		if(this.Frame != null)
			return this.Frame;
		this.Frame = document.getElementById(this.FrameName);
		return this.Frame;
	}
	
	this.go = function()
	{
		this.Country = document.getElementById('country').value;
		this.Gender = document.getElementById('gender_id').value;
		this.FromAge = document.getElementById('from_age').value;
		this.ToAge = document.getElementById('to_age').value;
		
		_self.X.reinit();
		_self.X.setCallback(_self.showPage_callback);
		_self.X.load('/interact/?xh=matches&sub=go&country=' + _self.Country + '&gender=' + _self.Gender + '&from_age=' + _self.FromAge + '&to_age=' + _self.ToAge, 'GET');
		return false;
	}
	
	this.no = function(uid, session)
	{
		this.X.reinit();
		this.X.setCallback(_self.showPage_callback);
		this.X.load('/interact/?xh=matches&sub=go&uid=' + uid + '&country=' + this.Country + '&gender=' + this.Gender + '&from_age=' + this.FromAge + '&to_age=' + this.ToAge, 'GET');
		return false;
	}
	
	this.yes = function(uid, session)
	{
		XWind.show('/interact/?xh=matches_request&uid=' + uid);
		return false;
	}
	
	this.submitRequest = function(uid, session)
	{
		var _self = this;
		var obj = document.getElementById('interact-matches_msg');
		var msg = '';
		if(obj)
		{
			msg = Base64.encode(obj.value);
			msg = msg.replace(/=/g, '');
		}
		XWind.close();
		this.X.reinit();
		this.X.setCallback(_self.showPage_callback);
		this.X.load('/interact/?xh=matches&sub=go&func=yes&uid=' + uid + '&msg=' + msg + '&country=' + this.Country + '&gender=' + this.Gender + '&from_age=' + this.FromAge + '&to_age=' + this.ToAge + '&session=' + session, 'GET');
		return false;
	}
	
}

var Matches = new CMatches();



var Menu =
{
	timeout : 500,
	closeTimer : 0,
	oldItem : 0,
	
	
	show : function(name)
	{
		Menu.cancelTimer();
		if(Menu.oldItem)
			Menu.oldItem.style.visibility = 'hidden';
		Menu.oldItem = document.getElementById('menu-' + name);
		if(Menu.oldItem)
			Menu.oldItem.style.visibility = 'visible';
	},
		
	close : function()
	{
		if(this.oldItem)
		{
			this.oldItem.style.visibility = 'hidden';
			this.oldItem = null;
		}
	},
	
	toggle : function(name)
	{
		if(this.oldItem)
		{
			this.oldItem.style.visibility = 'hidden';
			this.oldItem = null;
			return false;
		}
		else
		{
			this.show(name);
			return true;
		}
	},
		
	timedClose : function()
	{
		Menu.closeTimer = setTimeout('Menu.close();', Menu.timeout);
	},
		
	cancelTimer : function()
	{
		if(Menu.closeTimer)
		{
			clearTimeout(Menu.closeTimer);
			Menu.closeTimer = null;
		}
	}
	
};


var Messages =
{
	X : new CXH(),
	XF : new CXH(),
	IDList : new Array(),
	IDCount : 0,
	SelectedList : new Array(),
	CurrentFolder : 0,
	
	setFolder : function(f)
	{
		this.CurrentFolder = f;
	},
	
	addID : function(id)
	{
		Messages.IDList[Messages.IDCount] = id;
		Messages.IDCount++;
	},
	
	clearList : function()
	{
		Messages.SelectedList = new Array();
		Messages.IDList = new Array();
		Messages.IDCount = 0;
	},
	
	deleteMessage : function(id, folder, session)
	{
		if(!confirm('Are you sure you want to delete this message?'))
			return false;
		this.X.reinit();
		this.X.setCallback(Messages.update_callback);
		this.X.load('/messages/?xh=delete&id=' + id + '&folder=' + folder + '&session=' + session, 'GET');
		return false;
	},

	doDeleteMultiple : function(folder, session)
	{
		if(!confirm('Are you sure you want to delete these messages?'))
			return false;
		var data = '';
		
		for(var n in this.SelectedList)
		{
			if(this.SelectedList[n])
			{
				if(data.length > 0)
					data += '&';
				data += 'messages[' + n + ']=1';
			}
		}
		this.X.reinit();
		this.X.setCallback(Messages.update_callback);
		this.X.post('/messages/?xh=multidelete&folder=' + folder + '&session=' + session, data);
		return false;
	},
	
	archiveMessage : function(id, session)
	{
		if(!confirm('Are you sure you want to archive this message?'))
			return false;
			
		var data = 'messages[' + id + ']=1';
		this.X.reinit();
		this.X.setCallback(Messages.update_callback);
		this.X.post('/messages/?xh=archive&session=' + session, data);
		return false;
	},
	
	doArchiveMultiple : function(session)
	{
		if(!confirm('Are you sure you want to archive these messages?'))
			return false;
		var data = '';
		
		for(var n in this.SelectedList)
		{
			if(this.SelectedList[n])
			{
				if(data.length > 0)
					data += '&';
				data += 'messages[' + n + ']=1';
			}
		}
		this.X.reinit();
		this.X.setCallback(Messages.update_callback);
		this.X.post('/messages/?xh=archive&session=' + session, data);
		return false;
	},
	
	update : function(folder, session)
	{
		if(!document.getElementById('messages-wrapper'))
			return true;
		this.setFolder(folder);
		this.X.reinit();
		this.X.setCallback(Messages.update_callback);
		this.X.load('/messages/?xh=list&folder=' + folder + '&session=' + session, 'GET');
		return false;
	},
	
	updateB : function(folder, page, session)
	{
		if(!document.getElementById('messages-wrapper'))
			return true;
		this.setFolder(folder);
		this.X.reinit();
		this.X.setCallback(Messages.update_callback);
		this.X.load('/messages/?xh=list&folder=' + folder + '&page=' + page + '&session=' + session, 'GET');
		return false;
	},
	
	updateC : function(folder, curFolder, page, session)
	{
		if(!document.getElementById('messages-wrapper'))
			return true;
		this.setFolder(folder);
		this.X.reinit();
		this.X.setCallback(Messages.update_callback);
		this.X.load('/messages/?xh=list&folder=' + folder + '&curfolder=' + curFolder + '&page=' + page + '&session=' + session, 'GET');
		return false;
	},
	
	move : function(folder, curFolder, page, session)
	{
		if(!document.getElementById('messages-wrapper'))
			return true;
			
		var data = '';
		
		for(var n in this.SelectedList)
		{
			if(this.SelectedList[n])
			{
				if(data.length > 0)
					data += '&';
				data += 'messages[' + n + ']=1';
			}
		}
		this.X.reinit();
		this.X.setCallback(Messages.update_callback);
		this.X.post('/messages/?xh=move&folder=' + folder + '&curfolder=' + curFolder + '&page=' + page + '&session=' + session, data);
		return false;
	},
	
	showMessage : function(id, folder)
	{
		this.X.reinit();
		this.X.setCallback(Messages.update_callback);
		this.X.load('/messages/?xh=view&id=' + id + '&folder=' + folder, 'GET');
		return false;
	},
	
	update_callback : function()
	{
		if(Messages.X.XH.readyState == 4 || Messages.X.XH.readyState == 'complete')
		{
			var r = Messages.X.XH.responseText;
			var objContainer = document.getElementById('messages-wrapper');
			if(objContainer)
			{
				Messages.clearList();
				objContainer.innerHTML = r;
			}
			Messages.updateFolders();
		}
	},
	
	highlightCurrentFolder : function()
	{
		var obj = document.getElementById('messages-folder_' + this.CurrentFolder);
		if(obj)
		{
			obj.className = 'current';
		}
	},
	
	updateFolders : function()
	{
		this.XF.reinit();
		this.XF.setCallback(Messages.updateFolders_callback);
		this.XF.load('/messages/?xh=folders', 'GET');
		return false;
	},
	
	updateFolders_callback : function()
	{
		if(Messages.XF.XH.readyState == 4 || Messages.XF.XH.readyState == 'complete')
		{
			var r = Messages.XF.XH.responseText;
			var objContainer = document.getElementById('messages-folders');
			if(objContainer)
			{
				objContainer.innerHTML = r;
				Messages.highlightCurrentFolder();
			}
		}
	},
	
	toggleItem : function(id, obj)
	{
		if(obj.checked)
			this.SelectedList[id] = true;
		else
			this.SelectedList[id] = null;
	},
	
	toggleAll : function()
	{
		for(var n = 0; n < Messages.IDCount; n++)
		{
			var id = Messages.IDList[n];
			var obj = document.getElementById('messages-item_' + id);
			if(obj)
			{
				if(obj.checked)
				{
					obj.checked = false;
					this.SelectedList[id] = null;
				}
				else
				{
					obj.checked = true;
					this.SelectedList[id] = true;
				}
			}
		}
		return false;
	},
	
	addFolder : function(session)
	{
		var obj = document.getElementById('messages-foldername');
		if(obj)
		{
			if(obj.value.length < 1)
				alert('Please enter a folder name.');
			else
			{
				XWind.close();
				this.X.reinit();
				this.X.setCallback(Messages.update_callback);
				this.X.load('/messages/?xh=add_folder&sub=add&name=' + Base64.encode(obj.value) + '&session=' + session, 'GET');
			}
		}
		return false;
	},
	
	deleteFolder : function(id, session)
	{
		if(!confirm('Are you sure you want to delete this folder and all it\'s messages?'))
			return false;
		this.X.reinit();
		this.X.setCallback(Messages.update_callback);
		this.X.load('/messages/?xh=delete_folder&id=' + id + '&session=' + session, 'GET');
		return false;
	}
	
};


var Music =
{
	X : new CXH,
	Player : null,
	LastID : 0,
	CurrentTrack : 0,
	CurrentFav : 0,

	showTool : function(gid, tool, func)
	{
		loadTo('music-pcontent', '/music/view/' + gid + '?xh=tool&tool=' + tool + '&func=' + func);
		return false;
	},
		
	showGalleryImage : function(gid, iid)
	{
		loadTo('music-pcontent', '/music/view/' + gid + '?xh=tool&tool=gallery&image=' + iid);
		return false;
	},
	
	showVideo : function(gid, vid)
	{
		loadTo('music-pcontent', '/music/view/' + gid + '?xh=tool&tool=videos&func=view&vid=' + vid);
		return false;
	},
	
	showPlayer : function(gid, target, width)
	{
		var s = new SWFObject("/flash/musicplayer/player.swf","music-mediaplayer",width,"20","7");
		s.addParam("allowfullscreen","false");
		s.addParam("allowscriptaccess","always");
		s.setAttribute("id", "music-mediaplayer");
		s.addVariable("file","/networks/" + gid + "?xh=playlist");
		s.addVariable("displayheight","0");
		s.addVariable("playlist", "bottom");
		s.addVariable("playlistsize", "0");
		s.addVariable("backcolor","0xf2f2f2");
		s.addVariable("frontcolor","0x000000");
		s.addVariable("lightcolor","0x999999");
		s.addVariable("width",width);
		s.addVariable("height","20");
		s.write(target);
	},
	
	showProfileMusicPlayer : function()
	{
		var s = new SWFObject("/flash/musicplayer/player.swf","playlist","200","20","9.0.115");
		s.addParam("allowfullscreen","false");
		s.addParam("allowscriptaccess","always");
		s.setAttribute("id", "mediaplayer");
		s.addVariable("backcolor","0xf2f2f2");
		s.addVariable("frontcolor","0x000000");
		s.addVariable("lightcolor","0x999999");
		s.addVariable("width","200");
		s.addVariable("height","200");
		s.write("music-player");
	},
	
	playMedia : function()
	{
		if(!this.Player)
			return false;
		this.Player.sendEvent('PLAY');
		return false;
	},
	
	playMediaB : function(server, id)
	{
		if(!this.Player)
			return false;
		this.Player.sendEvent('LOAD', 'http://' + server + '/uploads/music.' + id + '.mp3');
		this.Player.sendEvent('PLAY');
		if(this.LastID != 0)
		{
			var obj = document.getElementById('music-track_' + this.LastID);
			if(obj) obj.className = '';
		}
		var obj2 = document.getElementById('music-track_' + id);
		if(obj2) obj2.className = 'current';
		this.LastID = id;
		return false;
	},
	
	stopMedia : function()
	{
		if(!this.Player)
			return false;
		this.Player.sendEvent('STOP');
		return false;
	},
	
	doPostFunc : function(gid, func)
	{
		document.getElementById('music-func').value = func;
		document.getElementById('music-form').submit();
		return false;
	},
	
	disableButtons : function()
	{
		var obj = document.getElementById('music-buttons');
		if(obj)
			obj.innerHTML = '<img src="/images/loading.gif" border="0" alt="" /> Processing...';
	},
	
	addToFavorites : function(gid, session)
	{
		var _self = this;
		this.X.reinit();
		this.X.setCallback(_self.addToFavorites_callback);
		this.X.load('/music/?xh=favorite&gid=' + gid + '&session=' + session, 'GET');
		return false;
	},
	
	removeFromFavorites : function(gid, session)
	{
		if(!confirm('Are you sure you want to remove this artist from your favorites?'))
			return false;
		var _self = this;
		this.CurrentFav = gid;
		this.X.reinit();
		this.X.setCallback(_self.addToFavorites_callback);
		this.X.load('/music/?xh=remove_favorite&gid=' + gid + '&session=' + session, 'GET');
		return false;
	},
	
	addToFavorites_callback : function()
	{
		if(Music.X.XH.readyState == 4 || Music.X.XH.readyState == 'complete')
		{
			var r = Music.X.XH.responseText;
			var obj = document.getElementById('music-add_favorite');
			if(obj)
			{
				if(r == '0')
					obj.innerHTML = 'Added to Favorites';
				else if(r == '2')
					obj.innerHTML = 'Already in Favorites';
				else if(r == '3')
					obj.innerHTML = 'Removed from Favorites';
				else
					obj.innerHTML = 'Error';
			}
			var objFav = document.getElementById('music-fav_' + Music.CurrentFav);
			if(objFav)
			{
				if(r == '3')
					objFav.style.display = 'none';
			}
		}
	},
	
	deleteTrack : function(gid, id, session)
	{
		if(!confirm('Are you sure you want to delete this track?'))
			return false;
		this.CurrentTrack = id;
		this.X.reinit();
		this.X.setCallback(Music.deleteTrack_callback);
		this.X.load('/networks/' + gid + '?xh=delete_track&id=' + id + '&session=' + session, 'GET');
		return false;
	},
	
	deleteTrack_callback : function()
	{
		if(Music.X.XH.readyState == 4 || Music.X.XH.readyState == 'complete')
		{
			var r = Music.X.XH.responseText;
			if(r == '0')
			{
				var obj = document.getElementById('music-track_' + Music.CurrentTrack);
				if(obj)
					obj.style.display = 'none';
			}
		}
	},
	
	addTrackToPlaylist : function(gid, tid, session)
	{
		this.X.reinit();
		this.X.setCallback(Music.addTrackToPlaylist_callback);
		this.X.load('/music/?xh=playlist_add&gid=' + gid + '&tid=' + tid + '&session=' + session, 'GET');
		return false;
	},
	
	addTrackToPlaylist_callback : function()
	{
		if(Music.X.XH.readyState == 4 || Music.X.XH.readyState == 'complete')
		{
			var r = Music.X.XH.responseText;
			var obj = document.getElementById('music-plaction');
			
			if(obj)
			{
				showObjectByName('music-plaction');
				if(r == 0)
					obj.innerHTML = 'Track added to playlist.';
				else
					obj.innerHTML = 'Track already in playlist.';
				setTimeout("hideObjectByName('music-plaction');", 3000);
			}
		}
	},
	
	playlist_delete : function(session)
	{
		if(!confirm('Are you sure you want to remove these tracks from your playlist?'))
			return false;
		var objs = document.getElementsByName('tracks');
		var data = 'dummy=1';
		for(i in objs)
		{
			if(objs[i].checked)
				data += '&tracks[' + objs[i].value + ']=1';
		}
		this.X.reinit();
		this.X.setCallback(Music.playlist_delete_callback);
		this.X.post('/music/?xh=playlist_delete&session=' + session, data);
		return false;
	},
	
	playlist_delete_callback : function(session)
	{
		if(Music.X.XH.readyState == 4 || Music.X.XH.readyState == 'complete')
		{
			var r = Music.X.XH.responseText;
			document.getElementById('music-playlist').innerHTML = r;	
		}
	}
};

function playerReady(thePlayer)
{
	Music.Player = window.document[thePlayer.id];
}



var Networks =
{
	VIP_PRICE : 10,
	GID : 0,
	X : new CXH,
	ListFields : new Array(),
	ListFieldCount : 0,
	SelectObject : null,
	ItemCount : 0,
	ColumnSetupId : 0,
	BGType : 0,
	
	setDisplayImage : function(id, session)
	{
		if(!confirm('Are you sure you want to set this file as display image?'))
			return false;
		this.X.reinit();
		this.X.setCallback(Networks.setDisplayImage_callback);
		this.X.load('/networks/' + this.GID + '/admin/?xh=set_display_image&id=' + id + '&session=' + session, 'GET');
		return false;
	},
	
	setDisplayImage_callback : function()
	{
		if(Networks.X.XH.readyState == 4 || Networks.X.XH.readyState == 'complete')
		{
			var r = Networks.X.XH.responseText;
			if(r == 0)
			{
				alert('Display image has been changed.');
			}
		}
	},
	
	points_activate : function(session)
	{
		XWind.show('/networks/' + this.GID + '/admin/?xh=activate_points&sub=use&q=' + document.getElementById('field-q').value + '&session=' + session);
		return false;
	},
	
	points_compare : function(obj, total)
	{
		if(obj.value > total)
			obj.value = total;
		this.X.reinit();
		this.X.setCallback(Networks.points_compare_callback);
		this.X.load('/networks/?xh=get_rank&gid=' + this.GID + '&q=' + obj.value, 'GET');
	},
	
	points_compare_callback : function()
	{
		if(Networks.X.XH.readyState == 4 || Networks.X.XH.readyState == 'complete')
		{
			var r = Networks.X.XH.responseText;
			var obj = document.getElementById('q-rank');
			
			if(obj)
			{
				if(r > 66)
					obj.style.color = '#00ff00';
				else if(r > 33)
					obj.style.color = '#0000ff';
				else
					obj.style.color = '#ff0000';
				obj.innerHTML = r + '%';
			}
		}
	},
	
	showTemplateSelect : function(name)
	{
		XWind.show('/networks/?xh=show_template_select&name=' + name);
		return false;
	},
		
		
	selectTemplate : function(name)
	{
		XWind.show('/networks/' + this.GID + '?xh=select_template&name=' + name);
		return false;
	},
	
	editBaseColor : function(session)
	{
		XWind.show('/networks/' + this.GID + '/admin/?xh=edit_base_color&do=edit&color=' + document.getElementById('base-color').value + '&session=' + session);
		return false;
	},

	
	canvas_showEdit : function()
	{
		XWind.show('/networks/' + this.GID + '?xh=edit_canvas');
		return false;
	},
	
	canvas_edit : function(session)
	{
		var size = document.getElementById('canvas-size').value;
		var ctype = document.getElementById('canvas-type').value;
		XWind.show('/networks/' + this.GID + '?xh=edit_canvas&do=edit&size=' + size + '&ctype=' + ctype +'&cols=' + this.ColumnSetupId + '&session=' + session);
		var objCanvas = document.getElementById('networks-canvas');
		objCanvas.style.height = size + 'px';
		return false;
	},
	
	canvas_typeChanged : function(obj)
	{
		if(obj.value == 1)
			document.getElementById('canvas-cols').style.display = 'block';
		else
			document.getElementById('canvas-cols').style.display = 'none';
	},
	
	canvas_selectSetup : function(id)
	{
		this.ColumnSetupId = id;
	},
	
	blocks_typeChanged : function(obj)
	{
		if(obj.value == 0 || obj.value == 1)
			document.getElementById('block-custom').style.display = 'block';
		else
			document.getElementById('block-custom').style.display = 'none';
			
		if(obj.value == 2)
			document.getElementById('block-image').style.display = 'block';
		else
			document.getElementById('block-image').style.display = 'none';
			
		if(obj.value != 0 && obj.value != 1 && obj.value != 2)
			document.getElementById('block-other').style.display = 'block';
		else
			document.getElementById('block-other').style.display = 'none';
	},
	
	blocks_moveUp : function(id, session)
	{
		this.X.reinit();
		this.X.setCallback(Networks.blocks_edit_callback);
		this.X.load('/networks/' + this.GID + '?xh=move_block&do=up&id=' + id + '&session=' + session, 'GET');
		return false;
	},
	
	blocks_moveDown : function(id, session)
	{
		this.X.reinit();
		this.X.setCallback(Networks.blocks_edit_callback);
		this.X.load('/networks/' + this.GID + '?xh=move_block&do=down&id=' + id + '&session=' + session, 'GET');
		return false;
	},
	
	blocks_moveLeft : function(id, session)
	{
		this.X.reinit();
		this.X.setCallback(Networks.blocks_edit_callback);
		this.X.load('/networks/' + this.GID + '?xh=move_block&do=left&id=' + id + '&session=' + session, 'GET');
		return false;
	},
	
	blocks_moveRight : function(id, session)
	{
		this.X.reinit();
		this.X.setCallback(Networks.blocks_edit_callback);
		this.X.load('/networks/' + this.GID + '?xh=move_block&do=right&id=' + id + '&session=' + session, 'GET');
		return false;
	},
		
	blocks_showAdd : function()
	{
		XWind.show('/networks/' + this.GID + '?xh=add_block');
		return false;
	},
	
	blocks_showEdit : function(id)
	{
		XWind.show('/networks/' + this.GID + '?xh=edit_block&id=' + id);
		return false;
	},
	
	blocks_delete : function(id, session)
	{
		if(!confirm('Are you sure you want to delete this block?'))
			return false;
		this.X.reinit();
		this.X.setCallback(Networks.blocks_edit_callback);
		this.X.load('/networks/' + this.GID + '?xh=delete_block&id=' + id + '&session=' + session, 'GET');
		return false;
	},
		
	blocks_add : function(session)
	{
		var imgid = document.getElementById('block-imageid').value;
		var type = document.getElementById('block-type').value;
		if(type == 2 && imgid == 0)
		{
			alert('You must select an image.');
			return false;
		}
		var data = 'type=' + type + '&name=' + document.getElementById('block-name').value + '&width=' + document.getElementById('block-width').value + '&height=' + document.getElementById('block-height').value + '&image_id=' + imgid + '&content=' + XH.makeUrlFriendly(document.getElementById('block-content').value);
		this.X.reinit();
		this.X.setCallback(Networks.blocks_add_callback);
		this.X.post('/networks/' + this.GID + '?xh=add_block&do=add&session=' + session, data);
		return false;
	},
	
	blocks_add_callback : function()
	{
		if(Networks.X.XH.readyState == 4 || Networks.X.XH.readyState == 'complete')
		{
			var r = Networks.X.XH.responseText;
			
			if(r != '0')
			{
				document.getElementById('networks-canvas').innerHTML = r;
			}
			else
				alert('Failed to add block.');
			XWind.close();
		}
	},
	
	blocks_edit : function(id, session)
	{
		var name = '';
		var objName = document.getElementById('block-name');
		if(objName)
			name = objName.value;
		var content = '';
		var objContent = document.getElementById('block-content');
		if(objContent)
			content = objContent.value;
		var imgid = 0;
		var objImg = document.getElementById('block-imageid');
		if(objImg)
			imgid = objImg.value;
		var data = 'width=' + document.getElementById('block-width').value + '&height=' + document.getElementById('block-height').value + '&name=' + name + '&image_id=' + imgid + '&content=' + XH.makeUrlFriendly(content);
		this.X.reinit();
		this.X.setCallback(Networks.blocks_edit_callback);
		this.X.post('/networks/' + this.GID + '?xh=edit_block&do=edit&id=' + id + '&session=' + session, data);
		return false;
	},
	
	blocks_edit_callback : function()
	{
		if(Networks.X.XH.readyState == 4 || Networks.X.XH.readyState == 'complete')
		{
			var r = Networks.X.XH.responseText;
			if(r != '0')
				document.getElementById('networks-canvas').innerHTML = r;
			if(XWind.Frame)
				XWind.close();
		}
	},
	
	music_showPlayer : function(target, width)
	{
		var s = new SWFObject("/flash/musicplayer/player.swf","playlist",width,"200","7");
		s.addParam("allowfullscreen","false");
		s.addVariable("file","/networks/" + this.GID + "?xh=playlist");
		s.addVariable("displayheight","0");
		s.addVariable("playlist", "bottom");
		s.addVariable("playlistsize", "180");
		s.addVariable("backcolor","0xf2f2f2");
		s.addVariable("frontcolor","0x000000");
		s.addVariable("lightcolor","0x999999");
		s.addVariable("width",width);
		s.addVariable("height","200");
		s.write(target);
	},
	
	fileman_showInfo : function(id)
	{
		XWind.show('/networks/' + this.GID + '?xh=fileman&do=show_info&id=' + id);
		return false;
	},
	
	fileman_imageChanged : function(obj)
	{
		this.X.reinit();
		this.X.setCallback(Networks.fileman_imageChanged_callback);
		this.X.load('/networks/' + this.GID + '?xh=fileman&do=get_image_info&id=' + obj.value, 'GET');	
	},
	
	fileman_imageChanged_callback : function()
	{
		if(Networks.X.XH.readyState == 4 || Networks.X.XH.readyState == 'complete')
		{
			var r = Networks.X.XH.responseText;
			var thumb = '/images/photos-default.jpg';
			if(r.length > 0 && r != 0)
			{
				var params = r.split(';');
				thumb = params[0];
			}
			document.getElementById('fileman-preview').src = thumb;
		}
	},
	
	msg_hide : function()
	{
		var _self = this;
		setTimeout(function() { _self.msg_hide_timeout(); }, 3000);
	},
	
	msg_hide_timeout : function()
	{
		var _self = this;
		opacity('networks-edmsg', 100, 0, 1000);
		setTimeout(function() { _self.msg_hide_end(); }, 1000);
	},
	
	msg_hide_end : function()
	{
		document.getElementById('networks-edmsg').style.display = 'none';
	},
	
	bg_edit : function(session)
	{
		var imgid = document.getElementById('block-imageid').value;
		var attachid = document.getElementById('bg-attach').value;
		var bgalt = document.getElementById('bg-alt').value;
		var bgcolor = document.getElementById('bg-color').value;
		XWind.show('/networks/' + this.GID + '/admin/?xh=edit_bg&do=edit&type=' + this.BGType + '&id=' + imgid + '&attach=' + attachid + '&bg_color=' + bgcolor + '&bg_alt=' + bgalt + '&session=' + session);
		return false;
	},
	
	bg_selectType : function(id)
	{
		this.BGType = id;
		document.getElementById('bg-sel_' + id).checked = true;
	},
	
	header_edit : function(session)
	{
		var imgid = document.getElementById('block-imageid').value;
		XWind.show('/networks/' + this.GID + '/admin/?xh=edit_header&do=edit&id=' + imgid + '&session=' + session);
		return false;
	},
	
	fileman_open : function()
	{
		window.open('/networks/' + this.GID + '/admin/manager/?sec=fileman');
		return false;
	},
	
	page_showEdit : function(pid)
	{
		loadTo('networks-page', '/networks/' + this.GID + '/admin/?xh=edit_page&id=' + pid, true);
		return false;
	},
	
	lists_addField : function()
	{
		var objList = document.getElementById('list-fields');
		var objName = document.getElementById('field-name');
		var objType = document.getElementById('field-type');
		var objReq = document.getElementById('field-required');
		
		var objItem = document.createElement('li');
		
		this.ListFields[this.ListFieldCount] = new Array(objName.value, objType.value, objReq.checked, objItem);
		
		var req = 0;
		
		if(objReq.checked)
			req = 1;
		
		objItem.setAttribute('id', 'list-field_' + this.ListFieldCount);
		objItem.innerHTML = '<input type="hidden" name="fields[' + this.ListFieldCount + ']" value="' + objName.value + ',' + objType.value + ',' + req + '" /><img src="/images/icons/delete.gif" border="0" alt="[DEL]" onclick="javascript:Networks.lists_removeField(' + this.ListFieldCount + ');" style="cursor: pointer;" /> ' + objName.value;
		objList.appendChild(objItem);
		
		this.ListFieldCount++;
		
		XWind.close();
		
		return false;
	},
	
	lists_removeField : function(idx)
	{
		var item = this.ListFields[idx];
		if(item)
		{
			var objList = document.getElementById('list-fields');
			objList.removeChild(item[3]);
			this.ListFields[idx] = null;
		}
		return false;
	},
	
	lists_create : function()
	{
		return true;	
	},
	
	store_itemSelected : function(obj)
	{
		this.SelectObject = obj;
		if(obj.value == 0)
			return false;
		this.X.reinit();
		this.X.setCallback(Networks.store_itemSelected_callback);
		this.X.load('/networks/?xh=get_item_info&gid=' + this.GID + '&iid=' + obj.value, 'GET');
	},
	
	store_itemSelected_callback : function()
	{
		if(Networks.X.XH.readyState == 4 || Networks.X.XH.readyState == 'complete')
		{
			var r = Networks.X.XH.responseText;
			
			var objList = document.getElementById('networks-itemlist');
			
			if(objList)
			{
				var params = r.split(';');
				var objItem = document.createElement('li');
				
				Networks.ItemCount++;
				
				Zoom.setPrice(Networks.VIP_PRICE * Networks.ItemCount);
				
				objItem.setAttribute('id', 'store-item_' + params[0]);
				objItem.innerHTML = '<input type="hidden" name="items[' + params[0] + ']" value="1" />' + params[1] + ' [ID: ' + params[0] + '] <img src="/images/icons/delete.gif" border="0" alt="" onclick="javascript:Networks.store_removeItemFromList(' + params[0] + ');" style="cursor: pointer;" />';
				objList.appendChild(objItem);
				
				Networks.SelectObject.options[Networks.SelectObject.selectedIndex].disabled = true;
			}
		}
	},
	
	store_removeItemFromList : function(id)
	{
		var objList = document.getElementById('networks-itemlist');
		var objItem = document.getElementById('store-item_' + id);
		if(objList && objItem)
		{
			this.ItemCount--;
			Zoom.setPrice(this.VIP_PRICE * this.ItemCount);
			objList.removeChild(objItem);
			for(var n = 0;n < this.SelectObject.length;n++)
			{
				if(this.SelectObject.options[n].value == id)
					this.SelectObject.options[n].disabled = false;
			}
		}
		return false;
	}
	
};



function doOfficePlannerAdd(gid)
{
	var name = document.getElementById('office-planner_name').value;
	var year = document.getElementById('office-planner_year').value;
	var month = document.getElementById('office-planner_month').value;
	var day = document.getElementById('office-planner_day').value;
	var hour = document.getElementById('office-planner_hour').value;
	var hourap = document.getElementById('office-planner_hour').value;
	var details = document.getElementById('office-planner_details').value;
	loadTo('office-content', '/office/' + gid + '?xh=tool&tool=planner&func=add&sub=submit&name=' + Base64.encode(name) + '&year=' + year + '&month=' + month + '&day=' + day + '&hour=' + hour + '&hourap=' + hourap + '&details=' + Base64.encode(details) + '&session=%(session)');
	return false;
}

function doOfficeSubmit(tool, func)
{
	document.getElementById('office-' + tool + '_func').value = func;
	document.getElementById('office-' + tool + '_form').submit();
	return false;
}

var Office =
{
	showTool : function(gid, tool, func)
	{
		loadTo('office-content', '/office/' + gid + '?xh=tool&tool=' + tool + '&func=' + func);
		return false;
	},
	
	doPostFunc : function(gid, func)
	{
		if(func == 'delete')
		{
			if(!confirm('Are you sure you want to delete these files?'))
				return false;
		}
		document.getElementById('office-func').value = func;
		document.getElementById('office-form').submit();
		return false;
	},
	
	showAlerts : function(gid)
	{
		loadTo('groops-alerts_' + gid, '/office/?xh=show_alerts&gid=' + gid);
		document.getElementById('groops-alerts_' + gid).style.visibility = 'visible';
		document.getElementById('groops-alerticon_' + gid).src = '/images/icons/alert_f.gif';
		return false;
	},
	
	showAnnouncement : function(gid)
	{
		loadTo('groops-announcement_' + gid, '/office/?xh=show_latest_announcement&gid=' + gid);
		document.getElementById('groops-announcement_' + gid).style.visibility = 'visible';
		return false;
	},
	
	disableButtons : function()
	{
		var obj = document.getElementById('office-buttons');
		if(obj)
			obj.innerHTML = '<img src="/images/loading.gif" border="0" alt="" /> Processing...';
	}
};



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).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)
}


function CPanel()
{
	var _self = this;
	
	this.X = new CXH();
	this.XON = new CXH();
	this.XOF = new CXH();
	this.XB = new CXH();
	this.XC = new CXH();
	this.LX = null;
	
	this.Delay = 3000;
	
	this.MenuUID = 0;
	this.MenuUser = null;
	this.MenuTimer = null;
	
	this.Icon = new CIcon();
	this.Icon.setList(new Array('/images/favicon.ico', '/images/favicon2.ico'));
	
	this.ReportsCount = 0;
	this.Mute = true;
	
	this.open = function()
	{
		window.open('/panel/', 'panel', 'width=220, height=400, scrollbars=0, resizable=0,status=0,menubar=0,location=0,toolbar=0');
		return false;
	}
	
	this.go = function(url)
	{
		window.open(url, 'parent');
		return false;
	}
	
	this.logout = function(session)
	{
		_self.LX = new CXH();
		_self.LX.setCallback(_self.logout_callback);
		_self.LX.load('/?header=_logout&session=' + session, 'GET');
		return false;
	}
	
	this.logout_callback = function()
	{
		if(_self.LX.XH.readyState == 4 || _self.LX.XH.readyState == 'complete')
		{
			document.location = '/panel/?logout=1';
		}
	}
	
	this.toggleList = function(name)
	{
		var obj = document.getElementById('panel-list_' + name);
		if(obj)
		{
			var iconObj = document.getElementById('panel-icon_' + name);
			if(obj.style.display == 'none')
			{			
				obj.style.display = 'block';
				iconObj.src = '/images/panel/expanded.gif';
			}
			else
			{
				obj.style.display = 'none';
				iconObj.src = '/images/panel/collapsed.gif';
			}
		}
		return false;
	}
	
	this.refresh = function()
	{
		_self.X.reinit();
		_self.X.setCallback(_self.refresh_callback);
		_self.X.load('/panel/?xh=quickview', 'GET');
		setTimeout(function() { _self.refresh(); }, _self.Delay);
	}
	
	this.refresh_callback = function()
	{
		if(_self.X.XH.readyState == 4 || _self.X.XH.readyState == 'complete')
		{
			var obj = document.getElementById('panel-list_quickview');
			obj.innerHTML = _self.X.XH.responseText;
		}
	}
	
	this.refresh2 = function()
	{
		_self.XON.reinit();
		_self.XON.setCallback(_self.refresh2_callback);
		_self.XON.load('/panel/?xh=online', 'GET');
		setTimeout(function() { _self.refresh2(); }, _self.Delay);
	}
	
	this.refresh2_callback = function()
	{
		if(_self.XON.XH.readyState == 4 || _self.XON.XH.readyState == 'complete')
		{
			var obj = document.getElementById('panel-list_online');
			obj.innerHTML = _self.XON.XH.responseText;
		}
	}
	
	this.refresh3 = function()
	{
		_self.XOF.reinit();
		_self.XOF.setCallback(_self.refresh3_callback);
		_self.XOF.load('/panel/?xh=offline', 'GET');
		setTimeout(function() { _self.refresh3(); }, _self.Delay);
	}
	
	this.refresh3_callback = function()
	{
		if(_self.XOF.XH.readyState == 4 || _self.XOF.XH.readyState == 'complete')
		{
			var obj = document.getElementById('panel-list_offline');
			obj.innerHTML = _self.XOF.XH.responseText;
		}
	}
	
	this.check = function()
	{
		_self.XB.reinit();
		_self.XB.setCallback(_self.check_callback);
		_self.XB.load('/panel/?xh=check','GET');
		setTimeout(function() { _self.check(); }, _self.Delay);
	}
	
	this.check_callback = function()
	{
		if(_self.XB.XH.readyState == 4 || _self.XB.XH.readyState == 'complete')
		{
			if(_self.XB.XH.responseText != '1')
			{
				//document.location = '/panel/?logout=1';
			}
		}
	}
	
	this.showFriendsMenu = function(obj, uid, uname)
	{
		var menuObj = document.getElementById('panel-popmenu');
		if(menuObj)
		{
			_self.hideFriendsMenu();
			var pos = getObjPosition(obj);
			menuObj.style.left = pos[0] + 'px';
			menuObj.style.top = (pos[1]-15) + 'px';
			menuObj.style.visibility = 'visible';
			_self.MenuUID = uid;
			_self.MenuUser = uname;
			_self.setMenuTimer();
		}
		return false;
	}
	
	this.setMenuTimer = function()
	{
		_self.MenuTimer = setTimeout(function() { _self.hideFriendsMenu(); }, 500);
	}
	
	this.cancelMenuTimer = function()
	{
		if(_self.MenuTimer)
			clearTimeout(_self.MenuTimer);
		_self.MenuTimer = null;
	}
	
	this.hideFriendsMenu = function()
	{
		var menuObj = document.getElementById('panel-popmenu');
		if(menuObj)
		{
			menuObj.style.visibility = 'hidden';
			_self.MenuUID = 0;
			_self.MenuUser = null;
		}
	}
	
	this.goIM = function()
	{
		IM.open(_self.MenuUID, _self.MenuUser);
		return false;
	}
	
	this.goProfile = function()
	{
		window.open('/' + _self.MenuUser, 'parent');
		return false;
	}
	
	this.goMessage = function()
	{
		window.open('/messages/?action=send&uid=' + _self.MenuUID, 'parent');
		return false;
	}
	
	this.checkRequests = function()
	{
		_self.XC.reinit();
		_self.XC.setCallback(_self.checkRequests_callback);
		_self.XC.load('/panel/?xh=request_count', 'GET');
		setTimeout(function() { _self.checkRequests(); }, _self.Delay);
	}
	
	this.checkRequests_callback = function()
	{
		if(_self.XC.XH.readyState == 4 || _self.XC.XH.readyState == 'complete')
		{
			var c = _self.XC.XH.responseText;
			if(c > 0)
			{
				if(document)
					document.title = '(' + c + ') Groopem Panel';
				_self.Icon.start();
				if(!_self.Mute && c > _self.ReportsCount)
					soundManager.play('PanelSound', '/media/mp3/im.mp3');
				self.ReportsCount = c;
			}
			else
			{
				if(document)
					document.title = 'Groopem Panel';
				_self.Icon.stop();
				_self.ReportsCount = 0;
			}
		}
	}
	
	this.begin = function()
	{
		Panel.refresh();
		Panel.refresh2();
		Panel.refresh3();
		Panel.check();
		Panel.checkRequests();
	}
	
}

var Panel = new CPanel();


var Planner =
{
	X : new CXH,
	MeetingID : 0,
	InviteList : new Array(),
	InviteCount : 0,

	addMeeting : function(gid, mid, session)
	{
		Planner.MeetingID = mid;
		Planner.X.reinit();
		Planner.X.setCallback(Planner.addMeeting_callback);
		Planner.X.load('/interact/?xh=events&func=add_remote&type=1&rid=' + mid + '&auxi=' + gid + '&session=' + session, 'GET');
		//Planner.X.load('/planner/?xh=add_meeting&gid=' + gid + '&meeting_id=' + mid + '&session=' + session, 'GET');
		return false;
	},
	
	addMeeting_callback : function()
	{
		if(Planner.X.XH.readyState == 4 || Planner.X.XH.readyState == 'complete')
		{
			var obj = document.getElementById('planner-add_meeting_' + Planner.MeetingID);
			if(obj)
			{
				var rT = Planner.X.XH.responseText;
				if(rT > 0)
					obj.innerHTML = '[added]';
				else if(rT == -4)
					obj.innerHTML = '[exists]';
				else
					obj.innerHTML = '[error '+ rT + ']';
			}
			Planner.MeetingID = 0;
		}
	},
	
	toggleUserToInvite : function(uid)
	{
		if(this.InviteList[uid])
		{
			this.InviteList[uid] = false;
			this.InviteCount--;
			document.getElementById('planner-user_' + uid).style.backgroundColor = '#f5f5f5';
			document.getElementById('planner-invite_' + uid).innerHTML = 'Invite';
		}
		else
		{
			this.InviteList[uid] = true;
			this.InviteCount++;
			document.getElementById('planner-user_' + uid).style.backgroundColor = '#eeffff';
			document.getElementById('planner-invite_' + uid).innerHTML = 'Uninvite';
		}
		return false;
	},
	
	sendInvitations : function()
	{
		var r = '';
		if(this.InviteCount > 0)
		{
			for(var n in this.InviteList)
			{
				var v = this.InviteList[n];
				if(v)
				{
					if(r.length > 0)
						r += ',';
					r += n;
				}
			}
			document.getElementById('planner-users').value = r;
			return true;
		}
		else
		{
			alert('Please choose which friends to invite.');
			return false;
		}
	}
};


var Profile =
{
	OldTab : null,
	X : new CXH,
	UID : 0,
	CommentFields : new Array('uid', 'session', 'parent', 'comment'),
	InsertType : null,
	InsertWnd : null,
	CurrentFID : 0,
	
	setUID : function(uid)
	{
		this.UID = uid;
	},

	tabClick : function(name)
	{
		var _self = this;
		var objTab = document.getElementById('profile-tab_' + name);
		
		
		if(!this.OldTab)
			this.OldTab = document.getElementById('profile-tab_recent');
		
		this.OldTab.className = '';
		objTab.className = 'current';
		this.OldTab = objTab;
		
		this.X.reinit();
		this.X.setCallback(_self.tabClick_Callback);
		this.X.load('/profile/?xh=tab&uid=' + this.UID + '&tab=' + name, 'GET');
		return false;
	},
	
	tabClick_Callback : function()
	{
		if(Profile.X.XH.readyState == 4 || Profile.X.XH.readyState == 'complete')
		{
			var objContent = document.getElementById('profile-content');
			if(objContent)
				objContent.innerHTML = Profile.X.XH.responseText;
		}
	},
	
	showPostComment : function(parent)
	{
		var _self = this;
		var objTab = document.getElementById('profile-tab_post');
		
		if(!this.OldTab)
			this.OldTab = document.getElementById('profile-tab_comments');
			
		this.OldTab.className = '';
		objTab.className = 'current';
		this.OldTab = objTab;
		
		this.X.reinit();
		this.X.setCallback(_self.tabClick_Callback);
		this.X.load('/profile/?xh=tab&uid=' + this.UID + '&tab=post&parent=' + parent, 'GET');
		return false;
	},
	
	deleteFriend : function(fid, session)
	{
		if(!confirm('Are you sure you want to delete this friend?'))
			return false;
		loadTo('profile-friend_' + fid, '/profile/?xh=delete_friend&fid=' + fid + '&session=' + session);
		setTimeout('Profile.deleteFriend_(' + fid + ')', 3000);
		return false;
	},
	
	deleteFriend_ : function(fid)
	{
		document.getElementById('profile-friend_' + fid).style.display = 'none';
	},
		
	doPostComment : function(f)
	{
		var _self = this;
		var data = '';
		
		document.getElementById('profile-buttons').innerHTML = '<img src="/images/loading.gif" border="0" alt="" /> Processing...';
		
		for(var n = 0; n < this.CommentFields.length; n++)
		{
			var val = this.getValue(this.CommentFields[n]);
			if(data.length > 0)
				data += '&';
			data += this.CommentFields[n] + '=' + val;
		}
		/*
		if(this.InsertType == 'image')
		{
			var w = document.getElementById('profile-dupload');
			w.innerHTML = '<iframe style="display: none;" src="about:blank" id="dupload" name="dupload" onload="Profile.DULoaded();"></iframe>';
			f.setAttribute('target', 'dupload');
			f.setAttribute('action', 'http://img1.groopem.com/comments_upload');
		
			return true;
		}
		else
		{
		*/
			this.X.reinit();
			this.X.setCallback(_self.tabClick_Callback);
			this.X.post('/profile/?xh=post_comment', data);
		//}
		return false;
	},
		
	DULoaded : function()
	{
		var i = document.getElementById('dupload');
		if(i.contentDocument)
			var d = i.contentDocument;
		else if(i.contentWindow)
			var d = i.contentWindow.document;
		else
			var d = window.frames['dupload'].document;
		
		//if(d.location.href && d.location.href == 'about:blank')
		//	return;
		
		Profile.DUComplete();
	},
		
	DUComplete : function()
	{
		var _self = this;
		var data = '';
		
		for(var n = 0; n < this.CommentFields.length; n++)
		{
			var val = this.getValue(this.CommentFields[n]);
			if(data.length > 0)
				data += '&';
			data += this.CommentFields[n] + '=' + val;
		}
		
		if(this.InsertType == 'image')
		{
			this.X.reinit();
			this.X.setCallback(_self.tabClick_Callback);
			this.X.post('/profile/?xh=post_comment&type=image', data);
		}
	},
		
	insertClear : function()
	{
		//document.getElementById('profile-insert').innerHTML = '';
		this.InsertType = null;
		return false;
	},
		
	insertImage : function()
	{
		var _self = this;
		//this.insertClear();
		//document.getElementById('profile-insert').innerHTML = '<fieldset><legend>Image</legend><label>File:</label> <input type="file" name="image" class="text" size="40" /></fieldset><div id="profile-dupload"></div>';
		this.InsertType = 'image';
		this.InsertWnd = window.open('/comments/?xh=insert_image', 'commentsins', 'width=300, height=150, scrollbars=0, resizable=0,status=0,menubar=0,location=0,toolbar=0');
		this.insertImage_recheck();
		return false;
	},
	
	insertImage_recheck : function()
	{
		var _self = this;
		if(this.InsertWnd.closed)
		{
			_self.X.reinit();
			_self.X.setCallback(_self.insert_callback);
			_self.X.load('/comments/?xh=get_last_image', 'GET');
			return true;
		}
		else
			setTimeout('Profile.insertImage_recheck();', 500);
	},
	
	insert_callback : function()
	{
		if(Profile.X.XH.readyState == 4 || Profile.X.XH.readyState == 'complete')
		{
			var r = Profile.X.XH.responseText;
			if(r.length > 0)
			{
				if(Profile.InsertType == 'image')
				{
					insertText('comments_content', '[img]' + r + '[/img]');
				}
			}
			Profile.InsertType = null;
		}
	},
	
	insertVideo : function()
	{
		var _self = this;
		this.InsertType = 'video';
		this.InsertWnd = window.open('/comments/?xh=insert_video', 'commentsins', 'width=350, height=150, scrollbars=0, resizable=0,status=0,menubar=0,location=0,toolbar=0');
		return false;
	},
		
	getValue : function(name)
	{
		var objs = document.getElementsByName(name);
		if(objs.length < 1)
			return '';
		return objs[0].value;
	},
	
	setBestFriend : function(fid, session)
	{
		this.CurrentFID = fid;
		this.X.reinit();
		this.X.setCallback(Profile.setBestFriend_callback);
		this.X.load('/profile/?xh=set_best_friend&fid=' + fid + '&session=' + session, 'GET');
		return false;
	},
	
	setBestFriend_callback : function()
	{
		if(Profile.X.XH.readyState == 4 || Profile.X.XH.readyState == 'complete')
		{
			var r = Profile.X.XH.responseText;
			
			var obj = document.getElementById('profile-best');
			if(obj)
				obj.innerHTML = r;
		}
	}
};


var QuickView =
{
	X : new CXH,
	X2 : new CXH,
	Timer : null,
	Timer2 : null,
	Interval : 2000,
	Stage : 1,
	Exclude : null,
	
	refresh : function(exclude)
	{
		this.Exclude = exclude;
		if(this.Stage != 1)
		{
			this.Timer = setTimeout('QuickView.refresh(\'' + exclude + '\');', this.Interval);
			return;
		}
		QuickView.X.reinit();
		QuickView.X.setCallback(QuickView.refresh_);
		QuickView.X.load('/world/?xh=quickview&exclude=' + exclude, 'GET');
		this.Timer = setTimeout('QuickView.refresh2(\'' + exclude + '\');', this.Interval);
	},
		
	refresh_ : function()
	{
		if(QuickView.X.XH.readyState == 4 || QuickView.X.XH.readyState == 'complete')
		{
			var txt = QuickView.X.XH.responseText;
			var obj = document.getElementById('menu-qv-top');
			if(obj)
				obj.innerHTML = txt;
			QuickView.Stage = 2;
		}
	},
	
	refresh2 : function(exclude)
	{
		if(this.Stage != 2)
		{
			this.Timer = setTimeout('QuickView.refresh2(\'' + exclude + '\');', this.Interval);
			return;
		}
		QuickView.X.reinit();
		QuickView.X.setCallback(QuickView.refresh2_callback);
		QuickView.X.load('/world/?xh=quickview_count&exclude=' + exclude, 'GET');
		this.Timer = setTimeout('QuickView.refresh(\'' + exclude + '\');', this.Interval);
	},
	
	refresh2_callback : function()
	{
		if(QuickView.X.XH.readyState == 4 || QuickView.X.XH.readyState == 'complete')
		{
			var txt = QuickView.X.XH.responseText;
			var obj = document.getElementById('qv-count');
			if(obj)
			{
				if(txt > 0)
					obj.innerHTML = '(' + txt + ')';
				else
					obj.innerHTML = '';
			}
			QuickView.Stage = 1;
		}
	},
	
	refreshOnline : function()
	{
		this.X2.reinit();
		this.X2.setCallback(QuickView.refreshOnline_callback);
		this.X2.load('/world/?xh=list_online', 'GET');
		this.Timer2 = setTimeout('QuickView.refreshOnline();', this.Interval);
	},
	
	refreshOnline_callback : function()
	{
		if(QuickView.X2.XH.readyState == 4 || QuickView.X2.XH.readyState == 'complete')
		{
			var txt = QuickView.X2.XH.responseText;
			
			var obj = document.getElementById('menu-qv-online');
			if(obj)
				obj.innerHTML = txt;
		}
	},
	
	stopRefresh : function()
	{
		if(this.Timer)
		{
			clearTimeout(this.Timer);
			clearTimeout(this.Timer2);
			this.Timer = null;
			this.Timer2 = null;
		}
	},
	
	startRefresh : function()
	{
		this.Stage = 1;
		this.Timer = setTimeout('QuickView.refresh(\'' + this.Exclude + '\');', this.Interval);
		this.Timer2 = setTimeout('QuickView.refreshOnline();', this.Interval);
	},
	
	adjustBar : function()
	{
		var props = getDocumentProps();
		var obj = document.getElementById('quick-bar');
		if(obj)
		{
			if(props[0] < 1024)
				obj.style.top = (props[1] - 38) + 'px';
			else
				obj.style.top = (props[1] - 22) + 'px';
		}
		obj = document.getElementById('menu-qv-top');
		if(obj)
		{
			if(props[0] < 1024)
				obj.style.top = (props[1] - 38 - 150) + 'px';
			else
				obj.style.top = (props[1] - 22 - 150) + 'px';
		}
		obj = document.getElementById('menu-qv-online');
		if(obj)
		{
			var tmp = getObjPosition(document.getElementById('quick-online'));
			obj.style.left = tmp[0] + 'px';
			if(props[0] < 1024)
				obj.style.top = (props[1] - 38 - 150) + 'px';
			else
				obj.style.top = (props[1] - 22 - 150) + 'px';
		}
	},
	
	hover : function()
	{
		document.getElementById('quick-bar').className = 'quick-bar_hover';
	},
	
	blur : function()
	{
		document.getElementById('quick-bar').className = 'quick-bar';
	}
	
};


var Reports =
{
	ListObjName : false,
	Delay : 5000,
	XH : null,

	initRefresh : function(objName)
	{
		if(!document.getElementById(objName))
			return false;
		Reports.ListObjName = objName;
		Reports.XH = new CXH;
		setTimeout('Reports.refresh();', Reports.Delay);
		return true;
	},
	
	refresh : function()
	{
		Reports.XH.reinit();
		Reports.XH.setCallback(Reports.callback);
		Reports.XH.load('/reports/?xh=report_list', 'GET');
		setTimeout('Reports.refresh();', Reports.Delay);
	},
	
	callback : function()
	{
		if(Reports.XH.XH.readyState == 4 || Reports.XH.XH.readyState == 'complete')
		{
			document.getElementById(Reports.ListObjName).innerHTML = Reports.XH.XH.responseText;
		}
	}
};



function CSlider(tId, pId, bId)
{
	this.targetId = tId;
	this.parentId = pId;
	this.buttonsId = bId;
	this.pageCount = 0;
	this.pages = new Array();
	this.images = new Array();
	this.smallImages = new Array();
	this.links = new Array();
	this.captions = new Array();
	this.currentPage = 0;
	this.type = 0;
	this.interval = 5000;
	this.loop = false;
	this.name = false;
}

CSlider.prototype.setInterval = function(i)
{
	this.interval = i;
}

CSlider.prototype.addPage = function(content, bgUrl, link, caption, smallBgUrl)
{
	this.pages[this.pageCount] = content;
	this.images[this.pageCount] = bgUrl;
	this.links[this.pageCount] = link;
	this.captions[this.pageCount] = caption;
	this.smallImages[this.pageCount] = smallBgUrl;
	this.pageCount++;
}

CSlider.prototype.bufferButtons = function()
{
	var obj = document.getElementById(this.buttonsId);
	if(obj)
	{
		var buttons = "";
		for(var n = 0; n < this.pageCount; n++)
		{
			buttons += "<a href=\"javascript:" + this.name + ".setPage(" + n + ", true);\">" + (n+1) + "</a> ";
		}
		obj.innerHTML = buttons;
	}
}

CSlider.prototype.setPage = function(id, stopSlider)
{
	var _self = this;
	if(id >= this.pageCount || id < 0)
		return false;
	this.currentPage = id;
	this.loop = !stopSlider;
	if(this.interval == 5000)
	{
		opacity(this.parentId, 100, 0, 500);
		setTimeout(function() { _self.switchPage(id); }, 500);
	}
	else
	{
		_self.switchPage(id);
	}
}

CSlider.prototype.begin = function()
{
	if(this.pageCount < 2)
		return;
	var _self = this;
	this.loop = true;
	setTimeout(function() { _self.nextPage(); }, this.interval);
}

CSlider.prototype.nextPage = function()
{
	var _self = this;
	if(!this.loop)
		return;
	this.currentPage++;
	if(this.currentPage >= this.pageCount)
		this.currentPage = 0;
	this.setPage(this.currentPage,false);
	setTimeout(function() { _self.nextPage(); }, this.interval);
}

CSlider.prototype.switchPage = function(id)
{
	if(this.type == 2)
	{
		document.getElementById(this.targetId).innerHTML = '<img src="' + this.pages[id] + '" border="0" alt="" style="margin: 0px auto;" />';
	}
	else if(this.type == 1)
	{
		document.getElementById(this.targetId).innerHTML = '<a href="#" onclick="window.open(\'' + this.links[id] + '\');"><img src="' + this.smallImages[id] + '" border="0" alt="" /></a>';
		//document.getElementById(this.parentId).style.backgroundImage = "url('" + this.smallImages[id] + "')";
	}
	else
	{
		document.getElementById(this.targetId).innerHTML = this.pages[id];
		document.getElementById(this.parentId).style.backgroundImage = "url('" + this.images[id] + "')";
	}
	//for(var n = 0; n < slider_pageCount; n++)
	//	document.getElementById('slide-button_' + id).style.backgroundColor = '#eeeeee';
	//document.getElementById('slide-button_' + id).style.backgroundColor = '#ffffff';
	if(this.interval == 5000)
		opacity(this.parentId, 0, 100, 500);
}

/*!
   SoundManager 2: Javascript Sound for the Web
   --------------------------------------------
   http://schillmania.com/projects/soundmanager2/

   Copyright (c) 2008, Scott Schiller. All rights reserved.
   Code licensed under the BSD License:
   http://schillmania.com/projects/soundmanager2/license.txt

   V2.94a.20090206
*/

var soundManager = null;

function SoundManager(smURL,smID) {
 
  this.flashVersion = 8;           // version of flash to require, either 8 or 9. Some API features require Flash 9.
  this.debugMode = false;           // enable debugging output (div#soundmanager-debug, OR console if available + configured)
  this.useConsole = false;          // use firebug/safari console.log()-type debug console if available
  this.consoleOnly = false;        // if console is being used, do not create/write to #soundmanager-debug
  this.waitForWindowLoad = false;  // force SM2 to wait for window.onload() before trying to call soundManager.onload()
  this.nullURL = 'null.mp3';       // path to "null" (empty) MP3 file, used to unload sounds (Flash 8 only)
  this.allowPolling = true;        // allow flash to poll for status update (required for "while playing", peak, sound spectrum functions to work.)
  this.useMovieStar = false;	   // enable support for Flash 9.0r115+ (codename "MovieStar") MPEG4 audio + video formats (AAC, M4V, FLV, MOV etc.)
  this.bgColor = '#ffffff';	   // movie (.swf) background color, useful if showing on-screen for video etc.
  this.useHighPerformance = false; // position:fixed flash movie gives increased js/flash speed
  this.flashLoadTimeout = 750;     // ms to wait for flash movie to load before failing (0 = infinity)

  this.defaultOptions = {
    'autoLoad': false,             // enable automatic loading (otherwise .load() will be called on demand with .play(), the latter being nicer on bandwidth - if you want to .load yourself, you also can)
    'stream': true,                // allows playing before entire file has loaded (recommended)
    'autoPlay': false,             // enable playing of file as soon as possible (much faster if "stream" is true)
    'onid3': null,                 // callback function for "ID3 data is added/available"
    'onload': null,                // callback function for "load finished"
    'whileloading': null,          // callback function for "download progress update" (X of Y bytes received)
    'onplay': null,                // callback for "play" start
    'onpause': null,               // callback for "pause"
    'onresume': null,              // callback for "resume" (pause toggle)
    'whileplaying': null,          // callback during play (position update)
    'onstop': null,                // callback for "user stop"
    'onfinish': null,              // callback function for "sound finished playing"
    'onbeforefinish': null,        // callback for "before sound finished playing (at [time])"
    'onbeforefinishtime': 5000,    // offset (milliseconds) before end of sound to trigger beforefinish (eg. 1000 msec = 1 second)
    'onbeforefinishcomplete':null, // function to call when said sound finishes playing
    'onjustbeforefinish':null,     // callback for [n] msec before end of current sound
    'onjustbeforefinishtime':200,  // [n] - if not using, set to 0 (or null handler) and event will not fire.
    'multiShot': true,             // let sounds "restart" or layer on top of each other when played multiple times, rather than one-shot/one at a time
    'position': null,              // offset (milliseconds) to seek to within loaded sound data.
    'pan': 0,                      // "pan" settings, left-to-right, -100 to 100
    'volume': 100                  // self-explanatory. 0-100, the latter being the max.
  };

  this.flash9Options = {           // flash 9-only options, merged into defaultOptions if flash 9 is being used
    'onbufferchange': null,	   // callback for "isBuffering" property change
    'isMovieStar': null,	   // "MovieStar" MPEG4 audio/video mode. Null (default) = auto detect MP4, AAC etc. based on URL. true = force on, ignore URL
    'usePeakData': false,          // enable left/right channel peak (level) data
    'useWaveformData': false,      // enable sound spectrum (raw waveform data) - WARNING: CPU-INTENSIVE: may set CPUs on fire.
    'useEQData': false             // enable sound EQ (frequency spectrum data) - WARNING: Also CPU-intensive.
  };

  this.movieStarOptions = {        // flash 9.0r115+ MPEG4 audio/video options, merged into defaultOptions if flash 9 + movieStar mode is enabled
    'onmetadata': null,		   // callback for when video width/height etc. are received
    'useVideo': false		   // if loading movieStar content, whether to show video
  };

  // jslint global declarations
  /*global sm2Debugger, alert, console, document, navigator, setTimeout, window */

  var SMSound = null; // defined later

  var _s = this;
  this.version = null;
  this.versionNumber = 'V2.94a.20090206';
  this.movieURL = null;
  this.url = null;
  this.altURL = null;
  this.swfLoaded = false;
  this.enabled = false;
  this.o = null;
  this.id = (smID||'sm2movie');
  this.oMC = null;
  this.sounds = {};
  this.soundIDs = [];
  this.muted = false;
  this.wmode = null;
  this.isIE = (navigator.userAgent.match(/MSIE/i));
  this.isSafari = (navigator.userAgent.match(/safari/i));
  this.isGecko = (navigator.userAgent.match(/gecko/i));
  this.debugID = 'soundmanager-debug';
  this._debugOpen = true;
  this._didAppend = false;
  this._appendSuccess = false;
  this._didInit = false;
  this._disabled = false;
  this._windowLoaded = false;
  this._hasConsole = (typeof console != 'undefined' && typeof console.log != 'undefined');
  this._debugLevels = ['log','info','warn','error'];
  this._defaultFlashVersion = 8;
  this._oRemoved = null;
  this._oRemovedHTML = null;

  var _$ = function(sID) {
    return document.getElementById(sID);
  };

  this.filePatterns = {
	flash8: /\.mp3(\?.*)?$/i,
	flash9: /\.mp3(\?.*)?$/i
  };

  this.netStreamTypes = ['aac','flv','mov','mp4','m4v','f4v','m4a','mp4v','3gp','3g2']; // Flash v9.0r115+ "moviestar" formats
  this.netStreamPattern = new RegExp('\\.('+this.netStreamTypes.join('|')+')(\\?.*)?$','i');

  this.filePattern = null;
  this.features = {
	buffering: false,
    peakData: false,
    waveformData: false,
    eqData: false,
    movieStar: false
  };

  this.sandbox = {
    'type': null,
    'types': {
      'remote': 'remote (domain-based) rules',
      'localWithFile': 'local with file access (no internet access)',
      'localWithNetwork': 'local with network (internet access only, no local access)',
      'localTrusted': 'local, trusted (local + internet access)'
    },
    'description': null,
    'noRemote': null,
    'noLocal': null
  };

  this._setVersionInfo = function() {
    if (_s.flashVersion != 8 && _s.flashVersion != 9) {
      alert('soundManager.flashVersion must be 8 or 9. "'+_s.flashVersion+'" is invalid. Reverting to '+_s._defaultFlashVersion+'.');
      _s.flashVersion = _s._defaultFlashVersion;
    }
    _s.version = _s.versionNumber+(_s.flashVersion==9?' (AS3/Flash 9)':' (AS2/Flash 8)');
    // set up default options
	if (_s.flashVersion > 8) {
	  _s.defaultOptions = _s._mergeObjects(_s.defaultOptions,_s.flash9Options);
	  _s.features.buffering = true;
	}
    if (_s.flashVersion > 8 && _s.useMovieStar) {
      // flash 9+ support for movieStar formats as well as MP3
      _s.defaultOptions = _s._mergeObjects(_s.defaultOptions,_s.movieStarOptions);
      _s.filePatterns.flash9 = new RegExp('\\.(mp3|'+_s.netStreamTypes.join('|')+')(\\?.*)?$','i');
      _s.features.movieStar = true;
    } else {
      _s.useMovieStar = false;
      _s.features.movieStar = false;
    }
    _s.filePattern = _s.filePatterns[(_s.flashVersion!=8?'flash9':'flash8')];
    _s.movieURL = (_s.flashVersion==8?'soundmanager2.swf':'soundmanager2_flash9.swf');
    _s.features.peakData = _s.features.waveformData = _s.features.eqData = (_s.flashVersion==9);
  };

  this._overHTTP = (document.location?document.location.protocol.match(/http/i):null);
  this._waitingforEI = false;
  this._initPending = false;
  this._tryInitOnFocus = (this.isSafari && typeof document.hasFocus == 'undefined');
  this._isFocused = (typeof document.hasFocus != 'undefined'?document.hasFocus():null);
  this._okToDisable = !this._tryInitOnFocus;

  this.useAltURL = !this._overHTTP; // use altURL if not "online"

  var flashCPLink = 'http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html';

  // --- public methods ---
  
  this.supported = function() {
    return (_s._didInit && !_s._disabled);
  };

  this.getMovie = function(smID) {
    return _s.isIE?window[smID]:(_s.isSafari?_$(smID)||document[smID]:_$(smID));
  };

  this.loadFromXML = function(sXmlUrl) {
    try {
      _s.o._loadFromXML(sXmlUrl);
    } catch(e) {
      _s._failSafely();
      return true;
    }
  };

  this.createSound = function(oOptions) {
    if (!_s._didInit) {
	  throw new Error('soundManager.createSound(): Not loaded yet - wait for soundManager.onload() before calling sound-related methods');
	}
    if (arguments.length == 2) {
      // function overloading in JS! :) ..assume simple createSound(id,url) use case
      oOptions = {'id':arguments[0],'url':arguments[1]};
    }
    var thisOptions = _s._mergeObjects(oOptions); // inherit SM2 defaults
    var _tO = thisOptions; // alias
    _s._wD('soundManager.createSound(): '+_tO.id+' ('+_tO.url+')',1);
    if (_s._idCheck(_tO.id,true)) {
      _s._wD('soundManager.createSound(): '+_tO.id+' exists',1);
      return _s.sounds[_tO.id];
    }
    if (_s.flashVersion > 8 && _s.useMovieStar) {
	  if (_tO.isMovieStar === null) {
	    _tO.isMovieStar = (_tO.url.match(_s.netStreamPattern)?true:false);
	  }
	  if (_tO.isMovieStar) {
	    _s._wD('soundManager.createSound(): using MovieStar handling');
	  }
	  if (_tO.isMovieStar && (_tO.usePeakData || _tO.useWaveformData || _tO.useEQData)) {
	    _s._wD('Warning: peak/waveform/eqData features unsupported for non-MP3 formats');
	    _tO.usePeakData = false;
		_tO.useWaveformData = false;
		_tO.useEQData = false;
	  }
    }
    _s.sounds[_tO.id] = new SMSound(_tO);
    _s.soundIDs[_s.soundIDs.length] = _tO.id;
    // AS2:
    if (_s.flashVersion == 8) {
      _s.o._createSound(_tO.id,_tO.onjustbeforefinishtime);
    } else {
      _s.o._createSound(_tO.id,_tO.url,_tO.onjustbeforefinishtime,_tO.usePeakData,_tO.useWaveformData,_tO.useEQData,_tO.isMovieStar,(_tO.isMovieStar?_tO.useVideo:false));
    }
    if (_tO.autoLoad || _tO.autoPlay) {
      // TODO: does removing timeout here cause problems?
        if (_s.sounds[_tO.id]) {
          _s.sounds[_tO.id].load(_tO);
        }
    }
    if (_tO.autoPlay) {
	  _s.sounds[_tO.id].play();
	}
    return _s.sounds[_tO.id];
  };

  this.createVideo = function(oOptions) {
    if (arguments.length==2) {
      oOptions = {'id':arguments[0],'url':arguments[1]};
    }
    if (_s.flashVersion >= 9) {
      oOptions.isMovieStar = true;
      oOptions.useVideo = true;
    } else {
      _s._wD('soundManager.createVideo(): flash 9 required for video. Exiting.',2);
      return false;
    }
    if (!_s.useMovieStar) {
      _s._wD('soundManager.createVideo(): MovieStar mode not enabled. Exiting.',2);
    }
    return _s.createSound(oOptions);
  };

  this.destroySound = function(sID,bFromSound) {
    // explicitly destroy a sound before normal page unload, etc.
    if (!_s._idCheck(sID)) {
      return false;
    }
    for (var i=0; i<_s.soundIDs.length; i++) {
      if (_s.soundIDs[i] == sID) {
	    _s.soundIDs.splice(i,1);
        continue;
      }
    }
    // conservative option: avoid crash with ze flash 8
    // calling destroySound() within a sound onload() might crash firefox, certain flavours of winXP + flash 8??
    // if (_s.flashVersion != 8) {
      _s.sounds[sID].unload();
    // }
    if (!bFromSound) {
      // ignore if being called from SMSound instance
      _s.sounds[sID].destruct();
    }
    delete _s.sounds[sID];
  };

  this.destroyVideo = this.destroySound;

  this.load = function(sID,oOptions) {
    if (!_s._idCheck(sID)) {
      return false;
    }
    _s.sounds[sID].load(oOptions);
  };

  this.unload = function(sID) {
    if (!_s._idCheck(sID)) {
      return false;
    }
    _s.sounds[sID].unload();
  };

  this.play = function(sID,oOptions) {
    if (!_s._idCheck(sID)) {
      if (typeof oOptions != 'Object') {
		oOptions = {url:oOptions}; // overloading use case: play('mySound','/path/to/some.mp3');
	  }
      if (oOptions && oOptions.url) {
        // overloading use case, creation + playing of sound: .play('someID',{url:'/path/to.mp3'});
        _s._wD('soundController.play(): attempting to create "'+sID+'"',1);
        oOptions.id = sID;
        _s.createSound(oOptions);
      } else {
        return false;
      }
    }
    _s.sounds[sID].play(oOptions);
  };

  this.start = this.play; // just for convenience

  this.setPosition = function(sID,nMsecOffset) {
    if (!_s._idCheck(sID)) {
      return false;
    }
    _s.sounds[sID].setPosition(nMsecOffset);
  };

  this.stop = function(sID) {
    if (!_s._idCheck(sID)) {
	  return false;
	}
    _s._wD('soundManager.stop('+sID+')',1);
    _s.sounds[sID].stop(); 
  };

  this.stopAll = function() {
    _s._wD('soundManager.stopAll()',1);
    for (var oSound in _s.sounds) {
      if (_s.sounds[oSound] instanceof SMSound) {
		_s.sounds[oSound].stop(); // apply only to sound objects
	  }
    }
  };

  this.pause = function(sID) {
    if (!_s._idCheck(sID)) {
	  return false;
	}
    _s.sounds[sID].pause();
  };

  this.pauseAll = function() {
    for (var i=_s.soundIDs.length; i--;) {
      _s.sounds[_s.soundIDs[i]].pause();
    }
  };

  this.resume = function(sID) {
    if (!_s._idCheck(sID)) {
	  return false;
	}
    _s.sounds[sID].resume();
  };

  this.resumeAll = function() {
    for (var i=_s.soundIDs.length; i--;) {
      _s.sounds[_s.soundIDs[i]].resume();
    }
  };

  this.togglePause = function(sID) {
    if (!_s._idCheck(sID)) {
	  return false;
	}
    _s.sounds[sID].togglePause();
  };

  this.setPan = function(sID,nPan) {
    if (!_s._idCheck(sID)) {
	  return false;
	}
    _s.sounds[sID].setPan(nPan);
  };

  this.setVolume = function(sID,nVol) {
    if (!_s._idCheck(sID)) {
	  return false;
	}
    _s.sounds[sID].setVolume(nVol);
  };

  this.mute = function(sID) {
	if (typeof sID != 'string') {
	  sID = null;
	}
    if (!sID) {
      _s._wD('soundManager.mute(): Muting all sounds');
      for (var i=_s.soundIDs.length; i--;) {
        _s.sounds[_s.soundIDs[i]].mute();
      }
      _s.muted = true;
    } else {
      if (!_s._idCheck(sID)) {
	    return false;
	  }
      _s._wD('soundManager.mute(): Muting "'+sID+'"');
      _s.sounds[sID].mute();
    }
  };

  this.muteAll = function() {
    _s.mute();
  };

  this.unmute = function(sID) {
    if (typeof sID != 'string') {
	  sID = null;
	}
    if (!sID) {
      _s._wD('soundManager.unmute(): Unmuting all sounds');
      for (var i=_s.soundIDs.length; i--;) {
        _s.sounds[_s.soundIDs[i]].unmute();
      }
      _s.muted = false;
    } else {
      if (!_s._idCheck(sID)) {
		return false;
	  }
      _s._wD('soundManager.unmute(): Unmuting "'+sID+'"');
      _s.sounds[sID].unmute();
    }
  };

  this.unmuteAll = function() {
    _s.unmute();
  };

  this.getMemoryUse = function() {
    if (_s.flashVersion == 8) {
      // not supported in Flash 8
      return 0;
    }
    if (_s.o) {
      return parseInt(_s.o._getMemoryUse(),10);
    }
  };

  this.setPolling = function(bPolling) {
    if (!_s.o || !_s.allowPolling) {
	  return false;
	}
    _s.o._setPolling(bPolling);
  };

  this.disable = function(bNoDisable) {
    // destroy all functions
    if (typeof bNoDisable == 'undefined') {
      bNoDisable = false;
    }
    if (_s._disabled) {
	  return false;
    }
    _s._disabled = true;
    _s._wD('soundManager.disable(): Shutting down',1);
    for (var i=_s.soundIDs.length; i--;) {
      _s._disableObject(_s.sounds[_s.soundIDs[i]]);
    }
    _s.initComplete(bNoDisable); // fire "complete", despite fail
    // _s._disableObject(_s); // taken out to allow reboot()
  };

  this.canPlayURL = function(sURL) {
    return (sURL?(sURL.match(_s.filePattern)?true:false):null);	
  };

  this.getSoundById = function(sID,suppressDebug) {
    if (!sID) {
	  throw new Error('SoundManager.getSoundById(): sID is null/undefined');
	}
    var result = _s.sounds[sID];
    if (!result && !suppressDebug) {
      _s._wD('"'+sID+'" is an invalid sound ID.',2);
      // soundManager._wD('trace: '+arguments.callee.caller);
    }
    return result;
  };

  this.onload = function() {
    // window.onload() equivalent for SM2, ready to create sounds etc.
    // this is a stub - you can override this in your own external script, eg. soundManager.onload = function() {}
    soundManager._wD('<em>Warning</em>: soundManager.onload() is undefined.',2);
  };

  this.onerror = function() {
    // stub for user handler, called when SM2 fails to load/init
  };

  // --- "private" methods ---

  this._idCheck = this.getSoundById;

  var _doNothing = function() {
    return false;
  };
  _doNothing._protected = true;

  this._disableObject = function(o) {
    for (var oProp in o) {
      if (typeof o[oProp] == 'function' && typeof o[oProp]._protected == 'undefined') {
		o[oProp] = _doNothing;
	  }
    }
    oProp = null;
  };

  this._failSafely = function(bNoDisable) {
    // general failure exception handler
    if (typeof bNoDisable == 'undefined') {
      bNoDisable = false;
    }
    if (!_s._disabled || bNoDisable) {
      _s._wD('soundManager: Failed to initialise.',2);
      _s.disable(bNoDisable);
    }
  };
  
  this._normalizeMovieURL = function(smURL) {
    var urlParams = null;
    if (smURL) {
      if (smURL.match(/\.swf(\?.*)?$/i)) {
        urlParams = smURL.substr(smURL.toLowerCase().lastIndexOf('.swf?')+4);
        if (urlParams) {
          return smURL; // assume user knows what they're doing
        }
      } else if (smURL.lastIndexOf('/') != smURL.length-1) {
        smURL = smURL+'/';
      }
    }
    return(smURL && smURL.lastIndexOf('/')!=-1?smURL.substr(0,smURL.lastIndexOf('/')+1):'./')+_s.movieURL;
  };

  this._getDocument = function() {
    return (document.body?document.body:(document.documentElement?document.documentElement:document.getElementsByTagName('div')[0]));
  };

  this._getDocument._protected = true;

  this._createMovie = function(smID,smURL) {
    if (_s._didAppend && _s._appendSuccess) {
	  return false; // ignore if already succeeded
	}
    if (window.location.href.indexOf('debug=1')+1) {
	  _s.debugMode = true; // allow force of debug mode via URL
	}
    _s._didAppend = true;
	
    // safety check for legacy (change to Flash 9 URL)
    _s._setVersionInfo();
    var remoteURL = (smURL?smURL:_s.url);
    var localURL = (_s.altURL?_s.altURL:remoteURL);
    _s.url = _s._normalizeMovieURL(_s._overHTTP?remoteURL:localURL);
    smURL = _s.url;

    var specialCase = null;

    if (_s.useHighPerformance && _s.useMovieStar) {
      specialCase = 'Note: disabling highPerformance, not applicable with movieStar mode on';
      _s.useHighPerformance = false;
    }

    _s.wmode = (_s.useHighPerformance && !_s.useMovieStar?'transparent':''); // wmode=opaque seems to break firefox/windows.

    var oEmbed = {
      name: smID,
      id: smID,
      src: smURL,
      width: '100%',
      height: '100%',
      quality: 'high',
      allowScriptAccess: 'always',
      bgcolor: _s.bgColor,
      pluginspage: 'http://www.macromedia.com/go/getflashplayer',
      type: 'application/x-shockwave-flash',
      wmode: _s.wmode
    };

    var oObject = {
      id: smID,
      data: smURL,
      type: 'application/x-shockwave-flash',
      width: '100%',
      height: '100%',
      wmode: _s.wmode
    };

    var oObjectParams = {
      movie: smURL,
      AllowScriptAccess: 'always',
      quality: 'high',
      bgcolor: _s.bgColor,
      wmode: _s.wmode
    };

    var oMovie = null;
    var tmp = null;

    if (_s.isIE) {
      // IE is "special".
      oMovie = document.createElement('div');
      var movieHTML = '<object id="'+smID+'" data="'+smURL+'" type="application/x-shockwave-flash" width="100%" height="100%"><param name="movie" value="'+smURL+'" /><param name="AllowScriptAccess" value="always" /><param name="quality" value="high" />'+(_s.useHighPerformance && !_s.useMovieStar?'<param name="wmode" value="'+_s.wmode+'" /> ':'')+'<param name="bgcolor" value="'+_s.bgColor+'" /><!-- --></object>';
    } else {
      oMovie = document.createElement('embed');
      for (tmp in oEmbed) {
	if (oEmbed.hasOwnProperty(tmp)) {
          oMovie.setAttribute(tmp,oEmbed[tmp]);
	}
      }
    }

    var oD = document.createElement('div');
    oD.id = _s.debugID+'-toggle';
    var oToggle = {
      position: 'fixed',
      bottom: '0px',
      right: '0px',
      width: '1.2em',
      height: '1.2em',
      lineHeight: '1.2em',
      margin: '2px',
      textAlign: 'center',
      border: '1px solid #999',
      cursor: 'pointer',
      background: '#fff',
      color: '#333',
      zIndex: 10001
    };

    oD.appendChild(document.createTextNode('-'));
    oD.onclick = _s._toggleDebug;
    oD.title = 'Toggle SM2 debug console';

    if (navigator.userAgent.match(/msie 6/i)) {
      oD.style.position = 'absolute';
      oD.style.cursor = 'hand';
    }

    for (tmp in oToggle) {
 	if (oToggle.hasOwnProperty(tmp)) {
          oD.style[tmp] = oToggle[tmp];
	}
    }

    var appXHTML = 'soundManager._createMovie(): appendChild/innerHTML set failed. May be app/xhtml+xml DOM-related.';

    var oTarget = _s._getDocument();

    if (oTarget) {
       
      _s.oMC = _$('sm2-container')?_$('sm2-container'):document.createElement('div');

      if (!_s.oMC.id) {
        _s.oMC.id = 'sm2-container';
        _s.oMC.className = 'movieContainer';
        // "hide" flash movie
        var s = null;
        var oEl = null;
        if (_s.useHighPerformance) {
          s = {
 	    	position: 'fixed',
		    width: '8px',
            height: '8px', // must be at least 6px for flash to run fast. odd? yes.
            bottom: '0px',
            left: '0px'
	    // zIndex:-1 // sit behind everything else - potentially dangerous/buggy?
          };
        } else {
          s = {
            position: 'absolute',
	    width: '1px',
            height: '1px',
            top: '-999px',
            left: '-999px'
          };
        }
        var x = null;
        for (x in s) {
		  if (s.hasOwnProperty(x)) {
            _s.oMC.style[x] = s[x];
		  }
        }
        try {
		  if (!_s.isIE) {
    	    _s.oMC.appendChild(oMovie);
		  }
          oTarget.appendChild(_s.oMC);
		  if (_s.isIE) {
			oEl = _s.oMC.appendChild(document.createElement('div'));
			oEl.className = 'sm2-object-box';
			oEl.innerHTML = movieHTML;
          }
          _s._appendSuccess = true;
        } catch(e) {
          throw new Error(appXHTML);
        }
      } else {
        // it's already in the document.
        _s.oMC.appendChild(oMovie);
		if (_s.isIE) {
		  oEl = _s.oMC.appendChild(document.createElement('div'));
		  oEl.className = 'sm2-object-box';
		  oEl.innerHTML = movieHTML;
        }
        _s._appendSuccess = true;
      }

      if (!_$(_s.debugID) && ((!_s._hasConsole||!_s.useConsole)||(_s.useConsole && _s._hasConsole && !_s.consoleOnly))) {
        var oDebug = document.createElement('div');
        oDebug.id = _s.debugID;
        oDebug.style.display = (_s.debugMode?'block':'none');
        if (_s.debugMode && !_$(oD.id)) {
          try {
            oTarget.appendChild(oD);
          } catch(e2) {
            throw new Error(appXHTML);
          }
          oTarget.appendChild(oDebug);
        }
      }
      oTarget = null;
    }

    if (specialCase) {
      _s._wD(specialCase);
    }

    _s._wD('-- SoundManager 2 '+_s.version+(_s.useMovieStar?', MovieStar mode':'')+(_s.useHighPerformance?', high performance mode':'')+' --',1);
    _s._wD('soundManager._createMovie(): Trying to load '+smURL+(!_s._overHTTP && _s.altURL?'(alternate URL)':''),1);
  };

  // aliased to this._wD()
  this._writeDebug = function(sText,sType,bTimestamp) {
    if (!_s.debugMode) {
	  return false;
	}
    if (typeof bTimestamp != 'undefined' && bTimestamp) {
      sText = sText + ' | '+new Date().getTime();
    }
    if (_s._hasConsole && _s.useConsole) {
      var sMethod = _s._debugLevels[sType];
      if (typeof console[sMethod] != 'undefined') {
	    console[sMethod](sText);
      } else {
        console.log(sText);
      }
      if (_s.useConsoleOnly) {
	return true;
      }
    }
    var sDID = 'soundmanager-debug';
    try {
      var o = _$(sDID);
      if (!o) {
		return false;
	  }
      var oItem = document.createElement('div');
      if (++_s._wdCount%2===0) {
	    oItem.className = 'sm2-alt';
      }
      // sText = sText.replace(/\n/g,'<br />');
      if (typeof sType == 'undefined') {
        sType = 0;
      } else {
        sType = parseInt(sType,10);
      }
      oItem.appendChild(document.createTextNode(sText));
      if (sType) {
        if (sType >= 2) {
		  oItem.style.fontWeight = 'bold';
		}
        if (sType == 3) {
		  oItem.style.color = '#ff3333';
		}
      }
      // o.appendChild(oItem); // top-to-bottom
      o.insertBefore(oItem,o.firstChild); // bottom-to-top
    } catch(e) {
      // oh well
    }
    o = null;
  };
  this._writeDebug._protected = true;
  this._wdCount = 0;
  this._wdCount._protected = true;
  this._wD = this._writeDebug;

  this._wDAlert = function(sText) { alert(sText); };

  if (window.location.href.indexOf('debug=alert')+1 && _s.debugMode) {
    _s._wD = _s._wDAlert;
  }

  this._toggleDebug = function() {
    var o = _$(_s.debugID);
    var oT = _$(_s.debugID+'-toggle');
    if (!o) {
	  return false;
	}
    if (_s._debugOpen) {
      // minimize
      oT.innerHTML = '+';
      o.style.display = 'none';
    } else {
      oT.innerHTML = '-';
      o.style.display = 'block';
    }
    _s._debugOpen = !_s._debugOpen;
  };

  this._toggleDebug._protected = true;

  this._debug = function() {
    _s._wD('--- soundManager._debug(): Current sound objects ---',1);
    for (var i=0,j=_s.soundIDs.length; i<j; i++) {
      _s.sounds[_s.soundIDs[i]]._debug();
    }
  };

  this._debugTS = function(sEventType,bSuccess,sMessage) {
    // troubleshooter debug hooks
    if (typeof sm2Debugger != 'undefined') {
	  try {
	    sm2Debugger.handleEvent(sEventType,bSuccess,sMessage);
	  } catch(e) {
	    // oh well	
	  }
    }
  };

  this._debugTS._protected = true;

  this._mergeObjects = function(oMain,oAdd) {
    // non-destructive merge
    var o1 = {}; // clone o1
    for (var i in oMain) {
	  if (oMain.hasOwnProperty(i)) {
        o1[i] = oMain[i];
	  }
    }
    var o2 = (typeof oAdd == 'undefined'?_s.defaultOptions:oAdd);
    for (var o in o2) {
      if (o2.hasOwnProperty(o) && typeof o1[o] == 'undefined') {
		o1[o] = o2[o];
	  }
    }
    return o1;
  };

  this.createMovie = function(sURL) {
    if (sURL) {
      _s.url = sURL;
    }
    _s._initMovie();
  };

  this.go = this.createMovie; // nice alias

  this._initMovie = function() {
    // attempt to get, or create, movie
    if (_s.o) {
	  return false; // may already exist
    }
    _s.o = _s.getMovie(_s.id); // (inline markup)
    if (!_s.o) {
      if (!_s.oRemoved) {
        // try to create
        _s._createMovie(_s.id,_s.url);
      } else {
        // try to re-append removed movie after reboot()
        if (!_s.isIE) {
          _s.oMC.appendChild(_s.oRemoved);
        } else {
          _s.oMC.innerHTML = _s.oRemovedHTML;
        }
        _s.oRemoved = null;
        _s._didAppend = true;
      }
      _s.o = _s.getMovie(_s.id);
    }
    if (_s.o) {
      _s._wD('soundManager._initMovie(): Got '+_s.o.nodeName+' element ('+(_s._didAppend?'created via JS':'static HTML')+')',1);
      if (_s.flashLoadTimeout>0) {
        _s._wD('soundManager._initMovie(): Waiting for ExternalInterface call from Flash..');
      }
    }
  };

  this.waitForExternalInterface = function() {
    if (_s._waitingForEI) {
	  return false;
	}
    _s._waitingForEI = true;
    if (_s._tryInitOnFocus && !_s._isFocused) {
      _s._wD('soundManager: Special case: Waiting for focus-related event..');
      return false;
    }
    if (_s.flashLoadTimeout>0) {
      if (!_s._didInit) {
        _s._wD('soundManager: Getting impatient, still waiting for Flash.. ;)');
      }
      setTimeout(function() {
        if (!_s._didInit) {
          _s._wD('soundManager: No Flash response within reasonable time after document load.\nPossible causes: Flash version under 8, no support, or Flash security denying JS-Flash communication.',2);
          if (!_s._overHTTP) {
          _s._wD('soundManager: Loading this page from local/network file system (not over HTTP?) Flash security likely restricting JS-Flash access. Consider adding current URL to "trusted locations" in the Flash player security settings manager at '+flashCPLink+', or simply serve this content over HTTP.',2);
        }
        _s._debugTS('flashtojs',false,': Timed out'+(_s._overHTTP)?' (Check flash security)':' (No plugin/missing SWF?)');
      }
      // if still not initialized and no other options, give up
      if (!_s._didInit && _s._okToDisable) {
	_s._failSafely(true); // don't disable, for reboot()
      }
    },_s.flashLoadTimeout);
    } else if (!_s.didInit) {
      _s._wD('soundManager: Waiting indefinitely for Flash...');
    }
  };

  this.handleFocus = function() {
    if (_s._isFocused || !_s._tryInitOnFocus) {
	  return true;
	}
    _s._okToDisable = true;
    _s._isFocused = true;
    _s._wD('soundManager.handleFocus()');
    if (_s._tryInitOnFocus) {
      // giant Safari 3.1 hack - assume window in focus if mouse is moving, since document.hasFocus() not currently implemented.
      window.removeEventListener('mousemove',_s.handleFocus,false);
    }
    // allow init to restart
    _s._waitingForEI = false;
    setTimeout(_s.waitForExternalInterface,500);
    // detach event
    if (window.removeEventListener) {
      window.removeEventListener('focus',_s.handleFocus,false);
    } else if (window.detachEvent) {
      window.detachEvent('onfocus',_s.handleFocus);
    }
  };

  this.initComplete = function(bNoDisable) {
    if (_s._didInit) {
	  return false;
	}
    _s._didInit = true;
    _s._wD('-- SoundManager 2 '+(_s._disabled?'failed to load':'loaded')+' ('+(_s._disabled?'security/load error':'OK')+') --',1);
    if (_s._disabled || bNoDisable) {
      _s._wD('soundManager.initComplete(): calling soundManager.onerror()',1);
      _s._debugTS('onload',false);
      _s.onerror.apply(window);
      return false;
    } else {
	  _s._debugTS('onload',true);
    }
    if (_s.waitForWindowLoad && !_s._windowLoaded) {
      _s._wD('soundManager: Waiting for window.onload()');
      if (window.addEventListener) {
        window.addEventListener('load',_s.initUserOnload,false);
      } else if (window.attachEvent) {
        window.attachEvent('onload',_s.initUserOnload);
      }
      return false;
    } else {
      if (_s.waitForWindowLoad && _s._windowLoaded) {
        _s._wD('soundManager: Document already loaded');
      }
      _s.initUserOnload();
    }
  };

  this.initUserOnload = function() {
    _s._wD('soundManager.initComplete(): calling soundManager.onload()',1);
    // call user-defined "onload", scoped to window
    _s.onload.apply(window);
    _s._wD('soundManager.onload() complete',1);
  };

  this.init = function() {
    _s._wD('-- soundManager.init() --');
    // called after onload()
    _s._initMovie();
    if (_s._didInit) {
      _s._wD('soundManager.init(): Already called?');
      return false;
    }
    // event cleanup
    if (window.removeEventListener) {
      window.removeEventListener('load',_s.beginDelayedInit,false);
    } else if (window.detachEvent) {
      window.detachEvent('onload',_s.beginDelayedInit);
    }
    try {
      _s._wD('Attempting to call Flash from JS..');
      _s.o._externalInterfaceTest(false); // attempt to talk to Flash
      // _s._wD('Flash ExternalInterface call (JS-Flash) OK',1);
      if (!_s.allowPolling) {
	    _s._wD('Polling (whileloading/whileplaying support) is disabled.',1);
	  }
      _s.setPolling(true);
	  if (!_s.debugMode) {
		_s.o._disableDebug();
	  }
      _s.enabled = true;
      _s._debugTS('jstoflash',true);
    } catch(e) {
	  _s._debugTS('jstoflash',false);
      _s._failSafely(true); // don't disable, for reboot()
      _s.initComplete();
      return false;
    }
    _s.initComplete();
  };

  this.beginDelayedInit = function() {
    _s._wD('soundManager.beginDelayedInit()');
    _s._windowLoaded = true;
    setTimeout(_s.waitForExternalInterface,500);
    setTimeout(_s.beginInit,20);
  };

  this.beginInit = function() {
    if (_s._initPending) {
	  return false;
	}
    _s.createMovie(); // ensure creation if not already done
    _s._initMovie();
    _s._initPending = true;
    return true;
  };

  this.domContentLoaded = function() {
    _s._wD('soundManager.domContentLoaded()');
    if (document.removeEventListener) {
	  document.removeEventListener('DOMContentLoaded',_s.domContentLoaded,false);
	}
    _s.go();
  };

  this._externalInterfaceOK = function() {
    // callback from flash for confirming that movie loaded, EI is working etc.
    if (_s.swfLoaded) {
	  return false;
	}
    _s._wD('soundManager._externalInterfaceOK()');
    _s._debugTS('swf',true);
    _s._debugTS('flashtojs',true);
    _s.swfLoaded = true;
    _s._tryInitOnFocus = false;
    if (_s.isIE) {
      // IE needs a timeout OR delay until window.onload - may need TODO: investigating
      setTimeout(_s.init,100);
    } else {
      _s.init();
    }
  };

  this._setSandboxType = function(sandboxType) {
    var sb = _s.sandbox;
    sb.type = sandboxType;
    sb.description = sb.types[(typeof sb.types[sandboxType] != 'undefined'?sandboxType:'unknown')];
    _s._wD('Flash security sandbox type: '+sb.type);
    if (sb.type == 'localWithFile') {
      sb.noRemote = true;
      sb.noLocal = false;
      _s._wD('Flash security note: Network/internet URLs will not load due to security restrictions. Access can be configured via Flash Player Global Security Settings Page: http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html',2);
    } else if (sb.type == 'localWithNetwork') {
      sb.noRemote = false;
      sb.noLocal = true;
    } else if (sb.type == 'localTrusted') {
      sb.noRemote = false;
      sb.noLocal = false;
    }
  };

  this.reboot = function() {
    // attempt to reset and init SM2
    _s._wD('soundManager.reboot()');
    if (_s.soundIDs.length) {
      _s._wD('Destroying '+_s.soundIDs.length+' SMSound objects...');
    }
    for (var i=_s.soundIDs.length; i--;) {
      _s.sounds[_s.soundIDs[i]].destruct();
    }
    // trash ze flash
    try {
      if (_s.isIE) {
        _s.oRemovedHTML = _s.o.innerHTML;
      }
      _s.oRemoved = _s.o.parentNode.removeChild(_s.o);
      _s._wD('Flash movie removed.');
    } catch(e) {
      // uh-oh.
      _s._wD('Warning: Failed to remove flash movie.',2);
    }
    _s.enabled = false;
    _s._didInit = false;
    _s._waitingForEI = false;
    _s._initPending = false;
    _s._didInit = false;
    _s._didAppend = false;
    _s._appendSuccess = false;
    _s._didInit = false;
    _s._disabled = false;
    _s._waitingforEI = true;
    _s.swfLoaded = false;
    _s.soundIDs = {};
    _s.sounds = [];
    _s.o = null;
    _s._wD('soundManager: Rebooting...');
    window.setTimeout(function() {
      soundManager.beginDelayedInit();
    },20);
  };

  this.destruct = function() {
    _s._wD('soundManager.destruct()');
    _s.disable(true);
  };
  
  // SMSound (sound object)
  
  SMSound = function(oOptions) {
  var _t = this;
  this.sID = oOptions.id;
  this.url = oOptions.url;
  this.options = _s._mergeObjects(oOptions);
  this.instanceOptions = this.options; // per-play-instance-specific options
  this._iO = this.instanceOptions; // short alias

  // assign property defaults (volume, pan etc.)
  this.pan = this.options.pan;
  this.volume = this.options.volume;

  this._debug = function() {
    if (_s.debugMode) {
    var stuff = null;
    var msg = [];
    var sF = null;
    var sfBracket = null;
    var maxLength = 64; // # of characters of function code to show before truncating
    for (stuff in _t.options) {
      if (_t.options[stuff] !== null) {
        if (_t.options[stuff] instanceof Function) {
	      // handle functions specially
	      sF = _t.options[stuff].toString();
	      sF = sF.replace(/\s\s+/g,' '); // normalize spaces
	      sfBracket = sF.indexOf('{');
	      msg[msg.length] = ' '+stuff+': {'+sF.substr(sfBracket+1,(Math.min(Math.max(sF.indexOf('\n')-1,maxLength),maxLength))).replace(/\n/g,'')+'... }';
	    } else {
	      msg[msg.length] = ' '+stuff+': '+_t.options[stuff];
	    }
      }
    }
    _s._wD('SMSound() merged options: {\n'+msg.join(', \n')+'\n}');
    }
  };

  this._debug();

  this.id3 = {
   /* 
    Name/value pairs set via Flash when available - see reference for names:
    http://livedocs.macromedia.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001567.html
    (eg., this.id3.songname or this.id3['songname'])
   */
  };

  this.resetProperties = function(bLoaded) {
    _t.bytesLoaded = null;
    _t.bytesTotal = null;
    _t.position = null;
    _t.duration = null;
    _t.durationEstimate = null;
    _t.loaded = false;
    _t.playState = 0;
    _t.paused = false;
    _t.readyState = 0; // 0 = uninitialised, 1 = loading, 2 = failed/error, 3 = loaded/success
    _t.muted = false;
    _t.didBeforeFinish = false;
    _t.didJustBeforeFinish = false;
    _t.isBuffering = false;
    _t.instanceOptions = {};
    _t.instanceCount = 0;
    _t.peakData = {
      left: 0,
      right: 0
    };
    _t.waveformData = [];
    _t.eqData = [];
  };

  _t.resetProperties();

  // --- public methods ---

  this.load = function(oOptions) {
    if (typeof oOptions != 'undefined') {
      _t._iO = _s._mergeObjects(oOptions);
      _t.instanceOptions = _t._iO;
    } else {
      oOptions = _t.options;
      _t._iO = oOptions;
      _t.instanceOptions = _t._iO;
    } 
    if (typeof _t._iO.url == 'undefined') {
      _t._iO.url = _t.url;
    }
    _s._wD('soundManager.load(): '+_t._iO.url,1);
    if (_t._iO.url == _t.url && _t.readyState !== 0 && _t.readyState != 2) {
      _s._wD('soundManager.load(): current URL already assigned.',1);
      return false;
    }
    _t.loaded = false;
    _t.readyState = 1;
    _t.playState = 0; // (oOptions.autoPlay?1:0); // if autoPlay, assume "playing" is true (no way to detect when it actually starts in Flash unless onPlay is watched?)
    try {
      if (_s.flashVersion==8) {
        _s.o._load(_t.sID,_t._iO.url,_t._iO.stream,_t._iO.autoPlay,(_t._iO.whileloading?1:0));
      } else {
        _s.o._load(_t.sID,_t._iO.url,_t._iO.stream?true:false,_t._iO.autoPlay?true:false); // ,(_tO.whileloading?true:false)
        if (_t._iO.isMovieStar && _t._iO.autoLoad && !_t._iO.autoPlay) {
          // special case: MPEG4 content must start playing to load, then pause to prevent playing.
          _t.pause();
        }
      }
    } catch(e) {
      _s._wD('SMSound.load(): Exception: JS-Flash communication failed, or JS error.',2);
      _s._debugTS('onload',false);
      _s.onerror();
      _s.disable();
    }

  };

  this.unload = function() {
    // Flash 8/AS2 can't "close" a stream - fake it by loading an empty MP3
    // Flash 9/AS3: Close stream, preventing further load
    if (_t.readyState !== 0) {
      _s._wD('SMSound.unload(): "'+_t.sID+'"');
      if (_t.readyState != 2) { // reset if not error
        _t.setPosition(0,true); // reset current sound positioning
      }
      _s.o._unload(_t.sID,_s.nullURL);
      // reset load/status flags
      _t.resetProperties();
    }
  };

  this.destruct = function() {
    // kill sound within Flash
    _s._wD('SMSound.destruct(): "'+_t.sID+'"');
    _s.o._destroySound(_t.sID);
    _s.destroySound(_t.sID,true); // ensure deletion from controller
  };

  this.play = function(oOptions) {
    if (!oOptions) {
	  oOptions = {};
    }
    _t._iO = _s._mergeObjects(oOptions,_t._iO);
    _t._iO = _s._mergeObjects(_t._iO,_t.options);
    _t.instanceOptions = _t._iO;
    if (_t.playState == 1) {
      var allowMulti = _t._iO.multiShot;
      if (!allowMulti) {
        _s._wD('SMSound.play(): "'+_t.sID+'" already playing (one-shot)',1);
        return false;
      } else {
        _s._wD('SMSound.play(): "'+_t.sID+'" already playing (multi-shot)',1);
      }
    }
    if (!_t.loaded) {
      if (_t.readyState === 0) {
        _s._wD('SMSound.play(): Attempting to load "'+_t.sID+'"',1);
        // try to get this sound playing ASAP
        _t._iO.stream = true;
        _t._iO.autoPlay = true;
        // TODO: need to investigate when false, double-playing
        // if (typeof oOptions.autoPlay=='undefined') _tO.autoPlay = true; // only set autoPlay if unspecified here
        _t.load(_t._iO); // try to get this sound playing ASAP
      } else if (_t.readyState == 2) {
        _s._wD('SMSound.play(): Could not load "'+_t.sID+'" - exiting',2);
        return false;
      } else {
        _s._wD('SMSound.play(): "'+_t.sID+'" is loading - attempting to play..',1);
      }
    } else {
      _s._wD('SMSound.play(): "'+_t.sID+'"');
    }
    if (_t.paused) {
      _t.resume();
    } else {
      _t.playState = 1;
      if (!_t.instanceCount || _s.flashVersion == 9) {
		_t.instanceCount++;
	  }
      _t.position = (typeof _t._iO.position != 'undefined' && !isNaN(_t._iO.position)?_t._iO.position:0);
      if (_t._iO.onplay) {
		_t._iO.onplay.apply(_t);
	  }
      _t.setVolume(_t._iO.volume,true); // restrict volume to instance options only
      _t.setPan(_t._iO.pan,true);
      _s.o._start(_t.sID,_t._iO.loop||1,(_s.flashVersion==9?_t.position:_t.position/1000));
    }
  };

  this.start = this.play; // just for convenience

  this.stop = function(bAll) {
    if (_t.playState == 1) {
      _t.playState = 0;
      _t.paused = false;
      // if (_s.defaultOptions.onstop) _s.defaultOptions.onstop.apply(_s);
      if (_t._iO.onstop) {
		_t._iO.onstop.apply(_t);
	  }
      _s.o._stop(_t.sID,bAll);
      _t.instanceCount = 0;
      _t._iO = {};
      // _t.instanceOptions = _t._iO;
    }
  };

  this.setPosition = function(nMsecOffset,bNoDebug) {
    if (typeof nMsecOffset == 'undefined') {
      nMsecOffset = 0;
    }
    var offset = Math.min(_t.duration,Math.max(nMsecOffset,0)); // position >= 0 and <= current available (loaded) duration
    _t._iO.position = offset;
    if (!bNoDebug) {
      _s._wD('SMSound.setPosition('+nMsecOffset+')'+(nMsecOffset != offset?', corrected value: '+offset:''));
    }
    _s.o._setPosition(_t.sID,(_s.flashVersion==9?_t._iO.position:_t._iO.position/1000),(_t.paused||!_t.playState)); // if paused or not playing, will not resume (by playing)
  };

  this.pause = function() {
    if (_t.paused || _t.playState === 0) {
	  return false;
	}
    _s._wD('SMSound.pause()');
    _t.paused = true;
    _s.o._pause(_t.sID);
    if (_t._iO.onpause) {
	  _t._iO.onpause.apply(_t);
	}
  };

  this.resume = function() {
    if (!_t.paused || _t.playState === 0) {
	  return false;
	}
    _s._wD('SMSound.resume()');
    _t.paused = false;
    _s.o._pause(_t.sID); // flash method is toggle-based (pause/resume)
    if (_t._iO.onresume) {
	  _t._iO.onresume.apply(_t);
	}
  };

  this.togglePause = function() {
    _s._wD('SMSound.togglePause()');
    if (!_t.playState) {
      _t.play({position:(_s.flashVersion==9?_t.position:_t.position/1000)});
      return false;
    }
    if (_t.paused) {
      _t.resume();
    } else {
      _t.pause();
    }
  };

  this.setPan = function(nPan,bInstanceOnly) {
    if (typeof nPan == 'undefined') {
      nPan = 0;
    }
    if (typeof bInstanceOnly == 'undefined') {
      bInstanceOnly = false;
    }
    _s.o._setPan(_t.sID,nPan);
    _t._iO.pan = nPan;
    if (!bInstanceOnly) {
      _t.pan = nPan;
    }
  };

  this.setVolume = function(nVol,bInstanceOnly) {
    if (typeof nVol == 'undefined') {
      nVol = 100;
    }
    if (typeof bInstanceOnly == 'undefined') {
      bInstanceOnly = false;
    }
    _s.o._setVolume(_t.sID,(_s.muted&&!_t.muted)||_t.muted?0:nVol);
    _t._iO.volume = nVol;
    if (!bInstanceOnly) {
      _t.volume = nVol;
    }
  };

  this.mute = function() {
    _t.muted = true;
    _s.o._setVolume(_t.sID,0);
  };

  this.unmute = function() {
    _t.muted = false;
    var hasIO = typeof _t._iO.volume != 'undefined';
    _s.o._setVolume(_t.sID,hasIO?_t._iO.volume:_t.options.volume);
  };

  // --- "private" methods called by Flash ---

  this._whileloading = function(nBytesLoaded,nBytesTotal,nDuration) {
    if (!_t._iO.isMovieStar) {
      _t.bytesLoaded = nBytesLoaded;
      _t.bytesTotal = nBytesTotal;
      _t.duration = Math.floor(nDuration);
      _t.durationEstimate = parseInt((_t.bytesTotal/_t.bytesLoaded)*_t.duration,10); // estimate total time (will only be accurate with CBR MP3s.)
      if (_t.readyState != 3 && _t._iO.whileloading) {
	_t._iO.whileloading.apply(_t);
      }
    } else {
      _t.bytesLoaded = nBytesLoaded;
      _t.bytesTotal = nBytesTotal;
      _t.duration = Math.floor(nDuration);
      _t.durationEstimate = _t.duration;
      if (_t.readyState != 3 && _t._iO.whileloading) {
	_t._iO.whileloading.apply(_t);
      }
    }
  };

  this._onid3 = function(oID3PropNames,oID3Data) {
    // oID3PropNames: string array (names)
    // ID3Data: string array (data)
    _s._wD('SMSound._onid3(): "'+this.sID+'" ID3 data received.');
    var oData = [];
    for (var i=0,j=oID3PropNames.length; i<j; i++) {
      oData[oID3PropNames[i]] = oID3Data[i];
      // _s._wD(oID3PropNames[i]+': '+oID3Data[i]);
    }
    _t.id3 = _s._mergeObjects(_t.id3,oData);
    if (_t._iO.onid3) {
      _t._iO.onid3.apply(_t);
    }
  };

  this._whileplaying = function(nPosition,oPeakData,oWaveformData,oEQData) {
    if (isNaN(nPosition) || nPosition === null) {
      return false; // Flash may return NaN at times
    }
    _t.position = nPosition;
	if (_t._iO.usePeakData && typeof oPeakData != 'undefined' && oPeakData) {
	  _t.peakData = {
	   left: oPeakData.leftPeak,
	   right: oPeakData.rightPeak
	  };
	}
	if (_t._iO.useWaveformData && typeof oWaveformData != 'undefined' && oWaveformData) {
	  _t.waveformData = oWaveformData;
	  /*
	  _t.spectrumData = {
	   left: oSpectrumData.left.split(','),
	   right: oSpectrumData.right.split(',')
	  }
	  */
	}
	if (_t._iO.useEQData && typeof oEQData != 'undefined' && oEQData) {
	  _t.eqData = oEQData;
	}
    if (_t.playState == 1) {
      if (_t._iO.whileplaying) {
	_t._iO.whileplaying.apply(_t); // flash may call after actual finish
      }
      if (_t.loaded && _t._iO.onbeforefinish && _t._iO.onbeforefinishtime && !_t.didBeforeFinish && _t.duration-_t.position <= _t._iO.onbeforefinishtime) {
        _s._wD('duration-position &lt;= onbeforefinishtime: '+_t.duration+' - '+_t.position+' &lt= '+_t._iO.onbeforefinishtime+' ('+(_t.duration-_t.position)+')');
        _t._onbeforefinish();
      }
    }
  };

  this._onload = function(bSuccess) {
    bSuccess = (bSuccess==1?true:false);
    _s._wD('SMSound._onload(): "'+_t.sID+'"'+(bSuccess?' loaded.':' failed to load? - '+_t.url),(bSuccess?1:2));
    if (!bSuccess) {
      if (_s.sandbox.noRemote === true) {
        _s._wD('SMSound._onload(): Reminder: Flash security is denying network/internet access',1);
      }
      if (_s.sandbox.noLocal === true) {
        _s._wD('SMSound._onload(): Reminder: Flash security is denying local access',1);
      }
    }
    _t.loaded = bSuccess;
    _t.readyState = bSuccess?3:2;
    if (_t._iO.onload) {
      _t._iO.onload.apply(_t);
    }
  };

  this._onbeforefinish = function() {
    if (!_t.didBeforeFinish) {
      _t.didBeforeFinish = true;
      if (_t._iO.onbeforefinish) {
        _s._wD('SMSound._onbeforefinish(): "'+_t.sID+'"');
        _t._iO.onbeforefinish.apply(_t);
      }
    }
  };

  this._onjustbeforefinish = function(msOffset) {
    // msOffset: "end of sound" delay actual value (eg. 200 msec, value at event fire time was 187)
    if (!_t.didJustBeforeFinish) {
      _t.didJustBeforeFinish = true;
      if (_t._iO.onjustbeforefinish) {
        _s._wD('SMSound._onjustbeforefinish(): "'+_t.sID+'"');
        _t._iO.onjustbeforefinish.apply(_t);
      }
    }
  };

  this._onfinish = function() {
    // sound has finished playing

    // TODO: calling user-defined onfinish() should happen after setPosition(0)
    // OR: onfinish() and then setPosition(0) is bad.

    if (_t._iO.onbeforefinishcomplete) {
      _t._iO.onbeforefinishcomplete.apply(_t);
    }
    // reset some state items
    _t.didBeforeFinish = false;
    _t.didJustBeforeFinish = false;
    if (_t.instanceCount) {
      _t.instanceCount--;
      if (!_t.instanceCount) {
        // reset instance options
        // _t.setPosition(0);
        _t.playState = 0;
        _t.paused = false;
        _t.instanceCount = 0;
        _t.instanceOptions = {};
        if (_t._iO.onfinish) {
          _s._wD('SMSound._onfinish(): "'+_t.sID+'"');
          _t._iO.onfinish.apply(_t);
        }
      }
    } else {
      // _t.setPosition(0);
    }
  };

  this._onmetadata = function(oMetaData) {
    // movieStar mode only
    _s._wD('SMSound.onmetadata()');
    // Contains a subset of metadata. Note that files may have their own unique metadata.
    // http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000267.html
    if (!oMetaData.width && !oMetaData.height) {
	  _s._wD('No width/height given, assuming defaults');
	  oMetaData.width = 320;
	  oMetaData.height = 240;
    }
    _t.metadata = oMetaData; // potentially-large object from flash
    _t.width = oMetaData.width;
    _t.height = oMetaData.height;
    if (_t._iO.onmetadata) {
      _s._wD('SMSound._onmetadata(): "'+_t.sID+'"');
      _t._iO.onmetadata.apply(_t);
    }
    _s._wD('SMSound.onmetadata() complete');
  };

  this._onbufferchange = function(bIsBuffering) {
    if (bIsBuffering == _t.isBuffering) {
      // ignore initial "false" default, if matching
      return false;
    }
    _t.isBuffering = (bIsBuffering==1?true:false);
    if (_t._iO.onbufferchange) {
      _s._wD('SMSound._onbufferchange(): '+bIsBuffering);
      _t._iO.onbufferchange.apply(_t);
    }
  };

  }; // SMSound()

  // register a few event handlers
  if (window.addEventListener) {
    window.addEventListener('focus',_s.handleFocus,false);
    window.addEventListener('load',_s.beginDelayedInit,false);
    window.addEventListener('unload',_s.destruct,false);
    if (_s._tryInitOnFocus) {
      window.addEventListener('mousemove',_s.handleFocus,false); // massive Safari focus hack
    }
  } else if (window.attachEvent) {
    window.attachEvent('onfocus',_s.handleFocus);
    window.attachEvent('onload',_s.beginDelayedInit);
    window.attachEvent('unload',_s.destruct);
  } else {
    // no add/attachevent support - safe to assume no JS -> Flash either.
    _s._debugTS('onload',false);
    soundManager.onerror();
    soundManager.disable();
  }

  if (document.addEventListener) {
	document.addEventListener('DOMContentLoaded',_s.domContentLoaded,false);
  }

} // SoundManager()

soundManager = new SoundManager();
soundManager.url = '/flash/soundmanager/';


var StackEm =
{
	X : new CXH(),
	XL : new CXH(),
	XR : new CXH(),
	XU : new CXH(),
	UpdateTimer : null,
	
	shuffle : function()
	{
		var country = document.getElementById('country').value;
		var gender = document.getElementById('gender_id').value;
		var fromAge = document.getElementById('from_age').value;
		var toAge = document.getElementById('to_age').value;
		
		var data = 'country=' + country + '&gender=' + gender + '&from_age=' + fromAge + '&to_age=' + toAge;
		
		this.X.reinit();
		this.X.setCallback(StackEm.shuffle_callback);
		this.X.post('/interact/?xh=stackem&action=shuffle', data);
		
		return false;
	},
	
	shuffle_callback : function()
	{
		if(StackEm.X.XH.readyState == 4 || StackEm.X.XH.readyState == 'complete')
		{
			var r = StackEm.X.XH.responseText;
			var obj = document.getElementById('stackem-shuffle');
			if(obj)
				obj.innerHTML = r;
		}
	},
	
	setGender : function(id)
	{
		document.getElementById('gender_id').value = id;
	},
	
	stack : function(tid, session)
	{
		if(!confirm('Are you sure you want to stack this user?'))
			return false;
		clearTimeout(this.UpdateTimer);
		this.UpdateTimer = null;
		this.XU.reinit();
		this.XU.setCallback(StackEm.update_callback);
		this.XU.load('/interact/?xh=stackem&action=stack&tid=' + tid + '&session=' + session, 'GET');
		this.updateLog();
		return false;
	},
	
	unStack : function(tid, session)
	{
		if(!confirm('Are you sure you want to remove this user from your stack?'))
			return false;
		clearTimeout(this.UpdateTimer);
		this.UpdateTimer = null;
		this.XU.reinit();
		this.XU.setCallback(StackEm.update_callback);
		this.XU.load('/interact/?xh=stackem&action=unstack&tid=' + tid + '&session=' + session, 'GET');
		this.updateLog();
		return false;
	},
	
	remove : function(tid, session)
	{
		if(!confirm('Are you sure you want to drop from this stack?'))
			return false;
		clearTimeout(this.UpdateTimer);
		this.UpdateTimer = null;
		this.XU.reinit();
		this.XU.setCallback(StackEm.update_callback);
		this.XU.load('/interact/?xh=stackem&action=remove&tid=' + tid + '&session=' + session, 'GET');
		this.updateLog();
		return false;
	},
	
	update : function()
	{
		this.XU.reinit();
		this.XU.setCallback(StackEm.update_callback);
		this.XU.load('/interact/?xh=stackem&action=update', 'GET');
		return false;
	},
	
	update_callback : function()
	{
		if(StackEm.XU.XH.readyState == 4 || StackEm.XU.XH.readyState == 'complete')
		{
			var r = StackEm.XU.XH.responseText;
			var obj = document.getElementById('stackem-stack');
			if(obj)
			{
				obj.innerHTML = r;
				StackEm.UpdateTimer = setTimeout('StackEm.update();', 5000);
			}
		}
	},
	
	updateRequests : function()
	{
		var _self = this;
		this.XR.reinit();
		this.XR.setCallback(StackEm.updateRequests_callback);
		this.XR.load('/interact/?xh=stackem&action=requests', 'GET');
		setTimeout(function() { _self.updateRequests(); }, 5000);
	},
	
	updateRequests_callback : function()
	{
		if(StackEm.XR.XH.readyState == 4 || StackEm.XR.XH.readyState == 'complete')
		{
			var r = StackEm.XR.XH.responseText;
			var obj = document.getElementById('stackem-stackers');
			if(obj)
				obj.innerHTML = r;
		}
	},
	
	updateLog : function()
	{
		this.XL.reinit();
		this.XL.setCallback(StackEm.updateLog_callback);
		this.XL.load('/interact/?xh=stackem&action=log', 'GET');
		return false;
	},
	
	updateLog_callback : function()
	{
		if(StackEm.XL.XH.readyState == 4 || StackEm.XL.XH.readyState == 'complete')
		{
			var r = StackEm.XL.XH.responseText;
			var obj = document.getElementById('stackem-log');
			if(obj)
				obj.innerHTML = r;
		}
	}
};


var Status =
{
	
	showChange : function()
	{
		loadTo('status-my', '/status/?xh=show_change', true);
		return false;
	},
	
	change : function(session)
	{
		var obj = document.getElementById('status-msg');
		loadTo('status-my', '/status/?xh=change&msg=' + Base64.encode(obj.value) + '&session=' + session, true);
		return false;
	}
	
};

/**
 * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
 *
 * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 */
if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!document.getElementById){return;}this.DETECT_KEY=_a?_a:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="<embed type=\"application/x-shockwave-flash\" src=\""+this.getAttribute("swf")+"\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\"";_19+=" id=\""+this.getAttribute("id")+"\" name=\""+this.getAttribute("id")+"\" ";var _1a=this.getParams();for(var key in _1a){_19+=[key]+"=\""+_1a[key]+"\" ";}var _1c=this.getVariablePairs().join("&");if(_1c.length>0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="<object id=\""+this.getAttribute("id")+"\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\">";_19+="<param name=\"movie\" value=\""+this.getAttribute("swf")+"\" />";var _1d=this.getParams();for(var key in _1d){_19+="<param name=\""+key+"\" value=\""+_1d[key]+"\" />";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+="<param name=\"flashvars\" value=\""+_1f+"\" />";}_19+="</object>";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.major<fv.major){return false;}if(this.major>fv.major){return true;}if(this.minor<fv.minor){return false;}if(this.minor>fv.minor){return true;}if(this.rev<fv.rev){return false;}return true;};deconcept.util={getRequestParameter:function(_2b){var q=document.location.search||document.location.hash;if(_2b==null){return q;}if(q){var _2d=q.substring(1).split("&");for(var i=0;i<_2d.length;i++){if(_2d[i].substring(0,_2d[i].indexOf("="))==_2b){return _2d[i].substring((_2d[i].indexOf("=")+1));}}}return "";}};deconcept.SWFObjectUtil.cleanupSWFs=function(){var _2f=document.getElementsByTagName("OBJECT");for(var i=_2f.length-1;i>=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;

var UEnc =
{
	encode : function(str)
	{
		str = Base64.encode(str);
		str = str.replace(/\+/g, '-');
		str = str.replace(/\//g, '_');
		str = str.replace(/=/g, '.');
		return str;
	},
	
	decode : function(str)
	{
		str = str.replace(/-/g, '+');
		str = str.replace(/_/g, '/');
		str = str.replace(/\./g, '=');
		return Base64.decode(str);
	}
};


var Vipo =
{
	X : new CXH,
	CurrentID : 0,
	
	showRater : function(cat, tid)
	{
		loadTo('vipo-' + cat + '-' + tid, '/vipo/?xh=show_rater&cat=' + cat + '&tid=' + tid, true);
		return false;
	},
	
	showRating : function(cat, tid)
	{
		loadTo('vipo-' + cat + '-' + tid, '/vipo/?xh=show_rating&cat=' + cat + '&tid=' + tid, true);
		return false;
	},
	
	rate : function(cat, tid, r, session)
	{
		loadTo('vipo-' + cat + '-' + tid, '/vipo/?xh=rate&cat=' + cat + '&tid=' + tid + '&r=' + r + '&session=' + session, true);
		return false;
	},
	
	showComments : function(id)
	{
		XWind.show('/vipo/?xh=comments&id=' + id);
		return false;
	},
	
	showAddComment : function(id)
	{
		XWind.show('/vipo/?xh=add_comment&id=' + id);
		return false;
	},
	
	comments_submit : function(id, session)
	{
		this.CurrentID = id;
		var data = 'sub=post&id=' + id + '&content=' + XH.filterParam(document.getElementById('comments_content').value);
		this.X.reinit();
		this.X.setCallback(Vipo.comments_submit_callback);
		this.X.post('/vipo/?xh=add_comment&session=' + session, data);
		return false;
	},
	
	comments_submit_callback : function()
	{
		if(Vipo.X.XH.readyState == 4 || Vipo.X.XH.readyState == 'complete')
		{
			var r = Vipo.X.XH.responseText;

			if(r > 0)
			{
				XWind.show('/vipo/?xh=comments&id=' + Vipo.CurrentID);
			}
		}
	}
};


var Wizard =
{
	X : new CXH,
	GoodIdent : false,

	revise : function(step)
	{
		var pass = true;
		if(step == 1)
		{
			if(document.getElementById('wizard-sitename').value.length < 2)
				pass = false;
			if(!this.GoodIdent)
				pass = false;
		}
		
		if(pass)
			button_enable('wizard-submit');
		else
			button_disable('wizard-submit');
	},
	
	checkName : function(obj)
	{
		if(obj.value.length < 2)
			document.getElementById('wizard-sitename_img').src = '/images/icons/error.png';
		else
			document.getElementById('wizard-sitename_img').src = '/images/icons/check.png';
		Wizard.revise(1);
	},
	
	checkIdent : function(obj)
	{
		if(obj.value.length < 1)
		{
			this.GoodIdent = false;
			return;
		}
		
		obj.value = obj.value.replace(/ /g,'');
		
		if(obj.value.length < 3)
		{
			document.getElementById('wizard-siteident_img').src = '/images/icons/error.png';
			this.GoodIdent = false;
			document.getElementById('wizard-siteident_msg').innerHTML = 'The address is too short.';
		}
		else
		{
			this.X.reinit();
			this.X.setCallback(Wizard.checkIdent_callback);
			this.X.load('/groops/?xh=check_ident&ident=' + obj.value, 'GET');
		}
	},
	
	checkIdent_callback : function()
	{
		if(Wizard.X.XH.readyState == 4 || Wizard.X.XH.readyState == 'complete')
		{
			var r = Wizard.X.XH.responseText;
			
			if(r == 0)
			{
				document.getElementById('wizard-siteident_img').src = '/images/icons/check.png';
				Wizard.GoodIdent = true;
				document.getElementById('wizard-siteident_msg').innerHTML = '';
			}
			else if(r == 1)
			{
				document.getElementById('wizard-siteident_img').src = '/images/icons/error.png';
				Wizard.GoodIdent = false;
				document.getElementById('wizard-siteident_msg').innerHTML = 'This address is already in use.';
			}
			else if(r == 2)
			{
				document.getElementById('wizard-siteident_img').src = '/images/icons/error.png';
				Wizard.GoodIdent = true;
				document.getElementById('wizard-siteident_msg').innerHTML = 'This address is reserved.';
			}
			else if(r == 3)
			{
				document.getElementById('wizard-siteident_img').src = '/images/icons/error.png';
				Wizard.GoodIdent = false;
				document.getElementById('wizard-siteident_msg').innerHTML = 'Address contains invalid characters.';
			}
			else
			{
				document.getElementById('wizard-siteident_img').src = '/images/icons/error.png';
				Wizard.GoodIdent = false;
				document.getElementById('wizard-siteident_msg').innerHTML = 'Error.';
			}
			Wizard.revise(1);
		}
	}
};


var World =
{
	Rows : new Array(),
	Categories : new Array(),
	X : new CXH(),
	
	showNextGroops : function(type, row)
	{
		World.Rows[row] += 3;
		loadTo('world-row_' + row, '/world/?xh=show&show=groops&type=' + type + '&parent=' + row + '&start=' + World.Rows[row]);
		return false;
	},
	
	showPrevGroops : function(type, row)
	{
		World.Rows[row] -= 3;
		loadTo('world-row_' + row, '/world/?xh=show&show=groops&type=' + type + '&parent=' + row + '&start=' + World.Rows[row]);
		return false;
	},
		
	showNextCGroops : function(type, row)
	{
		World.Categories[row] += 3;
		loadTo('world-cat_' + row, '/world/?xh=show&show=cgroops&type=' + type + '&parent=' + row + '&start=' + World.Categories[row]);
		return false;
	},
	
	showPrevCGroops : function(type, row)
	{
		World.Categories[row] -= 3;
		loadTo('world-cat_' + row, '/world/?xh=show&show=cgroops&type=' + type + '&parent=' + row + '&start=' + World.Categories[row]);
		return false;
	},
	
	refresh : function(gtype)
	{
		World.X.reinit();
		World.X.setCallback(World.refresh_);
		World.X.load('/world/?xh=query_online&gtype=' + gtype, 'GET');
		setTimeout('World.refresh(' + gtype + ');', 5000);
	},
	
	refresh_ : function()
	{
		if(World.X.XH.readyState == 4 || World.X.XH.readyState == 'complete')
		{
			var response = World.X.XH.responseText;
			var lst = response.split("|");
			for(var n = 0; n < lst.length; n++)
			{
				var tmp = lst[n].split(",");
				var obj = document.getElementById('world-uonline_' + tmp[0]);
				if(obj)
				{
					if(tmp[1] > 0)
						obj.innerHTML = tmp[1] + ' Online<br />';
					else
						obj.innerHTML = '';
				}
			}
		}
	}

};


function CXWind()
{
	var _self = this;
	this.URL = null;
	this.X = new CXH();
	this.BG = null;
	this.Frame = null;
	
	this.show = function(url)
	{
		_self.BG = document.getElementById('xwind-bg');
		_self.Frame = document.getElementById('xwind');
		_self.URL = url;
		_self.Frame.className = 'xwind';
		_self.BG.className = 'xwind-bg';
		_self.BG.style.height = window.screen.height + 'px';
		_self.Frame.innerHTML = '<img src="/images/loading.gif" border="0" alt="" /> Loading...';
		_self.X.reinit();
		_self.X.setCallback(_self.show_callback);
		_self.X.load(url, 'GET');
		return false;
	}
	
	this.showStatic = function(info)
	{
		_self.BG = document.getElementById('xwind-bg');
		_self.Frame = document.getElementById('xwind');
		_self.Frame.className = 'xwind';
		_self.BG.className = 'xwind-bg';
		_self.BG.style.height = window.screen.height + 'px';
		_self.Frame.innerHTML = info;
		return false;
	}
	
	this.show_callback = function()
	{
		if(_self.X.XH.readyState == 4 || _self.X.XH.readyState == 'complete')
		{
			_self.Frame.innerHTML = _self.X.XH.responseText;
		}
	}
	
	this.close = function()
	{
		_self.Frame.className = 'xwind-hidden';
		_self.BG.className = 'xwind-hidden';
		return false;
	}
}

XWind = new CXWind();


var Zoom =
{
	X : new CXH,
	Price : 0,
	Special : 0,
	
	setPrice : function(q)
	{
		this.Price = q;
		this.updatePrice();
	},
	
	updatePrice : function()
	{
		var data = 'price=' + this.Price;
		
		data += '&state=' + document.getElementById('zoom-state').value;
		data += '&zipcode=' + document.getElementById('zoom-zipcode').value;
		data += '&min_age=' + document.getElementById('zoom-fromage').value;
		data += '&max_age=' + document.getElementById('zoom-toage').value;
		data += '&gender=' + document.getElementById('zoom-gender').value;
		data += '&special=' + this.Special;
		
		this.X.reinit();
		this.X.setCallback(Zoom.updatePrice_callback);
		this.X.post('/market/?xh=zoom_price', data);
	},
	
	updatePrice_callback : function()
	{
		if(Zoom.X.XH.readyState == 4 || Zoom.X.XH.readyState == 'complete')
		{
			var r = Zoom.X.XH.responseText;
			
			var obj = document.getElementById('zoom-price');
			if(obj)
			{
				if(r == Zoom.Price)
					obj.innerHTML = 'Price: <b>' + r + ' USD</b>';
				else
					obj.innerHTML = '<i>NEW</i> Price: <b>' + r + ' USD</b>';
			}
		}
	},
	
	search : function()
	{
		var country = document.getElementById('zoom-country').value;
		var state = document.getElementById('zoom-state').value;
		var zipcode = document.getElementById('zoom-zipcode').value;
		var city = -1;
		var tmp = document.getElementById('field-city');
		if(tmp)
			city = tmp.value;
		
		this.X.reinit();
		this.X.setCallback(Zoom.search_callback);
		this.X.load('/market/?xh=zoom_search&country=' + country + '&state=' + state + '&zipcode=' + zipcode + '&city=' + city, 'GET');
		return false;
	},
	
	search_callback : function()
	{
		if(Zoom.X.XH.readyState == 4 || Zoom.X.XH.readyState == 'complete')
		{
			var r = Zoom.X.XH.responseText;
			
			
			Interact.tabClick(Interact.CurrentTab);
			
		}
	},
	
	browse_update : function(update)
	{
		var type = '';
		var category = '';
		var search = '';
		var minPrice = '';
		var maxPrice = '';
		
		var tmp = document.getElementById('field-category');
		if(tmp)
			category = tmp.value;
			
		tmp = document.getElementById('field-type');
		if(tmp)
			type = tmp.value;
			
		tmp = document.getElementById('field-search');
		if(tmp)
			search = tmp.value;
			
		tmp = document.getElementById('field-minprice');
		if(tmp)
			minPrice = tmp.value;
			
		tmp = document.getElementById('field-maxprice');
		if(tmp)
			maxPrice = tmp.value;
			
		document.getElementById('interact-content').innerHTML = '<img src="/images/loading.gif" border="0" alt="" /> Loading...';	
		this.X.reinit();
		this.X.setCallback(Zoom.search_callback);
		this.X.load('/market/?xh=zoom_browse&update=' + update + '&type=' + type + '&cat=' + category + '&min_price=' + minPrice + '&max_price=' + maxPrice + '&search=' + search, 'GET');
		return false;
	},
	
	browse_typeChanged : function(obj)
	{
		var type = obj.value;
		
		this.X.reinit();
		this.X.setCallback(Zoom.search_callback);
		this.X.load('/market/?xh=zoom_type&type=' + type, 'GET');
	},
	
	browse_categoryChanged : function(obj)
	{
		var category = obj.value;
		
		this.X.reinit();
		this.X.setCallback(Zoom.search_callback);
		this.X.load('/market/?xh=zoom_category&cat=' + category, 'GET');
	},
	
	browse_jobCategoryChanged : function(obj)
	{
		var category = obj.value;
		
		this.X.reinit();
		this.X.setCallback(Zoom.search_callback);
		this.X.load('/market/?xh=zoom_job_category&cat=' + category, 'GET');
	}
	
};

