if (!FormSave) { var FormSave = {}; };
if (!FormSave.ids) { FormSave.ids = {}; };

   FormSave.lifespan = 365; 
   FormSave.ids.username = "username";
   FormSave.ids.password = "password";
   FormSave.ids.save = "save_data";
   FormSave.ids.form = "login_form";


FormSave.encrypt = function(plain) {
    return TEA.enc(plain+"", FormSave.key()+"");
};
FormSave.decrypt = function(cipher) {
    return TEA.dec(cipher+"", FormSave.key()+"");
};

FormSave.key = function() {
    var u = navigator.appCodeName + navigator.appMinorVersion + navigator.appName +
        navigator.browserLanguage + navigator.language + navigator.cpuClass +
        navigator.platform + navigator.userAgent + screen.colorDepth +
        screen.height + screen.width + "eR0@&#TvXJmgxJVutGOOX#rWd!eYB2" +
        FormSave.salt();
    return SHA1.hexdigest(u);
};

FormSave.salt = function() {
    var s = Cookies.get('fs3');
    if (!s) {
        s = "";
        for (var i=0; i<32; i++) {
            s += String.fromCharCode(Math.floor(Math.random() * 255));
        }
        Cookies.set('fs3', s, FormSave.lifespan);
    }
    return s;
}

FormSave.initialize = function() {
    if (FormSave.hook()) {
        FormSave.populate();
    }
}

FormSave.hook = function() {
    var f = document.getElementById(FormSave.ids.form);
    if (f) {
        f.onsubmit = 'return FormSave.submitHandler();';
        // Mozilla/W3C listener
        if (f.addEventListener) {
            f.addEventListener('submit', FormSave.submitHandler, true);
            return true;
        }
        // IE-style listener
        if (f.attachEvent && f.attachEvent('onsubmit', FormSave.submitHandler)) {
            return true
        }
    }
    return false;
}

FormSave.populate = function() {
    var save_data = (Cookies.get('fs1') == 'yes');
    if (save_data) {
        var ck = FormSave.decrypt(Cookies.get("fs2")).split("\n");
        if (ck[0] == 'FSOK') {
            var username = ck[1];
            var password = ck[2];
            document.getElementById(FormSave.ids.username).value = username;
            document.getElementById(FormSave.ids.password).value = password;
            document.getElementById(FormSave.ids.save).checked = save_data;
        } else {
            Cookies.erase('fs1');
            Cookies.erase('fs1');
            Cookies.erase('fs3');
        }
    }
};

FormSave.submitHandler = function() {
    if (document.getElementById(FormSave.ids.save).checked) {
        var username = document.getElementById(FormSave.ids.username).value;
        var password = document.getElementById(FormSave.ids.password).value;
        Cookies.set('fs2', FormSave.encrypt("FSOK\n"+username+"\n"+password), FormSave.lifespan);
        Cookies.set('fs1', 'yes', FormSave.lifespan);
    } else {
        Cookies.erase('fs1');
        Cookies.erase('fs2');
        Cookies.erase('fs3');
    }
    return true;
};

if (!Cookies) { var Cookies = {}; };

Cookies.set = function(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+encodeURIComponent(value)+expires+"; path=/; domain=.bt2.tv";
};

Cookies.get = function(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return decodeURIComponent(c.substring(nameEQ.length,c.length));
    }
    return null;
};

Cookies.erase = function(name) {
    Cookies.set(name,"",-1);
};


if (!TEA) { var TEA = {}; };

TEA.enc = function(val, key) {
    var v = TEA.strToLongs(escape(val).replace(/%20/g,' '));
    var k = TEA.strToLongs(key.slice(0,16)); 
    var n = v.length;
    if (n == 0) return("");
    if (n == 1) v[n++] = 0;
    var z = v[n-1], y = v[0], delta = 0x9E3779B9;
    var mx, e, q = Math.floor(6 + 52/n), sum = 0;
    while (q-- > 0) {  
        sum += delta;
        e = sum>>>2 & 3;
        for (var p = 0; p < n-1; p++) {
            y = v[p+1];
            mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z)
            z = v[p] += mx;
        }
        y = v[0];
        mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z)
        z = v[n-1] += mx;
    }
    return TEA.longsToStr(v);
};

TEA.dec = function(val, key) {
    var v = TEA.strToLongs(val); var k = TEA.strToLongs(key.slice(0,16)); var n = v.length;
    if (n == 0) return("");
    var z = v[n-1], y = v[0], delta = 0x9E3779B9;
    var mx, e, q = Math.floor(6 + 52/n), sum = q*delta;
    while (sum != 0) {
        e = sum>>>2 & 3;
        for (var p = n-1; p > 0; p--) {
            z = v[p-1];
            mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z)
            y = v[p] -= mx;
        }
        z = v[n-1];
        mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z)
        y = v[0] -= mx;
        sum -= delta;
    }
    var s = TEA.longsToStr(v);
    if (s.indexOf("\x00") != -1) {
        s = s.substr(0, s.indexOf("\x00"));
    }
    return unescape(s);
};

TEA.strToLongs = function(s) { 
    var l = new Array(Math.ceil(s.length/4))
    for (var i=0; i<l.length; i++) {
        l[i] = s.charCodeAt(i*4) + (s.charCodeAt(i*4+1)<<8) + 
               (s.charCodeAt(i*4+2)<<16) + (s.charCodeAt(i*4+3)<<24);
    }
    return l; 
};           
TEA.longsToStr = function(l) { 
    var a = new Array(l.length);
    for (var i=0; i<l.length; i++) {
        a[i] = String.fromCharCode(l[i] & 0xFF, l[i]>>>8 & 0xFF, 
                                 l[i]>>>16 & 0xFF, l[i]>>>24 & 0xFF);
    }
    return a.join('');  
};


if (!SHA1) { var SHA1 = {}; };
SHA1.hexdigest = function (msg) {
    
    var K = new Array(0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6);
    
 
    msg += String.fromCharCode(0x80); 
    
    var l = Math.ceil(msg.length/4) + 2;  
    var N = Math.ceil(l/16);              
    var M = new Array(N);
    for (var i=0; i<N; i++) {
        M[i] = new Array(16);
        for (var j=0; j<16; j++) {  
            M[i][j] = (msg.charCodeAt(i*64+j*4)<<24) | (msg.charCodeAt(i*64+j*4+1)<<16) | 
                      (msg.charCodeAt(i*64+j*4+2)<<8) | (msg.charCodeAt(i*64+j*4+3));
        }
    }
    
    M[N-1][14] = ((msg.length-1) >>> 30) * 8;
    M[N-1][15] = ((msg.length-1)*8) & 0xffffffff;
    
    var H0 = 0x67452301;
    var H1 = 0xefcdab89;
    var H2 = 0x98badcfe;
    var H3 = 0x10325476;
    var H4 = 0xc3d2e1f0;
    
    var W = new Array(80); var a, b, c, d, e;
    for (var i=0; i<N; i++) {
        
        for (var t=0;  t<16; t++) W[t] = M[i][t];
        for (var t=16; t<80; t++) W[t] = SHA1.rotl(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16], 1);
        
        a = H0; b = H1; c = H2; d = H3; e = H4;
        
        for (var t=0; t<80; t++) {
            var s = Math.floor(t/20); 
            T = (SHA1.rotl(a,5) + SHA1.f(s,b,c,d) + e + K[s] + W[t]) & 0xffffffff;
            e = d;
            d = c;
            c = SHA1.rotl(b, 30);
            b = a;
            a = T;
        }
        
        H0 = (H0+a) & 0xffffffff;  
        H1 = (H1+b) & 0xffffffff; 
        H2 = (H2+c) & 0xffffffff; 
        H3 = (H3+d) & 0xffffffff; 
        H4 = (H4+e) & 0xffffffff;
    }
    return H0.toHexStr() + H1.toHexStr() + H2.toHexStr() + H3.toHexStr() + H4.toHexStr();
};

SHA1.f = function(s, x, y, z) {
    switch (s) {
    case 0: return (x & y) ^ (~x & z);
    case 1: return x ^ y ^ z;
    case 2: return (x & y) ^ (x & z) ^ (y & z);
    case 3: return x ^ y ^ z;
    }
};

SHA1.rotl = function(x, n) {
    return (x<<n) | (x>>>(32-n));
};

Number.prototype.toHexStr = function() {
    var s="", v;
    for (var i=7; i>=0; i--) { v = (this>>>(i*4)) & 0xf; s += v.toString(16); }
    return s;
}

window.onload = FormSave.initialize;


