var NS4 = (document.layers);    // Which browser?
var IE4 = (document.all);

var win = window;    // window to search.
var n   = 0;



function clipboard_copy(inElement) {
  if (IE4) {
    window.clipboardData.setData("Text", inElement);
  } else {
    var flashcopier = 'flashcopier';
    if(!document.getElementById(flashcopier)) {
      var divholder = document.createElement('div');
      divholder.id = flashcopier;
      document.body.appendChild(divholder);
    }
    document.getElementById(flashcopier).innerHTML = '';
    var divinfo = '<embed src="_clipboard.swf" FlashVars="clipboard='+encodeURIComponent(inElement)+'" width="0" height="0" type="application/x-shockwave-flash"></embed>';
    document.getElementById(flashcopier).innerHTML = divinfo;
  }
}



function copy_clip(meintext)
{
 if (window.clipboardData)
   {

   // the IE-manier
   window.clipboardData.setData("Text", meintext);

   // waarschijnlijk niet de beste manier om Moz/NS te detecteren;
   // het is mij echter onbekend vanaf welke versie dit precies werkt:
   }
   else if (window.netscape)
   {

   // dit is belangrijk maar staat nergens duidelijk vermeld:
   // you have to sign the code to enable this, or see notes below
   netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

   // maak een interface naar het clipboard
   var clip = Components.classes['@mozilla.org/widget/clipboard;1']
                 .createInstance(Components.interfaces.nsIClipboard);
   if (!clip) return;

   // maak een transferable
   var trans = Components.classes['@mozilla.org/widget/transferable;1']
                  .createInstance(Components.interfaces.nsITransferable);
   if (!trans) return;

   // specificeer wat voor soort data we op willen halen; text in dit geval
   trans.addDataFlavor('text/unicode');

   // om de data uit de transferable te halen hebben we 2 nieuwe objecten
   // nodig om het in op te slaan
   var str = new Object();
   var len = new Object();

   var str = Components.classes["@mozilla.org/supports-string;1"]
                .createInstance(Components.interfaces.nsISupportsString);

   var copytext=meintext;

   str.data=copytext;

   trans.setTransferData("text/unicode",str,copytext.length*2);

   var clipid=Components.interfaces.nsIClipboard;

   if (!clip) return false;

   clip.setData(trans,null,clipid.kGlobalClipboard);

   }
   //alert("Following info was copied to your clipboard:\n\n" + meintext);
   //return false;
}




function findInPage(str) {

  var txt, i, found;

  if (str == "")
    return false;

  // Find next occurance of the given string on the page, wrap around to the
  // start of the page if necessary.

  if (NS4) {

    // Look for match starting at the current point. If not found, rewind
    // back to the first match.

    if (!win.find(str))
      while(win.find(str, false, true))
        n++;
    else
      n++;

    // If not found in either direction, give message.

    if (n == 0)
      alert("Not found.");
  }

  if (IE4) {
    txt = win.document.body.createTextRange();

    // Find the nth match from the top of the page.

    for (i = 0; i <= n && (found = txt.findText(str)) != false; i++) {
      txt.moveStart("character", 1);
      txt.moveEnd("textedit");
    }

    // If found, mark it and scroll it into view.

    if (found) {
      txt.moveStart("character", -1);
      txt.findText(str);
      txt.select();
      txt.scrollIntoView();
      n++;
    }

    // Otherwise, start over at the top of the page and find first match.

    else {
      if (n > 0) {
        n = 0;
        findInPage(str);
      }

      // Not found anywhere, give message.

      else
        alert("Not found.");
    }
  }

  return false;
}


function confirmDelete()
{

    if (confirm("Are you sure you want to delete ?"))
    {
       return true;
    }
    return false;
}



function ShowHideDiv(szDivID, iState) // 1 visible, 0 hidden
{
   var obj = document.layers ? document.layers[szDivID] :
   document.getElementById ?  document.getElementById(szDivID).style :
   document.all[szDivID].style;
   obj.visibility = document.layers ? (iState ? "show" : "hide") :
   (iState ? "visible" : "hidden");
}

function hidediv(id) {
    //safe function to hide an element with a specified id
    if (document.getElementById) { // DOM3 = IE5, NS6
        document.getElementById(id).style.display = 'none';
    }
    else {
        if (document.layers) { // Netscape 4
            document.id.display = 'none';
        }
        else { // IE 4
            document.all.id.style.display = 'none';
        }
    }
}

function SelectAll(status)
{
  var lists = document.getElementsByTagName("input");
  for (var i = 0; i < lists.length; i++)
  {
      if (lists[i].type == "checkbox")
      {
        lists[i].checked = status;
      }
  }
}

function showdiv(id) {
    //safe function to show an element with a specified id

    if (document.getElementById) { // DOM3 = IE5, NS6
        document.getElementById(id).style.display = 'block';
    }
    else {
        if (document.layers) { // Netscape 4
            document.id.display = 'block';
        }
        else { // IE 4
            document.all.id.style.display = 'block';
        }
    }
}


function ToggleCheckBox(cb)
{
    if (document.getElementById) { // DOM3 = IE5, NS6
        document.getElementById(cb).checked = !document.getElementById(cb).checked ;
    }
    else {
        if (document.layers) { // Netscape 4
            document.cb.checked = !document.cb.checked;
        }
    }

}



// getAnchorPosition(anchorname)
//   This function returns an object having .x and .y properties which are the coordinates
//   of the named anchor, relative to the page.
function getAnchorPosition(anchorname) {
        // This function will return an Object with x and y properties
        var useWindow=false;
        var coordinates=new Object();
        var x=0,y=0;
        // Browser capability sniffing
        var use_gebi=false, use_css=false, use_layers=false;
        if (document.getElementById) { use_gebi=true; }
        else if (document.all) { use_css=true; }
        else if (document.layers) { use_layers=true; }
        // Logic to find position
         if (use_gebi && document.all) {
                x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
                y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
                }
        else if (use_gebi) {
                var o=document.getElementById(anchorname);
                x=AnchorPosition_getPageOffsetLeft(o);
                y=AnchorPosition_getPageOffsetTop(o);
                }
         else if (use_css) {
                x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
                y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
                }
        else if (use_layers) {
                var found=0;
                for (var i=0; i<document.anchors.length; i++) {
                        if (document.anchors[i].name==anchorname) { found=1; break; }
                        }
                if (found==0) {
                        coordinates.x=0; coordinates.y=0; return coordinates;
                        }
                x=document.anchors[i].x;
                y=document.anchors[i].y;
                }
        else {
                coordinates.x=0; coordinates.y=0; return coordinates;
                }
        coordinates.x=x;
        coordinates.y=y;
        return coordinates;
        }

// getAnchorWindowPosition(anchorname)
//   This function returns an object having .x and .y properties which are the coordinates
//   of the named anchor, relative to the window
function getAnchorWindowPosition(anchorname) {
        var coordinates=getAnchorPosition(anchorname);
        var x=0;
        var y=0;
        if (document.getElementById) {
                if (isNaN(window.screenX)) {
                        x=coordinates.x-document.body.scrollLeft+window.screenLeft;
                        y=coordinates.y-document.body.scrollTop+window.screenTop;
                        }
                else {
                        x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
                        y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
                        }
                }
        else if (document.all) {
                x=coordinates.x-document.body.scrollLeft+window.screenLeft;
                y=coordinates.y-document.body.scrollTop+window.screenTop;
                }
        else if (document.layers) {
                x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
                y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
                }
        coordinates.x=x;
        coordinates.y=y;
        return coordinates;
        }

// Functions for IE to get position of an object
function AnchorPosition_getPageOffsetLeft (el) {
        var ol=el.offsetLeft;
        while ((el=el.offsetParent) != null) { ol += el.offsetLeft; }
        return ol;
        }
function AnchorPosition_getWindowOffsetLeft (el) {
        return AnchorPosition_getPageOffsetLeft(el)-document.body.scrollLeft;
        }
function AnchorPosition_getPageOffsetTop (el) {
        var ot=el.offsetTop;
        while((el=el.offsetParent) != null) { ot += el.offsetTop; }
        return ot;
        }
function AnchorPosition_getWindowOffsetTop (el) {
        return AnchorPosition_getPageOffsetTop(el)-document.body.scrollTop;
        }




// Set the position of the popup window based on the anchor
function PopupWindow_getXYPosition(anchorname) {
        var coordinates;
        if (this.type == "WINDOW") {
                coordinates = getAnchorWindowPosition(anchorname);
                }
        else {
                coordinates = getAnchorPosition(anchorname);
                }
        this.x = coordinates.x;
        this.y = coordinates.y;
        }
// Set width/height of DIV/popup window
function PopupWindow_setSize(width,height) {
        this.width = width;
        this.height = height;
        }
// Fill the window with contents
function PopupWindow_populate(contents) {
        this.contents = contents;
        this.populated = false;
        }
// Set the URL to go to
function PopupWindow_setUrl(url) {
        this.url = url;
        }
// Set the window popup properties
function PopupWindow_setWindowProperties(props) {
        this.windowProperties = props;
        }
// Refresh the displayed contents of the popup
function PopupWindow_refresh() {
        if (this.divName != null) {
                // refresh the DIV object
                if (this.use_gebi) {
                        document.getElementById(this.divName).innerHTML = this.contents;
                        }
                else if (this.use_css) {
                        document.all[this.divName].innerHTML = this.contents;
                        }
                else if (this.use_layers) {
                        var d = document.layers[this.divName];
                        d.document.open();
                        d.document.writeln(this.contents);
                        d.document.close();
                        }
                }
        else {
                if (this.popupWindow != null && !this.popupWindow.closed) {
                        if (this.url!="") {
                                this.popupWindow.location.href=this.url;
                                }
                        else {
                                this.popupWindow.document.open();
                                this.popupWindow.document.writeln(this.contents);
                                this.popupWindow.document.close();
                        }
                        this.popupWindow.focus();
                        }
                }
        }
// Position and show the popup, relative to an anchor object
function PopupWindow_showPopup(anchorname) {
        this.getXYPosition(anchorname);
        this.x += this.offsetX;
        this.y += this.offsetY;
        if (!this.populated && (this.contents != "")) {
                this.populated = true;
                this.refresh();
                }
        if (this.divName != null) {
                // Show the DIV object
                if (this.use_gebi) {
                        document.getElementById(this.divName).style.left = this.x + "px";
                        document.getElementById(this.divName).style.top = this.y + "px";
                        document.getElementById(this.divName).style.visibility = "visible";
                        }
                else if (this.use_css) {
                        document.all[this.divName].style.left = this.x;
                        document.all[this.divName].style.top = this.y;
                        document.all[this.divName].style.visibility = "visible";
                        }
                else if (this.use_layers) {
                        document.layers[this.divName].left = this.x;
                        document.layers[this.divName].top = this.y;
                        document.layers[this.divName].visibility = "visible";
                        }
                }
        else {
                if (this.popupWindow == null || this.popupWindow.closed) {
                        // If the popup window will go off-screen, move it so it doesn't
                        if (this.x<0) { this.x=0; }
                        if (this.y<0) { this.y=0; }
                        if (screen && screen.availHeight) {
                                if ((this.y + this.height) > screen.availHeight) {
                                        this.y = screen.availHeight - this.height;
                                        }
                                }
                        if (screen && screen.availWidth) {
                                if ((this.x + this.width) > screen.availWidth) {
                                        this.x = screen.availWidth - this.width;
                                        }
                                }
                        var avoidAboutBlank = window.opera || ( document.layers && !navigator.mimeTypes['*'] ) || navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled );
                        this.popupWindow = window.open(avoidAboutBlank?"":"about:blank","window_"+anchorname,this.windowProperties+",width="+this.width+",height="+this.height+",screenX="+this.x+",left="+this.x+",screenY="+this.y+",top="+this.y+"");
                        }
                this.refresh();
                }
        }
// Hide the popup
function PopupWindow_hidePopup() {
        if (this.divName != null) {
                if (this.use_gebi && document.getElementById(this.divName)) {
                        document.getElementById(this.divName).style.visibility = "hidden";
                        }
                else if (this.use_css) {
                        document.all[this.divName].style.visibility = "hidden";
                        }
                else if (this.use_layers) {
                        document.layers[this.divName].visibility = "hidden";
                        }
                }
        else {
                if (this.popupWindow && !this.popupWindow.closed) {
                        this.popupWindow.close();
                        this.popupWindow = null;
                        }
                }
        }
// Pass an event and return whether or not it was the popup DIV that was clicked
function PopupWindow_isClicked(e) {
        if (this.divName != null) {
                if (this.use_layers) {
                        var clickX = e.pageX;
                        var clickY = e.pageY;
                        var t = document.layers[this.divName];
                        if ((clickX > t.left) && (clickX < t.left+t.clip.width) && (clickY > t.top) && (clickY < t.top+t.clip.height)) {
                                return true;
                                }
                        else { return false; }
                        }
                else if (document.all) { // Need to hard-code this to trap IE for error-handling
                        var t = window.event.srcElement;
                        while (t.parentElement != null) {
                                if (t.id==this.divName) {
                                        return true;
                                        }
                                t = t.parentElement;
                                }
                        return false;
                        }
                else if (this.use_gebi && e) {
                        var t = e.originalTarget;
                        while (t.parentNode != null) {
                                if (t.id==this.divName) {
                                        return true;
                                        }
                                t = t.parentNode;
                                }
                        return false;
                        }
                return false;
                }
        return false;
        }

// Check an onMouseDown event to see if we should hide
function PopupWindow_hideIfNotClicked(e) {
        if (this.autoHideEnabled && !this.isClicked(e)) {
                this.hidePopup();
                }
        }
// Call this to make the DIV disable automatically when mouse is clicked outside it
function PopupWindow_autoHide() {
        this.autoHideEnabled = true;
        }
// This global function checks all PopupWindow objects onmouseup to see if they should be hidden
function PopupWindow_hidePopupWindows(e) {
        for (var i=0; i<popupWindowObjects.length; i++) {
                if (popupWindowObjects[i] != null) {
                        var p = popupWindowObjects[i];
                        p.hideIfNotClicked(e);
                        }
                }
        }
// Run this immediately to attach the event listener
function PopupWindow_attachListener() {
        if (document.layers) {
                document.captureEvents(Event.MOUSEUP);
                }
        window.popupWindowOldEventListener = document.onmouseup;
        if (window.popupWindowOldEventListener != null) {
                document.onmouseup = new Function("window.popupWindowOldEventListener(); PopupWindow_hidePopupWindows();");
                }
        else {
                document.onmouseup = PopupWindow_hidePopupWindows;
                }
        }
// CONSTRUCTOR for the PopupWindow object
// Pass it a DIV name to use a DHTML popup, otherwise will default to window popup
function PopupWindow() {
        if (!window.popupWindowIndex) { window.popupWindowIndex = 0; }
        if (!window.popupWindowObjects) { window.popupWindowObjects = new Array(); }
        if (!window.listenerAttached) {
                window.listenerAttached = true;
                PopupWindow_attachListener();
                }
        this.index = popupWindowIndex++;
        popupWindowObjects[this.index] = this;
        this.divName = null;
        this.popupWindow = null;
        this.width=0;
        this.height=0;
        this.populated = false;
        this.visible = false;
        this.autoHideEnabled = false;

        this.contents = "";
        this.url="";
        this.windowProperties="toolbar=no,location=no,status=no,menubar=no,scrollbars=auto,resizable,alwaysRaised,dependent,titlebar=no";
        if (arguments.length>0) {
                this.type="DIV";
                this.divName = arguments[0];
                }
        else {
                this.type="WINDOW";
                }
        this.use_gebi = false;
        this.use_css = false;
        this.use_layers = false;
        if (document.getElementById) { this.use_gebi = true; }
        else if (document.all) { this.use_css = true; }
        else if (document.layers) { this.use_layers = true; }
        else { this.type = "WINDOW"; }
        this.offsetX = 0;
        this.offsetY = 0;
        // Method mappings
        this.getXYPosition = PopupWindow_getXYPosition;
        this.populate = PopupWindow_populate;
        this.setUrl = PopupWindow_setUrl;
        this.setWindowProperties = PopupWindow_setWindowProperties;
        this.refresh = PopupWindow_refresh;
        this.showPopup = PopupWindow_showPopup;
        this.hidePopup = PopupWindow_hidePopup;
        this.setSize = PopupWindow_setSize;
        this.isClicked = PopupWindow_isClicked;
        this.autoHide = PopupWindow_autoHide;
        this.hideIfNotClicked = PopupWindow_hideIfNotClicked;
        }        