
var g_bIE = (navigator.appName == "Microsoft Internet Explorer")? 1 : 0;


function ParseTpl(sString,hOptions)
{
	var g_nBroadcasterId = g_nBroadcasterId || null;
	var g_hUsers = g_hUsers || null;

	if ( ! sString ) return;
	if ( ! hOptions ) hOptions = {};

	if( ! hOptions['broadcaster_id'] ) { hOptions['broadcaster_id'] = 0; }

	var nId = hOptions['user_id'] || hOptions['broadcaster_id'] || g_nBroadcasterId;

	for(sKey in hOptions)
	{
		if( sString.indexOf(sKey.toUpperCase()) > -1 )
		{
			var re = new RegExp('%'+sKey.toUpperCase()+'%','g');
			sString = sString.replace(re, hOptions[sKey] || '');
		}
	}

	if( g_hUsers && g_hUsers[nId] )
	{
		for( sKey in g_hUsers[nId] )
		{
			if( sString.indexOf(sKey.toUpperCase()) > -1 )
			{
				var re = new RegExp('%'+sKey.toUpperCase()+'%','g');
				sString = sString.replace(re,g_hUsers[nId][sKey] || '');
			}
		}
	}

	sString = sString.replace(/%[A-Z0-9_]+%/g,'');

	return sString;
}

function A_Click( sWindowKey, sPage, sNewWindowParams, sLoadEvent, sTarget )
{
	if( ! sTarget ) { sTarget = '_blank'; }

	if( ! t.g_hWindows[ sWindowKey ] )
	{
		t.g_nPopupCount++;
		t.g_hWindows[sWindowKey] = window.open(sPage,'_blank',sNewWindowParams);
		t.g_hWindows[sWindowKey].name = sWindowKey;
		eval( sLoadEvent );
	}
	else
	{
		try
		{
			t.g_hWindows[sWindowKey].focus();
		} catch(oError) { }

		return false;
	}
}

var g_xPos;
var g_yPos;
var g_dQuadY;
var g_dQuadX;
document.onmousemove = MouseTracker;
g_bMouseTrackerPause = 0;
function MouseTracker(e,sMode)
{
	if( g_bMouseTrackerPause )
	{
		return;
	}

	g_bMouseTrackerPause = 1;
	setTimeout("g_bMouseTrackerPause = 0;",100);

	var nDocY = document.body.clientHeight;
	var nDocX = document.body.clientWidth;

	var nMouseY = g_yPos - document.body.scrollTop;
	var nMouseX = g_xPos - document.body.scrollLeft;

	g_dQuadY = nMouseY / nDocY;
	g_dQuadX = nMouseX / nDocX;

	if( g_bIE && event && event.clientX )
	{
		g_xPos = event.clientX + document.body.scrollLeft;
		g_yPos = event.clientY + document.body.scrollTop;
	}
	else if( e && e.clientX )
	{
		g_xPos = e.clientX + window.pageXOffset;
		g_yPos = e.clientY + window.pageYOffset;
	}

//	window.status = "Top: " + g_xPos + " : " + g_yPos + " - " + FindAbsoluteOffset('main').x + " : " + FindAbsoluteOffset('main').y + ' : ' + location.href;
}

function FindAbsoluteOffset(sId)
{
	var nTotalX = IdCache(sId).offsetLeft;
	var nTotalY = IdCache(sId).offsetTop;

	var oElement = IdCache(sId);

	for(a=0;a<20;a++)
	{
		if (oElement.parentNode)
		{
			oElement = oElement.parentNode;

//alert( a + " : " + oElement.id + " : " + oElement.offsetTop + " : " + oElement.tagName + " : " + oElement.sourceIndex );
//if (oElement.id=='main_table')
// for(sK in oElement)
// {
//	 alert("main_table: " + sK + " : " + oElement[sK] );
// }
			if (oElement.tagName == 'TR')
			{
				nTotalX += oElement.offsetLeft;
				nTotalY += oElement.offsetTop;
			}
		}
		else
		{
			break;
		}
	}

	return { x: nTotalX, y: nTotalY };
}

var g_hnCompress = {};
var g_hnCompressTimer = {};
var g_hnLimit = {};
function CompressLimit(sCall,nCompTimer,nLimTimer)
{
	nCompTimer = nCompTimer || 10;
	nLimTimer = nLimTimer || 500;

	if( ! g_hnCompress[ sCall ] ) g_hnCompress[ sCall ] = 0;

	// compress rapid requests
	g_hnCompress[ sCall ]++;
	if(g_hnCompress[ sCall ] == 1)
	{
		g_hnCompressTimer[ sCall ] = setTimeout("g_hnCompress[\"" + sCall + "\"] = -1; CompressLimit(\"" + sCall + "\","+nCompTimer+","+nLimTimer+");",nCompTimer);
		return false;
	}
	else if( g_hnCompress[ sCall ] > 1 )
	{
		return false;
	}

	// cap the rate of requests
	g_hnLimit[ sCall ]++;
	if(g_hnLimit[ sCall ] == 1)
	{
		setTimeout("g_hnLimit[\"" + sCall + "\"] = -1;",nLimTimer);
	}
	else if(g_hnLimit[ sCall ] == 3)
	{
		setTimeout("CompressLimit(\"" + sCall + "\","+nCompTimer+","+nLimTimer+");",nLimTimer);
		return false;
	}
	else if(g_hnLimit[ sCall ] > 3)
	{
		return false;
	}

	g_hnCompress[ sCall ] = -1;
	eval( sCall );
}

function containsDOM(container, containee) {
	var isParent = false;
	do {
		if ((isParent = container == containee))
			break;
		containee = containee.parentNode;
	}
	while (containee != null);
	return isParent;
}

function checkMouseEnter(element, evt) {
	if (element.contains && evt.fromElement) {
		return !element.contains(evt.fromElement);
	}
	else if (evt.relatedTarget) {
		return !containsDOM(element, evt.relatedTarget);
	}
}

function checkMouseLeave(element, evt) {
	if (element.contains && evt.toElement) {
		return !element.contains(evt.toElement);
	}
	else if (evt.relatedTarget) {
		return !containsDOM(element, evt.relatedTarget);
	}
}

function createRequestObject()
{
	if(window.navigator.appName.indexOf('Internet Explorer') > -1)
		return new ActiveXObject('Microsoft.XMLHTTP');
	else
		return new XMLHttpRequest();
}

function Pad(sString,nWidth,cChar,sDirection)
{
	if( typeof cChar == 'undefined' )
	{
		cChar = ' ';
	}

	if( typeof(sString) == 'undefined')
	{
		return;
	}

	sString = sString.toString();

	var nDec = '';
	var cSign = '';
	if( sString.match(/^[\d\.\-]+$/) )
	{
		if(sString.charAt(0) == '-')
		{
			sString = sString.substr(1,sString.length);
			cSign = '-';
		}

		if(sString.indexOf('.') == -1)
		{
			sString += '.';
		}

		nDec = sString.split('.')[1];
		sString = sString.split('.')[0];
	}

	while (sString.length < nWidth)
	{
		if( sDirection == 'right' )
		{
			sString = sString + cChar;
		}
		else
		{
			sString = cChar + sString;
		}
	}

	//if( sString.match(/^[\d\.]+$/) )
	if( sString.match(/\d/) )
	{
		sString = cSign + sString;
		if( nDec )
		{
			sString += '.' + nDec;
		}
	}

	return sString;
}

var g_hSetHTML_Cache = {};
var g_hSetHTML_CacheBlacklist = {
	message_bar: 1,
	lounge_video_cycler_interval: 1,
	lounge_auto_click_link: 1
};

var g_hSetHTML_Profile = {};

function SetHTML(Arg1,Arg2,Arg3)
{
	if (g_hSetHTML_Profile[Arg1] && g_hSetHTML_Profile[Arg1]['count'])
		g_hSetHTML_Profile[Arg1]['count']++;
	else
	{
		g_hSetHTML_Profile[Arg1] = { 'count': 1, 'tm': 0 };
	}

	if (Arg1 == 'dump_profile')
	{
		if( t && t.g_bDebug )
		{
			try {
				if( t && t.Log )
				{
					for (sK in g_hSetHTML_Profile)
					{
//						t.Log("SetHTML: '" + sK + "': count " + g_hSetHTML_Profile[sK]['count'] + ", sec: " + g_hSetHTML_Profile[sK]['tm']);
					}
					g_hSetHTML_Profile = {};
				}
			} catch(e) { }
		}
		return;
	}

	var _tm = new MfcTimer(true);

	if( typeof(Arg1) == 'string' )
	{
		var oDocRef = document;
		var sElementId = Arg1;
		var sContent = Arg2 || '';
	}
	else
	{
		var oDocRef = Arg1;
		var sElementId = Arg2;
		var sContent = Arg3 || '';
	}

	var sCache = '';
/*
	if( sContent.length < 1000 && ! g_hSetHTML_CacheBlacklist[ sElementId ] )
	{
		if( ! g_hSetHTML_Cache[ oDocRef.location.href ] )
		{
			g_hSetHTML_Cache[ oDocRef.location.href ] = {};
		}

		if(
			sContent
			&& g_hSetHTML_Cache[ oDocRef.location.href ][ sElementId ]
			&& g_hSetHTML_Cache[ oDocRef.location.href ][ sElementId ].length == sContent.length
			&& g_hSetHTML_Cache[ oDocRef.location.href ][ sElementId ] == sContent
		)
		{
			sCache = 'CACHE_BLOCK';
		}
		else
		{
			sCache = 'CACHE_MISS!';
			IdCache( Arg1, Arg2 ).innerHTML = sContent;
		}

		g_hSetHTML_Cache[ oDocRef.location.href ][ sElementId ] = sContent;
	}
	else
*/
	if( IdCache( Arg1 ) || IdCache( Arg1, Arg2 ) )
	{
		sCache = 'CACHE_MISS';
		IdCache( Arg1, Arg2 ).innerHTML = sContent;
	}

	if (g_hSetHTML_Profile[Arg1] && g_hSetHTML_Profile[Arg1]['count'])
	{
		_tm.Stop(0, null);
		g_hSetHTML_Profile[Arg1]['tm'] += _tm.Seconds();
	}

	if( t && t.g_bDebug )
	{
		try {
			if( t && t.Log )
			{
				var sCaller = oDocRef.location.href;
				sCaller = sCaller.split('/')[5].split('.')[0];
//				Log("SetHTML-" + sCaller + " :" + sElementId + ": (" + sContent.length + ") " + sCache );
			}
		} catch(e) { }
	}

}

function PopupSetHTML(sId,sContent)
{
	SetHTML(sId + "_content", sContent + "\
		<div id=" + sId + "_content_foot style=\"text-align:right;\">\
			<span id=" + sId + "_content_foot_right></span>\
		</div>\
	");

	if( ! g_bIE )
	{
		PopupSetHTML_Resize(sId);
		setTimeout("PopupSetHTML_Resize('" + sId + "');",10);
	}
}

function PopupSetHTML_Resize(sId)
{
	if( ! IdCache(sId + '_content')
		|| ! IdCache(sId + '_content_foot')
		|| ! IdCache(sId + '_content_foot_right')
	)
	{
		return;
	}

	var sHeight = IdCache(sId + '_content_foot').offsetTop - IdCache(sId + '_content').offsetTop;
	var sWidth = IdCache(sId + '_content_foot_right').offsetLeft - IdCache(sId + '_content_foot').offsetLeft;

	//alert(IdCache(sId + '_content_foot').offsetTop + " : " + IdCache(sId + '_content').offsetTop + " : " + sHeight );
	//alert(IdCache(sId + '_content_foot_right').offsetLeft + " : " + IdCache(sId + '_content_foot').offsetLeft + " : " + sWidth);

	if( sWidth > 100 )
	{
		IdCache(sId).style.width = ( sWidth + 20 ) + 'px';
		IdCache(sId + '_content').style.width = sWidth + 'px';
	}

	if(
		sHeight > 100
		&& IdCache( sId ).style.height < sHeight
	)
	{
		IdCache( sId ).style.height = ( sHeight + 20 ) + 'px';
		IdCache( sId + '_content' ).style.height = sHeight + 'px';
	}
}

function GetHTML(Arg1,Arg2)
{
	if( typeof(Arg1) == 'string' )
	{
		var oDocRef = document;
		var sElementId = Arg1;
	}
	else
	{
		var oDocRef = Arg1;
		var sElementId = Arg2;
	}

	return IdCache( Arg1, Arg2 ).innerHTML;
}

document.IdCache = IdCache;
function IdCache(Arg1,Arg2)
{
	if( typeof(Arg1) == 'string' )
	{
		var oDocRef = document;
		var sElementId = Arg1;
	}
	else
	{
		var oDocRef = Arg1;
		var sElementId = Arg2;
	}

	if( ! g_bIE )
	{
		return oDocRef.getElementById(sElementId);
	}

	if( ! oDocRef ) {
		Log("Element cache '"+sElementId+"' was requested but the document is inaccessible.");
		return;
	}

	if( ! oDocRef.g_hElementCache || sElementId == 'flush')
	{
		oDocRef.g_hElementCache = {};
	}

	if( oDocRef.g_hElementCache )
	{
		if(
			! oDocRef.g_hElementCache[sElementId]
			|| oDocRef.g_hElementCache[sElementId]['ref'].behaviorUrns != oDocRef.g_hElementCache[sElementId]['unq']
		)
		{
			oDocRef.g_hElementCache[sElementId] = {};
			oDocRef.g_hElementCache[sElementId]['ref'] = oDocRef.getElementById(sElementId) || false;
			if(oDocRef.g_hElementCache[sElementId]['ref'])
			{
				oDocRef.g_hElementCache[sElementId]['unq'] = oDocRef.g_hElementCache[sElementId]['ref'].behaviorUrns;
			}
			else if(oDocRef.g_hElementCache[sElementId])
			{
				delete oDocRef.g_hElementCache[sElementId];
				return false;
			}
		}
		return oDocRef.g_hElementCache[sElementId]['ref'];
	}
	else
	{
		Log("Element cache '"+sElementId+"' was called but the element is inaccessible.");
	}
}

var g_hHaltPopupClose = {};
function ClosePopup(sId)
{
	sId = sId || 'popup';

	if(
		sId != 'popup2'
		&& IdCache('popup2').style.display == 'block'
	)
	{
		return;
	}

	g_hHaltPopupClose[sId] = 0;

	SetHTML( sId + '_content');

	t.IdCache(sId).style.display='none';
	t.IdCache(sId).style.top='0px';
	t.IdCache(sId).style.left='0px';
}


function MfcTimer(fStartNow)
{
	this.startTime = null;
	this.stopTime = null;
	this.elapsed = 0;

	if(fStartNow)
	{
		this.startTime = new Date();
	}
}

MfcTimer.prototype.Start = function()
{
	this.startTime = new Date();
};

MfcTimer.prototype.Stop = function(nMax, sMsg)
{
	this.stopTime = new Date();
	this.elapsed = (this.stopTime - this.startTime);

	if (nMax <= this.elapsed)
	{
		if (sMsg)
			Log("[mprof " + this.elapsed + "ms] " + sMsg);
		
		return true;
	}

	return false;
};

MfcTimer.prototype.Seconds = function()
{
	return this.elapsed  / 1000;
};

function showCallStack()
{
	var f=showCallStack,result="Call stack:\n\n";

	while((f=f.caller)!==null){
		result += "F:" + f.toString().match(/^function (\w+)\(/)[1] + "\n";
		result += "A:" + parseArguments(f.arguments) + "\n";
		result += "\n";

	}
	alert(result);
}

function parseArguments(a){
	var result=[];

	for(var i=0; i<a.length; i++){
		if ('string' == typeof a[i])
			result.push("\"" + a[i] + "\"");
		else
			result.push(a[i]);
	}

	return "(" + result.join(", ") + ")";
}

function doGetCaretPosition (oTextarea)
{
	var CaretPos = 0;
	// IE Support
	if (document.selection) {

		oTextarea.focus ();
		var Sel = document.selection.createRange ();

		Sel.moveStart ('character', -oTextarea.value.length);

		CaretPos = Sel.text.length;
	}
	// Firefox support
	else if (oTextarea.selectionStart || oTextarea.selectionStart == '0')
		CaretPos = oTextarea.selectionStart;

	return (CaretPos);

}

function setCaretPosition(oTextarea, nPos)
{
	if(oTextarea.setSelectionRange)
	{
		oTextarea.focus();
		oTextarea.setSelectionRange(nPos,nPos);
	}
	else if (oTextarea.createTextRange) {
		var range = oTextarea.createTextRange();
		range.collapse(true);
		range.moveEnd('character', nPos);
		range.moveStart('character', nPos);
		range.select();
	}
}

var Crc32Tab = new Array(
0x00000000,0x77073096,0xEE0E612C,0x990951BA,0x076DC419,0x706AF48F,0xE963A535,0x9E6495A3,0x0EDB8832,0x79DCB8A4,0xE0D5E91E,0x97D2D988,0x09B64C2B,0x7EB17CBD,0xE7B82D07,0x90BF1D91,0x1DB71064,0x6AB020F2,0xF3B97148,0x84BE41DE,0x1ADAD47D,0x6DDDE4EB,0xF4D4B551,0x83D385C7,0x136C9856,0x646BA8C0,0xFD62F97A,0x8A65C9EC,0x14015C4F,0x63066CD9,0xFA0F3D63,0x8D080DF5,0x3B6E20C8,0x4C69105E,0xD56041E4,0xA2677172,0x3C03E4D1,0x4B04D447,0xD20D85FD,0xA50AB56B,0x35B5A8FA,0x42B2986C,0xDBBBC9D6,0xACBCF940,0x32D86CE3,0x45DF5C75,0xDCD60DCF,0xABD13D59,0x26D930AC,0x51DE003A,0xC8D75180,0xBFD06116,0x21B4F4B5,0x56B3C423,0xCFBA9599,0xB8BDA50F,0x2802B89E,0x5F058808,0xC60CD9B2,0xB10BE924,0x2F6F7C87,0x58684C11,0xC1611DAB,0xB6662D3D,0x76DC4190,0x01DB7106,0x98D220BC,0xEFD5102A,0x71B18589,0x06B6B51F,0x9FBFE4A5,0xE8B8D433,0x7807C9A2,0x0F00F934,0x9609A88E,0xE10E9818,0x7F6A0DBB,0x086D3D2D,0x91646C97,0xE6635C01,0x6B6B51F4,0x1C6C6162,0x856530D8,0xF262004E,0x6C0695ED,0x1B01A57B,0x8208F4C1,0xF50FC457,0x65B0D9C6,0x12B7E950,0x8BBEB8EA,0xFCB9887C,0x62DD1DDF,0x15DA2D49,0x8CD37CF3,0xFBD44C65,0x4DB26158,0x3AB551CE,0xA3BC0074,0xD4BB30E2,0x4ADFA541,0x3DD895D7,0xA4D1C46D,0xD3D6F4FB,0x4369E96A,0x346ED9FC,0xAD678846,0xDA60B8D0,0x44042D73,0x33031DE5,0xAA0A4C5F,0xDD0D7CC9,0x5005713C,0x270241AA,0xBE0B1010,0xC90C2086,0x5768B525,0x206F85B3,0xB966D409,0xCE61E49F,0x5EDEF90E,0x29D9C998,0xB0D09822,0xC7D7A8B4,0x59B33D17,0x2EB40D81,0xB7BD5C3B,0xC0BA6CAD,0xEDB88320,0x9ABFB3B6,0x03B6E20C,0x74B1D29A,0xEAD54739,0x9DD277AF,0x04DB2615,0x73DC1683,0xE3630B12,0x94643B84,0x0D6D6A3E,0x7A6A5AA8,0xE40ECF0B,0x9309FF9D,0x0A00AE27,0x7D079EB1,0xF00F9344,0x8708A3D2,0x1E01F268,0x6906C2FE,0xF762575D,0x806567CB,0x196C3671,0x6E6B06E7,0xFED41B76,0x89D32BE0,0x10DA7A5A,0x67DD4ACC,0xF9B9DF6F,0x8EBEEFF9,0x17B7BE43,0x60B08ED5,0xD6D6A3E8,0xA1D1937E,0x38D8C2C4,0x4FDFF252,0xD1BB67F1,0xA6BC5767,0x3FB506DD,0x48B2364B,0xD80D2BDA,0xAF0A1B4C,0x36034AF6,0x41047A60,0xDF60EFC3,0xA867DF55,0x316E8EEF,0x4669BE79,0xCB61B38C,0xBC66831A,0x256FD2A0,0x5268E236,0xCC0C7795,0xBB0B4703,0x220216B9,0x5505262F,0xC5BA3BBE,0xB2BD0B28,0x2BB45A92,0x5CB36A04,0xC2D7FFA7,0xB5D0CF31,0x2CD99E8B,0x5BDEAE1D,0x9B64C2B0,0xEC63F226,0x756AA39C,0x026D930A,0x9C0906A9,0xEB0E363F,0x72076785,0x05005713,0x95BF4A82,0xE2B87A14,0x7BB12BAE,0x0CB61B38,0x92D28E9B,0xE5D5BE0D,0x7CDCEFB7,0x0BDBDF21,0x86D3D2D4,0xF1D4E242,0x68DDB3F8,0x1FDA836E,0x81BE16CD,0xF6B9265B,0x6FB077E1,0x18B74777,0x88085AE6,0xFF0F6A70,0x66063BCA,0x11010B5C,0x8F659EFF,0xF862AE69,0x616BFFD3,0x166CCF45,0xA00AE278,0xD70DD2EE,0x4E048354,0x3903B3C2,0xA7672661,0xD06016F7,0x4969474D,0x3E6E77DB,0xAED16A4A,0xD9D65ADC,0x40DF0B66,0x37D83BF0,0xA9BCAE53,0xDEBB9EC5,0x47B2CF7F,0x30B5FFE9,0xBDBDF21C,0xCABAC28A,0x53B39330,0x24B4A3A6,0xBAD03605,0xCDD70693,0x54DE5729,0x23D967BF,0xB3667A2E,0xC4614AB8,0x5D681B02,0x2A6F2B94,0xB40BBE37,0xC30C8EA1,0x5A05DF1B,0x2D02EF8D);

function Crc32Add(crc,c)
{
  return Crc32Tab[(crc^c)&0xFF]^((crc>>8)&0xFFFFFF);
}

function Crc32Str(str)
{
	var n;
	var len=str.length;
	var crc;

	crc=0xFFFFFFFF;
	for (n=0; n<len; n++)
	{
		crc=Crc32Add(crc,str.charCodeAt(n));
	}
	return crc^0xFFFFFFFF;
}

var is={	Null:function(a){		return a===null;	},	Undefined:function(a){		return a===undefined;	},	nt:function(a){		return(a===null||a===undefined);	},	Function:function(a){		return(typeof(a)==='function')?a.constructor.toString().match(/Function/)!==null:false;	},	String:function(a){		return(typeof(a)==='string')?true:(typeof(a)==='object')?a.constructor.toString().match(/string/i)!==null:false;	},	Array:function(a){		return(typeof(a)==='object')?a.constructor.toString().match(/array/i)!==null||a.length!==undefined:false;	},	Boolean:function(a){		return(typeof(a)==='boolean')?true:(typeof(a)==='object')?a.constructor.toString().match(/boolean/i)!==null:false;	},	Date:function(a){		return(typeof(a)==='date')?true:(typeof(a)==='object')?a.constructor.toString().match(/date/i)!==null:false;	},	HTML:function(a){		return(typeof(a)==='object')?a.constructor.toString().match(/html/i)!==null:false;	},	Number:function(a){		return(typeof(a)==='number')?true:(typeof(a)==='object')?a.constructor.toString().match(/Number/)!==null:false;	},	Object:function(a){		return(typeof(a)==='object')?a.constructor.toString().match(/object/i)!==null:false;	},	RegExp:function(a){		return(typeof(a)==='function')?a.constructor.toString().match(/regexp/i)!==null:false;	}}; var type={	of:function(a){		for(var i in is){			if(is[i](a)){				return i.toLowerCase();			}		}	}};

