(function($){
	$.fn.pgpTranslate = function(options){

		var settings = $.extend({
			'doSave'	: false,
			'sourceLang': null,
			'targetLang': null
		}, options);
		
		this.bind('mouseup.pgpTranslate', function(e){
			translate = new Object();
			if(settings.targetLang){
				langSelect = settings.targetLang;
			}	else if($('#trans_lang').length > 0){
				langSelect = $('#trans_lang').val();				
			}	else if(UserData.langCode){
				langSelect = UserData.langCode;				
			}	else	{
				langSelect = null;
			}
						
			if(langSelect){
				translate.targetLang = langSelect;			
			}	else	{
				translate.targetLang = 'en';
			}
			if(settings.sourceLang != null){
				translate.sourceLang = settings.sourceLang;
			} else if(BookData.langCode != ''){
				translate.sourceLang = BookData.langCode;
			}	else	{
				translate.sourceLang = 'en';
			}

			translate.srcText = getSelectedText();			
			
			if(translate.srcText){				
				
				if(settings.doSave && translate.srcText.indexOf(' ') == -1 && UserData.loggedIn){
					translate.save = true;					
				}	else	{
					translate.save = false;
				}
	
				if(translate.sourceLang != translate.targetLang){
					translate.sendData = {
						source: translate.sourceLang,
						target: translate.targetLang,
						str: translate.srcText,											
					}										
					translate.result = doTranslate(e);	

					if(translate.save){
						translate.saveData = {
							book: BookData.ID,
							source: BookData.langCode,
							str: translate.srcText
						}
						doSave(translate.saveData);
					}
				}	else	{
					displayTranslate(e, 'Error: Source and target languages are the same.');
				}	
			}
			
			function doTranslate(e){
				$.ajax({
					type: 'POST',
					url: '/translate/doTranslation',
					data: translate.sendData,
					success: function(data){
						displayTranslate(e,data);
					},												
				});
			}
			function doSave(saveData){				
				$.ajax({
					type: 'POST',
					url: '/members/save_word',
					data: saveData					
				});
			}
			function displayTranslate(e, data){				
				var $msg = $('<div class="translation" title="Click to Close">'+data+'</div>');				
				$msg.appendTo('body');
				width = parseFloat($msg.css('width'));
				time = data.length * 45;
				
				if(time < 2000){
					time = 2000;
				}						

				if( window.getSelection ){
					window.getSelection().removeAllRanges();			
				}	else if ( document.getSelection ){
					document.getSelection.removeAllRanges();
				}	else	{
					document.selection.empty();
				}
				$msg.css({
					position: 'absolute',
					top: e.pageY + 10,
					left: e.pageX - width/2
				})
				.bind('click',function(){
					$(this).stop().animate({
						opacity: 0
					}, 100);
				})				
				.animate({
					opacity: 1
				}, 'fast')
				.delay(time)
				.fadeOut('fast');
													
			}
			
		});		
				
	}
	
	

	function getSelectedText(){
		if( window.getSelection ){
			var text = window.getSelection();		
		}	else if ( document.getSelection ){
			var text = document.getSelection();
		}	else	{
			var text = document.selection.createRange().text;
		}
		text = text
				.toString()
				.trim();
				//.replace(/[-\.\—\(\)'\"\–\“\”\‘\’\•\…\[\]\/#!$%^&\*;:\{\}=\_`~,|<>@\+\d]/g, '');		
		if(text.length > 0){			
			return text;	
		}	else	{			
			return false;
		}
		
	}	
})( jQuery );
