//
// require http://www.google.com/jsapi and jquery.js
//
google.load("language", "1");

if(!window['cdj']) window['cdj'] = {
    default_language: '',
    is_running: false,
    cookie_name: 'cdj_translation',
    getlang : function() {
        if(cdj.default_language) return cdj.default_language;
        if(document.all) return navigator.browserLanguage;
        if(document.layers) return navigator.language;
        if(document.getElementById) return navigator.language.substr(0,2);
    },
    lang_opt : function(){
        var select = '<select id="language_select" style="font-size:small;" onchange="cdj.change_lang();">';
        var d = cdj.getlang();
        for (var lang in google.language.Languages) {
            if( google.language.Languages[lang] != '' && google.language.isTranslatable(google.language.Languages[lang]) == true ) {
                select += '<option value="' + google.language.Languages[lang] + '"';
                if( google.language.Languages[lang] == d ) select += 'selected="selected"';
                select +=  '>' + lang + '</option>';
            };
        }
        select += '</select>';
        return select;
    },
    setcookie: function(name, value, expire) {
        if( name == undefined && value == undefined ) return;
        var str = name + '=' + value + ';path=/';
        document.cookie = str;
        return document.cookie;
    },
    cookies: function(){
        var cookies = document.cookie.split("; ");
        var cookie = {};
        for(  var i=0; i<cookies.length; i++ ) {
            var values = cookies[i].split('=');
            cookie[values[0]] = values[1];
        }
        return cookie;
    },
    sleep_html: '<a href="javascript:cdj.start();">Translate This Page</a>',
    start_html: '<img src="/icons/close.gif" alt="x" style="cursor:pointer; float:right;" onclick="cdj.sleep();" /><img src="//www.cdjapan.co.jp/icons/Translate_mini.png" alt="CDJapan" style="width: 150px; float:left;"/><div style="margin-bottom: 10px; clear:left;"><a href="javascript:cdj.start();">Translate This Page</a></div>',
    stop_html: function() {
        var list = cdj.lang_opt();
        var str = '<div style="font-weight:bold;">Select Language</div>' + list + '<div style="font-size:10px;">Point mouse cursor to area of this page where you need translation. Click mouse when it is highlighted.</div><a href="javascript:cdj.sleep();">Close</a>';
         return str;
    },
    init : function(){
        //if( cdj.getlang() == 'en' ) return;
        if($('.cdj-trans').length == 0 ) return;
        if( $.browser.msie && (
                $.browser.version == '5.0'
             || $.browser.version == '5.5'
            )
        ) {
            return;
        }


        $('body').append('<div id="translation" style="background-color:#87CEFA; position:fixed;bottom:0; right:5px; z-index: 101; padding: 5px; width: 200px; height:70px; border:2px solid #1E90FF;font-size:small; filter: alpha(opacity=95);-moz-opacity:0.95;opacity:0.95;">' + cdj.start_html + '</div>');
        google.language.getBranding(document.getElementById('translation'), 'vertical');
        // ie6hack
        if( $.browser.msie && $.browser.version == '6.0' ) {
            cdj.ie6hack();
            $(window).scroll(cdj.ie6hack);
        }

        $('body').append('<div id="translation-navi" style="position:absolute; width: 300px; background: #F0F0F0; border:solid 1px #ccc;padding: 8px; visibility:hidden; z-index: 100;"></div>');
        var cookie = cdj.cookies();
        if( cookie[cdj.cookie_name] ) {
            var config = cookie.cdj_translation.split('|');
            if(config[0]) {
                cdj.default_language = config[0];
            }
            else {
                cdj.default_language = cdj.getlang();
            }

            if( config[1] == 'true' ) {
                cdj.start();
                return;
            }
            else if( config[1] == 'sleep' ) {
                cdj.sleep();
            }
        }

        if(!cdj.default_language) cdj.default_language = cdj.getlang();
        $('#trans-start').click(cdj.start);
    },
    ie6hack : function(){
        var scroll = $('html').offset();
        var height = $(window).height() + scroll.top - 20;
        var box_height = $('#translation').height();
        $('#translation').css({
            position: 'absolute',
            top: height - box_height
        });
    },
    pre_color: '#FFF',
    start : function() {
        $('.cdj-trans').each(function(){
            var text = $(this).html();
            if( text.length > 500 ) {
                //var ca = text.split(/\r\n|[\n\r]/gi);
                var ca = text.split(/<(?:br|BR|Br)[\w\s:;=\."]*>/g);
                var alter_html = '';
                for( var p=0; p<ca.length;p++ ) {
                    if( ca[p] != '' && !ca[p].match(/^(?:\s*<[\w\s:;=\."]+>\s*)*$/) && !ca[p].match(/^(?:\r\n|[\n\r\s])$/) ) {
                        alter_html += '<div class="cdj-trans" class="padding:0;mergin:0;">' + ca[p] + '</div>';
                    }
                    else {
                        alter_html += ca[p] + '<br />';
                    }
                }
                $(this).removeClass('cdj-trans').html(alter_html);
            }
        });

        $('.cdj-trans').each(function(){
            $(this).click(cdj.translateEvent)
                   .mouseover(function(){
                       cdj.pre_color = $(this).css('backgroundColor');
                       $(this).css( {backgroundColor: '#FFEC8B'} );
                   })
                   .mouseout(function(){
                       var color = cdj.pre_color;
                       if( !color ) color = '#FFF';
                       $(this).css( {backgroundColor: color} );
                   });
        });

        cdj.is_running = true;
        cdj.setcookie( cdj.cookie_name, cdj.default_language + '|' + true );
        $('#translation').css({ height : '100px'} ).html(cdj.stop_html());
        if( $.browser.msie && $.browser.version == '6.0' )  cdj.ie6hack();
    },
    stop : function () {
        $('.cdj-trans').each(function(){
            $(this).unbind('mouseover').unbind('mouseout').unbind('click');
        });
        cdj.is_running = false;
        cdj.setcookie( cdj.cookie_name, cdj.default_language + '|' + false );
        $('#translation').css({height:'70px'}).html(cdj.start_html);
        google.language.getBranding(document.getElementById('translation'), 'horizontal');
        if( $.browser.msie && $.browser.version == '6.0' )  cdj.ie6hack();
    },
    sleep : function () {
        $('.cdj-trans').each(function(){
            $(this).unbind('mouseover').unbind('mouseout').unbind('click');
        });
        cdj.is_running = false;
        cdj.setcookie( cdj.cookie_name, cdj.default_language + '|' + 'sleep' );
        $('#translation').css({height:'15px'}).html(cdj.sleep_html);
        if( $.browser.msie && $.browser.version == '6.0' )  cdj.ie6hack();
    },
    translateEvent: function(e){
        var navi = cdj.navigation();
        navi.html('loading...');
        cdj.translate($(this));
        navi.css({
            top : (e.pageY + 5 )+ 'px',
            left : (e.pageX + 5 ) + 'px'
        });

        var offset = navi.offset();
        var offset_top = offset.top - $(window).scrollTop();
        var offset_left = offset.left - $(window).scrollLeft();
        var position = navi.position;
        var height = $(window).height();
        var width = $(window).width();

        var w = navi.css('width');
        var h = navi.css('height');
        w = w.replace("px", "");
        h = h.replace("px", "");
        var a = width - (offset_left + 5 + parseInt(w));
        var b = height - (offset_top + 5 + parseInt(h));

        if( a <= 0 ) navi.css({ left: (e.pageX + 5) - w  });
        if( b <= 0 ) navi.css({ top: (e.pageY + 5)- h });
        navi.css({visibility: 'visible'});
    },
    navigation : function() {
        return $('#translation-navi');
    },
    change_lang : function(){
        cdj.default_language = $("#language_select option:selected").val();
        cdj.setcookie( cdj.cookie_name, cdj.default_language + '|' + cdj.is_running );
    },
    translate : function(element) {
        var html = element.html();
        html = html.replace(/(?:\n\r)|[\n\r]/, "");
        html = html.replace(/<(?:img|IMG)[0-9a-zA-Z\#\%\&\(\)\-\_\+\=\s:;\."\/']*>/,""),
        google.language.translate(
            html,
            "en",
            $("#language_select option:selected").val(),
            function(result) {
                if (result.error) {
                    alert("Error:" + result.message);
                    return;
                }
                if (result.translation) {
                    var p = cdj.navigation();
                    cdj.translationSuccess(p, result.translation);
                }
            }
        );
    },
    translationSuccess: function(element, translation) {
        element.html( cdj.closeButton + translation );
        google.language.getBranding(document.getElementById('translation-navi'), 'horizontal');
    },
    closeButton : '<div id="trans-close" style="text-align:right;"><img src="/icons/close.gif" alt="x" style="cursor:pointer;" onclick="cdj.navigation().css({ visibility: \'hidden\' });" /></div>'
};

google.setOnLoadCallback(cdj.init);
