var tinyMCE_GZ = {
  settings : {
    plugins : 'advlink,cdb,save,emotions,insertdatetime,preview,media,searchreplace,paste,directionality,fullscreen,xhtmlxtras,table,insertvideo',
    themes : 'simple,advanced',
    languages : 'en',
    disk_cache : true,
    page_name : 'tiny_mce_gzip.php',
    debug : false
  },

  init : function(s) {
    var n, d = document, nl, i, b = '', sr, db;

    this.isIE = (navigator.appName == "Microsoft Internet Explorer");
    this.isOpera = navigator.userAgent.indexOf('Opera') != -1;

    for (n in s)
      this.settings[n] = s[n];

    for (i=0, nl = d.getElementsByTagName('base'); i<nl.length; i++) {
      if (nl[i].href)
        b = nl[i].href;
    }

    for (i=0, nl = d.getElementsByTagName('script'); i<nl.length; i++) {
      if (nl[i].src && nl[i].src.indexOf('tiny_mce_gzip') != -1) {
        sr = nl[i].src;
        sr = sr.substring(0, sr.lastIndexOf('/'));

        if (b != '' && b.indexOf('://') == -1)
          b += sr;
        else
          b = sr;
      }
    }

    db = document.location.href;

    if (db.indexOf('?') != -1)
      db = db.substring(0, db.indexOf('?'));

    db = db.substring(0, db.lastIndexOf('/'));

    if (b.indexOf('://') == -1 && b.charAt(0) != '/')
      b = db + "/" + b;

    this.baseURL = b + '/';
    this.load(this.settings.page_name);
  },

  load : function(v) {
    var s = this.settings, h, d = document, sp2;

    v += '?js=true&plugins=' + escape(s.plugins);
    v += '&themes=' + escape(s.themes);
    v += '&languages=' + escape(s.languages);
    v += '&diskcache=' + (s.disk_cache ? 'true' : 'false');
    //v += this.checkCompress() ? '' : '&compress=false';

    this.loadFile(this.baseURL + v);
  },

  checkCompress : function() {
    var sp2, ver, na = navigator, ua = navigator.userAgent;

    // Non IE browsers are fine
    if (!this.isIE)
      return 1;

    sp2 = na.appMinorVersion.indexOf('SP2') != -1;
    ver = parseFloat(ua.match(/MSIE\s+([0-9\.]+)/)[1]);

    // IE 6.0+ with SP2 seems fine
    if (ver >= 6 && sp2)
      return 1;

    // IE 7.0+ seems fine
    if (ver >= 7)
      return 1;

    // All others might fail
    return 0;
  },

  loadFile : function(u) {
    var x, ex;

    if (this.settings['debug'])
      alert('JS: ' + u);

    if (this.isIE) {
      // Synchronous AJAX load gzip JS file
      try {
        x = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (ex) {
        x = new ActiveXObject("Msxml2.XMLHTTP");
      }

      x.open("GET", u.replace(/%2C/g, ','), false);
      x.send(null);

      this.scriptData = x.responseText;

      document.write('<script type="text/javascript">eval(tinyMCE_GZ.scriptData);</script>');
    } else
      document.write('<script type="text/javascript" src="' + u + '"></script>');
  },

  start : function() {
    var s = this.settings, p = TinyMCE_Engine.prototype;

    p.__loadScript = p.loadScript;
    p.__importThemeLanguagePack = p.importThemeLanguagePack;
    p.__importPluginLanguagePack = p.importPluginLanguagePack;
    p.__loadNextScript = p.loadNextScript;
    p.loadScript = p.importThemeLanguagePack = p.importPluginLanguagePack = p.loadNextScript = function() {};
    tinyMCE.baseURL = this.baseURL.substring(0, this.baseURL.length - 1);
    tinyMCE.settings = {};
    tinyMCE.srcMode = '';
  },

  end : function() {
    var s = this.settings, l = tinyMCE.loadedFiles, la, i, p = TinyMCE_Engine.prototype;

    this.addFiles(s.plugins, 'plugins', 'editor_plugin.js');
    this.addFiles(s.themes, 'themes', 'editor_template.js');

    la = s.languages.replace(/\s+/, '').split(',')
    for (i=0; i<la.length; i++)
      l[l.length] = this.baseURL + 'langs/' + la[i] + '.js';

    p.loadScript = p.__loadScript;
    p.importThemeLanguagePack = p.__importThemeLanguagePack;
    p.importPluginLanguagePack = p.__importPluginLanguagePack;
    p.loadNextScript = p.__loadNextScript;
  },

  addFiles : function(f, c, e) {
    var i, a, s = this.settings, l = tinyMCE.loadedFiles, la, x;

    a = f.replace(/\s+/, '').split(',');
    for (i=0; i<a.length; i++) {
      if (a[i]) {
        l[l.length] = this.baseURL + c + '/' +  a[i] + '/' + e;

        la = s.languages.replace(/\s+/, '').split(',')
        for (x=0; x<la.length; x++)
          l[l.length] = this.baseURL + c + '/' +  a[i] + '/langs/' + la[x] + '.js';
      }
    }
  }
};
