/*
    ------------------------------------------------------------
    Standard javascript include
    copyRight(c) TFM Productions
    ------------------------------------------------------------
*/

    var Base     = 10;  // Used in zeroFill-function

    // Format a numeric or decimal number ------------------------------
    function zeroFill(num, NoZ) {

        var dec = Math.pow(Base, Math.abs(NoZ)) + Math.floor(num);
        return(Math.floor(dec).toString().slice(1));
    }

    // Adjust the selected item in a selectionlist --------------------
    function setSelected(SelItem, Value) {

        var found = false;
        for(var x = 0; x < SelItem.options.length; x++) {
            if(SelItem.options[x].value == Value) {
                SelItem.options[x].selected = true;
                found = true;
                break;
            }
        }
        if(!found && SelItem.options.length > 0)
            SelItem.options[0].selected = true;
    }

    // Show a larger image ----------------------------------------
    function enlargeImage(FileName, w, h) {

        Fw = (w>1024)?1024 / w:1;
        Fh = (h>768)?768 / h:1;
        Factor = (Fw<Fh)?Fw:Fh;
        var W = new String(w * Factor);
        var H = new String(h * Factor);

        window.open('shpict.php?image=' + FileName + "&w=" + W + "&h=" + H, "",
            "screenX=180,screenY=10,width=" + W + ",height=" + H +
            ",scrollbars=no,menubar=no,resizable=no,toolbar=no");
    }

    // Get Left or Top offset within window

    function getTop(Target) {
        return(getOffset(Target, true) + "px");
    }

    function getLeft(Target) {
        return(getOffset(Target, false) + "px");
    }

    function getTopPx(Target) {
        return(getOffset(Target, true));
    }

    function getLeftPx(Target) {
        return(getOffset(Target, false));
    }

    function getOffset(Target, LoT) {
        var tOffset = (LoT)?Target.offsetTop:Target.offsetLeft;
        var TParent = Target.offsetParent;

        while(TParent != null) {
            tOffset+= (LoT)?TParent.offsetTop:TParent.offsetLeft;
            TParent = TParent.offsetParent;
        }
        return tOffset;
    }

    function selectionCopy(Van, Naar) {
        Naar.options.length = 0;
        for(var x=0; x< Van.options.length; x++) {
            Naar.options[x].text = new Option(Van.options[x].text, Van.options[x].value);
        }
    }

    Number.prototype.toDutchFormat = function(Decs) {

        var retVal = this.toFixed(Decs).replace(".", ",");
        for(var x = 9; x>0; x-=3) {
            if(this >= Math.pow(10, x)) {
                var RetLen = retVal.length;
                retVal = retVal.substr(0, RetLen - Decs - x - 1) + "." + retVal.substr(RetLen - Decs - x - 1);
            }
        }
        return retVal;
    }

    // -----------------------------------------------------
    function chkDOM() {
        if (!document.getElementsByTagName  ||
            !document.getElementById        ||
            !document.appendChild           ||
            !document.insertBefore)

            return false;
        else
            return true;
    }

    // -----------------------------------------------------
    function addLoadEvent(func) {

        if (typeof window.onload != 'function') {
            window.onload = func;
        } else {
            var oldonload = window.onload;
            window.onload = function() {
                oldonload();
                func();
            }
        }
    }

    function keyProcedure(evt, keyNo, Procedure) {

        evt =(evt)?evt:((event)?event:null);
        if(evt) {
            var KeyCode = ((evt.keyCode)?evt.keyCode:evt.which);
            if(KeyCode == keyNo) {
                Procedure();
            }
            if(evt.returnValue) {
                evt.returnValue = false;
            } else if(evt.preventDefault) {
                // evt.prefentDefault();
            }
        }
    }

    // -----------------------------------------------------
    function insertAfter(newElement,targetElement) {

        var parent = targetElement.parentNode;
        if (parent.lastChild == targetElement) {
            parent.appendChild(newElement);
        } else {
            parent.insertBefore(newElement,targetElement.nextSibling);
        }
    }

    // -----------------------------------------------------
    function addClass(element, value) {

        if (!element.className) {
            element.className = value;
        } else {
            classArray = element.className.split(' ');
            for(var x=0; x<classArray.length; x++) {
                if(classArray[x] == value) return;
            }
            element.className += (' ' + value);
        }
    }

    // -----------------------------------------------------
    function removeClass(element, value) {

        if (!element.className) {
            return;
        } else {
            var Replacement = "/ *" + value + "* /g";
            element.className = element.className.replace(Replacement, " ");
        }
    }

    // -----------------------------------------------------
    function moveElement(elementID, toX, intX, toY, intY, interval) {

        if(!chkDOM()) return false;

        var elem = document.getElementById(elementID);
        if (elem.movement) {
            clearTimeout(elem.movement);
        }

        if (!elem.style.left) elem.style.left = "0px";
        if (!elem.style.top)  elem.style.top  = "0px";

        var xpos = parseInt(elem.style.left);
        var ypos = parseInt(elem.style.top);
        if(intX <= 0) intX = 1;
        if(intY <= 0) intY = 1;

        if (xpos == toX && ypos == toY) return true;
        if (xpos < toX) xpos += Math.ceil((toX - xpos) / intX);
        if (xpos > toX) xpos -= Math.ceil((xpos - toX) / intX);
        if (ypos < toY) ypos += Math.ceil((toY - ypos) / intY);
        if (ypos > toY) ypos -= Math.ceil((ypos - toY) / intY);
        elem.style.left = xpos + "px";
        elem.style.top = ypos + "px";
         
        elem.movement = setTimeout(
            "moveElement('" + elementID + "', " + toX + ", " + intX + ", " + toY + ", " + intY + ", " + interval + ")", interval);
    }


// ----------[Selection perikelen omtrent een textArea ------------------------------

function Selection(textareaElement) {
    this.element = textareaElement;
    this.Start   = null;
    this.End     = null;
}

Selection.prototype = {

    create:function() {
        if (document.selection != null && this.element.selectionStart == null) {
            return this._ieGetSelection();
        } else {
            return this._mozillaGetSelection();
        }
    },

    _mozillaGetSelection:function() {
        this.Start = this.element.selectionStart;
        this.End   = this.element.selectionEnd;
        return { 
            start: this.element.selectionStart, 
            end: this.element.selectionEnd 
        };
    },

    _ieGetSelection:function() {

        this.element.focus();
        var range = document.selection.createRange();
        var rangeMark = range.getBookmark();
        var marker = "[:x:]";
        var originalContents = this.element.value;
        range.text = marker + range.text + marker;
        var contents = this.element.value;

        var result      = {};
        this.Start      =  contents.indexOf(marker);
        result.start    = contents.indexOf(marker);
        contents        = contents.replace(marker, "");
        this.End        = contents.indexOf(marker);
        result.end      = contents.indexOf(marker);
        range.text      = range.text.replace(/[:x:]/g, "");
        this.element.value = originalContents;
        range.moveToBookmark(rangeMark);
        range.select();
        return result;
    },

    replaceText:function(Tekst) {
        this.element.value = this.element.value.substr(0, this.Start) + Tekst + this.element.value.substr(this.End);
    }

}

function dumpWidget(obj) {
    var tekst = "";
    for(var x in obj) {
        if(!x.match(/^on/) && obj[x])
            tekst += x + ":" + typeof(obj[x]) + ":" + obj[x] + "\t";
    }
    alert(tekst);
}

