function toggleBox(name) {
  var objBox = document.getElementById(name);
  if(objBox.style.display=='block') {
    objBox.style.display = 'none';
  }
  else {
    objBox.style.display = 'block';
  }
}

function addFile() {
  var filebox = document.getElementById('files');
  var count = filebox.childNodes.length;
  if(count<MAXFILES) {
    var fileinput = filebox.firstChild.cloneNode(true);
    fileinput.value = '';
    fileinput.name = 'file_'+(count+1);
    filebox.appendChild(fileinput, filebox.lastChild);
  }
}

function removeFile() {
  var filebox = document.getElementById('files');
  if(filebox.childNodes.length>1) {
    filebox.removeChild(filebox.lastChild);
  }
}


var progressRequesting = false;
function startUpload() {
  clearError();
  var uploadID = $('UPLOAD_IDENTIFIER').value;
  var url = $('upload').action;
  var filebox = document.getElementById('files');
  var recipient = $F(document.forms.upload.recipient);
  var sender = $F(document.forms.upload.sender);
  err = new Array();
  var files = 0;
  for(var i=0;i<filebox.childNodes.length;i++) {
    if(filebox.childNodes[i].value!='') files++;
  }
  if(files<1) err[err.length] = (lang['no_file']);
  if(recipient!='' && !checkMail(recipient)) err[err.length] = lang['bad_recipient'];
  if(sender!='' && !checkMail(sender)) err[err.length] = lang['bad_sender'];
  if(err.length>0) {
    error(err);
    return false;
  }
  else {
    $('uploadProgress').style.display = 'block';
    var nullcount = 0;
    new PeriodicalExecuter(function(pe) {
      if(progressRequesting===false) {
        progressRequesting = true;
        new Ajax.Request('uploadProgress.php', {
          method:'post',
          parameters:'url='+url+'&uploadID='+uploadID,
          requestHeaders: {Accept: 'application/json'},
          onSuccess: function(transport){
             var progress = transport.responseText.evalJSON(true);
             if(progress==null || progress['bytes_total']<1) {
                nullcount++;
                if(nullcount>5) {
                  showWaiting('uploadProgress', lang['wait'], 2);
                  pe.stop();
                }
             }
             if(progress['bytes_total']>MAXSIZE*files) {
                $('uploadProgress').style.display = 'none';
                error(lang['too_big']);
                pe.stop();
                window.stop();
             }
             var percent = Math.round(progress['bytes_uploaded']/progress['bytes_total']*10000)/100;
             $('bar').style.width = percent+'%';
             $('bar').innerHTML = percent+'%';
             $('bartop').innerHTML = sprintf(lang['status1'], calcSize(progress['bytes_uploaded']), calcSize(progress['bytes_total']));
             if(progress['est_sec']>=60) {
                var eta = Math.floor(progress['est_sec']/60);
                eta += 'm, '+(progress['est_sec'] - eta * 60)+'s';
             }
             else var eta = progress['est_sec']+'s';
             $('barbottom').innerHTML = sprintf(lang['status2'], Math.round(progress['speed_average']/10.24)/100, eta);
             if(parseInt(progress['bytes_uploaded'])>=parseInt(progress['bytes_total'])) {
                showWaiting('uploadProgress', lang['wait'], 2);
                pe.stop();
             }
           },
          onComplete: function(transport) { progressRequesting = false; }
        });
      }
    }, 1);
    return true;  
  }
}

function startRemoteUpload(f) {
  clearError();
  var urls = $F(f.urls).split("\n");
  err = new Array;
  var fileCount = 0; 
  var remoteMode = $F(f.remoteMode);
  if(remoteMode=='rapidshare') var regexp = /http(s)?:\/\/(www\.)?rapidshare\.com\/files\/[0-9]+\/[^\/]+/;
  else if(remoteMode=='uploaded') var regexp = /http(s)?:\/\/(www\.)?(uploaded|ul)\.to\/.+/;
  else var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
  if(remoteMode=='rapidshare' || remoteMode=='uploaded') {
    if($F(f.extLogin)=='' || $F(f.extPassword)=='') err[err.length] = sprintf(lang['no_login'], remoteMode.capitalize());
  }
  for(var i=0;i<urls.length;i++) {
    urls[i] = urls[i].strip();
    if(!urls[i].empty()) {
      if(!regexp.test(urls[i])) err[err.length] = sprintf(lang['bad_url'], urls[i].escapeHTML());
      else fileCount++;
    }
  }
  if(err.length>0) {
    error(err);
    return false;
  }
  else if(fileCount<1) {
    error(lang['no_url']);
    return false;
  }
  else if(fileCount>maxRemotes) {
    error(lang['too_many_urls']);
    return false;
  }
  showWaiting('uploadProgress', lang['wait'], 2);
  $('uploadProgress').style.display = 'block';
  return true;
}

function calcSize(size) {
  var nStart = 0;
  if(arguments[1]>0) nStart = arguments[1];
  names = new Array("B", "KB", "MB", "GB", "TB");
  var i = 0;
  while(size>1024) {
    size = size/1024;
    i++;
  } 
  return Math.round(size*100)/100+' '+names[i+nStart];
}

function error(msg) {
  if(typeof msg=="object") {
    for(var i=0;i<msg.length;i++) {
      error(msg[i]);
    }
    return true;
  }
  if($('jsError')) {
    $('jsError').innerHTML += '<br />' + msg;
  }
  else {
    var objError = document.createElement("div");
    objError.className = "error";
    objError.id = "jsError";
    objError.innerHTML = "<b>"+lang['error']+"</b><br />"+msg;
    $('content').insertBefore(objError, $('content').firstChild);
  }
}

function clearError() {
  if($('jsError')) $('content').removeChild($('jsError'));
}

function translate(element, lang) {
  var oLang = "en";
  if(arguments[2]!=undefined) oLang = arguments[2];
  var objElement = document.getElementById(element);
  var text = objElement.innerHTML;
  showWaiting(element);
  
  google.language.translate(text, oLang, lang, function(result) {
    if (!result.error) {
      objElement.innerHTML = result.translation;
    }
    else {
      objElement.innerHTML = "Error while translating: "+result.error.message;
    }  
  });
}

function showWaiting(element) {
  var typ = 1;
  var text = "&nbsp;";
  if(arguments[2]>0) typ = arguments[2];
  if(arguments[1]) text = arguments[1];
  $(element).innerHTML = document.getElementById(element).innerHTML = '<div class="waiting'+typ+'">'+text+'</div>';  
}

function getSearchField(parameter) {
  var postData = parameter.name+"="+parameter.value+"&searchField="+document.getElementById('searchField').value;
  if(document.getElementById('chk') && document.getElementById('chk').checked==true) postData += '&chk=1';
  return postData;
}

function highlightRow(rowID) {
  var row = document.getElementById(rowID);
  if(arguments[1]!=undefined) {
    if(arguments[1]==true) row.addClassName('listHighlight');
    else row.removeClassName('listHighlight');
  }
  else {
    if(row.hasClassName('listHighlight')) row.removeClassName('listHighlight');
    else row.addClassName('listHighlight');
  }
}

function checkAll(id, rowid) {
  var checked = document.getElementById(id+'CheckAll').checked;
  var boxes = document.getElementsByName(id+'[]');
  for (var i=0;i<boxes.length;i++) {
    boxes.item(i).checked = checked;
    highlightRow(rowid+boxes.item(i).value, checked);
    
  } 
}

function showDetails(id) {
  var row = $('details_'+id);
  var pfeil = $('pfeil_'+id);
  row.toggle();
  if(row.visible()==true) pfeil.src = 'images/pfeil_unten.gif';
  else pfeil.src = 'images/pfeil_rechts.gif';
}

function sprintf() {
 if( sprintf.arguments.length < 2 ) {
  return;
 }
 var data = sprintf.arguments[ 0 ];
 for( var k=1; k<sprintf.arguments.length; ++k ) {
  switch( typeof( sprintf.arguments[ k ] ) )
  {
   case 'string':
    data = data.replace( /%s/, sprintf.arguments[ k ] );
    break;
   case 'number':
    data = data.replace( /%d/, sprintf.arguments[ k ] );
    break;
   case 'boolean':
    data = data.replace( /%b/, sprintf.arguments[ k ] ? 'true' : 'false' );
    break;
   default:
    /// function | object | undefined
    break;
  }
 }
 return( data );
}

if( !String.sprintf ) {
 String.sprintf = sprintf;
}

function editDetails(fileID, typ) {
  $('show'+typ+'_'+fileID).hide();
  $('edit'+typ+'_'+fileID).show();
}

function applyDetails(fileID, typ) {
  var value = document.getElementsByName(typ+'_'+fileID).item(0).value;
  //if(typ=="LayerID" && value!="" && isNaN(parseInt(value))) {
  //    alert("Bitte geben Sie nur Zahlen als Layer-ID ein."); 
  //}
//  else {
    if(typ!="Name" || value.blank()==false) $('show'+typ+'_'+fileID).innerHTML = value.escapeHTML()+" <a href=\"javascript:void(0);\" onclick=\"editDetails('"+fileID+"', '"+typ+"');\"><img src=\"images/edit.gif\" alt=\"Bearbeiten\" /></a>";
    $('edit'+typ+'_'+fileID).hide();
    $('show'+typ+'_'+fileID).show();
//  }
}

function saveDetails(fileID, typ) {
  var fileName = document.getElementsByName('Name_'+fileID).item(0).value;
  //var layerID = document.forms['form_'+fileID].LayerID.value;
  var layerID = 0;
  var password = "";
  if(typ=="folder") password = document.getElementsByName('Password_'+fileID).item(0).value;
  if(fileName.blank()) alert(lang['no_name']);
  //else if(layerID!="" && isNaN(parseInt(layerID))) alert("Bitte geben Sie nur Zahlen als Layer-ID ein.");
  else {
    new Ajax.Updater('details_'+fileID, 'ajax.php?p='+typ+'Edit', {
      method:'post',
      parameters:'typ='+typ+'&fileID='+fileID+'&Name='+fileName+'&layerID='+layerID+'&password='+password,
      onSuccess: function(transport){
        $('name_'+fileID).innerHTML = document.getElementsByName('Name_'+fileID).item(0).value.escapeHTML();
      }
    });
  } 
}

function handleFiles() {
  var option = $('fileOption').value;
  objIds = document.getElementsByName('id[]');
  ids = new Array();
  for(var i=0;i<objIds.length;i++) {
    if(objIds.item(i).checked==true) ids[ids.length] = objIds.item(i).value;
  }
  if(ids.length>0) {
    if(option=="list") {
      if($('fileList')) $('fileList').remove();
      var text = '<div id="fileList" class="info" style="font-family:courier; font-size: 11px;"><p>';
      for(var i=0;i<ids.length;i++) {
        text += $('name_'+ids[i]).href+'<br />';
      }
      text = text.substr(0, (text.length-6));
      text += '</p></div>';
      $('content').insert({top: text});
    }
    else if(option=="delete") {
      deleteFile(ids, 'file');
    }
    else if(option=="move") {
      var folderID = $('folder').options[$('folder').selectedIndex].value;
      if(folderID!='-') moveFiles(ids, folderID, $('folder').options[$('folder').selectedIndex].text);
    }
  }
}

function handleFolder() {
  objIds = document.getElementsByName('id[]');
  ids = new Array();
  for(var i=0;i<objIds.length;i++) {
    if(objIds.item(i).checked==true) ids[ids.length] = objIds.item(i).value;
  }
  if(ids.length>0) deleteFile(ids, 'folder');
}

function handleRemote() {
	var option = $F('remoteOption');
  objIds = document.getElementsByName('id[]');
  ids = new Array();
  for(var i=0;i<objIds.length;i++) {
    if(objIds.item(i).checked==true) ids[ids.length] = objIds.item(i).value;
  }
  if(ids.length>0) {
		if(option=='delete') deleteFile(ids, 'remote');
		else if(option=='retry') retryRemote(ids);
	}
}

function handleIDs() {
  objIds = document.getElementsByName('id[]');
  ids = new Array();
  for(var i=0;i<objIds.length;i++) {
    if(objIds.item(i).checked==true) ids[ids.length] = objIds.item(i).value;
  }
  if(ids.length>0) $('ids').value = ids.join('|');
}

function handleMessages() {
  var option = $F('messageOption');
  objIds = document.getElementsByName('id[]');
  ids = new Array();
  for(var i=0;i<objIds.length;i++) {
    if(objIds.item(i).checked==true) {
      ids[ids.length] = objIds.item(i).value;
    }
  }
  if(ids.length>0) {
    if(option=="read" || option=="unread") {
      for(var i=0;i<ids.length;i++) {
        $('tr_'+ids[i]).removeClassName('message_read');
        $('tr_'+ids[i]).removeClassName('message_unread');
        $('tr_'+ids[i]).addClassName('message_'+option);
        new Ajax.Request('ajax.php?p=markMessage', {
          method:'post',
          parameters:'messageOption='+option+'&ids='+ids.toJSON()
        });
      } 
    }
    else if(option=="delete") {
      deleteFile(ids, 'message');
    }
  }
}



function checkFileOption() {
  if($('fileOption').value=="move") $('folderList').show();
  else $('folderList').hide();
}

function deleteFile(ids, typ) {
    if(ids.length==1) {
      var fileName = $('name_'+ids[0]).innerHTML;
      var cfstring = sprintf(lang['confirm_delete_sg'], fileName);
    }
    else var cfstring = sprintf(lang['confirm_delete_pl'], ids.length);
    if(!confirm(cfstring)) return false;
    if($('delete')) $('delete').remove();
    $('content').insert({top: '<div id="delete" class="info"></div>'});
    showWaiting('delete', lang['wait'], 1);
    var customVar = '';
    if(typ=='message') customVar = document.forms['messageOptions'].messageType.value;
    new Ajax.Request('ajax.php?p=delete', {
      method:'post',
      parameters:'typ='+typ+'&ids='+ids.toJSON()+'&var='+customVar,
      onSuccess: function(transport){
        var count = parseInt(transport.responseText);
        if(count==ids.length) {
          if(count==1) $('delete').innerHTML = "<p><b>"+lang['deleted_sg']+"</b></p>";
          else $('delete').innerHTML = "<p><b>"+sprintf(lang['deleted_pl'], count)+"</b></p>";
        }
        else {
          if(isNaN(count)) count = 0;
          $('delete').remove();
          if(ids.length-count==1) error(lang['delete_failed_sg']);
          else error(sprintf(lang['delete_failed_pl'], (ids.length-count)));
        }
      },
      onFailure: function(){ 
          $('delete').remove();
          error(lang['delete_failed']);
      }
    });
    for(var i=0;i<ids.length;i++) {
      $('tr_'+ids[i]).remove();
      if($('details_'+ids[i])) $('details_'+ids[i]).remove();
    }
}

function retryRemote(ids) {
	if($('retry')) $('retry').remove();
  $('content').insert({top: '<div id="retry" class="info"></div>'});
	showWaiting('retry', lang['wait'], 1);
	new Ajax.Request('ajax.php?p=retry', {
      method:'post',
      parameters:'ids='+ids.toJSON(),
      onSuccess: function(transport){
        var count = parseInt(transport.responseText);
        if(count>0) {
          if(count==1) $('retry').innerHTML = "<p><b>"+lang['retry_sg']+"</b></p>";
          else $('retry').innerHTML = "<p><b>"+sprintf(lang['retry_pl'], count)+"</b></p>";
					for(var i=0;i<ids.length;i++) {
						if($('status_'+ids[i]).innerHTML == lang['failed']) {
							$('status_'+ids[i]).update(lang['queue']);
							$('action_'+ids[i]).update('&nbsp;');
						}
					}
        }
        else {
          if(isNaN(count)) count = 0;
          $('retry').remove();
          error(lang['retry_failed']);
        }
      },
      onFailure: function(){ 
          $('retry').remove();
          error(lang['retry_failed']);
      }
    });
}

function removeFileFromFolder(folderID, fileID) {
    var folderName = $('name_'+folderID).innerHTML;
    if(fileID=='0') {
      if(!confirm(sprintf(lang['confirm_remove_pl'], folderName))) return false;
    }
    else {
      var fileName = $('fileName_'+folderID+'_'+fileID).innerHTML;
      if(!confirm(sprintf(lang['confirm_remove_sg'], fileName, folderName))) return false;
    }
    if($('delete')) $('delete').remove();
    $('content').insert({top: '<div id="delete" class="info"></div>'});
    showWaiting('delete', lang['wait'], 1);
    new Ajax.Request('ajax.php?p=removeFileFromFolder', {
      method:'post',
      parameters:'folderID='+folderID+'&fileID='+fileID,
      onSuccess: function(transport){
        var success = parseInt(transport.responseText);
        if(success>0) {
          if(fileID=='0') $('delete').innerHTML = "<p><b>"+sprintf(lang['removed_pl'], fileName, folderName)+"</b></p>";
          else $('delete').innerHTML = "<p><b>"+sprintf(lang['removed_sg'], fileName, folderName)+"</b></p>";
        }
        else {
          $('delete').remove();
          error(lang['remove_failed']);
        }
      },
      onFailure: function(){ 
          $('delete').remove();
          error(lang['remove_failed']);
      }
    });
    if(fileID=='0') {
      $('details_'+folderID).getElementsByTagName('table').item(1).remove();
    }
    else $('file_'+folderID+'_'+fileID).remove();
}

function moveFiles(ids, folderID, folderName) {
    if($('move')) $('move').remove();
    $('content').insert({top: '<div id="move" class="info"></div>'});
    showWaiting('move', lang['wait'], 1);
     new Ajax.Request('ajax.php?p=moveFiles', {
      method:'post',
      parameters:'folderID='+folderID+'&ids='+ids.toJSON(),
      onSuccess: function(transport){
        var success = parseInt(transport.responseText);
        if(success>0) {
          if(ids.length==1) {
            var fileName = $('name_'+ids[0]).innerHTML;
            $('move').innerHTML = "<p><b>"+sprintf(lang['moved_sg'], fileName, folderName)+"</b></p>";
          }
          else $('move').innerHTML = "<p><b>"+sprintf(lang['moved_pl'], ids.length, folderName)+"</b></p>";
        }
        else {
          $('move').remove();
          error(lang['move_failed']);
        }
      },
      onFailure: function(){ 
          $('move').remove();
          error(lang['move_failed']);
      }
    });
}

function newCaptcha(captcha) {
  var now = new Date();
  $(captcha).src = 'captcha.php?'+now.getTime();
}

function checkMail(str) {
  return (str.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1);
} 

function setFilter(formName, elementName, value) {
	$(document.forms[formName][elementName]).setValue(value);
	document.forms[formName].submit();
}
