var smush = {

  last_id: 0,

  ws_location: 'http://smushit.eperf.vip.ac4.yahoo.com/ysmush.it/ws.php',

  totals_data: [],

  smusher_task: null,

  paste_id: 0,

  allDone: function(data) {
    var id = data.id;

    var tr = document.getElementById(id);
    if (!tr) {
        return;
    }

    while (tr.firstChild) {
      tr.removeChild(tr.firstChild);
    }
    var td = document.createElement('td');
    td.className = 'img';
    var ttsrc = data.dest ? data.dest : data.src;
    td.innerHTML = smush.getHref(ttsrc);
    tr.appendChild(td);

    if (data.error) {
        td = document.createElement('td');
        td.setAttribute('colspan', 3);
        td.appendChild(document.createTextNode(data.error));
        tr.appendChild(td);

    } else {

        td = document.createElement('td');
        td.appendChild(document.createTextNode(smush.prettysize(data.dest_size)));
        tr.appendChild(td);
        td = document.createElement('td');
        td.appendChild(document.createTextNode(smush.prettysize(data.src_size - data.dest_size)));
        tr.appendChild(td);
        td = document.createElement('td');
        td.appendChild(document.createTextNode(data.percent + '%'));
        tr.appendChild(td);

    }

    if (ttsrc) {
        var img = new Image();
        img.onload = function(img){

            return function() {

                var limit = 180;

                var w = img.width;
                var h = img.height;

                var wh = '';

                if (w > limit && h > limit) {
                    if (w > h) {
                        wh = 0;
                    } else {
                        wh = 1;
                    }
                } else if (w > limit){
                    wh = 0;
                } else if (h > limit) {
                    wh = 1;
                }

                wh = ['width="'+limit+'"', 'height="'+limit+'"'][wh];

                var ttp = new YAHOO.widget.Tooltip("tt" + id, {
                        context: document.getElementById(id).getElementsByTagName('td')[0],
                        text: '<img style="padding: 10px" src="' + img.src + '" ' + wh + ' /><br  />' + w + ' x ' + h,
                        width: 200
                });
            };
        }(img);

        img.src = ttsrc;
    }

    smush.updateTotals(data);

  },


  updateTotals: function(data) {

    smush.totals_data[smush.totals_data.length] = data;

    var t = smush.getTable();

    var savings_bytes = 0, savings_percent = 0, total_src = 0, dest = 0, src = 0, zipel = document.getElementById('zipdownload');

    for (var i = 0, max = smush.totals_data.length; i < max; i++) {
        dest = 0;
        src = 0;
        dest = parseInt(smush.totals_data[i].dest_size, 10);
        src = parseInt(smush.totals_data[i].src_size, 10);

        if (!isNaN(dest) && dest !== -1 && !isNaN(src)) {
            savings_bytes += (src - dest);
        }

        if (!isNaN(dest) || dest === -1) {
            if (!isNaN(src)) {
                total_src += src;
            }
        }

    }

    savings_percent = 100 * savings_bytes / total_src;
    if (isNaN(savings_percent)) {
        savings_percent = 0;
    }
    savings_percent = savings_percent.toFixed(2);

    savings_bytes = smush.prettysize(savings_bytes);

    if (!document.getElementById('totals')) {
        smush.addResultsTab();
    } else {
        smush.tabview.set('activeIndex', 1);
    }

    smush.tabChange();

    var tpl = 'Smushed <strong>%percent%%</strong> or <strong>%size%</strong> from the size of your image(s).  How did we do it? See the table below for more details.';

    document.getElementById('totals').innerHTML = tpl.replace(/%percent%/, savings_percent).replace(/%size%/, savings_bytes);



  },

  addResultsTab: function() {

    smush.tabview.addTab(
        new YAHOO.widget.Tab({
            label: 'Results',
            content: smush.getResultsContent(),
            active: true
        })
    );

  },

  getHref: function(url) {
    var strings = url.split('?');
    var parts = strings[0].split('/');
    if (url.indexOf("://") === -1) {
        url = 'http://smushit.eperf.vip.ac4.yahoo.com/ysmush.it/' + url;
    }
    var res = '<a href="'+ url +'" target="_blank">'+ parts[parts.length-1] +'</a>';
    return res;
  },

  getTable: function() {

    var t = document.getElementById('file-table');
    if (t) {
      return t.getElementsByTagName('tbody')[0];
    }

    t = document.createElement('table');
    t.id = 'file-table';
    t.className = 'txtR';

    var caption = document.createElement('caption');
    caption.appendChild(document.createTextNode('Smushed images'));
    t.appendChild(caption);


    var tbody = document.createElement('tbody');
    t.appendChild(tbody);

    var tr = document.createElement('tr');
    var th = document.createElement('th');
    th.className = 'img';
    th.appendChild(document.createTextNode('Image'));
    tr.appendChild(th);
    th = document.createElement('th');
    th.appendChild(document.createTextNode('Result size'));
    tr.appendChild(th);
    th = document.createElement('th');
    th.appendChild(document.createTextNode('Savings'));
    tr.appendChild(th);
    th = document.createElement('th');
    th.appendChild(document.createTextNode('% Savings'));
    tr.appendChild(th);

    tbody.appendChild(tr);

    var el = document.getElementById('results-table');
    el.appendChild(t);

    return tbody;

  },

  submitPasteForm: function() {

    var imgs = document.getElementById('img').value;
    if (!imgs) {
        alert('Please paste or type some image URLs');
        return false;
    }

    imgs = imgs.split('\n');

    var t = smush.getTable();
    var id = '', url = '', td, tr;

    for (var i = 0; i < imgs.length; i++) {

        if (!imgs[i]) {
            continue;
        }

        if (i === 5) {
            // limit to 5 images.
            break;
        }

        id = 'paste' + smush.paste_id++;

        url = smush.ws_location + '?img=' + encodeURIComponent(imgs[i]) + '&task=' + smush.smusher_task + '&id=' + id
        + '&from=ydn&callback=smush.callback';

        try {
            YAHOO.util.Get.script(url, {onSuccess: smush.xhrCallback});
        } catch (err) {
            continue;
        }

        tr = document.createElement('tr');
        tr.id = id;
        td = document.createElement('td');
        td.className = 'img';
        td.innerHTML = smush.getHref(imgs[i]);
        tr.appendChild(td);
        td = document.createElement('td');
        td.id = id + '-progress';
        td.setAttribute('colspan', 3);
        td.appendChild(document.createTextNode('Smushing...'));
        tr.appendChild(td);
        t.appendChild(tr);

    }

    return false;
  },

  callback: function(results) {
    smush.allDone(results);
  },

  xhrCallback: function(o) {
  },

  prettysize: function(size) {

    size = parseInt(size, 10);
    if (size < 1024) {
        return size + ' bytes';
    } else {
        size = size / 1024;
        size = size.toFixed(2);
        return size + ' KB';
    }

  },

  getResultsContent: function(msg) {

    var tpl = '<div id="results">'+
                 '<div class="line">'+
                   '<div><p class="intro" id="totals"></p></div>'+
                 '</div>'+
                 '<p></p>' +
              '</div>';

    return tpl.replace(/%task%/, this.smusher_task).replace(/%msg%/, msg);

  },

  tabChange: function(e) {

      var d = YAHOO.util.Dom;
      var overlay = d.get('upload-container');

      if (d.getStyle(overlay, 'top') !== 'auto') {
          d.setStyle(overlay, 'top',    'auto');
          d.setStyle(overlay, 'left',   'auto');
          d.setStyle(overlay, 'width',  '1px');
          d.setStyle(overlay, 'height', '1px');
      }

      if (d.hasClass(document.body, 'toggle')) {
          d.replaceClass(document.body, 'toggle', 'shmoggle');
      } else {
          d.replaceClass(document.body, 'shmoggle', 'toggle');
      }


  }


};



// init
(function(){

    YAHOO.widget.Logger.enableBrowserConsole();


    if (document.getElementById('paste-form')) {
      document.getElementById('paste-form').onsubmit = smush.submitPasteForm;
    }

    smush.tabview = new YAHOO.widget.TabView("tosmush");
    //smush.tabview.addListener('activeTabChange', smush.tabChange);

    smush.smusher_task = Math.random() * 1e17 + new Date().getTime();

})();
