var _MT_replacements;
var _MT_testSrc;
var _MT_imageLoaded;
var _MT_documentLoaded;
var _MT_hideFlicker;
var _MT_wordWrap;

//alert(1);

function MT_construct(testSrc, hideFlicker)
{	
  _MT_replacements = new Array();

  _MT_testSrc = testSrc;
  
  _MT_imageLoaded = false;
  _MT_documentLoaded = false;

  if (hideFlicker) {
  	_MT_hideFlicker = hideFlicker;
  } else {
  	_MT_hideFlicker = 0;
  }
  
  _MT_wordWrap = new Array();
  
}

function MT_addReplacement(selector, src, wordWrap) 
{
	_MT_replacements[_MT_replacements.length] = {name: '', selector: selector, src: src, wordwrap: wordWrap};
}

function MT_addReplacementByName(name, src, wordWrap) 
{
	_MT_replacements[_MT_replacements.length] = {selector: '', name: name, src: src, wordwrap: wordWrap};
}

function _MT_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 _MT_ol()
{
	_MT_imageLoaded = true; if (_MT_documentLoaded) _MT_replacement();
}

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

function _MT_lh() 
{
	_MT_documentLoaded = true; if (_MT_imageLoaded) _MT_replacement();	
}

function MT_execute()
{
	_MT_hookImage();
	_MT_addLoadHandler( _MT_lh );		
}

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

function _MT_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 += _MT_extractText(kids[i]);
		} else if(kids[i].nodeType == 3) {
			text += kids[i].nodeValue;
		}
	}

	return text;
}

//function inArray(needle, haystack)
//{
//  if (haystack.length == 0 || !haystack) {
//    return false;
//  } else if (needle == haystack.pop()) {
//  	return true;
//  } else {
//  	return inArray(needle, haystack);
//  }
//}

function _MT_replacement() 
{ 
	//alert("replacement");
	for(var i = 0; i < _MT_replacements.length; i++)
	{
	
		if (_MT_replacements[i].selector) {
			var elements = getElementsBySelector(_MT_replacements[i].selector);
		} else {
			var elements = document.getElementsByName(_MT_replacements[i].name);	
		}
			
		if(elements.length > 0) for (var j = 0; j < elements.length; j++)
		{
			if(!elements[j])
				continue;
		
			var text = _MT_extractText(elements[j]);
			
	    	while(elements[j].hasChildNodes()) {
				elements[j].removeChild(elements[j].firstChild);
	    	}
            
            if (_MT_replacements[i].wordwrap) {
            	
            	tokens = text.split(' ');
            	
            	if (_MT_replacements[i].wordwrap > 1) {
            		
            		var new_tokens = new Array();
            		
            		for (var q = 0; q < tokens.length; q += _MT_replacements[i].wordwrap) {
            			
            			var new_str = new Array();
						for (var r = q; r < tokens.length && r < q + _MT_replacements[i].wordwrap; r++) {
							new_str.push(tokens[r])
						}
            			
            			new_tokens.push(new_str.join(' '));
            				
            		}
            		
            		tokens = new_tokens;
            			
            	}
            	
            } else {
                tokens = [text];
            }
            
            //alert(tokens);
            
            for(var k = 0; k < tokens.length; k++)
            {
    		
				var src = _MT_replacements[i].src + "&text="+escape(tokens[k] + (k < tokens.length - 1 ? ' ' : ''));
					
				//var link = document.createElement("a");
					
				//link.href = link;
					
				var image = document.createElement("img");
				image.className = "replacement";
				image.alt = text;
				image.src = src;
				image.border = 0;
					
				//link.appendChild(image);
					
				elements[j].appendChild(image);
            }
		}
	}
	
	if(_MT_hideFlicker)
		_MT_setStyleSheetState('MT_hide-flicker', false);
}