/**
 * W
 * $.la.w.go(url)
 * $.la.w.decrypt(url)
 * $.la.w.reverse()
 *
 */


(function($) {
    $.la = $.la || {};

    $.extend(true, $.la,
        {
            modules:{
                la :{
                    modules: {
                        w: {
                            active: true
                        }
                    }
                }
            },

            w: {
                go: function(url) {
                    var newWindow = parseInt(url.charAt(0), 10);
                    var tmp = this.decrypt(url);
                    switch (newWindow) {
                        case 3:
                            parent.document.location.href = tmp;
                            break;
                        case 2:
                            top.document.location.href = tmp;
                            break;
                        case 1:
                            window.open(tmp);
                            break;
                        case 0:
                        default:
                            document.location.href = tmp;
                            if (document.all) {
                                window.event.returnValue = false;
                            }
                            break;
                    }
                },
                decrypt: function(url) {
                    url = url.substring(1, url.length)
                        .replace(/&lt;/g, '<')
                        .replace(/&gt;/g, '>')
                        ;
                    var tmp = '';
                    var c = '';
                    for (var i = 0; i < url.length; i++) {
                        c = url.charCodeAt(i);
                        tmp += '' + String.fromCharCode(c - 14);
                    }
                    return tmp;
                },
                reverse: function(sSelector) {
                    if (typeof sSelector != 'string' || '' == sSelector)
                    {
                        sSelector = 'body';
                    }
                    $(sSelector + ' ins').each(function() {
                        try {
                            var rel = $('var', $(this)).attr('class')
                                .replace('&lt;', '<')
                                .replace('&gt;', '>')
                                ;
                            var url = $.la.w.decrypt(rel);
                            var aHtml = unescape($(this).html());
                            switch (parseInt(rel.charAt(0), 10)) {
                                case 3:
                                    var link = '<a href="' + url + '" onclick="parent.document.open(\'' + url + '\'); return false;">' + aHtml + '<' + '/a>';
                                    break;
                                case 2:
                                    var link = '<a href="' + url + '" onclick="top.document.location.href=\'' + url + '\'; return false;">' + aHtml + '<' + '/a>';
                                    break;
                                case 1:
                                    var link = '<a href="' + url + '" onclick="window.open(\'' + url + '\'); return false;">' + aHtml + '<' + '/a>';
                                    break;
                                case 0:
                                default:
                                    var link = '<a href="' + url + '">' + aHtml + '<' + '/a>';
                                    break;
                            }
                            var a = $(link);
                            if ('' != $(this).attr('class'))    a.attr('class', $(this).attr('class'));
                            if ('' != $(this).attr('id'))       a.attr('id', $(this).attr('id'))
                            if ('' != $(this).attr('style'))    a.attr('style', $(this).attr('style'));
                            if ('' != $(this).attr('title'))    a.attr('title', $(this).attr('title'))
                            $('var', a).remove();
                            $(this).before(a).remove();
                        } catch(err) {
                            //rien
                        }

                    });
                },
                B64: {
                    reverse: function() {

                        $('del').each(function() {
                            try {
                                var aHtml = $(this).html();
                                var strHtml = $.la.w.B64.decode(aHtml);

                                $(this).before(strHtml).remove();
                            } catch(err) {
                                //rien
                            }
                        });

                    },

                    // private property
                    _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",

                    // public method for encoding
                    encode : function (input) {
                        var output = "";
                        var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
                        var i = 0;

                        input = $.la.w.B64._utf8_encode(input);

                        while (i < input.length) {

                            chr1 = input.charCodeAt(i++);
                            chr2 = input.charCodeAt(i++);
                            chr3 = input.charCodeAt(i++);

                            enc1 = chr1 >> 2;
                            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
                            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
                            enc4 = chr3 & 63;

                            if (isNaN(chr2)) {
                                enc3 = enc4 = 64;
                            } else if (isNaN(chr3)) {
                                enc4 = 64;
                            }

                            output = output +
                                $.la.w.B64._keyStr.charAt(enc1) + $.la.w.B64._keyStr.charAt(enc2) +
                                $.la.w.B64._keyStr.charAt(enc3) + $.la.w.B64._keyStr.charAt(enc4);

                        }

                        return output;
                    },

                    // public method for decoding
                    decode : function (input) {
                        var output = "";
                        var chr1, chr2, chr3;
                        var enc1, enc2, enc3, enc4;
                        var i = 0;

                        input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

                        while (i < input.length) {

                            enc1 = $.la.w.B64._keyStr.indexOf(input.charAt(i++));
                            enc2 = $.la.w.B64._keyStr.indexOf(input.charAt(i++));
                            enc3 = $.la.w.B64._keyStr.indexOf(input.charAt(i++));
                            enc4 = $.la.w.B64._keyStr.indexOf(input.charAt(i++));

                            chr1 = (enc1 << 2) | (enc2 >> 4);
                            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
                            chr3 = ((enc3 & 3) << 6) | enc4;

                            output = output + String.fromCharCode(chr1);

                            if (enc3 != 64) {
                                output = output + String.fromCharCode(chr2);
                            }
                            if (enc4 != 64) {
                                output = output + String.fromCharCode(chr3);
                            }

                        }

                        output = $.la.w.B64._utf8_decode(output);

                        return output;

                    },

                    // private method for UTF-8 encoding
                    _utf8_encode : function (string) {
                        string = string.replace(/\r\n/g, "\n");
                        var utftext = "";

                        for (var n = 0; n < string.length; n++) {

                            var c = string.charCodeAt(n);

                            if (c < 128) {
                                utftext += String.fromCharCode(c);
                            }
                            else if ((c > 127) && (c < 2048)) {
                                utftext += String.fromCharCode((c >> 6) | 192);
                                utftext += String.fromCharCode((c & 63) | 128);
                            }
                            else {
                                utftext += String.fromCharCode((c >> 12) | 224);
                                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                                utftext += String.fromCharCode((c & 63) | 128);
                            }

                        }

                        return utftext;
                    },

                    // private method for UTF-8 decoding
                    _utf8_decode : function (utftext) {
                        var string = "";
                        var i = 0;
                        var c = c1 = c2 = 0;

                        while (i < utftext.length) {

                            c = utftext.charCodeAt(i);

                            if (c < 128) {
                                string += String.fromCharCode(c);
                                i++;
                            }
                            else if ((c > 191) && (c < 224)) {
                                c2 = utftext.charCodeAt(i + 1);
                                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                                i += 2;
                            }
                            else {
                                c2 = utftext.charCodeAt(i + 1);
                                c3 = utftext.charCodeAt(i + 2);
                                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                                i += 3;
                            }

                        }

                        return string;
                    }
                }
            }
        });
})(jQuery);
