var _MB_replacements;
var _MB_testSrc;
var _MB_imageLoaded;
var _MB_documentLoaded;
var _MB_hideFlicker;

function MB_construct(testSrc, hideFlicker)
{	
  _MB_replacements = new Array();

  _MB_testSrc = testSrc;
  
  _MB_imageLoaded = false;
  _MB_documentLoaded = false;

  if (hideFlicker) {
  	_MB_hideFlicker = hideFlicker;
  } else {
  	_MB_hideFlicker = 0;
  }
}

function MB_addReplacement(selector, src) 
{
	_MB_replacements[_MB_replacements.length] = {name: '', selector: selector, src: src};
}

function MB_addReplacementByName(name, src) 
{
	_MB_replacements[_MB_replacements.length] = {selector: '', name: name, src: src};
}

function _MB_addLoadHandler(handler) 
{	
	if (window.addEventListener) {
		//alert(1);
		window.addEventListener("load", handler, false);
	} else if(window.attachEvent) {
		//alert(2);
		window.attachEvent("onload", handler);
	} else if(window.onload)
	{ 
		var oldHandler = window.onload;
		window.onload = function piggyBack()
		{
			oldHandler();
			handler();
		};
	} else {
		window.onload = handler;
	}
}

function _MB_ol()
{
	_MB_imageLoaded = true; if (_MB_documentLoaded) _MB_replacement();
}

function _MB_hookImage() 
{	
	var testImage = new Image();
	testImage.onload = _MB_ol;
	testImage.src = _MB_testSrc + "?time=" + (new Date()).getTime();	
	
	//alert(testImage.src);
	
	if (_MB_hideFlicker)
	{	
		var tmpArr = new Array();
		var tmpArr2 = new Array();
		
		for (i in _MB_replacements) {
			if (_MB_replacements[i].selector) {
				tmpArr[tmpArr.length] = escape(_MB_replacements[i].selector);
			} else {
				tmpArr2[tmpArr2.length] = escape(_MB_replacements[i].name);
			}
		}
				
		// all selectors
		var hideFlickerCSS = '/pseudo.css.php?selectors=' + tmpArr.join(',') + '&names=' + tmpArr2.join(',');	
		
		//alert(hideFlickerCSS);
		
		document.write('<link id="MB_hide-flicker" rel="stylesheet" media="screen" href="' + hideFlickerCSS + '" />');		
		window.flickerCheck = function()
		{
			if(!_MB_imageLoaded)
				_MB_setStyleSheetState('MB_hide-flicker', false);
		};
		setTimeout('window.flickerCheck();', _MB_hideFlicker)
	}
	
	
}

function _MB_lh() 
{
	_MB_documentLoaded = true; if (_MB_imageLoaded) _MB_replacement();	
}

function MB_execute()
{
	_MB_hookImage();
	_MB_addLoadHandler( _MB_lh );		
}

function _MB_setStyleSheetState(id, enabled) 
{
	var sheet = document.getElementById(id);
	if(sheet) {
		sheet.disabled = (!enabled);
	}
}

function _MB_extractText(element) 
{
	if (typeof element == "string") {
		return element;
	} else if(typeof element == "undefined") {
		return element;
	} else if(element.innerText) {
		return element.innerText;
	}

	var text = '';
	var kids = element.childNodes;
	for (var i = 0; i < kids.length; i++) {

		if(kids[i].nodeType == 1) {
			text += _MB_extractText(kids[i]);
		} else if(kids[i].nodeType == 3) {
			text += kids[i].nodeValue;
		}
	}

	return text;
}

function _MB_replacement() 
{ 
	//alert("replacement");
	for(var i = 0; i < _MB_replacements.length; i++)
	{
	
		if (_MB_replacements[i].selector) {
			var elements = getElementsBySelector(_MB_replacements[i].selector);
		} else {
			var elements = document.getElementsByName(_MB_replacements[i].name);
		}		
		//alert(elements.length);
		
		if(elements.length > 0) for (var j = 0; j < elements.length; j++)
		{
			if(!elements[j])
				continue;
		
			link = elements[j].getAttribute("href");				
			var text = _MB_extractText(elements[j]);
			
	    	while(elements[j].hasChildNodes()) {
				elements[j].removeChild(elements[j].firstChild);
    		}

			var src = _MB_replacements[i].src + "&text="+escape(text);
				
			var link_obj = document.createElement("a");
				
			link_obj.href = link;
				
			var image = document.createElement("img");
			image.className = "replacement";
			image.alt = text;
			image.src = src;
			image.border = 0;
				
			link_obj.appendChild(image);
				
			elements[j].appendChild(link_obj);
		}
	}
	
	if(_MB_hideFlicker)
		_MB_setStyleSheetState('MB_hide-flicker', false);
}
