/************************************************************
upload_form.js - Function to implement JSON requested AJAX upload.
Copyright (C) 2006  Jeremy Nicoll

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Please see lgpl.txt for a copy of the license - this notice and the file 
lgpl.txt must accompany this code.

Please go to www.SeeMySites.net/forum for questions and support.
***************************************************************/

//This function takes two paramaters: form (the ID of the form), and sid, which 
//differentiates the different uploads from each other.
var ul_vars = {
  interval : 1000, //The time in milleseconds between each status request.
  speeds : []      //Keeps track of the speeds of each upload.
};
var block_height = 0;

function uploadForm(form, sid) {
  var theForm = $(form);
  // The variable request is an object that will contain details of the request.
  var request = {};
  var fileName = '';
  document.getElementById('sb_but').disabled = true;
  
  // This little bit loops through all the elements in the form, locates the
  // file input field, and extracts the file name of the file being uploaded.
  for (var i=0; i < theForm.elements.length; i++) { 
    ele = theForm.elements[i];
    if (ele.type == 'file') {
      var fileName = ele.value;
    	if (fileName.indexOf('/') > -1) { 
    	  fileName = fileName.substring(fileName.lastIndexOf('/')+1, fileName.length);
      }	else {
    	  fileName = fileName.substring(fileName.lastIndexOf('\\')+1, fileName.length);
      }
      //Since there can only be one file per form for this script, we'll exit the loop here. 
      break;
    }
  }
  if (fileName.replace('/\s/', '').toString() === '') {return;}
  
  
  
  theForm.submit();
  var ele;
    
  //These three parts of 'request' are required in order for the filestatus server-side script to work.
  request.sid = sid;
  request.fileName = fileName;
  request.iframe = theForm.target;
  
  
  // I hope this is self explanatory, but if not, this will send a JSON request to filestatus.php
  // every 3 seconds.  RepeatGetAction is in SendRecieve.js or sr_c.js.  If a single call is
  // successful, the successFunc will be called. Otherwise, failFunc will be called.  
   
  repeater = new RepeatGetAction('filestatus.php', request, ul_vars.interval);
  repeater.successFunc = function (getBack) {
    if (getBack.progress >= 100 || getBack.progress=='done') {
      getBack.progress = 100;
      var new_div = document.createElement('table');
      new_div.id = getBack.sid+getBack.fileName;
      new_div.cellpadding = 0;
      new_div.cellspacing = 0; 
      var myRow = new_div.insertRow(0);
      var myCell_2 = myRow.insertCell(0);
      var myCell_1 = myRow.insertCell(0);

      myCell_1.innerHTML = getBack.fileName + " (" + Math.round(getBack.current_size / 10.24) / 100 + " KB)";
      var new_button = document.createElement('img');
      new_button.src="img/close.gif";
      new_button.style.cursor = "pointer";
      new_button.style.marginTop = "2px";
      new_button.style.marginLeft = "5px";
      new_button.onclick = function() { deleteOption(this) };
      myCell_2.appendChild(new_button);
      var new_input = document.createElement('input');
      new_input.type = "hidden";
      new_input.name = "file_"+getBack.fileName;
      new_input.id = getBack.sid+getBack.fileName+"_input";
      new_input.value = getBack.sid+getBack.fileName;
      document.getElementById('form_holder').appendChild(new_input);

      document.getElementById('f_holder_new').appendChild(new_div);
      document.getElementById('f_holder_new').style.display = "block";

      if (block_height == 0) { 
        block_height = document.getElementById('main_form_holder').offsetHeight; 
        }

    //  document.getElementById('submit_button').style.marginTop = document.getElementById('files_holder').offsetHeight -40 + "px"
//      document.getElementById('submit_button').style.marginTop = document.getElementById('files_holder').offsetHeight + 20 + "px";
      document.getElementById('sb_but').disabled = false;
      document.getElementById('file0').value = null;
      document.getElementById('searcher').style.visibility = "hidden";
      document.getElementById(getBack.sid + '_fileName').innerHTML += "<table cellpadding='0' cellspacing='0' style='height: 16px;'><tr><td class='searchRo'>uploaded</td></tr></table>";
      this.stop();
    }
    if (!ul_vars.speeds[getBack.sid]) {ul_vars.speeds[getBack.sid] = [];}
    else if (ul_vars.speeds[getBack.sid].length == 3) {ul_vars.speeds[getBack.sid].shift();}
    
    ul_vars.speeds[getBack.sid].push(getBack.current_size);
    ul_vars.speeds[getBack.sid].sort(function(a, b) {return a - b;});  //Sorts numerically instead of by string. 
    
    var bytes_sec = 0;
    var bytes_append = 'B/sec';
    if (ul_vars.speeds[getBack.sid].length == 3) {
      var dif = ul_vars.speeds[getBack.sid][2]  - ul_vars.speeds[getBack.sid][0];
      bytes_sec = dif / ((ul_vars.interval / 1000) * 3);
      if (bytes_sec > 1024) {
        bytes_sec = bytes_sec / 1024;
        bytes_append = 'KB/sec';
      } 
    }
    //Due to a stupid IE bug, this has been changed...
    //$(getBack.sid + '_progress').style.width = getBack.progress + '%';
    $(getBack.sid+'_progress').style.width = getBack.progress * 1.6  + 'px';
    $(getBack.sid+'_progress').style.height = '16px';
    document.getElementById('searcher').style.visibility = "visible";

    //$(getBack.sid + '_fileName').innerHTML = "<table cellpadding='0' cellspacing='0'><tr><td>" +img_search +"</td><td class='searchRo'>loading " +bytes_sec.toFixed(2) + ' ' + bytes_append +"</td></tr></table>";
    $(getBack.sid + '_fileName').innerHTML = "<table cellpadding='0' cellspacing='0' style='margin-left: 20px;'><tr><td class='searchRo'>loading " +bytes_sec.toFixed(2) + ' ' + bytes_append +"</td></tr></table>";
    //$(getBack.sid + '_fileName').innerHTML = fileName;
    if (getBack.progress >= 100 || getBack.progress=='done') {
      document.getElementById('searcher').style.visibility = "hidden";
      document.getElementById(getBack.sid + '_fileName').innerHTML = "<table cellpadding='0' cellspacing='0' style='height: 16px;'><tr><td class='searchRo'>uploaded</td></tr></table>";
      }

  }; 
  repeater.failFunc = function (getBack) {
    this.stop();
    $(getBack.iframe).src = 'blank.html';
    alert(getBack.error_msg);
  };
  
  // This MUST be called before the action will start.  When the repeater has served its 
  // purpose (or you get sick of it), you can call repeater.stop() to stop it.
  repeater.start();
}

function deleteOption(obj) {
  arr = new Array();
  while (obj.parentNode.nodeName != "TABLE") {
    obj = obj.parentNode;
    }
  arr['action'] = obj.parentNode.id;
  bajax.call('delete.php', exemplo, arr)
  }

function exemplo(x) {
  if (x != 'error') {
    document.getElementById('f_holder_new').removeChild(document.getElementById(x));
    document.getElementById('form_holder').removeChild(document.getElementById(x+"_input"));
    if (!document.getElementById('f_holder_new').getElementsByTagName('table').length) {
      document.getElementById('f_holder_new').style.display = "none";
      }

//    document.getElementById('submit_button').style.marginTop = document.getElementById('files_holder').offsetHeight -40 + "px"
//    document.getElementById('submit_button').style.marginTop = document.getElementById('files_holder').offsetHeight + 20 + "px";
    }
  }

function checkTeeth(obj) {
  var inp = obj.parentNode.getElementsByTagName('input')[0];
  var td = obj.parentNode; 
  var img = obj.parentNode.getElementsByTagName('img')[1];

  if (inp.checked) {
    inp.checked = false;
    img.style.display = "none";
    }
  else {
    inp.checked = true;
    var left = (td.offsetWidth - 21) / 2;
    img.style.left = left + "px";
    img.style.display = "block";
    }
  }

function checkTeethsOnLoad() {
  var inps = document.getElementById('teeth_table').getElementsByTagName('input');
  var check = true;
  for (i = 0; i < inps.length; i++) {
    if (inps[i].type == "checkbox" && inps[i].checked) {
      var left = (inps[i].parentNode.offsetWidth - 21) / 2;
      inps[i].nextSibling.style.left = left + "px";
      inps[i].nextSibling.style.display = "block";
      check = false;
      }
    }
  if (document.getElementById('f_holder_new').getElementsByTagName('table').length) {
    document.getElementById('f_holder_new').style.display = "block";
    }
  var pos = entity_absolutePosition(document.getElementById('submit_button'));
  document.getElementById('files_holder').style.top = pos.y + "px";
  document.getElementById('submit_button').style.marginTop = document.getElementById('files_holder').offsetHeight + 20 + "px";
//  document.getElementById('submit_button').style.marginTop = document.getElementById('files_holder').offsetHeight -40 + "px"
  }

function entity_absolutePosition(el)
{
  var sLeft = 0, sTop = 0;
  var isDiv = /^div$/i.test(el.tagName);
  
  if (isDiv && el.scrollLeft) {
    sLeft = el.scrollLeft;
  }
  if (isDiv && el.scrollTop) {
    sTop = el.scrollTop;
  }
  
  var r = { x: el.offsetLeft - sLeft, y: el.offsetTop - sTop };
  if (el.offsetParent) 
  {
     if(el.offsetParent.tagName=="DIV" && el.offsetParent.id=='main_td')
     {
     }
     else
     {
         var tmp = entity_absolutePosition(el.offsetParent);
         r.x += tmp.x;
         r.y += tmp.y;
     }
  }

  return r;
}
