var ni = 0;
var saveTimer,footerTimer;
var userid,email;
var pRef,sRef,formRef;

var saFormR = new Array();
saFormR = { email : 'Your email address',
         password : 'Your password' };

var isIE = (navigator.appName.indexOf("Microsoft Internet Explorer") > -1)?1:0;

function pageload() {
  pRef = document.getElementById('footernote');
  sRef = document.getElementById('status');
  formRef = document.forms['saForm'];

  userid = getCookie('nsuserid');
  if (userid) {
    sRef.innerHTML = 'loading notes, please wait ...';
    do_get(userid);
  }
  else {
    stack(-1,false);
    showhints();
    clearTimeout(footerTimer);
  }
}

function stack(i,save) {
  if (i == (ni-1)) {
    createnote(ni,'');
    document.getElementById('stack').className = 'd'+(++ni)+' note';
  }
  if ((i > -1) && (save)) { do_add(i); }
}

function createnote(i,c) {
  var divHtml = '';
  divHtml += '<a class="close" href="javascript:closenote('+i+');" title="delete note"><img src="images/close.gif" alt="delete note"></a>';
  divHtml += '<a class="edit" href="javascript:editnote('+i+');" title="edit note"><img src="images/edit.gif" alt="edit note"></a>';
  divHtml += '<a class="save" href="javascript:savenote('+i+');" title="save note"><img src="images/save.gif" alt="save note"></a>';
  divHtml += '<a class="fit" href="javascript:fitnote('+i+',1);" title="fit note"><img src="images/fit.gif" alt="fit note"></a>';
  divHtml += '<div ondblclick="editnote('+i+');">'+c+'</div>';
  divHtml += '<textarea onkeyup="adjTA(this,'+i+',1);" onblur="savenote('+i+');do_add('+i+');"></textarea>';

  var newdiv = document.createElement('div');
  newdiv.id = 'd'+i;
  newdiv.className = 'd'+i+' note';
  newdiv.onclick = function() {
    clearTimeout(saveTimer);
    saveTimer = setTimeout("stack("+i+",true);",300);
  }
  newdiv.innerHTML = divHtml;
  document.getElementById('notes').appendChild(newdiv);
  ADD_DHTML('d'+i);
}

function adjTA(objRef,i,refit) {
  if (objRef.scrollWidth > objRef.offsetWidth) {
    if (refit) { dd.elements['d'+i].refitwidth = true; }
    dd.elements['d'+i].resizeTo(objRef.scrollWidth+30,objRef.offsetHeight+39);
  }
  if (objRef.scrollHeight > objRef.offsetHeight) {
    if (refit) { dd.elements['d'+i].refitheight = true; }
    dd.elements['d'+i].resizeTo(objRef.offsetWidth+16,objRef.scrollHeight+60);
  }
}

function editnote(i) {
  clearTimeout(saveTimer);
  var dRef = document.getElementById('d'+i);
  var nRef = dRef.getElementsByTagName('div')[0];
  var tRef = dRef.getElementsByTagName('textarea')[0];

  document.getElementById('output').value = processnote(nRef.innerHTML);
  nRef.style.display = 'none';
  tRef.style.display = 'block';
  tRef.value = processnote(nRef.innerHTML);

  dRef.getElementsByTagName('a')[1].style.display = 'none';
  dRef.getElementsByTagName('a')[2].style.display = 'block';
  dRef.getElementsByTagName('a')[3].style.display = 'none';
  adjTA(tRef,i,1);
  tRef.focus();

  if ((isIE) && (tRef.value != '')) {
    var tr = tRef.createTextRange(); 
    tr.move('character',tRef.value.length); 
    tr.select(); 
  }
}

function savenote(i) {
  var dRef = document.getElementById('d'+i);
  var nRef = dRef.getElementsByTagName('div')[0];
  var tRef = dRef.getElementsByTagName('textarea')[0];

  tRef.style.display = 'none';
  nRef.innerHTML = processtext(tRef.value);
  nRef.style.display = 'block';

  if ((dd.elements['d'+i].refitwidth) || (dd.elements['d'+i].refitheight)) { fitnote(i,0); }
  adjTA(nRef,i,0);

  dRef.getElementsByTagName('a')[1].style.display = 'block';
  dRef.getElementsByTagName('a')[2].style.display = 'none';
  dRef.getElementsByTagName('a')[3].style.display = 'block';
//  do_add(i);
}

function processtext(txt) {
  txt = txt.replace(/((http:\/\/)|(www\.))([\w]+\.[a-z]{2,3}\/*[^\s]*)/ig,'<a href="http://$3$4" target="_blank">$3$4</a>');
  txt = txt.replace(/([\w]+@[\w.]+[a-z]{2,3})/ig,'<a href="mailto:$1">$1</a>');
  txt = txt.replace(/>([^<]{32})[^<]+<\/a>/ig,'>$1..</a>');
  txt = txt.replace(/\n/g,'<br>').replace(/\r/g,'');
  return(txt);
}

function processnote(txt) {
  txt = txt.replace(/<a href="([^"]+)" target="*_blank"*>[^<]+<\/a>/ig,'$1');
  txt = txt.replace(/<a href="mailto:([^"]+)">[^<]+<\/a>/ig,'$1');
  txt = txt.replace(/\n/g,' ').replace(/\r/g,'');
  txt = txt.replace(/<br>/ig,'\n');
  return(txt);
}

function closenote(i) {
  clearTimeout(saveTimer);
  setTimeout("dd.elements['d"+i+"'].setOpacity(0.7);",300);
  setTimeout("dd.elements['d"+i+"'].setOpacity(0.6);",400);
  setTimeout("dd.elements['d"+i+"'].setOpacity(0.5);",500);
  setTimeout("dd.elements['d"+i+"'].setOpacity(0.4);",600);
  setTimeout("dd.elements['d"+i+"'].setOpacity(0.3);",700);
  setTimeout("dd.elements['d"+i+"'].setOpacity(0.2);",800);
  setTimeout("dd.elements['d"+i+"'].setOpacity(0.1);",900);
  setTimeout("do_del("+i+");",1000);
}

function do_add(i) {
  var dRef = document.getElementById('d'+i);
  var iRef = dRef.getElementsByTagName('img')[3];
  var x = dd.elements['d'+i].x;
  var y = dd.elements['d'+i].y;
  var w = dd.elements['d'+i].w
  var h = dd.elements['d'+i].h;
  var z = dd.elements['d'+i].z;
  var c = dRef.getElementsByTagName('div')[0].innerHTML;

  x_add(((userid)?userid:''),i,x,y,w,h,z,c,do_add_cb);
}

function do_del(i) {
  dd.elements['d'+i].hide();
  dd.elements['d'+i].del();
  stack(i,false);
  x_del(userid,i,do_del_cb);
}

function do_get(userid) {
  x_get(userid,do_get_cb);
}

function do_login(set,email,password) {
  x_login(set,email,password,do_login_cb);
}

function do_add_cb(adata) {
  var aObj = eval('('+adata+')');
  
  if (aObj.user.userid) {
    userid = aObj.user.userid;
    setCookie('nsuserid',userid);
    if (!getCookie('nsuserid')) { alert('Please enable cookies or this site won\'t work.'); }
    footermsg();
  }

  var dRef = document.getElementById('d'+aObj.note.n);
  if (dRef.getElementsByTagName('a')[2].style.display != 'block') {
    dRef.getElementsByTagName('a')[1].style.display = 'block';
  }
}

function do_del_cb(i) {
  void(0);
}

function do_get_cb(jdata) {
  var nObj = eval('('+jdata+')');
  email = nObj.user.email;
  footermsg();

  if (nObj.notes.length > 0) {
    for (i = 0; i < nObj.notes.length; i++) {
      createnote(nObj.notes[i].n,nObj.notes[i].c);
      if (i > 0) { dd.elements[i].hide(); }

//      dd.elements[i].moveTo(nObj.notes[i].x,nObj.notes[i].y);
      dd.elements[i].myX = nObj.notes[i].x;
      dd.elements[i].myY = nObj.notes[i].y;

      dd.elements[i].resizeTo(nObj.notes[i].w,nObj.notes[i].h);
      dd.elements[i].setZ(nObj.notes[i].z);
      ni = (parseInt(nObj.notes[i].n) >= ni)?(parseInt(nObj.notes[i].n)+1):ni;
    }
    initslide();
  }
  stack((ni-1),false);
  sRef.style.display = 'none';
}

function do_login_cb(uid) {
  if (uid == 'invalid') {
    formRef.email.value = '';
    pRef.innerHTML = 'The email address '+formRef.email.value+' is already in use. <a href="javascript:showlogin(1);">Please choose something else.</a>';
    footerTimer = setTimeout("footermsg();",10000);
  }
  else if (uid) {
    userid = uid;
    setCookie('nsuserid',uid);
    if (!getCookie('nsuserid')) { alert('Please enable cookies or this site won\'t work.'); }
    else if (formRef.userid.value == '') {
      pRef.innerHTML = 'Loading notes, please wait...';
      setTimeout("document.location.reload();",1000);
/* DOESN'T WORK - can't reuse elements with same id
      while(dd.elements.length > 0) {
        dd.elements[0].del();
      }
      do_get(uid);
*/
    }
    else {
      pRef.innerHTML = 'Your account information has been saved! Now you can access your NetScraps from other locations.';
      footerTimer = setTimeout("footermsg();",10000);
    }
    formRef.style.display = 'none';
    pRef.style.display = 'block';
  }
  else {
    pRef.innerHTML = 'Sorry, your user information was not found. <a href="javascript:showlogin(0);">Try again?</a>';
    footerTimer = setTimeout("footermsg();",10000);
  }
  formRef.style.display = 'none';
  pRef.style.display = 'block';
}

var snum = 0;
function initslide() {
  if ((snum+1) < dd.elements.length) { dd.elements[snum+1].show(); }
  eval("timer"+snum+" = setInterval(\"slide();\",30);");
}

var speed = 3;
function slide() {
  var dRef = dd.elements[snum];
  var cx = getdelta(dRef.myX,dRef.x);
  var cy = getdelta(dRef.myY,dRef.y);
  dRef.moveBy(cx,cy);

  if ((dRef.x == dRef.myX) &&
      (dRef.y == dRef.myY)) {
    eval("clearInterval(timer"+(snum++)+");");
    if (snum < (dd.elements.length - 1)) { initslide(); }
  }
}

function getdelta(ns,ne) {
  var d = ((ns - ne)/speed);
  return((d < 0)?Math.floor(d):Math.ceil(d));
}

function showlogin(set) {
  clearTimeout(footerTimer);
  pRef.style.display = 'none';
  formRef.getElementsByTagName('td')[0].innerHTML = (set)?'Enter your email & a password:':'Enter your email & password:';
  formRef.submitBtn.disabled = false;
  formRef.submitBtn.value = (set)?'Set':'Login';
  formRef.userid.value = (set)?userid:'';
  formRef.password.value = '';
  formRef.style.display = 'block';
  if (formRef.email.value) { formRef.password.focus(); }
  else { formRef.email.focus(); }
}

function login(formRef) {
  formRef.submitBtn.value = 'wait..';
  formRef.submitBtn.disabled = true;
  do_login(formRef.userid.value,formRef.email.value,formRef.password.value);
}

function showhints() {
  formRef.style.display = 'none';
  pRef.style.display = 'block';
  pRef.innerHTML = 'HINTS: Click & drag to move. Click the <img align="absmiddle" src="images/edit.gif"> icon or double click to write. Hold <img align="absmiddle" src="images/shift.gif">+drag to resize.';
  setTimeout("footermsg();",20000);
}

function footermsg() {
  if (email) {
    pRef.innerHTML = 'Logged in as <span>'+email+'</span>. <a href="javascript:formRef.email.value = \'\';showlogin(0);">Switch accounts</a>.';
  }
  else {
    pRef.innerHTML = 'Access your NetScraps from other locations. <a href="javascript:showlogin(1);">Make your account permanent</a>.';
  }
}

function fitnote(i,force) {
  var dRef = document.getElementById('d'+i);
  var nRef = dRef.getElementsByTagName('div')[0];

  var minwidth = (force)?130:196;
  var minheight = (force)?50:110;

  nRef.style.display = 'inline';
  if ((dd.elements['d'+i].refitwidth) || (force)) {
    nRef.style.width = '1px';
    nRef.style.width = ((nRef.scrollWidth < minwidth)?minwidth:nRef.scrollWidth) + 'px';
    dd.elements['d'+i].resizeTo(parseInt(nRef.style.width)+20,dd.elements['d'+i].h);
  }
  if ((dd.elements['d'+i].refitheight) || (force)) {
    nRef.style.height = '1px';
    nRef.style.height = ((nRef.scrollHeight < minheight)?minheight:nRef.scrollHeight) + 'px';
    dd.elements['d'+i].resizeTo(dd.elements['d'+i].w,parseInt(nRef.style.height)+49);
  }
  nRef.style.display = 'block';
  dd.elements['d'+i].refitwidth = false;
  dd.elements['d'+i].refitheight = false;
}

