
var mX;
var mY;

document.onmousemove = storeCoordinates;

function storeCoordinates(e) {
   if (navigator.appName == "Microsoft Internet Explorer"){
    mX = event.clientX;
    mY = event.clientY;
  }
  else {
    mX = e.pageX;
    mY = e.pageY;
  }
}


var currentSequence = new Array();

function setWaitText(text) {
  elem = document.getElementById('loading');
  elem.innerHTML = text;
  elem.style.display = 'block';
  elem.style.left = '0px';
  elem.style.top = '0px';
}

function clearWaitText() {
  elem = document.getElementById('loading');
  elem.innerHTML = "";
  elem.style.display = 'none';
}

function addGallery(nodeid, name) {
 setWaitText("Publiserer som galleri");
   var doUrl = '/cgi-bin/addGallery.cgi';
   new Ajax.Request(doUrl,
		{ method: 'post', parameters: 'type=gallery&do=new&name=' + name + '&uniqueid=' + nodeid + '&imageid=' + nodeid,
		encoding: 'iso-8859-1',
		  asynchronous: true,
              	  onComplete: doNothing
                }
              );
}



function removeGallery(nodeid, galleryid) {
/*
alert(nodeid + " " + galleryid);
return;
*/
 setWaitText("Fjerner galleri");
   var doUrl = '/cgi-bin/addGallery.cgi';
   new Ajax.Request(doUrl,
		{ method: 'post', parameters: 'type=gallery&do=delete&imagegalleryid=' + galleryid + '&uniqueid=' + nodeid + '&imageid=' + nodeid,
		encoding: 'iso-8859-1',
		  asynchronous: true,
              	  onComplete: doNothing
                }
              );
}


function editGallery(nodeid,galleryid,name,obj){
 if(obj.checked){
   addGallery(nodeid,name);
  }  else{
  removeGallery(nodeid,galleryid);
 }
}



function showMeImages(gtype ){

   var doUrl = '/cgi-bin/editStyle.cgi';
   new Ajax.Request(doUrl,
		{ method: 'post', parameters: 'do=writeconfig&section=setup&parameter=imagebrowser&value=' + gtype ,
		encoding: 'iso-8859-1',
		  asynchronous: true,
              	  onComplete: function(t){

				 if(gtype=='list'){
					parent.parent.location='/admin/index_bilde.html';
	                               parent.parent.parent.leftcontrol.location.reload();
				}
				 else {
					parent.location='/admin/index_bilde_browse.html';
	                               parent.parent.leftcontrol.location.reload();
					}




				}
                }
              );

}


function changePassword(nodeid) {
 setWaitText("Lagrer");
 var place = "pass" + nodeid;
var value = document.getElementById(place).checked;
 value ? value = 1 : value = 0;

   var doUrl = '/cgi-bin/addNode.cgi';
   new Ajax.Request(doUrl,
		{ method: 'post', parameters: 'nodeid=' + nodeid + '&password=' + value + '&do=password',
		encoding: 'iso-8859-1',
		  asynchronous: true,
              	  onComplete: doNothing
                }
              );
}


function changeVisibility(nodeid) {
 setWaitText("Lagrer");

 var place = "visi" + nodeid;
   var value = document.getElementById(place).checked;

 value ? value = 0 : value = 1;

   var doUrl = '/cgi-bin/addNode.cgi';
   new Ajax.Request(doUrl,
		{ method: 'post', parameters: 'nodeid=' + nodeid + '&visibility=' + value + '&do=visibility',
		encoding: 'iso-8859-1',
		  asynchronous: true,
              	  onComplete: doNothing
                }
              );
}

function doNothing(t) { clearWaitText(); return; }


function orderChanged(p) {

 var nextSequence = new Array();
 Sortable.serialize('holder');
 nextSequence = Sortable.sequence('holder');
 var a = 0;
 while (currentSequence[a] == nextSequence[a]) {a++};
 var moved = 0;

  if (currentSequence[a] == nextSequence[a+1] && currentSequence[a+1] == nextSequence[a]) {
   if (DEBUG2) { alert("To har byttet plass"); }
   moved = a;
  }
  else if (currentSequence[a] == nextSequence[a+1]) {
    moved = a;
  }
  else {
   b = a;
   while (currentSequence[a] != nextSequence[b]) {b++;}
     moved = b;
  }
  moveNode(moved, nextSequence, currentSequence);
  Sortable.serialize('holder');
  currentSequence = Sortable.sequence('holder');
  saveStructure();
}

function validateMove(newPlace, nextSequence) {

 if (newPlace == 0 && rootnode == 2) {return false;} // not allowed to have a folder as first page


 var id = nodes[nextSequence[newPlace]].childid;
 var pointer = newPlace-1;

 if (pointer < 0) {return true;} // moved to the top

 var parentid = nodes[nextSequence[pointer]].parentid;

 if (parentid == rootnode) {return true;}

 while (id != parentid && parentid != rootnode) {
   pointer--;
   parentid = nodes[nextSequence[pointer]].parentid;
 }

 if (parentid == id) return false;
 else return true;

}

function findOldPlace(node, currentSequence) {
  var a = 0;
  while (node.childid != nodes[currentSequence[a]].childid) {
   a++;
  }
  return a;
}

function moveFolder(newPlace, nextSequence, currentSequence) {
 if (validateMove(newPlace, nextSequence)) {
 return;}
 else { 
  Sortable.setSequence("holder", currentSequence);
 }
// moveNode(newPlace, nextSequence, currentSequence);
}

function findParent(nextSequence, pointer, parentid) {
  while (nodes[nextSequence[pointer]].childid != parentid) {pointer--}
  return nodes[nextSequence[pointer]];
}

function moveNode(newPlace, nextSequence, currentSequence) {

  var movedNode = nodes[nextSequence[newPlace]];
  var above = nodes[nextSequence[newPlace-1]];
  var below = nodes[nextSequence[newPlace+1]];
  var oldParent;
  var oldLevel;
  var flag = false; // flag to see if the node is in an ambigous position

  if (movedNode.type == 'folder') {
   oldParent = movedNode.parentid;
   oldLevel = movedNode.level;
   if (!validateMove(newPlace, nextSequence)) {
    Sortable.setSequence("holder", currentSequence);
    return;
   }
  }

  if (newPlace == 0) {    // if you are moving to the top
   movedNode.parentid = rootnode;
   movedNode.level = 0;
  }

  else if (newPlace == nodes.length-2) {  // move to the bottom
   if (above.type == 'folder') {
     var parent = showAlertBox(above);
	if (parent) {
	 movedNode.parentid = above.childid;
	 movedNode.level = above.level + 1;
	}
	else {
	 movedNode.parentid = rootnode;
    	 movedNode.level = 0;
	}
   }
   else if (above.parentid != rootnode) {
	var parentabove = findParent(nextSequence, newPlace-1, above.parentid);
	var parent = showAlertBox(parentabove);
	if (parent) {
	 movedNode.parentid = parentabove.childid;
	 movedNode.level = parentabove.level + 1;
	}
	else {
    movedNode.parentid = rootnode;
    movedNode.level = 0;
	}
   }
   else {
    movedNode.parentid = rootnode;
    movedNode.level = 0;
   }
  }

  else if (above.level != below.level && above.type != 'folder') {
	parentabove = findParent(nextSequence, newPlace-1, above.parentid);
	var parent = showAlertBox(parentabove);
	if (parent) {
	 movedNode.parentid = parentabove.childid;
	 movedNode.level = parentabove.level + 1;		
	}
	else {
	 movedNode.parentid = below.parentid;
	 movedNode.level = below.level;
	}
  }
  else if (above.type == 'folder' && below.parentid == above.parentid) {
	var parent = showAlertBox(above);
	if (parent) {
	 movedNode.parentid = above.childid;
	 movedNode.level = above.level + 1;		
	}
	else {
	 movedNode.parentid = below.parentid;
	 movedNode.level = below.level;
	}
  }


  else if (above.type == 'node' && above.parentid == movedNode.parentid) {} // moving within a level

  else if (above.type == 'folder') {  // moving to a folder above
    movedNode.parentid = above.childid;
    movedNode.level = above.level + 1;
  }
  else if (below.type == 'folder' && above.type == 'node') {
    movedNode.parentid = below.parentid;
    movedNode.level = below.level;
  }

  else if (below.type == 'node' && below.parentid != movedNode.parentid) {
   if (above.type == 'node') {
    movedNode.parentid = above.parentid;
    movedNode.level = above.level;
   }
   else {
    movedNode.parentid = above.childid;
    movedNode.level = above.level + 1;
   }
  }
  else if (below.type == 'node' && below.parentid == movedNode.parentid) {
      movedNode.level = below.level;
      movedNode.parentid = below.parentid;
  }

  if (movedNode.type == 'folder') { moveChildren(newPlace, nextSequence, currentSequence, oldParent, oldLevel);}

  var elemID = "node" + movedNode.childid;
  document.getElementById(elemID).style.paddingLeft = (25 * movedNode.level) + "px";

  var elemcomID = "nodecom" + movedNode.childid;

}

function moveChildren(newPlace, nextSequence, currentSequence, oldParent, oldLevel) {

  var movedNode = nodes[nextSequence[newPlace]];
  var pointer = 0;
  var oldPlace = findOldPlace(movedNode, currentSequence);
  var firstChild;
  var lastChild;
  var finalSequence = new Array();
  var currentNode = nodes[currentSequence[0]];

  if (oldPlace+1 == nextSequence.length) { return;} // if it has no children and is at bottom

  if(nodes[currentSequence[oldPlace+1]].parentid != movedNode.childid) {return;} // no children!

  while (currentNode.parentid != movedNode.childid) {
   pointer++;
   currentNode = nodes[nextSequence[pointer]];
  }
  firstChild = pointer;

  while (currentNode.level != oldLevel && pointer < nextSequence.length-1) {
   pointer++;
   currentNode = nodes[nextSequence[pointer]];
  }
  if (pointer == nextSequence.length-1) { lastChild = pointer} // if last child is at bottom of page
  else {  lastChild = pointer-1;}

  var diffLevel = oldLevel - movedNode.level;
  for (a=firstChild; a < lastChild+1; a++) {
   nodes[nextSequence[a]].level = nodes[nextSequence[a]].level - diffLevel;
   var elemID = "node" + nodes[nextSequence[a]].childid;
   document.getElementById(elemID).style.paddingLeft = (25 * nodes[nextSequence[a]].level) + "px";
  }

  if (oldPlace > newPlace) {
   var start_slice = nextSequence.slice(0, newPlace);
   var mid_slice = nextSequence.slice(newPlace+1, firstChild);
   var child_slice = nextSequence.slice(firstChild, lastChild+1);
   var end_slice = nextSequence.slice(lastChild);
   finalSequence = finalSequence.concat(start_slice);
   finalSequence.push(nextSequence[newPlace]);
   finalSequence = finalSequence.concat(child_slice);
   finalSequence = finalSequence.concat(mid_slice);
   finalSequence = finalSequence.concat(end_slice);

   Sortable.setSequence("holder", finalSequence);

  } 

  else {

   var start_slice = nextSequence.slice(0, firstChild);
   var mid_slice = nextSequence.slice(lastChild+1, newPlace);
   var child_slice = nextSequence.slice(firstChild, lastChild+1);
   var end_slice = nextSequence.slice(newPlace+1);

   finalSequence = finalSequence.concat(start_slice);
   finalSequence = finalSequence.concat(mid_slice);
   finalSequence.push(nextSequence[newPlace]);
   finalSequence = finalSequence.concat(child_slice);
   finalSequence = finalSequence.concat(end_slice);

   Sortable.setSequence("holder", finalSequence);
  };

}



function folder(name, passord, visible, childid, parentid, level, realtype, type) {
 this.realtype = realtype;
 this.type = type;
 this.level = level;
 this.childid = childid;
 this.parentid = parentid;
 this.name = name;
 this.passord = passord;
 this.visible = visible;
 this.sortorder = 0;
}

function node(name, publish, childid, parentid, level, realtype, type) {
 this.realtype = realtype;
 this.type = type;
 this.level = level;
 this.childid = childid;
 this.parentid = parentid;
 this.name = name;
 this.publish = publish;
 this.sortorder = 0;
}

function viewPage(URL, count) {
 if (nodeActive != 0) {
  document.getElementById(nodeActive).className = 'node';
 }
 var elem = "n_" + count;
 document.getElementById(elem).className = 'nodeActive';
 nodeActive = elem;
 parent.content.browse.location = URL;
 return;
}

function reloadPage() {
  parent.content.browse.location.reload();
  clearWaitText();
}

function rollIn(elem) {
  if (elem.className != 'nodeActive') {
   elem.className = 'nodeShade';
  }
}

function rollOut(elem) {
  if (elem.className != 'nodeActive') {
   elem.className = 'node';
  }
}


function returnVisible(visibleval) {
 if (visibleval != "") {return visible[visibleval];}
 else {return "Ikke publisert";}
}


function deleteResult(t) {
 document.location.reload();
}

function pausecomp(millis)
{
date = new Date();
var curDate = null;

do { var curDate = new Date(); }
while(curDate-date < millis);
}


function findSort(index) {
 if (index == 0) {return 0;}
 if (nodes[currentSequence[index]].level > nodes[currentSequence[index-1]].level) {return 0};
 var count = index-1;
 while (count > 0 && nodes[currentSequence[count]].level != nodes[currentSequence[index]].level) {
  count--;
 }
 if (nodes[currentSequence[count]].level < nodes[currentSequence[index]].level) {return 0;}
 return nodes[currentSequence[count]].sortorder + 1;
}

function saveStructure() {
// document.getElementById('loading').innerHTML = "Lagrer";
// document.getElementById('loading').style.display = "block";
var textS = "";
var result = new Array();
 for (a=0;a<nodes.length-1;a++) {
// alert(nodes[currentSequence[a]].name);
  var res = new Object();
  res.childid = nodes[currentSequence[a]].childid;
  res.parentid = nodes[currentSequence[a]].parentid;
  res.sortorder = findSort(a);
  result[a] = res;
  nodes[currentSequence[a]].sortorder = findSort(a);
 }
 var myTExt = Object.toJSON(result);

 var doUrl = '/cgi-bin/printTree.cgi';
 setWaitText("Lagrer");
 new Ajax.Request(doUrl,
		{ method: 'post', parameters: 'structure=' + myTExt + '&do=savestructure',
		encoding: 'iso-8859-1',
		  asynchronous: true,
              	  onComplete: reloadPage
                }
              );
}

function showOther() {
 var rootnode = document.getElementById("show").options[document.getElementById("show").selectedIndex].value;
 var URL = "/cgi-bin/printTree.cgi?do=edit&nodeid=" + rootnode;
 document.location.href = URL;
}

function toggle(id) {
 if(!id) {return;}

 var myUL = "toggle" + id;
 var myTogURL = "togURL" + id;

 if (toggledNodes[id] != 1) {  // code for setting which folders are open and closed
  toggledNodes[id] = 1;
 }
 else {toggledNodes[id] = 0;}

 if (document.getElementById(myUL).style.display == 'block') {
  document.getElementById(myUL).style.display = 'none';
  document.getElementById(myTogURL).innerHTML = "+";
 }
 else {
  document.getElementById(myUL).style.display = 'block';
  document.getElementById(myTogURL).innerHTML = "-";
 }
}



function deleteNodes() {
 if(confirm(deleteString)) {
   var retString = new String();
   retString = "";
   var toggled = new String();
   var toggled = "";

   for (var node in checkedNodes) {
     if (checkedNodes[node] == 1 && typeof(checkedNodes[node]) == "number") { retString += ":" + node;}
   }
   for (var node in toggledNodes) {
     if (toggledNodes[node] == 1 && typeof(toggledNodes[node]) == "number") { toggled += ":" + node;}

   }
   document.location = "/cgi-bin/printTree_large.cgi?do=deleteNodes&children=" + retString + "&rootnode=" + rootnode + "&toggled=" + toggled;
 }
}

function publishNodes() {
   var retString = new String();
   retString = "";
   var toggled = new String();
   var toggled = "";

   for (var node in checkedNodes) {
     if (checkedNodes[node] == 1 && typeof(checkedNodes[node]) == "number") { retString += ":" + node;}
   }
 for (var node in toggledNodes) {
  if (toggledNodes[node] == 1 && typeof(toggledNodes[node]) == "number") { toggled += ":" + node;}
 }
   document.location = "/cgi-bin/printTree_large.cgi?do=publishNodes&children=" + retString + "&rootnode=" + rootnode + "&toggled=" + toggled;
}

var shown = false;

function openFolderList() {
 if ( !shown ) {
   document.getElementById('folders').style.visibility = "visible";
   shown = true;
 } else {
   document.getElementById('folders').style.visibility = "hidden";
   shown = false;
 }
}

function closeFolderList() {

}

function moveNodes(parentid) {

 var parentid = document.getElementById("parentFolder")[document.getElementById("parentFolder").selectedIndex].value;

 var retString = new String();
 retString = "";
 var toggled = new String();
 var toggled = "";

 for (var node in checkedNodes) {
  if (checkedNodes[node] == 1 && typeof(checkedNodes[node]) == "number") { retString += ":" + node;}
 }
 for (var node in toggledNodes) {
  if (toggledNodes[node] == 1 && typeof(toggledNodes[node]) == "number") { toggled += ":" + node;}
 }
 document.location = "/cgi-bin/printTree_large.cgi?do=moveNodes&children=" + retString + "&parentid=" + parentid + "&rootnode=" + rootnode + "&toggled=" + toggled;
}

function checkMe(id) {
 if (checkedNodes[id] != 1) {
  checkedNodes[id] = 1;
 }
 else {checkedNodes[id] = 0;}
}

var elements = new Array();


function element(name, type, id) {
 this.name = name;
 this.type = type;
 this.id = id;
 elements[elements.length] = this;
}

var imagecatalog = "";

function find(id){
 var result;
 for (a = 0; a < elements.length; a++) {
  if (elements[a].id == id) {result=a}
 }
 return result;
}

function moveUp(id) {
 var peker = find(id);
 var tmp = elements[peker-1];
 elements[peker-1] = elements[peker];
 elements[peker] = tmp;
 printOut();
}

function moveDown(id) {
 var peker = find(id);
 var tmp = elements[peker+1];
 elements[peker+1] = elements[peker];
 elements[peker] = tmp;
 printOut();
}


function printOut() {
if (elements.length==0) {return;}
var content = "";

 content = "<table class=\"popup\" cellpadding=3>";
 
 for (a = 0; a < elements.length; a++) {
   peker = elements[a];


   content +=  "<tr><td>" 
   if (peker.type.indexOf("mappe") >= 0) { content += "<b>";   }
   content += peker.name;
   if (peker.type.indexOf("mappe") >= 0) { content += "</b>";   }
   content += "</td>";
   if (a > 0) {content += "<td><a href='javascript:moveUp(" + peker.id + ")'>" + str_up + "</a></td>";} else { content += "<td>&nbsp;</td>";}
   if (a < elements.length-1) {content += "<td><a href='javascript:moveDown(" + peker.id + ")'>" + str_down +"</a></td>";} else { content += "<td>&nbsp;</td>";}

 content += "</tr>";
 }
 content += "</table>";
 document.all("elementer").innerHTML = content;
 document.all("rekkefolge").innerHTML = str_order;
}
