function rgb2hex(rgb) {
	if((rgb.indexOf('#')<0)&&(rgb.indexOf('0x')<0)) {
		var RGB = new Array(256);
		var k = 0;
		var hex = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F");
		
		for (i = 0; i < 16; i++) {	
			for (j = 0; j < 16; j++) {		
				RGB[k] = hex[i] + hex[j];
				k++;
			}
		}
		if(rgb!=null) {
			var RGBarray = rgb.split("rgb(");
			try {
			RGBarray = RGBarray[1].split(",");
			} catch (err) { 
				return false;
			}
			r = RGB[RGBarray[0]];
			g = RGB[RGBarray[1]*1];
			bb = RGBarray[2].split(")");
			b = RGB[bb[0]*1];
			
			return("0x"+r+g+b);
		}
	} else return rgb;
}

function hex2rgb(hex) {
if(hex.indexOf('0x')>=0) hex = hex.substring(2,hex.length);
else if(hex.indexOf('#')>=0) hex = hex.substring(1,hex.length);

var regexp = new RegExp('^#?([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$');
var match = hex.toLowerCase().match(regexp);
	if (match)
	{
		var rgb = new Array(parseInt(match[1], 16), parseInt(match[2], 16), parseInt(match[3], 16));
		return('rgb('+rgb+')');
	}
	else
	{
		return(null);
	 }
}

function getCSSRule(ruleName) {              
   ruleName=ruleName.toLowerCase();  
   if (document.styleSheets) {
      for (var i=0; i<document.styleSheets.length; i++) {
         var styleSheet=document.styleSheets[i];                                              
         var cssRule=false; 
			 var CSSRulesLength = styleSheet.cssRules ? styleSheet.cssRules.length : styleSheet.rules.length;
			 
			 for(ii=0;ii<CSSRulesLength;ii++) {                                   
				if (styleSheet.cssRules) cssRule = styleSheet.cssRules[ii]; // firefox & safari
				else cssRule = styleSheet.rules[ii]; // IE
														  
				if (cssRule)  { 
					var currentRule = cssRule.selectorText+''; // required for when no keyColour exists in CSS
				   if (currentRule.toLowerCase()==ruleName) return cssRule;                                        
				}                                        
			 }
      }                                                  
   }                                                      
   return false; // if nothing was found
}

function getCSSColor(ruleName,ifHexDesired) {
	var CSSRule = getCSSRule(ruleName);
		if(CSSRule) {
			if (document.styleSheets[0].cssRules) { // firefox & safari
			if(!ifHexDesired&&CSSRule.style.color.indexOf('#')<0) 
				var playerColour = rgb2hex(CSSRule.style.color);
			else var playerColour = CSSRule.style.color;
			if(playerColour) {
				if(playerColour.indexOf('#')>=0) { // Opera
					playerColour = playerColour.split('#');
					playerColour = '0x'+playerColour[1];
				}
				return playerColour;
			}
		} else { // ie
			if(ifHexDesired) var playerColour = hex2rgb(CSSRule.style.color);
			else {
				var playerColourHex = CSSRule.style.color;
				playerColour = playerColourHex.split('#');
				playerColour = '0x'+playerColour[1];
			}
			return playerColour;
		}	
	}
}	

function seperateRGBValues(RGBvalue) {
	if((RGBvalue.indexOf('#')>=0)||(RGBvalue.indexOf('0x')>=0)) {
		RGBvalue = hex2rgb(RGBvalue);
	}
	
	var RGBarray = new Array;
	RGBarray = RGBvalue.split("rgb(");
	try {
		RGBarray = RGBarray[1].split(",");
	} catch (err) { 
		return false;
	}
	var newRGBarray = new Array;
	newRGBarray['r'] = RGBarray[0]*1;
	newRGBarray['g'] = RGBarray[1]*1;
	var bb = RGBarray[2].split(")");
	newRGBarray['b'] = bb[0]*1;
	return newRGBarray; 
}

function changeRGBValues(RGBarray,changeAmount) {
	var changedArray 	= new Array;
	var RchangeAmount;
	var GchangeAmount;
	var BchangeAmount;
	RchangeAmount = GchangeAmount = BchangeAmount = changeAmount;
	if((RGBarray['r']+changeAmount>255)||(RGBarray['r']+changeAmount<0)) RchangeAmount = -changeAmount;
	changedArray['r'] = RGBarray['r'] + RchangeAmount;
	
	if((RGBarray['g']+changeAmount>255)||(RGBarray['g']+changeAmount<0)) GchangeAmount = -changeAmount;
	changedArray['g'] = RGBarray['g'] + GchangeAmount;
	
	if((RGBarray['b']+changeAmount>255)||(RGBarray['b']+changeAmount<0)) BchangeAmount = -changeAmount;
	changedArray['b'] = RGBarray['b'] + BchangeAmount;
	
	return 'rgb(' + changedArray['r'] + ',' + changedArray['g'] + ',' + changedArray['b'] + ');';
}

var flashKeyColour=null;

var flashEmphasisColour=null;
var flashTextColour=null;
var flashBgColour=null;
	
var flashTextColourRGB=null;
var flashTextColour_B=null;
var flashTextColour_C=null;
var flashTextColourB_Override=null;
var flashTextColourC_Override=null;

var flashBgColourRGB=null;
var flashBgColour_B=null;
var flashBgColour_C=null;
var flashBgColourB_Override=null;
var flashBgColourC_Override=null;

var flashColoursSet=false;

function setFlashWidgetColours() {
	flashKeyColour 			= getCSSColor('.keyColour');
	flashEmphasisColour 	= getCSSColor('.emphasisColour');
	flashEmphasisColour 	= getCSSColor('.emphasisColour');
	flashTextColour 		= getCSSColor('.textColour','hex');
	flashTextColourB_Override		= getCSSColor('.textColour_B');
	flashTextColourC_Override		= getCSSColor('.textColour_C');
	flashBgColour			= getCSSColor('.flashPanelBg','hex');
	flashBgColourB_Override	= getCSSColor('.flashPanelBg_B');
	flashBgColourC_Override	= getCSSColor('.flashPanelBg_C');
	
	if(flashTextColour!=null) {
		flashTextColourRGB 		= seperateRGBValues(flashTextColour);
		if(flashTextColourB_Override==null)	flashTextColour_B = changeRGBValues(flashTextColourRGB,32);
		if(flashTextColourC_Override==null)	flashTextColour_C = changeRGBValues(flashTextColourRGB,64);
	}
	if(flashBgColour!=null) {
		flashBgColourRGB 		= seperateRGBValues(flashBgColour);
		if(flashBgColourB_Override==null)	flashBgColour_B	= changeRGBValues(flashBgColourRGB,-7);
		if(flashBgColourC_Override==null)	flashBgColour_C	= changeRGBValues(flashBgColourRGB,-20);
	} 
	
	widgetColours = getFlashWidgetColours();
	if(widgetColours!=',,,,,,,') flashColoursSet = true;
}

function getFlashWidgetColours() {
	var flashWidgetColours=''; 
	if(flashKeyColour!=null) flashWidgetColours += flashKeyColour + ',' ;
	else flashWidgetColours += ',';
	
	if(flashEmphasisColour!=null) flashWidgetColours += flashEmphasisColour + ',';
	else flashWidgetColours += ',';
	
	if(flashTextColour!=null) flashWidgetColours += rgb2hex(flashTextColour) + ','; 
	else flashWidgetColours += ',';
	
	if(flashTextColour_B!=null) flashWidgetColours += rgb2hex(flashTextColour_B) + ',';
	else if(flashTextColourB_Override!=null) flashWidgetColours += flashTextColourB_Override + ',';
	else flashWidgetColours += ',';
	
	if(flashTextColour_C!=null) flashWidgetColours += rgb2hex(flashTextColour_C) + ','; 
	else if(flashTextColourC_Override!=null) flashWidgetColours += flashTextColourC_Override + ',';
	else flashWidgetColours += ',';
	
	if(flashBgColour!=null) flashWidgetColours += rgb2hex(flashBgColour) + ','; 
	else flashWidgetColours += ',';
	
	if(flashBgColour_B!=null) flashWidgetColours += rgb2hex(flashBgColour_B) + ',';
	else if(flashBgColourB_Override!=null) flashWidgetColours += flashBgColourB_Override + ',';
	else flashWidgetColours += ',';
	
	if(flashBgColour_C!=null) flashWidgetColours += rgb2hex(flashBgColour_C);
	else if(flashBgColourC_Override!=null) flashWidgetColours += flashBgColourC_Override;
	return flashWidgetColours;  
	 
}

	
function addColoursAndRender(flashPlayer,flashObjectID) {
	if(navigator.userAgent.indexOf('Safari')>=0) { 
	// for Safari set a interval (as it sometimes loads CSS last)
		var renderFlashWhenReady = setInterval(function() { 
			if(flashColoursSet==false) setFlashWidgetColours(); 
			else {
				flashPlayer.addVariable("colours", widgetColours);
				flashPlayer.write(flashObjectID); 
				clearInterval(renderFlashWhenReady); 
			}  
		},250);
	} else { // every other browser
		if(flashColoursSet==false) setFlashWidgetColours(); 
		flashPlayer.addVariable("colours", widgetColours);
		flashPlayer.write(flashObjectID); 
	}	
}

function addColoursAndRenderUFO(flashPlayer,flashObjectID,embedFlashvars) {
	if(navigator.userAgent.indexOf('Safari')>=0) { 
	// for Safari set a interval (as it sometimes loads CSS last)
		var renderFlashWhenReady = setInterval(function() { 
			if(flashColoursSet==false) setFlashWidgetColours(); 
			else {
				embedFlashvars += "colours=" + widgetColours;
				UFO.create(flashPlayer, flashObjectID);
				clearInterval(renderFlashWhenReady); 
			}  
		},250);
	} else { // every other browser
		if(flashColoursSet==false) setFlashWidgetColours(); 
		embedFlashvars += "&colours=" + widgetColours;
		UFO.create(flashPlayer, flashObjectID);
	}	
}

function addSingleColourAndRender(varName,styleName,flashPlayer,flashObjectID) {
	if(navigator.userAgent.indexOf('Safari')>=0) { // sometimes Safari loads CSS last
		function renderAttempt() {
			if(!keyColourSet[styleName]) setFlashKeyColour(styleName); 
			else {
				flashPlayer.addVariable(varName, keyColourSet[styleName]);
				flashPlayer.write(flashObjectID); 
				clearInterval(renderFlashWhenReady); 
			} 
		}
		renderAttempt();
		var renderFlashWhenReady = setInterval(renderAttempt,10);
	} else { // every other browser
		if(!keyColourSet[styleName]) setFlashKeyColour(styleName); 
		flashPlayer.addVariable(varName, keyColourSet[styleName]);
		flashPlayer.write(flashObjectID); 
	}	
}

function addManyColoursAndRender(varNames,styleNames,flashPlayer,flashObjectID) {
	var ifSafari = navigator.userAgent.indexOf('Safari');
	function addVarsAndRender() {
		for(x=0;x<varNames.length;x++) flashPlayer.addVariable(varNames[x], keyColourSet[styleNames[x]]);
		flashPlayer.write(flashObjectID);
		if(ifSafari>=0) { document.getElementById(flashObjectID).parentNode.parentNode.style.visibility = 'visible'; }
	}
	
	function getManyColours() {
		for(x=0;x<varNames.length;x++) { if(!keyColourSet[styleNames[x]]) setFlashKeyColour(styleNames[x]);  }
	}
				
	if(ifSafari>=0) { 
	// for Safari set a interval (as it sometimes loads CSS last)
		var renderFlashWhenReady = setInterval(function() { 
			if(!keyColourSet[styleNames[styleNames.length-1]]) getManyColours();
			else {
				addVarsAndRender();
				clearInterval(renderFlashWhenReady); 
			}  
		},10);
	} else { // every other browser
		getManyColours();
		addVarsAndRender();
	}	
}

function setFlashKeyColour(styleName) {
	var thisColour = getCSSColor('.' + styleName);
	if(thisColour!='') keyColourSet[styleName] = thisColour;
}

var widgetColours;
var globalKeyColour;
var globalBarColour;
var globalChannelColour;
var keyColourSet = new Array;