function Translator() {
	
}

Translator.translate = function(preferredLanguage) {
	var result_map = {};
	var id_regexp = /(.*)_translation/;
	var redirect_regexp = /redirectUrl=(.*)/;
	
	$('.language-block').remove();
	$('.result').each(function(i, result) {
		if (!$(result).hasClass('translating')) {
			$(result).addClass('translating');
			var lang = $(result).attr('lang');

			if (lang != preferredLanguage) {		
				$(result).append('<div class="translating-indicator indicator">Translating...</div>');
				var block = $.find('.language-block[lang='+lang+']');
				if (block.length == 0) {
					$('body').append('<div class="language-block" lang="'+lang+'" style="position: absolute; left: -9999px"></div>');
					block = $.find('.language-block[lang='+lang+']');
				}
				
				$(block).append('<div id="'+$(result).attr('id')+'_translation" class="result-block"></div>');
				$('#'+$(result).attr('id')+'_translation').append('<div class="result-title translated">'+$(result).find('.result-title a').html()+'</div>');
				$('#'+$(result).attr('id')+'_translation').append('<div class="result-summary translated">'+$(result).find('.result-summary').html()+'</div>');
			}
		}
	});
	
	$('.language-block').each(function(){
		var lang = $(this).attr('lang');
		Microsoft.Translator.translate(this, $(this).attr('lang'), preferredLanguage,
			function(){
				$('.result-block').each(function(i, translation){
					id = id_regexp.exec($(translation).attr('id'))[1];
					var result = $('#'+id+'[lang='+lang+']');
					result.find('.result-title').prepend('<span class="description">Original Title:</span>');
					var title = $('<div class="result-title translated-title"></div>');
					var orig_link = result.find('.result-title').find('a').attr('href');
					var link_parts = redirect_regexp.exec(orig_link);
					if (link_parts != null) {
						link = $('<a></a>');
						link.attr('href', orig_link.replace(redirect_regexp,'redirectUrl='+encodeURIComponent('http://www.microsofttranslator.com/BV.aspx?from='+lang+'&to='+preferredLanguage+'&a='+link_parts[1])));
						link.attr('target','new');
						link.append($(translation).find('.result-title').first().html());
						title.append(link);
					} else {
						title.append($(translation).find('.result-summary').first().html());
					}
					result.find('.result-title').before(title);
					result.find('.result-summary').prepend('<span class="description">Original Summary:</span>');
					result.find('.result-summary').before('<div class="result-summary translated-summary">'+$(translation).find('.result-summary').first().html()+'</div>');
					result.find('.translating-indicator').remove();
				});
			},
			function(error) {
				MessageBox.displayDialog('Translation Service Failed', 'There was an error with the translation service.',
		                null, YAHOO.widget.SimpleDialog.ICON_WARN);
			} 
		);
//		google.language.translate($(this).innerHTML(), $(this).attr('lang'), preferredLanguage,
//			function(){
//				$('.result-block[attr='+$(this).attr('lang')+']').each(function(i, translation){
//					id = id_regexp.exec($(translation).attr('id'))[1];
//					var result = $('#'+id+'[lang='+lang+']');
//					result.find('.result-title').prepend('<span class="description">Original Title:</span>');
//					result.find('.result-title').before('<div class="result-title translated-title">'+$(translation).find('.result-title').first().html()+'</div>');
//					result.find('.result-summary').prepend('<span class="description">Original Summary:</span>');
//					result.find('.result-summary').before('<div class="result-summary translated-summary">'+$(translation).find('.result-summary').first().html()+'</div>');
//					result.find('.translating-indicator').remove();
//				});
//			}
//		);
	});
}	
