var ConfirmDeleteMessage='Confirma a exclusão?';
var SubmitRateMessage='Obrigado por sua participação!';
// CHILLI CMS JAVASCRIPT BASIC LIBRARY
// Copyright 2001/2002 BASE64 Soluções em Tecnologia - São Paulo - Brazil
// Author: Fabio De Martin - demartin@base64.com.br
// URL: http://www.base64.com.br
if (!window.name) window.name="chillimain";
var colorDepth = window.screen.colorDepth;
var res = window.screen.width + "x" + window.screen.height;
var maxres = window.screen.availWidth + "x" + window.screen.availHeight;

var B64SCREEN=Get_Cookie("B64SCREEN");
if (!B64SCREEN) Set_Cookie("B64SCREEN",res);

function HandleError(message,url,line) {
	var str="An error has occurred:"+"\n\n"+"Line: "+line+"\nError: "+message;
	alert(str);
	return true;
}

function Remote(URL,popW,popH,res,scroll,wname){
	if (wname==null) {
		var wname='remote';
	}
	remote=null;w=480;h=340;
	if (document.all || document.layers) {
		w=screen.availWidth;h=screen.availHeight-30;
	}
	leftPos=(w-popW)/2;topPos=(h-popH)/2;
	remote=window.open(URL,wname,'toolbar=no,location=no,status=no,scrollbars='+scroll+',resizable='+res+',menubar=no,width='+popW+',height='+popH+', left='+leftPos+', top='+topPos+',directories=no');
	if (remote!=null) {
		remote.location.href=URL;
	}
	if (remote.opener==null) {
		remote.opener=self;
	}
	if (!remote.opener) {
		remote.opener=this.window;
	}
}

function setPointer(theRow, thePointerColor){
	if (typeof(theRow.style)=='undefined'||typeof(theRow.cells)=='undefined') {
		return false;
	}
	var row_cells_cnt=theRow.cells.length;
	for (var c=0;c<row_cells_cnt;c++) {
		theRow.cells[c].bgColor=thePointerColor;
	}
	return true;
}

function ReloadOpener(){
	opener.location.reload();
}

function Resize(popW,popH){
	w=480;h=340;
	if (document.all||document.layers) {
		w=screen.availWidth;h=screen.availHeight;
	}
	leftPos=(w-popW)/2;topPos=(h-popH)/2;
	window.moveTo(leftPos,topPos);window.resizeTo(popW,popH);
}

function ConfirmDelete(action,waction) {
	if (confirm(ConfirmDeleteMessage)) {
		if (waction==null) {
			var actwindow='chillimain';
		} else {
			var actwindow=waction;
		}
		window.open(action,actwindow);
	}
}

function Confirmation(action,message) {
	if (confirm(message)) {
		var actwindow='chillimain';
		window.open(action,actwindow);
	}
}

function Get_Cookie(name) {
	var start = document.cookie.indexOf(name+'=');
	var len = start+name.length+1;
	if ((!start) && (name != document.cookie.substring(0,name.length))) return null;
	if (start == -1) return null;
	var end = document.cookie.indexOf(';',len);
	if (end == -1) end = document.cookie.length;
	return unescape(document.cookie.substring(len,end));
}


function Set_Cookie(cookie_name, cookie_value, cookie_expire, cookie_path, cookie_domain, cookie_secure) {

	// Begin the cookie parameter string
	var cookie_string = cookie_name + "=" + cookie_value

	// Add the expiration date, if it was specified
	if (cookie_expire) {
		var expire_date = new Date()
		var ms_from_now = cookie_expire * 24 * 60 * 60 * 1000
		Expire_date.setTime(expire_date.getTime() + ms_from_now)
		var expire_string = expire_date.toGMTString()
		cookie_string += "; expires=" + expire_string
	}

	// Add the path, if it was specified
	if (cookie_path) {
		cookie_string += "; path=" + cookie_path
	}

	// Add the domain, if it was specified
	if (cookie_domain) {
		cookie_string += "; domain=" + cookie_domain
	}

	// Add the secure Boolean, if it's true
	if (cookie_secure) {
		cookie_string += "; true"
	}

	// Set the cookie
	document.cookie = cookie_string
}

function expand(record) {
	picture=new Image();
	if (record) {
		picture.src=document.images['picarea'].src;
		document.title='Image preview: '+(document.images['picarea'].src);
	}
	if (!record) {
		picture.src=opener.form.userfile.value;
		document.title='Image preview: '+(opener.form.userfile.value);
	}
	var ImW=(picture.width)+50;
	var ImH=(picture.height)+50;
	var tamanho=Resize(ImW,ImH);
	document.focus();
}

function imgOn(imgName) {
	if (document.images) {
		document[imgName].src = eval(imgName + "up.src");
	}
}

function imgOff(imgName) {
	if (document.images) {
		document[imgName].src = eval(imgName + "over.src");
	}
}

function showimage1(){
	if (!document.images) return;
	document.images.pictureup.src=document.MENU.imgup.value;
	if (document.MENU.changed1) document.MENU.changed1.value='S';
}

function showimage2(){
	if (!document.images) return;
	document.images.pictureover.src=document.MENU.imgover.value;
	if (document.MENU.changed2) document.MENU.changed2.value='S';
}
function isNum(caractere) {
	var strValidos="0123456789"
	if ( strValidos.indexOf(caractere)==-1) {
		return false;
	}
	return true;
}
function validaTecla(campo,event) {
	var BACKSPACE=8;
	var key;
	var tecla;
	CheckTAB=true;
	if(navigator.appName.indexOf("Netscape")!= -1) {
		tecla= event.which;
	} else {
		tecla= event.keyCode;
	}
	key=String.fromCharCode(tecla);
	//alert( 'key: ' + tecla + '  -> campo: ' + campo.value);
	if (tecla==13) {
		return false;
	}
	if (tecla==BACKSPACE) {
		return true;
	}
	return (isNum(key));
}
function FormataCNPJ(el) {
	vr=el.value;
	tam=vr.length;
	if ( vr.indexOf(".") == -1 ) {
		if ( tam <= 2 ) el.value = vr;
		if ( (tam > 2) && (tam <= 6) ) el.value = vr.substr( 0, 2 ) + '.' + vr.substr( 2, tam );
		if ( (tam >= 7) && (tam <= 10) ) el.value = vr.substr( 0, 2 ) + '.' + vr.substr( 2, 3 ) + '.' + vr.substr( 5, 3 ) + '/';
		if ( (tam >= 11) && (tam <= 18) ) el.value = vr.substr( 0, 2 ) + '.' + vr.substr( 2, 3 ) + '.' + vr.substr( 5, 3 ) + '/' + vr.substr( 8, 4 ) + '-' + vr.substr( 12, 2 ) ;
	}
	return true;
}

function safe_add(x, y) {
	var lsw = (x & 0xFFFF) + (y & 0xFFFF)
	var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
	return (msw << 16) | (lsw & 0xFFFF)
}

/*
 * Bitwise rotate a 32-bit number to the left.
 */
function rol(num, cnt)
{
	return (num << cnt) | (num >>> (32 - cnt))
}

/*
 * These functions implement the four basic operations the algorithm uses.
 */
function cmn(q, a, b, x, s, t)
{
  return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
}
function ff(a, b, c, d, x, s, t)
{
  return cmn((b & c) | ((~b) & d), a, b, x, s, t)
}
function gg(a, b, c, d, x, s, t)
{
  return cmn((b & d) | (c & (~d)), a, b, x, s, t)
}
function hh(a, b, c, d, x, s, t)
{
  return cmn(b ^ c ^ d, a, b, x, s, t)
}
function ii(a, b, c, d, x, s, t)
{
  return cmn(c ^ (b | (~d)), a, b, x, s, t)
}

/*
 * Calculate the MD5 of an array of little-endian words, producing an array
 * of little-endian words.
 */
function coreMD5(x)
{
	var a =  1732584193
	var b = -271733879
	var c = -1732584194
	var d =  271733878

	for(i = 0; i < x.length; i += 16)
	{
	var olda = a
	var oldb = b
	var oldc = c
	var oldd = d

	a = ff(a, b, c, d, x[i+ 0], 7 , -680876936)
	d = ff(d, a, b, c, x[i+ 1], 12, -389564586)
	c = ff(c, d, a, b, x[i+ 2], 17,  606105819)
	b = ff(b, c, d, a, x[i+ 3], 22, -1044525330)
	a = ff(a, b, c, d, x[i+ 4], 7 , -176418897)
	d = ff(d, a, b, c, x[i+ 5], 12,  1200080426)
	c = ff(c, d, a, b, x[i+ 6], 17, -1473231341)
	b = ff(b, c, d, a, x[i+ 7], 22, -45705983)
	a = ff(a, b, c, d, x[i+ 8], 7 ,  1770035416)
	d = ff(d, a, b, c, x[i+ 9], 12, -1958414417)
	c = ff(c, d, a, b, x[i+10], 17, -42063)
	b = ff(b, c, d, a, x[i+11], 22, -1990404162)
	a = ff(a, b, c, d, x[i+12], 7 ,  1804603682)
	d = ff(d, a, b, c, x[i+13], 12, -40341101)
	c = ff(c, d, a, b, x[i+14], 17, -1502002290)
	b = ff(b, c, d, a, x[i+15], 22,  1236535329)

	a = gg(a, b, c, d, x[i+ 1], 5 , -165796510)
	d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632)
	c = gg(c, d, a, b, x[i+11], 14,  643717713)
	b = gg(b, c, d, a, x[i+ 0], 20, -373897302)
	a = gg(a, b, c, d, x[i+ 5], 5 , -701558691)
	d = gg(d, a, b, c, x[i+10], 9 ,  38016083)
	c = gg(c, d, a, b, x[i+15], 14, -660478335)
	b = gg(b, c, d, a, x[i+ 4], 20, -405537848)
	a = gg(a, b, c, d, x[i+ 9], 5 ,  568446438)
	d = gg(d, a, b, c, x[i+14], 9 , -1019803690)
	c = gg(c, d, a, b, x[i+ 3], 14, -187363961)
	b = gg(b, c, d, a, x[i+ 8], 20,  1163531501)
	a = gg(a, b, c, d, x[i+13], 5 , -1444681467)
	d = gg(d, a, b, c, x[i+ 2], 9 , -51403784)
	c = gg(c, d, a, b, x[i+ 7], 14,  1735328473)
	b = gg(b, c, d, a, x[i+12], 20, -1926607734)

	a = hh(a, b, c, d, x[i+ 5], 4 , -378558)
	d = hh(d, a, b, c, x[i+ 8], 11, -2022574463)
	c = hh(c, d, a, b, x[i+11], 16,  1839030562)
	b = hh(b, c, d, a, x[i+14], 23, -35309556)
	a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060)
	d = hh(d, a, b, c, x[i+ 4], 11,  1272893353)
	c = hh(c, d, a, b, x[i+ 7], 16, -155497632)
	b = hh(b, c, d, a, x[i+10], 23, -1094730640)
	a = hh(a, b, c, d, x[i+13], 4 ,  681279174)
	d = hh(d, a, b, c, x[i+ 0], 11, -358537222)
	c = hh(c, d, a, b, x[i+ 3], 16, -722521979)
	b = hh(b, c, d, a, x[i+ 6], 23,  76029189)
	a = hh(a, b, c, d, x[i+ 9], 4 , -640364487)
	d = hh(d, a, b, c, x[i+12], 11, -421815835)
	c = hh(c, d, a, b, x[i+15], 16,  530742520)
	b = hh(b, c, d, a, x[i+ 2], 23, -995338651)

	a = ii(a, b, c, d, x[i+ 0], 6 , -198630844)
	d = ii(d, a, b, c, x[i+ 7], 10,  1126891415)
	c = ii(c, d, a, b, x[i+14], 15, -1416354905)
	b = ii(b, c, d, a, x[i+ 5], 21, -57434055)
	a = ii(a, b, c, d, x[i+12], 6 ,  1700485571)
	d = ii(d, a, b, c, x[i+ 3], 10, -1894986606)
	c = ii(c, d, a, b, x[i+10], 15, -1051523)
	b = ii(b, c, d, a, x[i+ 1], 21, -2054922799)
	a = ii(a, b, c, d, x[i+ 8], 6 ,  1873313359)
	d = ii(d, a, b, c, x[i+15], 10, -30611744)
	c = ii(c, d, a, b, x[i+ 6], 15, -1560198380)
	b = ii(b, c, d, a, x[i+13], 21,  1309151649)
	a = ii(a, b, c, d, x[i+ 4], 6 , -145523070)
	d = ii(d, a, b, c, x[i+11], 10, -1120210379)
	c = ii(c, d, a, b, x[i+ 2], 15,  718787259)
	b = ii(b, c, d, a, x[i+ 9], 21, -343485551)

	a = safe_add(a, olda)
	b = safe_add(b, oldb)
	c = safe_add(c, oldc)
	d = safe_add(d, oldd)
	}
	return [a, b, c, d]
}

/*
 * Convert an array of little-endian words to a hex string.
 */
function binl2hex(binarray)
{
	var hex_tab = "0123456789abcdef"
	var str = ""
	for(var i = 0; i < binarray.length * 4; i++)
	{
	str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
	hex_tab.charAt((binarray[i>>2] >> ((i%4)*8)) & 0xF)
	}
	return str
}

/*
 * Convert an array of little-endian words to a base64 encoded string.
 */
function binl2b64(binarray)
{
	var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
	var str = ""
	for(var i = 0; i < binarray.length * 32; i += 6)
	{
	str += tab.charAt(((binarray[i>>5] << (i%32)) & 0x3F) |
	((binarray[i>>5+1] >> (32-i%32)) & 0x3F))
	}
	return str
}

/*
 * Convert an 8-bit character string to a sequence of 16-word blocks, stored
 * as an array, and append appropriate padding for MD4/5 calculation.
 * If any of the characters are >255, the high byte is silently ignored.
 */
function str2binl(str)
{
	var nblk = ((str.length + 8) >> 6) + 1 // number of 16-word blocks
	var blks = new Array(nblk * 16)
	for(var i = 0; i < nblk * 16; i++) blks[i] = 0
	for(var i = 0; i < str.length; i++)
	blks[i>>2] |= (str.charCodeAt(i) & 0xFF) << ((i%4) * 8)
	blks[i>>2] |= 0x80 << ((i%4) * 8)
	blks[nblk*16-2] = str.length * 8
	return blks
}

/*
 * Convert a wide-character string to a sequence of 16-word blocks, stored as
 * an array, and append appropriate padding for MD4/5 calculation.
 */
function strw2binl(str)
{
	var nblk = ((str.length + 4) >> 5) + 1 // number of 16-word blocks
	var blks = new Array(nblk * 16)
	for(var i = 0; i < nblk * 16; i++) blks[i] = 0
	for(var i = 0; i < str.length; i++)
	blks[i>>1] |= str.charCodeAt(i) << ((i%2) * 16)
	blks[i>>1] |= 0x80 << ((i%2) * 16)
	blks[nblk*16-2] = str.length * 16
	return blks
}

/*
 * External interface
 */
function hexMD5 (str) { return binl2hex(coreMD5( str2binl(str))) }
function hexMD5w(str) { return binl2hex(coreMD5(strw2binl(str))) }
function b64MD5 (str) { return binl2b64(coreMD5( str2binl(str))) }
function b64MD5w(str) { return binl2b64(coreMD5(strw2binl(str))) }
/* Backward compatibility */
function calcMD5(str) { return binl2hex(coreMD5( str2binl(str))) }

function dumpObject( obj ) {
	var msg = "dumpObject( " + obj + "):\n";
	for( prop in obj ) {
		msg = msg + prop + ", ";
	}
	alert( msg );
}

function status_rotate(text) {
	rotate++;
	rotate%=text.length;
	window.status=text[rotate];
	setTimeout("status_rotate(text)",5000);
}

function submit_rate() {
	var ratevalue=0;
	for (var i=0;i<5;i++) {
		if (document.RATEFORM.ratethis[i].checked) ratevalue=document.RATEFORM.ratethis[i].value;
	}
	if (ratevalue) {
		document.RATEFORM.ratevalue.value=ratevalue;
		alert(SubmitRateMessage);
		document.RATEFORM.submit();
	}
}

function blinkIt() {
	if (!document.all) {
		return;
	} else {
		for(i=0;i<document.all.tags('blink').length;i++){
			s=document.all.tags('blink')[i];
			s.style.visibility=(s.style.visibility=='visible')?'hidden':'visible';
		}
	}
}

//Chilli ToolTip
function bs_isNull(theVar) {
	if (typeof(theVar) == 'undefined') return true;
	if (theVar == null) return true;
	return false;
}
function Position(x, y) {
	this.x = x;this.y = y;
}
function getAbsolutePos(el, stopIfAbsolute) {
	if (bs_isNull(el)) {
		var res = new Position(0, 0);return res;
	}
	var res = new Position(el.offsetLeft, el.offsetTop);
	if (el.offsetParent) {
		if ((stopIfAbsolute != true ) || ((el.offsetParent.currentStyle.position != 'absolute') && (el.offsetParent.currentStyle.position != 'relative') && (el.offsetParent.currentStyle.overflow != 'auto') && (el.offsetParent.currentStyle.overflow != 'scroll'))) {
			var tmp = getAbsolutePos(el.offsetParent, stopIfAbsolute);res.x += tmp.x;res.y += tmp.y;
		}
	}
	return res;
}
function ChilliToolTip(el) {
	try {
		var ct=document.getElementById('CHILLITOOLTIP');
	} catch (e) {
		alert(e.message);
	}
	var pos = getAbsolutePos(el);
	var elHeight = el.offsetHeight;
	ct.style.left=pos.x + el.offsetWidth;
	ct.style.top=parseInt(pos.y) + parseInt(elHeight) +0;
	if (ct.style.display=='block') {
		//ct.style.visibility='visible';
		el.title=ct.innerHTML;
		ct.style.display='none';
	} else {
		//ct.style.visibility='hidden';
		ct.title=el.title;
		el.title='';
		ct.innerHTML=ct.title;
		ct.style.display='block';
	}
}

/***
* Descrição.: formata um campo do formulário de
* acordo com a máscara informada...
* Parâmetros: - objForm (o Objeto Form)
* - strField (string contendo o nome
* do textbox)
* - sMask (mascara que define o
* formato que o dado será apresentado,
* usando o algarismo "9" para
* definir números e o símbolo "!" para
* qualquer caracter...
* - evtKeyPress (evento)
* Uso.......: <input type="textbox"
* name="xxx".....
* onkeypress="return inputMask(this,'99999-999', event);">
* Observação: As máscaras podem ser representadas como os exemplos abaixo:
* CEP -> 99.999-999
* CPF -> 999.999.999-99
* CNPJ -> 99.999.999/9999-99
* Data -> 99/99/9999
* Tel Resid -> (99) 999-9999
* Tel Cel -> (99) 9999-9999
* Processo -> 99.999999999/999-99
* C/C -> 999999-!
* E por aí vai...
***/

function inputMask(objForm,sMask,evtKeyPress) {
	var i, nCount, sValue, fldLen, mskLen,bolMask, sCod, nTecla;
	var nTecla = (evtKeyPress.keyCode) ? evtKeyPress.keyCode : evtKeyPress.which;
	if (!nTecla) return true;
	if (nTecla==8 || nTecla==37)  return true;

	//alert(nTecla);
	objForm.maxLength=sMask.length;
	sValue = objForm.value;

	// Limpa todos os caracteres de formatação que
	// já estiverem no campo.
	sValue = sValue.toString().replace( "-", "" );
	sValue = sValue.toString().replace( "-", "" );
	sValue = sValue.toString().replace( ".", "" );
	sValue = sValue.toString().replace( ".", "" );
	sValue = sValue.toString().replace( "/", "" );
	sValue = sValue.toString().replace( "/", "" );
	sValue = sValue.toString().replace( "(", "" );
	sValue = sValue.toString().replace( "(", "" );
	sValue = sValue.toString().replace( ")", "" );
	sValue = sValue.toString().replace( ")", "" );
	sValue = sValue.toString().replace( " ", "" );
	sValue = sValue.toString().replace( " ", "" );
	fldLen = sValue.length;
	mskLen = sMask.length;

	i = 0;
	nCount = 0;
	sCod = "";
	mskLen = fldLen;

	while (i <= mskLen) {
		bolMask = ((sMask.charAt(i) == "-") || (sMask.charAt(i) == ".") || (sMask.charAt(i) == "/"))
		bolMask = bolMask || ((sMask.charAt(i) == "(") || (sMask.charAt(i) == ")") || (sMask.charAt(i) == " "))

		if (bolMask) {
			sCod += sMask.charAt(i);
			mskLen++;
		} else {
			sCod += sValue.charAt(nCount);
			nCount++;
		}

		i++;
	}

	objForm.value = sCod;

	if (nTecla != 8) { // backspace
		if (sMask.charAt(i-1) == "9") { // apenas números...
			return ((nTecla > 47) && (nTecla < 58)); } // números de 0 a 9
		else { // qualquer caracter...
			return true;
		}
	} else {
		return true;
	}
}

function doHighlight(bodyText, searchTerm, highlightStartTag, highlightEndTag)  {
	// the highlightStartTag and highlightEndTag parameters are optional
	if ((!highlightStartTag) || (!highlightEndTag)) {
		highlightStartTag = "<font style='color:blue; background-color:yellow;'>";
		highlightEndTag = "</font>";
	}

	// find all occurences of the search term in the given text,
	// and add some "highlight" tags to them (we're not using a
	// regular expression search, because we want to filter out
	// matches that occur within HTML tags and script blocks, so
	// we have to do a little extra validation)
	var newText = "";
	var i = -1;
	var lcSearchTerm = searchTerm.toLowerCase();
	var lcBodyText = bodyText.toLowerCase();

	while (bodyText.length > 0) {
		i = lcBodyText.indexOf(lcSearchTerm, i+1);
		if (i < 0) {
			newText += bodyText;
			bodyText = "";
		} else {
			// skip anything inside an HTML tag
			if (bodyText.lastIndexOf(">", i) >= bodyText.lastIndexOf("<", i)) {
				// skip anything inside a <script> block
				if (lcBodyText.lastIndexOf("/script>", i) >= lcBodyText.lastIndexOf("<script", i)) {
					newText += bodyText.substring(0, i) + highlightStartTag + bodyText.substr(i, searchTerm.length) + highlightEndTag;
					bodyText = bodyText.substr(i + searchTerm.length);
					lcBodyText = bodyText.toLowerCase();
					i = -1;
				}
			}
		}
	}
	return newText;
}

function printOut(recid) {
	window.open('printout.php?recid='+recid+'&referer='+window.location.href);
	return false;
}
function recommend(recid) {
	Remote('recommend.php?recid='+recid,'310','360','yes');
	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(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey) {
	if (!document.getElementById) { return; }
	this.DETECT_KEY = detectKey ? detectKey : 'detectflash';
	this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY);
	this.params = new Object();
	this.variables = new Object();
	this.attributes = new Array();
	if(swf) { this.setAttribute('swf', swf); }
	if(id) { this.setAttribute('id', id); }
	if(w) { this.setAttribute('width', w); }
	if(h) { this.setAttribute('height', h); }
	if(ver) { this.setAttribute('version', new deconcept.PlayerVersion(ver.toString().split("."))); }
	this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion();
	if (!window.opera && document.all && this.installedVer.major > 7) {
		// only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE
		deconcept.SWFObject.doPrepUnload = true;
	}
	if(c) { this.addParam('bgcolor', c); }
	var q = quality ? quality : 'high';
	this.addParam('quality', q);
	this.setAttribute('useExpressInstall', false);
	this.setAttribute('doExpressInstall', false);
	var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location;
	this.setAttribute('xiRedirectUrl', xir);
	this.setAttribute('redirectUrl', '');
	if(redirectUrl) { this.setAttribute('redirectUrl', redirectUrl); }
}
deconcept.SWFObject.prototype = {
	useExpressInstall: function(path) {
		this.xiSWFPath = !path ? "expressinstall.swf" : path;
		this.setAttribute('useExpressInstall', true);
	},
	setAttribute: function(name, value){
		this.attributes[name] = value;
	},
	getAttribute: function(name){
		return this.attributes[name];
	},
	addParam: function(name, value){
		this.params[name] = value;
	},
	getParams: function(){
		return this.params;
	},
	addVariable: function(name, value){
		this.variables[name] = value;
	},
	getVariable: function(name){
		return this.variables[name];
	},
	getVariables: function(){
		return this.variables;
	},
	getVariablePairs: function(){
		var variablePairs = new Array();
		var key;
		var variables = this.getVariables();
		for(key in variables){
			variablePairs[variablePairs.length] = key +"="+ variables[key];
		}
		return variablePairs;
	},
	getSWFHTML: function() {
		var swfNode = "";
		if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture
			if (this.getAttribute("doExpressInstall")) {
				this.addVariable("MMplayerType", "PlugIn");
				this.setAttribute('swf', this.xiSWFPath);
			}
			swfNode = '<embed type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'"';
			swfNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" ';
			var params = this.getParams();
			 for(var key in params){ swfNode += [key] +'="'+ params[key] +'" '; }
			var pairs = this.getVariablePairs().join("&");
			 if (pairs.length > 0){ swfNode += 'flashvars="'+ pairs +'"'; }
			swfNode += '/>';
		} else { // PC IE
			if (this.getAttribute("doExpressInstall")) {
				this.addVariable("MMplayerType", "ActiveX");
				this.setAttribute('swf', this.xiSWFPath);
			}
			swfNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'">';
			swfNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />';
			var params = this.getParams();
			for(var key in params) {
			 swfNode += '<param name="'+ key +'" value="'+ params[key] +'" />';
			}
			var pairs = this.getVariablePairs().join("&");
			if(pairs.length > 0) {swfNode += '<param name="flashvars" value="'+ pairs +'" />';}
			swfNode += "</object>";
		}
		return swfNode;
	},
	write: function(elementId){
		if(this.getAttribute('useExpressInstall')) {
			// check to see if we need to do an express install
			var expressInstallReqVer = new deconcept.PlayerVersion([6,0,65]);
			if (this.installedVer.versionIsValid(expressInstallReqVer) && !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 elementId == 'string') ? document.getElementById(elementId) : elementId;
			n.innerHTML = this.getSWFHTML();
			return true;
		}else{
			if(this.getAttribute('redirectUrl') != "") {
				document.location.replace(this.getAttribute('redirectUrl'));
			}
		}
		return false;
	}
}

/* ---- detection functions ---- */
deconcept.SWFObjectUtil.getPlayerVersion = function(){
	var PlayerVersion = new deconcept.PlayerVersion([0,0,0]);
	if(navigator.plugins && navigator.mimeTypes.length){
		var x = navigator.plugins["Shockwave Flash"];
		if(x && x.description) {
			PlayerVersion = 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){ // if Windows CE
		var axo = 1;
		var counter = 3;
		while(axo) {
			try {
				counter++;
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter);
//				document.write("player v: "+ counter);
				PlayerVersion = new deconcept.PlayerVersion([counter,0,0]);
			} catch (e) {
				axo = null;
			}
		}
	} else { // Win IE (non mobile)
		// do minor version lookup in IE, but avoid fp6 crashing issues
		// see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
		try{
			var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		}catch(e){
			try {
				var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
				PlayerVersion = new deconcept.PlayerVersion([6,0,21]);
				axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code)
			} catch(e) {
				if (PlayerVersion.major == 6) {
					return PlayerVersion;
				}
			}
			try {
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			} catch(e) {}
		}
		if (axo != null) {
			PlayerVersion = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
		}
	}
	return PlayerVersion;
}
deconcept.PlayerVersion = function(arrVersion){
	this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0;
	this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0;
	this.rev = arrVersion[2] != null ? parseInt(arrVersion[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;
}
/* ---- get value of query string param ---- */
deconcept.util = {
	getRequestParameter: function(param) {
		var q = document.location.search || document.location.hash;
		if (param == null) { return q; }
		if(q) {
			var pairs = q.substring(1).split("&");
			for (var i=0; i < pairs.length; i++) {
				if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
					return pairs[i].substring((pairs[i].indexOf("=")+1));
				}
			}
		}
		return "";
	}
}
/* fix for video streaming bug */
deconcept.SWFObjectUtil.cleanupSWFs = function() {
	var objects = document.getElementsByTagName("OBJECT");
	for (var i = objects.length - 1; i >= 0; i--) {
		objects[i].style.display = 'none';
		for (var x in objects[i]) {
			if (typeof objects[i][x] == 'function') {
				objects[i][x] = function(){};
			}
		}
	}
}
// fixes bug in some fp9 versions see http://blog.deconcept.com/2006/07/28/swfobject-143-released/
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;
	}
}
/* add document.getElementById if needed (mobile IE < 5) */
if (!document.getElementById && document.all) { document.getElementById = function(id) { return document.all[id]; }}

/* add some aliases for ease of use/backwards compatibility */
var getQueryParamValue = deconcept.util.getRequestParameter;
var FlashObject = deconcept.SWFObject; // for legacy support
var SWFObject = deconcept.SWFObject;
/* END OF SWFObject */

