function getNoteField(id) {
  var n = getElement("note_" + id) ;
  if (!n) { alert ("Internal error: cannot get note_"+id); }
  return n;
}

function addNote (id,hdr) {
  var n = getNoteField(id) ;
  var note = n.value ;
  wo("/climbing/lib/getNote.asp?subject=" + escape(hdr) + "&id=" + escape(id) + "&message=" + escape(note),700,500)
}

function hideNote(id) {
  var n = getElement("note_" + id) ;
  n.disabled = true ;

  var span_html = getElement("html_" + id) ; 
  var span_chg  = getElement("chg_" + id) ;  
  var span_add  = getElement("add_" + id) ;  

  if (span_html) { span_html.innerHTML = "" ; span_html.style.display = "none" ; }
  if (span_add)  { span_add.style.display = "" ; }
  if (span_chg)  { span_chg.style.display = "none" ; }
}

function showNote(id) {
  var n = getElement("note_" + id) ;
  n.disabled = false ;
  
  var span_html = getElement("html_" + id) ;
  var span_add  = getElement("add_" + id) ;
  var span_chg  = getElement("chg_" + id) ;

  if (span_html) { span_html.style.display = "" ; }
  if (span_add)  { span_add.style.display = "none" ; }
  if (span_chg)  { span_chg.style.display = "" ; }
}

function delNote (id) {
  if (! confirm("Hoces res izbrisati opombo")) return ;
  
  var fld = getElement("note_" + id) ;
  fld.value = "" ; fld.disabled = true;
  hideNote(id) ;
}
  
function getNote(id,txt,htxt) {
  var fld = getNoteField(id) ;
  fld.value = txt ; fld.disabled = false ;
  
  var span_html = getElement("html_" + id) ;
  if (span_html) { span_html.innerHTML = htxt ; }
  showNote(id) ;
}

var maxH = 200 ;
var maxW = 150 ;

function round(x) { return Math.round(x); }

function attLoadComplete(t) {
  var scale,e,w,h,id ;
  
  id = t.targetID ;
//  alert("complete: " + t.src + "/" + t.width + "/" + id) ;
  e = getElement(id) ; if (!e) { alert("attLoadComplete: missing ID " +id) ; return; }
  w = t.width ; h = t.height ;
  scale = 1
  if (h > maxH)  { scale = maxH / h; }
  if (maxW / w < scale) { scale = maxW / w ; }
//  alert("scale = " + scale) ; 
  e.innerHTML = "<a href='"+t.src+"' target='_blank'>" + 
    "<img border='0' src='" + t.src +"' width='" + round(w * scale) + "' height='" + round(h * scale) + "' />" +
    "</a>"
}

function attLoad(id,src) {
  var i = new Image() ;
  var e = getElement(id) ; if (e) { e.loadingImage = i; }
  i.targetID = id ;
  i.onload = function () { attLoadComplete(this) ; }
  i.src = src ;
}

function hideOptionalElements() {
  var elements=typeof document.all!='undefined' ? document.all:document.getElementsByTagName('*'); 
  var e,i ;
  
  for (i = 0 ; i < elements.length ; i++) {
    e = elements[i] ;
    if (e.className.search(/Optional/) > 0) { e.style.display = "none" ; }
  }
}

function hideSmallScreen() {
  if (screen.width <= 1280) hideOptionalElements() ;
}

function showUserButton(buttonID,rightList,editorID) {
  var canShow;
  if (typeof(editorID) == "string") { editorID = [ editorID ]; }
  if (typeof(rightList) == "string") { rightList = [ rightList ]; }
  if (!userRights) return;
  if (!userid) return ;
  
  for (var i = 0 ; i < rightList.length; i++) {
    if (userRights.indexOf(':'+rightList[i]+':') >= 0) { canShow = true ; }
  }
  for (var i = 0 ; i < editorID.length ; i++) {
    if (userid == editorID[i]) { canShow = true; }
  }
  if (canShow) showElement(buttonID);
}  

function createDropdownMenu(m) {
  var pid = "createDropdownMenu: " ;
  
  if (!m.id) throw(pid+"menu ID missing") ;
  var divEl = xGetElementById(m.id) ;
  if (!divEl) throw(pid+"menu "+m.id+" not in HTML source") ;
  if (!m.actions) throw(pid+"menu "+m.id+" has no actions");
  
  var mTitle = divEl.firstChild ;
  if (mTitle.nodeName.toLowerCase() != 'p') throw(pid+"<p> expected as menu title for "+m.id+" got "+mTitle.nodeName);
  mTitle.style.cursor = "pointer";
  mTitle.onclick = function() { menuDropDown(m); } ;
  
  var dropEl = document.createElement("div");
  dropEl.id = m.id+"_drop";
  dropEl.className = "rightSidebar";
  dropEl.style.position = "relative";
  hideElement(dropEl);
  
//  var mHTML = "<p class='formSectionTitle'>"
  var mHTML = "<p class='sbSection'>"
  mHTML += "<img src='/images/act_close.gif' style='position: absolute; top: 0px; right: 0px;' onClick='menuRollup(this)'/>"
  mHTML += "<span>&emsp;"+m.title+"&emsp;</span></p>";
  for (var i = 0; i < m.actions.length; i++) {
    try {
      if (m.actions[i].ctrl) { 
        EWM.registerCtrlKey(m.actions[i].ctrl,m.actions[i].action); 
        mHTML += "<p class='sidebarText fltRm'>Ctrl-"+m.actions[i].ctrl+"</p>";
      }
    } catch(e) {}
   
    mHTML += "<p class='sidebarText'>";
    if (m.actions[i].key) mHTML += "<a class='plain' accesskey='" + m.actions[i].key + "'>";
    mHTML += m.actions[i].text; 
    if (m.actions[i].key) mHTML += "</a>";
    mHTML += "</p>";
  }
  dropEl.innerHTML = mHTML ;
  divEl.appendChild(dropEl);
//  alert(divEl.innerHTML);
}

function enableDropDown(o,a) {
  if (!a) return ;
  o.onclick = function () { a(); menuRollup(this); }
  o.style.cursor = "pointer";
}

function menuDropDown(m) {
  var pid = "dropMenu: " ;
//  alert("dropdown requested for menu"+m.id);

  var dropEl = xGetElementById(m.id+"_drop"); if (!dropEl) { throw(pid+"cannot find drop element for "+m.id); }
  var divEl  = xGetElementById(m.id); if (!divEl) { throw(pid+"cannot find menu "+m.id); }
  var buttonEl = divEl.firstChild; 

  var menuItem = dropEl.firstChild.nextSibling;
  
  for (var i = 0; i < m.actions.length; i++) {
    while (menuItem && xHasClass(menuItem,"fltRm")) menuItem = menuItem.nextSibling;
    if (!menuItem) break;
    enableDropDown(menuItem,m.actions[i].action);
//    if (goFunc) {
//      menuItem.onclick = function() { goFunc(); menuRollup(this); }
//      menuItem.style.cursor = "pointer";
//    }
    menuItem = menuItem.nextSibling;
  }
  showElement(dropEl);
  hideElement(buttonEl);  
}

function menuRollup(e) {
  var pid ="menuRollup: ";
  
//  alert(pid+e);
  while (e.className != "rightSidebar") {
    e = e.parentNode; if (!e) throw(pid+"cannot find dropdown menu placeholder");
  }
  hideElement(e);
  if (e.previousSibling) showElement(e.previousSibling);
}

function internalError(e) { alert("Internal error: "+e); return; }

function defaultErrorTrap(sMsg,sUrl,sLine) {
   alert("Error: " + sMsg + " in line " + sLine + " of URL " + sUrl) ;
   return false;
}

onerror = defaultErrorTrap ;

var pnndebug = true;

function recurseChildNodes(parent,tag,callback) {
  if (! parent.nodeName) return;
  if (parent.nodeName.toLowerCase() == tag) { callback(parent); return; }
  if (! parent.childNodes) return;
  
  for (var i = 0; i < parent.childNodes.length; i++) {
    recurseChildNodes(parent.childNodes[i],tag,callback);
  }
}

function makeTableActive(id) {
  var t = getCheckElement(id); if (!t) return;
  recurseChildNodes(t,"tr",function(r) {
    r.onmouseover = function() { xAddClass(this,"rowActive"); }
    r.onmouseout  = function() { xRemoveClass(this,"rowActive"); }
  }) ;
}

function grayTableRows(id,hc) {
  var tc = -hc;
  
  function grayRow(r) { 
    tc ++; 
    if (tc > 0 && tc % 2 == 0) xAddClass(r,"rowGray") ;
  }
  
  var t = getElement(id); if (!t) return;
  recurseChildNodes(t,"tr",grayRow);
}

function activateLinksGetDimension(n) {
  var mres = n.match(/( |^)dim_(\d+)x(\d+)( |$)/);
  if (mres) {
    var d = new Object();
    d.x = mres[2];
    d.y = mres[3];
//    alert ("n="+n+" x="+d.x+" y="+d.y);
    return d;
  }
  return false;
}

function setWomClick(o,f,x,y) {
  o.onclick = function() { f(this.href,x,y); return false; }
}

function activateLinks() {
  var hrefs = xGetElementsByTagName("a")
  for (var i = 0; i < hrefs.length; i++) {
    var l = hrefs[i];
    if (xHasClass(l,"pus")) { l.onclick = function() { pus(this.href); return false; }; }
    if (xHasClass(l,"wo")) {
      var dim = activateLinksGetDimension(l.className);
      if (dim) setWomClick(l,wo,dim.x,dim.y);
    }
    if (xHasClass(l,"wom")) {
      var dim = activateLinksGetDimension(l.className);
      if (dim) setWomClick(l,wom,dim.x,dim.y);
    }
  }
}

function getParentExpandableElement(e) {
  while (e && !xHasClass(e,"expandable")) { e = e.parentNode; }
  return e;
}

function collapseNextRows() {
  var r = getParentExpandableElement(this); if (!r) return false;
  xRemoveClass(r,"expanded"); xAddClass(r,"collapsed");
  r = r.nextSibling;
  while (r && !xHasClass(r,"expandable")) { if (r.style) r.style.display = "none"; r = r.nextSibling; }
  return false;
}

function expandNextRows() {
  var r = getParentExpandableElement(this); if (!r) return false;
  xRemoveClass(r,"collapsed"); xAddClass(r,"expanded");
  r = r.nextSibling;
  while (r && !xHasClass(r,"expandable")) { if (r.style) r.style.display = ""; r = r.nextSibling; }
  return false;
}

function scrollPreviousRowTitle() {
  var r = getParentExpandableElement(this); if (!r) return false;
  var sp = xPageY(r) - xScrollTop();
  do { 
    r = r.previousSibling; if (!r) return false;
  } while (!xHasClass(r,"expandable"));
  xWinScrollTo(window, 0, xPageY(r) - sp, 500);
  return false;
}

function scrollNextRowTitle() {
  var r = getParentExpandableElement(this); if (!r) return false;
  var sp = xPageY(r) - xScrollTop();
  do { 
    r = r.nextSibling; if (!r) return false;
  } while (!xHasClass(r,"expandable"));
  xWinScrollTo(window, 0, xPageY(r) - sp, 500);
  return false;
}

function addExpandableRowIcon(parent,imgref,classref,eventref) {
  var img = document.createElement("img");
  img.src = imgref;
  img.border = 0;
  var a = document.createElement("a");
  a.href = "#"; a.onclick = eventref;
  a.appendChild(img);
  a.className = classref;
//  var div = document.createElement("div")
//  div.className = classref;
//  div.appendChild(a);
  parent.insertBefore(a,parent.firstChild);
}

function makeRowExpandable(r,lr) {
  var cList = xGetElementsByClassName("expandTitle",r); if (!cList.length) throw("Internal error: expandable row doesn't have expandTitle cell")
  var cElem = cList[0];
  xAddClass(r,"expanded");
  
  addExpandableRowIcon(cElem,"/images/plus.gif","hideWhenExpanded",expandNextRows);
  addExpandableRowIcon(cElem,"/images/minus.gif","hideWhenCollapsed",collapseNextRows);
  if (lr) {
    addExpandableRowIcon(cElem,"/images/icons/jumpUp.png","right hideWhenCollapsed",scrollPreviousRowTitle);
    cList = xGetElementsByClassName("expandTitle",lr);
    if (cList.length) addExpandableRowIcon(cList[0],"/images/icons/jumpDown.png","right hideWhenCollapsed",scrollNextRowTitle);
  }
} 
  
function makeTableExpandable(tid) {
  var t = xGetElementById(tid); if (!t) return;
  var expList = xGetElementsByClassName("expandable",t); if (expList.length == 0) return;
  var expElem = expList[0];
  if (expElem.parentNode) expElem = expElem.parentNode.childNodes[0];
  
  var lastExp = false;
  while (expElem) {
    if (xHasClass(expElem,"expandable")) { makeRowExpandable(expElem,lastExp); lastExp = expElem; }
    expElem = expElem.nextSibling;
  }
}