/* *  MLgifLib.js, version 0.3.4 *  Last modified: 5/26/2006 * *  Creative Commons: http://creativecommons.org/licenses/by-sa/2.1/jp/ *  URL: http://miwa.offside.ne.jp/ *  Copyright: (C)2006 Eiji Miwa All rights reserved. */var MLgifLib = function() {  this.initialize.apply(this,arguments);}MLgifLib.prototype = {  initialize: function() {    this.w = (typeof arguments[0]=='number'&&arguments[0]<=0xFFFF&&arguments[0]>=1)?arguments[0]:1;    this.h = (typeof arguments[1]=='number'&&arguments[1]<=0xFFFF&&arguments[1]>=1)?arguments[1]:1;    this.l = (typeof arguments[2]=='number'&&arguments[2]<=0xFFFF&&arguments[2]>=0)?arguments[2]:0;    this.d = (typeof arguments[3]=='number'&&arguments[3]<=0x0008&&arguments[3]>=1)?arguments[3]:8;    this.d2 = (this.d<4)?4:this.d;    this.f = new Array();    this.b2h = {      '00000000':'%00','00000001':'%01','00000010':'%02','00000011':'%03','00000100':'%04','00000101':'%05',      '00000110':'%06','00000111':'%07','00001000':'%08','00001001':'%09','00001010':'%0A','00001011':'%0B',      '00001100':'%0C','00001101':'%0D','00001110':'%0E','00001111':'%0F','00010000':'%10','00010001':'%11',      '00010010':'%12','00010011':'%13','00010100':'%14','00010101':'%15','00010110':'%16','00010111':'%17',      '00011000':'%18','00011001':'%19','00011010':'%1A','00011011':'%1B','00011100':'%1C','00011101':'%1D',      '00011110':'%1E','00011111':'%1F','00100000':'%20','00100001':'%21','00100010':'%22','00100011':'%23',      '00100100':'%24','00100101':'%25','00100110':'%26','00100111':'%27','00101000':'%28','00101001':'%29',      '00101010':'%2A','00101011':'%2B','00101100':'%2C','00101101':'%2D','00101110':'%2E','00101111':'%2F',      '00110000':'%30','00110001':'%31','00110010':'%32','00110011':'%33','00110100':'%34','00110101':'%35',      '00110110':'%36','00110111':'%37','00111000':'%38','00111001':'%39','00111010':'%3A','00111011':'%3B',      '00111100':'%3C','00111101':'%3D','00111110':'%3E','00111111':'%3F','01000000':'%40','01000001':'%41',      '01000010':'%42','01000011':'%43','01000100':'%44','01000101':'%45','01000110':'%46','01000111':'%47',      '01001000':'%48','01001001':'%49','01001010':'%4A','01001011':'%4B','01001100':'%4C','01001101':'%4D',      '01001110':'%4E','01001111':'%4F','01010000':'%50','01010001':'%51','01010010':'%52','01010011':'%53',      '01010100':'%54','01010101':'%55','01010110':'%56','01010111':'%57','01011000':'%58','01011001':'%59',      '01011010':'%5A','01011011':'%5B','01011100':'%5C','01011101':'%5D','01011110':'%5E','01011111':'%5F',      '01100000':'%60','01100001':'%61','01100010':'%62','01100011':'%63','01100100':'%64','01100101':'%65',      '01100110':'%66','01100111':'%67','01101000':'%68','01101001':'%69','01101010':'%6A','01101011':'%6B',      '01101100':'%6C','01101101':'%6D','01101110':'%6E','01101111':'%6F','01110000':'%70','01110001':'%71',      '01110010':'%72','01110011':'%73','01110100':'%74','01110101':'%75','01110110':'%76','01110111':'%77',      '01111000':'%78','01111001':'%79','01111010':'%7A','01111011':'%7B','01111100':'%7C','01111101':'%7D',      '01111110':'%7E','01111111':'%7F','10000000':'%80','10000001':'%81','10000010':'%82','10000011':'%83',      '10000100':'%84','10000101':'%85','10000110':'%86','10000111':'%87','10001000':'%88','10001001':'%89',      '10001010':'%8A','10001011':'%8B','10001100':'%8C','10001101':'%8D','10001110':'%8E','10001111':'%8F',      '10010000':'%90','10010001':'%91','10010010':'%92','10010011':'%93','10010100':'%94','10010101':'%95',      '10010110':'%96','10010111':'%97','10011000':'%98','10011001':'%99','10011010':'%9A','10011011':'%9B',      '10011100':'%9C','10011101':'%9D','10011110':'%9E','10011111':'%9F','10100000':'%A0','10100001':'%A1',      '10100010':'%A2','10100011':'%A3','10100100':'%A4','10100101':'%A5','10100110':'%A6','10100111':'%A7',      '10101000':'%A8','10101001':'%A9','10101010':'%AA','10101011':'%AB','10101100':'%AC','10101101':'%AD',      '10101110':'%AE','10101111':'%AF','10110000':'%B0','10110001':'%B1','10110010':'%B2','10110011':'%B3',      '10110100':'%B4','10110101':'%B5','10110110':'%B6','10110111':'%B7','10111000':'%B8','10111001':'%B9',      '10111010':'%BA','10111011':'%BB','10111100':'%BC','10111101':'%BD','10111110':'%BE','10111111':'%BF',      '11000000':'%C0','11000001':'%C1','11000010':'%C2','11000011':'%C3','11000100':'%C4','11000101':'%C5',      '11000110':'%C6','11000111':'%C7','11001000':'%C8','11001001':'%C9','11001010':'%CA','11001011':'%CB',      '11001100':'%CC','11001101':'%CD','11001110':'%CE','11001111':'%CF','11010000':'%D0','11010001':'%D1',      '11010010':'%D2','11010011':'%D3','11010100':'%D4','11010101':'%D5','11010110':'%D6','11010111':'%D7',      '11011000':'%D8','11011001':'%D9','11011010':'%DA','11011011':'%DB','11011100':'%DC','11011101':'%DD',      '11011110':'%DE','11011111':'%DF','11100000':'%E0','11100001':'%E1','11100010':'%E2','11100011':'%E3',      '11100100':'%E4','11100101':'%E5','11100110':'%E6','11100111':'%E7','11101000':'%E8','11101001':'%E9',      '11101010':'%EA','11101011':'%EB','11101100':'%EC','11101101':'%ED','11101110':'%EE','11101111':'%EF',      '11110000':'%F0','11110001':'%F1','11110010':'%F2','11110011':'%F3','11110100':'%F4','11110101':'%F5',      '11110110':'%F6','11110111':'%F7','11111000':'%F8','11111001':'%F9','11111010':'%FA','11111011':'%FB',      '11111100':'%FC','11111101':'%FD','11111110':'%FE','11111111':'%FF'    };    this.c = new Array(      '%FF%FF%FF','%FF%FF%CC','%FF%FF%99','%FF%FF%66','%FF%FF%33','%FF%FF%00','%FF%CC%FF','%FF%CC%CC',      '%FF%CC%99','%FF%CC%66','%FF%CC%33','%FF%CC%00','%FF%99%FF','%FF%99%CC','%FF%99%99','%FF%99%66',      '%FF%99%33','%FF%99%00','%FF%66%FF','%FF%66%CC','%FF%66%99','%FF%66%66','%FF%66%33','%FF%66%00',      '%FF%33%FF','%FF%33%CC','%FF%33%99','%FF%33%66','%FF%33%33','%FF%33%00','%FF%00%FF','%FF%00%CC',      '%FF%00%99','%FF%00%66','%FF%00%33','%FF%00%00','%CC%FF%FF','%CC%FF%CC','%CC%FF%99','%CC%FF%66',      '%CC%FF%33','%CC%FF%00','%CC%CC%FF','%CC%CC%CC','%CC%CC%99','%CC%CC%66','%CC%CC%33','%CC%CC%00',      '%CC%99%FF','%CC%99%CC','%CC%99%99','%CC%99%66','%CC%99%33','%CC%99%00','%CC%66%FF','%CC%66%CC',      '%CC%66%99','%CC%66%66','%CC%66%33','%CC%66%00','%CC%33%FF','%CC%33%CC','%CC%33%99','%CC%33%66',      '%CC%33%33','%CC%33%00','%CC%00%FF','%CC%00%CC','%CC%00%99','%CC%00%66','%CC%00%33','%CC%00%00',      '%99%FF%FF','%99%FF%CC','%99%FF%99','%99%FF%66','%99%FF%33','%99%FF%00','%99%CC%FF','%99%CC%CC',      '%99%CC%99','%99%CC%66','%99%CC%33','%99%CC%00','%99%99%FF','%99%99%CC','%99%99%99','%99%99%66',      '%99%99%33','%99%99%00','%99%66%FF','%99%66%CC','%99%66%99','%99%66%66','%99%66%33','%99%66%00',      '%99%33%FF','%99%33%CC','%99%33%99','%99%33%66','%99%33%33','%99%33%00','%99%00%FF','%99%00%CC',      '%99%00%99','%99%00%66','%99%00%33','%99%00%00','%66%FF%FF','%66%FF%CC','%66%FF%99','%66%FF%66',      '%66%FF%33','%66%FF%00','%66%CC%FF','%66%CC%CC','%66%CC%99','%66%CC%66','%66%CC%33','%66%CC%00',      '%66%99%FF','%66%99%CC','%66%99%99','%66%99%66','%66%99%33','%66%99%00','%66%66%FF','%66%66%CC',      '%66%66%99','%66%66%66','%66%66%33','%66%66%00','%66%33%FF','%66%33%CC','%66%33%99','%66%33%66',      '%66%33%33','%66%33%00','%66%00%FF','%66%00%CC','%66%00%99','%66%00%66','%66%00%33','%66%00%00',      '%33%FF%FF','%33%FF%CC','%33%FF%99','%33%FF%66','%33%FF%33','%33%FF%00','%33%CC%FF','%33%CC%CC',      '%33%CC%99','%33%CC%66','%33%CC%33','%33%CC%00','%33%99%FF','%33%99%CC','%33%99%99','%33%99%66',      '%33%99%33','%33%99%00','%33%66%FF','%33%66%CC','%33%66%99','%33%66%66','%33%66%33','%33%66%00',      '%33%33%FF','%33%33%CC','%33%33%99','%33%33%66','%33%33%33','%33%33%00','%33%00%FF','%33%00%CC',      '%33%00%99','%33%00%66','%33%00%33','%33%00%00','%00%FF%FF','%00%FF%CC','%00%FF%99','%00%FF%66',      '%00%FF%33','%00%FF%00','%00%CC%FF','%00%CC%CC','%00%CC%99','%00%CC%66','%00%CC%33','%00%CC%00',      '%00%99%FF','%00%99%CC','%00%99%99','%00%99%66','%00%99%33','%00%99%00','%00%66%FF','%00%66%CC',      '%00%66%99','%00%66%66','%00%66%33','%00%66%00','%00%33%FF','%00%33%CC','%00%33%99','%00%33%66',      '%00%33%33','%00%33%00','%00%00%FF','%00%00%CC','%00%00%99','%00%00%66','%00%00%33','%EE%00%00',      '%DD%00%00','%BB%00%00','%AA%00%00','%88%00%00','%77%00%00','%55%00%00','%44%00%00','%22%00%00',      '%11%00%00','%00%EE%00','%00%DD%00','%00%BB%00','%00%AA%00','%00%88%00','%00%77%00','%00%55%00',      '%00%44%00','%00%22%00','%00%11%00','%00%00%EE','%00%00%DD','%00%00%BB','%00%00%AA','%00%00%88',      '%00%00%77','%00%00%55','%00%00%44','%00%00%22','%00%00%11','%EE%EE%EE','%DD%DD%DD','%BB%BB%BB',      '%AA%AA%AA','%88%88%88','%77%77%77','%55%55%55','%44%44%44','%22%22%22','%00%00%00','%FF%FF%FE'    );  },  getColorPalette: function() {    return this.c.concat();  },  setColorPalette: function(d) {    if (d.constructor==Array&&d.length==Math.pow(2,this.d)) {      this.c = d.concat();    }    return this;  },  addFrame: function(d) {    if (d.constructor==Array&&d.length==this.w*this.h) {      var f = new Object();      f.d = d.concat();      f.d.unshift(Math.pow(2,this.d2));      f.d.push(f.d[0]+1);      f.n = (typeof arguments[1]=='number'&&arguments[1]<f.d[0]&&arguments[1]>=0)?arguments[1]:f.d[0]-1;      f.t = (typeof arguments[2]=='number'&&arguments[2]<=0xFF&&arguments[2]>=0)?arguments[2]:0;      this.f.push(f);    }    return this;  },  clearFrame: function() {    this.f = new Array();    return this;  },  generate: function() {    var g = ['data:image/gif,'];    g.push('%47%49%46%38%39%61');    var bw = (0x10000|this.w).toString(2);    g.push(this.b2h[bw.substr(9,8)]);    g.push(this.b2h[bw.substr(1,8)]);    var bh = (0x10000|this.h).toString(2);    g.push(this.b2h[bh.substr(9,8)]);    g.push(this.b2h[bh.substr(1,8)]);    var bb = (0x8|this.d-1).toString(2).substr(1,3);    g.push(this.b2h['1'+bb+'0'+bb]);    g.push('%00%00');    g.push(this.c.slice(0,Math.pow(2,this.d)).join(''));    g.push('%21%FF%0B%4E%45%54%53%43%41%50%45%32%2E%30%03%01');    var bl = (0x10000|this.l).toString(2);    g.push(this.b2h[bl.substr(9,8)]);    g.push(this.b2h[bl.substr(1,8)]);    g.push('%00');    var bd = (0x100|this.d2).toString(2);    var bs = 1<<this.d2+1;    for (var i in this.f) {      if (!this.f[i]) continue;      var f = this.f[i];      var fd = f.d;      var fl = (fd[0]*this.d2)/8-1;      var fdl = fd.length;      g.push('%21%F9%04%09');      var bt = (0x10000|f.t).toString(2);      g.push(this.b2h[bt.substr(9,8)]);      g.push(this.b2h[bt.substr(1,8)]);      var bn = (0x100|f.n).toString(2);      g.push(this.b2h[bn.substr(1,8)]);      g.push('%00');      g.push('%2C%00%00%00%00');      g.push(this.b2h[bw.substr(9,8)]);      g.push(this.b2h[bw.substr(1,8)]);      g.push(this.b2h[bh.substr(9,8)]);      g.push(this.b2h[bh.substr(1,8)]);      g.push('%00');      g.push(this.b2h[bd.substr(1,8)]);      var b = new Array();      var p = '';      var j = 0;      var bl = 0;      while (1) {        bl = b.length;        while (p.length<8) p = (bs|((fdl>j&&bl<fl)?fd[j++]:0)).toString(2).substr(1)+p;        b.push(this.b2h[p.substr(-8,8)]);        bl = b.length;        p = p.substr(0,p.length-8);        if (bl==fl||(fdl<=j&&(p&0xFF)<=0)) {          g.push(this.b2h[(0x100|bl).toString(2).substr(1,8)]);          g.push(b.join(''));          if(bl!=fl) break;          p = (bs|fd[0]).toString(2).substr(1)+p;          b = new Array();        }      }      g.push('%00');    }    g.push('%3B');    return g.join('');  }}
