var trace = 0;
var traceUpload = 0;

var initState = {};
function RememberInitState(id,value) {
  if (typeof(initState[id]) == 'undefined')
    initState[id] = value;
}
function GetInitState(id) {
  return initState[id]
}

function ShowImage(id,filename) {
  var elem = document.getElementById(id);
  if (filename.indexOf('/') == -1)
      filename = 'images/'+filename;
  if (elem) elem.src = filename;
}
function ShowElement(id) {
  var elem = document.getElementById(id);
  if (elem) {
    RememberInitState(id,elem.style.display);
    elem.style.display = '';
  }
  return true;
}
function HideElement(id) {
  var elem = document.getElementById(id);
  if (elem) {
    RememberInitState(id,elem.style.display);
    elem.style.display = 'none';
  }
  return true;
}
function ToggleElement(id) {
  var elem = document.getElementById(id);
  if (elem) {
    RememberInitState(id,elem.style.display);
    elem.style.display = (elem.style.display ? '' : 'none');
    return true
  }
  return false;
}
function ResetElement(id) {
  var elem = document.getElementById(id);
  if (elem) {
    elem.style.display = GetInitState(id);
  }
  return true;
}
var foldCtrls = {};
function RememberFoldCtrl(ctrl) {
  if (typeof(foldCtrls[ctrl.id]) == 'undefined') {
    foldCtrls[ctrl.id] = ctrl;
    RememberInitState(ctrl.id,ctrl.alt);
  }
}
function ToggleFoldCtrl(ctrl,id) {
  if (ctrl) {
    RememberFoldCtrl(ctrl);
    if (ToggleElement(id))
      UpdateFoldCtrl(ctrl);
  } else {
    //ctrl = ??
    //id = ??
    //ResetElement(id);
    //UpdateFoldCtrl(ctrl,GetInitState(ctrl.id));
  }
}
function UpdateFoldCtrl(ctrl,state) {
  if (arguments.length < 2) {
    // toggle current state
    if (ctrl.alt == 'Show')
      state = 'Hide';
    else
      state = 'Show';
  }
  ctrl.alt = state;
  ctrl.src = (state == 'Show') ? 'images/expand.png' : 'images/close.png';
  ctrl.title = state + ctrl.title.substr(4);
}

function ShowThumbControls(id) {
  if (arguments.length < 1) id = curPhoto;
  var elem = document.getElementById('thumb'+id+'Ctrls');
  if (elem) {
    elem.style.display = '';
    UpdateThumbControls(id);
  }
  return true;
}
function HideThumbControls(id) {
  if (arguments.length < 1) id = curPhoto;
  var elem = document.getElementById('thumb'+id+'Ctrls');
  if (elem) elem.style.display = 'none';
  if (!traceUpload) {
    var elem = document.getElementById('UploadImage');
    if (elem) elem.style.display = 'none';
  }
  return true;
}
function ToggleThumbControls(id) {
  if (arguments.length < 1) id = curPhoto;
  var elem;
  if (elem = document.getElementById('thumb'+id+'Ctrls')) {
    if (elem.style.display) {
      elem.style.display = '';
      UpdateThumbControls(id);
    }
    else
      elem.style.display = 'none';
  }
  if (!traceUpload) {
    elem = document.getElementById('UploadImage');
    if (elem) elem.style.display = 'none';
  }
  return true;
}
function NoAction() {
  return false;
}
function UpdatePhotoControls(id) {
  if (arguments.length < 1) id = curPhoto;
  if (top.UploadFrame2) top.UploadFrame2.SetPhotoNum(id);
  var elem = document.getElementById('photonum');
  if (elem) elem.innerHTML = id+1;
  if (!traceUpload) {
    elem = document.getElementById('UploadImage');
    if (elem && elem.style.display != 'none') {
      ClearMove('UploadImage','UploadTitle');
      elem.style.display = 'none';
    }
  }
  elem = document.getElementById('moveLeft');
  if (elem) elem.disabled = ((id % thumbcols) == 0);
  elem = document.getElementById('moveRight');
  if (elem) elem.disabled = ((id % thumbcols) == thumbcols-1);
}
function UpdateThumbControls(id) {
  var image = document.getElementById('filename'+id);
  if (image) image = image.value;
  var elem = document.getElementById('thUpload'+id);
  if (elem) {
    // nothing to do
  }
  elem = document.getElementById('thDelete'+id);
  if (elem) {
    //elem.className = 'thDeleteFade';
    if (image) {
      elem.src         = 'images/trash.gif';
      elem.title       = 'Delete this image';
      elem.onclick     = function() { DeletePhoto(); return false; };
      elem.onmouseover = function() { this.className='thDelete'; };
      elem.onmouseout  = function() { this.className='thDeleteFade'; };
    } else {
      elem.src         = 'images/notrash.gif';
      elem.title       = 'No image';
      elem.onclick     = NoAction;
      elem.onmouseover = null;
      elem.onmouseout  = null;
    }
  }
  elem = document.getElementById('thMoveLeft'+id);
  if (elem) {
    //elem.className = 'thMoveLeftFade';
    if (image && id % thumbcols != 0) {
      elem.src         = 'images/left.gif';
      elem.title       = 'Move image left';
      elem.onclick     = function() { MovePhoto(id,-1); return false; };
      elem.onmouseover = function() { this.className='thMoveLeft'; };
      elem.onmouseout  = function() { this.className='thMoveLeftFade'; };
    } else {
      elem.src         = 'images/noleft.gif';
      elem.title       = 'Can\'t move image left';
      elem.onclick     = NoAction;
      elem.onmouseover = null;
      elem.onmouseout  = null;
    }
  }
  elem = document.getElementById('thMoveRight'+id);
  if (elem) {
    //elem.className = 'thMoveRightFade';
    if (image && id % thumbcols != thumbcols-1) {
      elem.src         = 'images/right.gif';
      elem.title       = 'Move image right';
      elem.onclick     = function() { MovePhoto(id,+1); return false; };
      elem.onmouseover = function() { this.className='thMoveRight'; };
      elem.onmouseout  = function() { this.className='thMoveRightFade'; };
    } else {
      elem.src         = 'images/noright.gif';
      elem.title       = 'Can\'t move image right';
      elem.onclick     = NoAction;
      elem.onmouseover = null;
      elem.onmouseout  = null;
    }
  }
  elem = document.getElementById('thMoveUp'+id);
  if (elem) {
    //elem.className = 'thMoveUpFade';
    if (image && id >= thumbcols) {
      elem.src         = 'images/up.gif';
      elem.title       = 'Move image up';
      elem.onclick     = function() { MovePhoto(id,0,-1); return false; };
      elem.onmouseover = function() { this.className='thMoveUp'; };
      elem.onmouseout  = function() { this.className='thMoveUpFade'; };
    } else {
      elem.src         = 'images/noup.gif';
      elem.title       = 'Can\'t move image up';
      elem.onclick     = NoAction;
      elem.onmouseover = null;
      elem.onmouseout  = null;
    }
  }
  elem = document.getElementById('thMoveDown'+id);
  if (elem) {
    //elem.className = 'thMoveDownFade';
    if (image && id < thumbs.length-thumbcols) {
      elem.src         = 'images/down.gif';
      elem.title       = 'Move image down';
      elem.onclick     = function() { MovePhoto(id,0,+1); return false; };
      elem.onmouseover = function() { this.className='thMoveDown'; };
      elem.onmouseout  = function() { this.className='thMoveDownFade'; };
    } else {
      elem.src         = 'images/nodown.gif';
      elem.title       = 'Can\'t move image down';
      elem.onclick     = NoAction;
      elem.onmouseover = null;
      elem.onmouseout  = null;
    }
  }
}

var curPhoto = 0;
function ShowPhoto(id) {
  if (arguments.length < 1) id = curPhoto;
  var main = document.getElementById('mainphoto');
  var file = document.getElementById('filename'+id);
  if (file && main) main.src = file.value ? file.value : nophoto;
  if (id == curPhoto) {
    ToggleThumbControls(curPhoto);
  } else {
    HideThumbControls(curPhoto);
    ShowThumbControls(id);
    UpdatePhotoControls(id);
  }
  curPhoto = id;
  return false;
}
function ResetPhotos() {
  var elem;
  if (photos.length) {
    for (var i = 0; i < photos.length; i++) {
      elem = document.getElementById('filename'+i);
      if (elem) elem.value = photos[i];
      elem = document.getElementById('thumb'+i);
      if (elem) elem.src = thumbs[i] ? thumbs[i] : nothumb;
    }
    HideThumbControls(curPhoto);
    var main = document.getElementById('mainphoto');
    if (main) main.src = photos[0] ? photos[0] : nophoto;
    UpdatePhotoControls(0);
    curPhoto = 0;
  }
}

function UploadPhoto(source,id) {
  if (arguments.length < 1) source = null;
  if (arguments.length < 2) id  = curPhoto;
  // Upload button clicked on inline photo controls?
  if (source && top.UploadFrame2 &&
      source.ownerDocument == top.UploadFrame2.document) {
    var f = top.UploadFrame2.document.UploadForm2;
    if (f.filename.value.replace(/ +/,'')) {
      UploadingPhoto();
      f.submit();
    } else
      alert('No filename to upload.');
    return false;
  }
  // Camera button clicked on thumbnail controls?
  var elem = document.getElementById('UploadImage');
  if (elem) {
    if (source) {
      var doc = window.frames['UploadFrame'].document;
      doc.UploadForm.num.value = id;
      var e = doc.getElementById('photonum');
      if (e) e.innerHTML = id+1;
    }
    // Display/hide the popup dialog
    if (!traceUpload) {
      if (elem.style.display == 'none') {
        elem.style.display = 'block';
        InitMove('UploadImage','UploadTitle');
      } else {
        ClearMove('UploadImage','UploadTitle');
        elem.style.display = 'none';
      }
    }
  }
  return false;
}
function UploadingPhoto(id) {
  if (arguments.length < 1) id = curPhoto;
  var elem = document.getElementById('mainphoto');
  if (elem) elem.src = 'images/uploading.png';
  elem = document.getElementById('thumb'+id);
  if (elem) elem.src = 'images/uploadingsm.png';
  HideThumbControls(id);
}
function UploadedPhoto(id,photo,thumb) {
  if (trace) alert('UploadedPhoto('+id+',"'+photo+'","'+thumb+'")');
  UploadPhoto(null,id);
  HideThumbControls(null,id);
  UpdatePhoto(id,photo,thumb);
}
function UpdatePhoto(id,photo,thumb) {
  var elem;
  if (arguments.length < 1) id = curPhoto;
  if (arguments.length < 2) {
    elem = document.getElementById('filename'+id);
    photo = elem ? elem.value : '';
  }
  if (arguments.length < 3) {
    elem = document.getElementById('thumb'+id);
    thumb = elem ? elem.src : '';
  }
  if (trace) alert('UpdatePhoto('+id+',"'+photo+'","'+thumb+'")');

  elem = document.getElementById('filename'+id);
  if (elem) elem.value = (photo != nophoto) ? photo : '';

  elem = document.getElementById('mainphoto');
  if (elem) elem.src = photo ? photo : nophoto;

  elem = document.getElementById('thumb'+id);
  if (elem) elem.src = thumb ? thumb : nothumb;
}
function CancelPhotoUpload() {
  if (!traceUpload) {
    var elem = document.getElementById('UploadImage');
    if (elem && elem.style.display != 'none') {
      ClearMove('UploadImage','UploadTitle');
      elem.style.display = 'none';
    }
  }
}
function DeletePhoto(id) {
  if (arguments.length < 1) id = curPhoto;
  if (confirm('Delete image #'+(id+1))) {
    HideThumbControls(id);
    UpdatePhoto(id,nophoto,nothumb);
    return true;
  }
  return false;
}

function AddPhoto(id,n) {
  if (arguments.length < 1) {
    id = curPhoto;
    if (document.getElementById('before').checked)
      n = -1;
    else if (document.getElementById('after').checked)
      n = +1;
    else
      n = 0;
  }
  else if (arguments.length < 2)
    n = 0;

  if (n < 0)
    msg = 'Insert new image before #'+(id+1);
  else if (n > 0)
    msg = 'Insert new image after #'+(id+1);
  else
    msg = 'Add image at end';
  alert(msg);

  return false;
}
function MovePhoto(id,dx,dy) {
  if (arguments.length < 1) id = curPhoto;
  else if (id == null) id = curPhoto;
  if (arguments.length < 2) dx = 0;
  if (arguments.length < 3) dy = 0;

  var id2 = id + dx + thumbcols*dy;
  //if (trace) alert('MovePhoto('+id+','+dx+','+dy+'): '+id2);

  HideThumbControls(id);
  var photo1 = document.getElementById('filename'+id ).value;
  var photo2 = document.getElementById('filename'+id2).value;
  var thumb1 = document.getElementById('thumb'+id ).src;
  var thumb2 = document.getElementById('thumb'+id2).src;
  //if (trace) alert(id+': '+photo1+'\n'+id2+': '+photo2);
  UpdatePhoto(id, photo2,thumb2);
  UpdatePhoto(id2,photo1,thumb1);
  curPhoto = id2;
  UpdatePhotoControls(id2);
  ShowThumbControls(id2);

  return false;
}

function GetFile(cbox,name) {
  var elem = document.getElementById(name);
  var eold = document.getElementById(name+'_filename');
  if (cbox.checked) {
    eold.style.display = 'none';
    elem.style.display = '';
  }
  else {
    eold.style.display = '';
    elem.style.display = 'none';
    elem.value         = '';
  }
}

var MoveInfo = { el:null, dx:0, dy:0 };
function MoveElement(e) {
  if (!e) e = window.event;
  var cursor = GetCursorPos(e);
  var elem = MoveInfo.el;
  elem.style.left = cursor.x + MoveInfo.dx;
  elem.style.top  = cursor.y + MoveInfo.dy;
}
function StartMove(e) {
  if (!e) var e = window.event;
  var cursor = GetCursorPos(e);
  var elem = MoveInfo.el;
  var pos = GetPos(elem);
  MoveInfo.dx = pos.x - cursor.x;
  MoveInfo.dy = pos.y - cursor.y;
  document.onmousemove = MoveElement;
  //if (document.captureEvents)
  //  document.captureEvents(Event.MOUSEMOVE);
}
function StopMove(e) {
  document.onmousemove = null;
}
function InitMove(name,trigger) {
  MoveInfo.el = document.getElementById(name);
  var elem = document.getElementById(trigger);
  if (elem) {
    AddEvent(elem,'mousedown',StartMove);
    AddEvent(elem,'mouseup',StopMove);
  }
}
function ClearMove(name,trigger) {
  var elem = document.getElementById(trigger);
  if (elem) {
    RemoveEvent(elem,'mousedown',StartMove);
    RemoveEvent(elem,'mouseup',StopMove);
    MoveInfo.el = null;
    MoveInfo.dx = 0;
    MoveInfo.dy = 0;
  }
}

// Debug utilities

function DebugUploading(state) {
  if (arguments.length < 1) state = !traceUpload;
  traceUpload = state;
  var elem = document.getElementById('UploadImage');
  if (elem) {
    if (state) {
      elem.className = 'UploadImageDebug';
      elem.style.display = '';
    } else {
      elem.className = 'UploadImage';
      elem.style.display = 'none';
    }
    var doc = window.frames['UploadFrame'].document;
    doc.UploadForm.debug.value = state;
    elem = doc.getElementById('photonum');
    if (elem) elem.innerHTML = curPhoto+1;
  }
}

function ShowPhotoFiles() {
  var elem, files = new Array();
  for (i = 0; i < photos.length; i++) {
    elem = document.getElementById('filename'+i);
    files[i] = i+': '+(elem?elem.value:'');
  }
  alert(files.join('\n'));
}
function ShowThumbFiles() {
  var elem, files = new Array();
  for (i = 0; i < thumbs.length; i++) {
    elem = document.getElementById('thumb'+i);
    files[i] = i+': '+(elem?elem.src:'');
  }
  alert(files.join('\n'));
}

