/* -*- javascript -*- 
     Copyright 2006 Dr. Detlef Groth, Schwielowsee, Germany.
     License: http://creativecommons.org/licenses/LGPL/2.1/
     System        : JSCOMPONENTS_INIT_JS : 
     Created By    : Dr. Detlef Groth, Schwielowsee, Germany
     Last Modified : <070913.0545>
     ID            : $Id: jsComponents.js,v 1.45 2006/05/11 10:57:43 dgroth Exp $
     Source        : $Source: /cygdrive/d/cvs/jsComponents/css-js/jsComponents.js,v $
     $Log: jsComponents.js,v $
     Description	
     Notes
*/

// Simon Willison's Weblog http://simon.incutio.com/archive/2004/05/26/addLoadEvent
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}
/* Event Utilities */
function evtGetTarget(evt) {
    var elem ;
    if (evt.target) {
        elem = (evt.target.nodeType == 3) ? evt.target.parentNode : evt.target ;
    } else {
        elem = evt.srcElement ;
    }
    return elem ;
}

/* 
  more efficient to construct the functions ones 
  Thanks to Dean Edwards http://dean.edwards.name/
  */
var evtAdd;
if (document.addEventListener) {
    evtAdd = function(element, type, handler) {
        element.addEventListener(type, handler, null);
    };
} else if (document.attachEvent) {
    evtAdd = function(element, type, handler) {
        element.attachEvent("on" + type, handler);
    };
} else {
    alert("Your browser is not supported!");
}
/* XMLHttpRequestLoader - Class */
function XMLHttpRequestLoader () {
    var xmlhttp = false ;
    if (typeof(XMLHttpRequest) != "undefined") {
        xmlhttp = new XMLHttpRequest();
    } else {
        // IE 5, 6
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (ev0) {
            try {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (ev1) {
                xmlhttp = false;
            }
        }
    }
    this.loadXML = loadXML  ;
    this.loadText = loadText;
    this.loadIEText = loadIEText;
    function loadText(url,cb,targetNode) {
        if (typeof(XMLHttpRequest) != "undefined") {
            loadMozText(url,cb,targetNode);
        } else if (xmlhttp) {
            loadIEText(url,cb,targetNode);
        } else {
            alert("Browser not supported or JavaScript or ActiveX (IE) is not enabled!");
        }
    }
    function loadXML(url,cb,targetNode) {
        if (typeof(XMLHttpRequest) != "undefined") {
            load(url,cb,targetNode);
        } else if (xmlhttp) {
            loadIE(url,cb,targetNode);
        } else {
            alert("Browser not supported or JavaScript or ActiveX (IE) is not enabled!");
        }
    }
    function load(srcUrl,cb,targetNode) {
        var req = new XMLHttpRequest();
        req.overrideMimeType('text/xml');
        req.open("GET", srcUrl, true);
        
        req.onreadystatechange = function() {
            if (req.readyState == 4) {
                if (cb && targetNode) {
                    cb(req.responseXML, targetNode);
                } else if (cb) {
                    cb(req.responseXML);
                }
            } 
                
        };
        req.setRequestHeader('Content-Type', 'text/xml'); 
        req.setRequestHeader('Cache-Control', 'no-cache'); 
        req.send(null);
    }
    function loadMozText(srcUrl,cb,targetNode) {
        var req = new XMLHttpRequest();
        req.open("GET", srcUrl, true);
        req.onreadystatechange = function() {
            if (req.readyState == 4) {
                var xmlText = req.responseText;
                xmlText = xmlText.replace(/<\/html>/,"");
                xmlText = xmlText.slice(xmlText.indexOf("<body>"));
                xmlText = xmlText.replace(/<\/?body>/g,"");

                if (cb && targetNode) {
                    cb(xmlText, targetNode);
                } else if (cb) {
                    cb(xmlText);
                }
            } 
                
        };
        req.setRequestHeader('Cache-Control', 'no-cache'); 
        req.send(null);
    }
    
    
    function loadIE(srcUrl,cb,targetNode) {
        
        xmlhttp.open("GET", srcUrl);
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4) {
                if (cb) {
                    var xmlObj = xmlhttp.responseXML;
                    
                    if(!xmlObj.hasChildNodes) {
                        // seems that Mime-Type was not recognized
                        // we create the right object by hand
                        xmlObj = new ActiveXObject("Msxml2.DOMDocument");
                        var xmlText = xmlhttp.responseText;
                        xmlText = xmlText.replace(/<\/html>/,"");
                        xmlText = xmlText.slice(xmlText.indexOf("<body>"));
                        xmlObj.loadXML(xmlText);
                        if (cb && targetNode) {
                            cb(xmlObj, targetNode);
                        } else {
                            cb(xmlObj);
                        }
                    } else {
                        if (cb && targetNode) {
                            cb(xmlhttp.responseXML, targetNode);
                        } else {
                            cb(xmlhttp.responseXML);
                        }
                    }
                }
            } 
        };
        xmlhttp.setRequestHeader('Content-Type', 'text/xml'); 
        xmlhttp.setRequestHeader('Cache-Control', 'no-cache'); 
        xmlhttp.send(null);
    }
    function loadIEText(srcUrl,cb,targetNode) {
        xmlhttp.open("GET", srcUrl);
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4) {
                if (cb) {
                    var xmlText = xmlhttp.responseText;
                    xmlText = xmlText.replace(/<\/html>/,"");
                    xmlText = xmlText.slice(xmlText.indexOf("<body>"));
                    xmlText = xmlText.replace(/<\/?body>/g,"");
                    if (cb && targetNode) {
                        cb(xmlText, targetNode);
                    } else {
                        cb(xmlObj);
                    }
                }
            } 
        };
        xmlhttp.setRequestHeader('Cache-Control', 'no-cache'); 
        xmlhttp.send(null);
    }
}

function jsComponent (node) {
    try {
        eval("mfunc = "+node.className+";");
        mfunc(node);
    } catch (ev) {}
}

window.onload = function() { 
    var divs = document.getElementsByTagName("DIV") ;
    var head = document.getElementsByTagName("head");
    var images = new Array("plus.gif","minus.gif","file2.gif","file.gif","up.gif","down.gif");
    for (var i = 0 ; i < images.length ; i++) {
        var img = new Image(); img.src = "jsc/"+images[i] ;
    }
    /* divs.length is ineffective but robust against adding new divs at runtime */
    for (var i = 0 ; i < divs.length ; i++) {
        if (divs.item(i).className && divs.item(i).className.match(/JS.+/)) {
            var comp = new jsComponent(divs.item(i));
        }
    }
};


/* -*- javascript -*- 
     Copyright 2006 Dr. Detlef Groth, Schwielowsee, Germany.
     License: http://creativecommons.org/licenses/LGPL/2.1/
     System        : JSDRAGCONTROLS_JS : 
     Object Name   : $RCS_FILE$
     Revision      : $REVISION$
     Date          : Fri Nov 10 13:30:20 2006
     Created By    : Dr. Detlef Groth, RZPD Berlin
     Created       : Fri Nov 10 13:30:20 2006

     Last Modified : <061117.1508>
     ID            : $Id$
     Source        : $Source$
     Description	
     Notes
     */
var maxZ = 100 ; 

function JSDragArea (element) {
    
    this.grabDown = grabDown;
    this.grabClick = grabClick;
    evtAdd(element,"mousedown",this.grabDown);
    evtAdd(element,"mouseclick",this.grabClick);
    
    
    /*    var dw = new DebugWindow();*/
    function grabClick(e) {
        e=e||window.event;
        var node = evtGetTarget(e);
        if (node.style.zIndex != maxZ) {
            maxZ++;
            node.style.zIndex = maxZ;
        }
    }
    function grabDown(e) {
        e=e||window.event;
        var node = evtGetTarget(e);
        if (node.tagName != "DIV") { return ; }
        if (node.style.zIndex != maxZ) {
            maxZ++;
            node.style.zIndex = maxZ;
        }
        var clientX0 = e.clientX;
        var clientY0 = e.clientY;
        var top=node.style.top;
        var left=node.style.left;
        //        dw.append("top:"+top);
        window.document.onmousemove = function (e) {
            var deltaX; var deltaY;
            e=e||window.event;
            deltaX = e.clientX - clientX0;
            deltaY = e.clientY - clientY0;
            node.style.left = parseInt(left)+parseInt(deltaX) + "px";
            node.style.top =  parseInt(top)+parseInt(deltaY) + "px";
                    
        };
        // IE seems better without dragstart
        window.document.ondragstart = function(){return false};
        // cleanup after document.onmouseup
        
        window.document.onmouseup = function(e) {
            this.onmousemove = null;
            this.onmouseup = null;
            this.ondragstart = null;
        };
    }
}

