Tools = {
    encodebr: function(text)
    {
       return text.replace(/\n/g, '<br />');
    },
    
    decodebr: function(text)
    {
       return text;
    },
    
    switchLanguage: function( elem )
    {
        var prop = {};
        var propid = {};
        $(elem).siblings('a').each(
            function(id){
               prop[$(this).attr('direction') == 'from'?'to':'from'] = $(this).text();
            }
        );
        prop['to']   = prop['to'].replace(/ого$/, 'ий');
        prop['from'] = prop['from'].replace(/ий$/, 'ого');
        $(elem).siblings('a').each(
            function(id){
               $(this).text(prop[$(this).attr('direction')]);
            }
        );
        var fromDirection = $(elem).parent().parent().parent().attr('from');
        var toDirection = $(elem).parent().parent().parent().attr('to');
        $(elem).parent().parent().parent().attr('from', toDirection).attr('to', fromDirection);
    },
    
	getSelectedText: function()
	{
	    var txt = '';
	    if (window.getSelection){ return window.getSelection(); }
	    else if (document.getSelection){ return document.getSelection(); }
	    else if (document.selection){ return  document.selection.createRange().text; }
	    else { alert('Вы не выбрали текст для перевода');}
	}    
    
}

SelectLanguageDialog = {
   getElementPosition: function(elem)
   {
       return $(elem).offset();
   },
   
   getElementYPosition: function( elem )
   {
       var position = this.getElementPosition( elem );
       return position.top - this.getYShift( elem );  
   },
   
   getElementXPosition: function( elem )
   {
       var position = this.getElementPosition( elem );
       return position.left - this.getXShift( elem );  
   },
   
   getXShift: function( elem )
   {
       return $('#selectlang').width();
   },
   
   getYShift: function( elem )
   {
      return $('#advertise').height() + 110 ;
   },
   
   setLanguage: function( elem )
   {
       var type      = $('#selectlang').attr('type');
       var direction = $('#selectlang').attr('direction');
       $('.'+type).attr(direction, $( elem ).attr('ln'));
       $('.'+type+' div.header h1 a').each(
          function(id){
             if($(this).attr('direction') == direction){
                 if(direction == 'from'){
                    $(this).text( $(elem).text().replace(/ий$/, 'ого') );
                 }else{
                    $(this).text( $(elem).text() );
                 }   
                 $('#selectlang').hide();
                 return;
             }
          }
       );
   },
   
   setDialogBoxParam: function( elem )
   {
       $('#selectlang').attr('type', $(elem).parent().parent().parent().attr('class')).attr('direction', $(elem).attr('direction'));
   },
      
   show: function( elem )
   {
       this.setDialogBoxParam( elem );
       if($('#selectlang').css('position') == 'absolute'){
	       $('#selectlang').css({ 'margin-top': this.getElementYPosition( elem ), 'margin-left': this.getElementXPosition( elem )}).show();
       }else{
    	   $('#selectlang').slideDown();
       }
   }
}

TranslateText = {
    _splitstring: '!@#^#%$$@%@^&$',
    _textLimit: 5000,
    _translatedTop: 400,
    _translatedBottom: 150,

    showProgressBar: function()
    {
       $('.translatetext div.ajaxloader').show();
    },
    
    hideProgressBar: function()
    {
       $('.translatetext div.ajaxloader').hide();
    },
    
    getTranslatedTextLength: function()
    {
        return $('#transtextfrom').val().length;
    },
    
    showSymbolsLength: function()
    {
        var len = TranslateText.getTranslatedTextLength();
    	$('#smbl').text(len).css('color', TranslateText._textLimit - len < 0 ? 'red' : '#008FDA');

		var textLen = $('#transtextfrom').val().length;
    	if(textLen > 500){
    	    $('#transtextfrom').css('height', (parseInt(textLen/800) + 1) + '00px');
    	    return;
    	}
    },

    addToHistory: function(from, to, fromlabel, tolabel)
    {
       var content = '<div class="item"><div class="to">';
           content += '<div class="editblock"><img src="/public/images/design/edit.png" alt="редактировать блок"  onclick="TranslateText.editBlock(this); return false;"><img src="/public/images/design/delete.gif" alt="удалить блок" onclick="TranslateText.deleteBlock(this); return false;"></div>';
           content += '<div class="translatedirectionlabel">'+ tolabel + '</div><span>'+ to +'</span></div><div class="from" onmouseup="console.log(Tools.getSelectedText());"><div class="translatedirectionlabel">'+ fromlabel + '</div><span>'+ from +'</span></div></div><br style="clear:both;">';
           content +=  '<div class="statistic">' + to.length + ' знк., ' + to.split(' ').length + ' слов, стоимость перевода ' + TranslateText._getTranslatedBottom(to.length) + '-' + TranslateText._getTranslatedTop(to.length) + ' руб.</div>'; 
       $('#translated').prepend(content);
       if($('#translatedhistory').css('display') == 'none')$('#translatedhistory').slideDown('slow');
    },

    deleteBlock: function(elem)
    {
		$(elem).parents('.item').slideUp();    
    },

	editBlock: function(elem)
	{
	    var text = $(elem).parent().hide().siblings('.translatedirectionlabel').hide().siblings('span').html();
	    text = text.replace(/<br>/ig, "\n");
	    var height = $(elem).parents('div.item').height() > 100 ? $(elem).parents('div.item').height() : 100 ;
	    $(elem).parent().siblings('span').html('<textarea style="height: ' + height + 'px;">' + text + '</textarea><img src="/public/images/design/save.png" align="absmiddle"><a href="#" onclick="TranslateText.saveBlock(this); return false;">сохранить</a>');
	},
	
	saveBlock: function(elem)
	{
	    var text = $(elem).siblings('textarea').val();
	    text = text.replace(/\n/ig, "<br>");
	    $(elem).parent().html(text).siblings('div.editblock').show().siblings('.translatedirectionlabel').show();
	    
	},

    _getTranslatedBottom: function(smb)
    {
        return parseInt(smb/1000*TranslateText._translatedBottom);
    },

    _getTranslatedTop: function(smb)
    {
        return parseInt(smb/1000*TranslateText._translatedTop);
    },

    translate: function()
    {
        if(TranslateText.getTranslatedTextLength() == 0){
            alert('Необходимо ввести текст для перевода');
            return;
        }
    
        if(TranslateText._textLimit - TranslateText.getTranslatedTextLength() < 0){
           alert('Текст не может превышать ' + TranslateText._textLimit + ' символов');
           return;
        }
        this.showProgressBar();
        $('#transtextto').hide();
        
        $.post(
        '/ajax/translate/', 
        {'from': $('.translatetext').attr('from'), 'to' : $('.translatetext').attr('to'), 'text' : Tools.encodebr( $('#transtextfrom').val() )}, 
        function(data){
           if(data.responseStatus == 200){
	          $('#transtextto').html(Tools.decodebr( data.responseData.translatedText ));
	          TranslateText.hideProgressBar();
	          TranslateText.addToHistory(Tools.encodebr( $('#transtextfrom').val() ), Tools.decodebr( data.responseData.translatedText ), $('.translatetext').attr('from'), $('.translatetext').attr('to') );
	          $('#transtextto').slideDown('slow');           
           }else{
              alert('Translate error: ' + data.responseDetails); 
           }
        }, 
        "json");
    },
    
    getTranslateForSend: function()
    {
        var from = [];
        var fromlabel = [];
        var to = [];
        var tolabel = [];
        
        $('#translated .item .from span').each(
           function(){
              from.push($(this).text());
           }
        );
        
        $('#translated .item .to span').each(
           function(){
              to.push($(this).text());
           }
        );
        
        $('#translated .item .from .translatedirectionlabel').each(
           function(){
              fromlabel.push($(this).text());
           }
        );
        
        $('#translated .item .to .translatedirectionlabel').each(
           function(){
              tolabel.push($(this).text());
           }
        );
        
        $('#translatedcontent .from').val(from.join(TranslateText._splitstring));
        $('#translatedcontent .fromlabel').val(fromlabel.join(TranslateText._splitstring));
        $('#translatedcontent .to').val(to.join(TranslateText._splitstring));
        $('#translatedcontent .tolabel').val(tolabel.join(TranslateText._splitstring));
        
        $('#translatedcontent .isDualMode').val( $('#translatedcontent .isDualMode').val() );
        
		if($('#sendertype').val() == 'mail'){
	        $.post(
	        '/doc/mail/', 
	        {'from':  $('#translatedcontent .from').val(), 'to' : $('#translatedcontent .to').val(), 'fromlabel': $('#translatedcontent .tolabel').val(), 'fromlabel': $('#translatedcontent .tolabel').val(), 'isDualMode': $('#isDualMode').attr('checked'), 'email': $('#useremail').val()}, 
	        function(data){
	           if(data){
	              $('.save .message').text(data); 
	           }else{
	              $('.save .message').text('Ваше письмо отправлено');
	           }
	           
	        });		
		}else{        
	        $('#translatedcontent').attr('action', '/doc/' + $('#sendertype').val() + '/' );
	     	$('#translatedcontent').submit();
     	}
     	$('.save .more').slideUp('slow');
    }
    
    

}

TranslatePage = {
    translate: function()
    {
       transWin = open("http://google.com/translate_c?hl="+$('.translatehttp').attr('from')+"&sl="+$('.translatehttp').attr('from')+"&tl="+$('.translatehttp').attr('to')+"&u="+$('#transhttp').val());
    }
}
