            var speed=20, steps=8;
            var color_on = '#afd035';
            var color_off = '#ff9944';

            function on(id, stop) {
                if(id && id.length) {
                    var elem = document.getElementById(id);
                } else {
                    var elem = this;
                    id = this.id;
                }
                if(elem.other&&!stop) { on(elem.other.id, true); }

                if(elem && elem.state != 1) {
                    elem.state = 1;
                    if(!elem.from) elem.from = parseColor(color_off);
                    if(!elem.to) elem.to = parseColor(color_on);
//                    if(!elem.cur) elem.cur = parseColor(rzGetBg(elem));
//                    if(!elem.cur) elem.cur = parseColor('#ffffff');
                    if(!elem.delta) {
                        elem.delta = new Array(3);
                        for(var i=0; i<3; i++) {
                            elem.delta[i] = (elem.to[i]-elem.from[i])/steps;
                        }
                    }
                    incr(id);
                }
            }

            function incr(id) {
                var elem = document.getElementById(id);
                var i, all_done=0;

                for(i=0; i<3; i++) {
                    elem.cur[i] += elem.delta[i];
                    if((elem.delta[i]>0 && elem.cur[i] >= elem.to[i]) ||
                            (elem.delta[i]<0 && elem.cur[i] <= elem.to[i])) {
                        elem.cur[i] = elem.to[i];
                        all_done++;
                    }
                    if(elem.delta[i]==0) all_done++;
                }
                if(elem.id.substr(0,9) == "img_item_") {
                    elem.style.border = "2px solid #" + tohex(elem.cur[0]) + tohex(elem.cur[1]) + tohex(elem.cur[2]);
                } else {
                    elem.style.backgroundColor = "#" + tohex(elem.cur[0]) + tohex(elem.cur[1]) + tohex(elem.cur[2]);
                }
                if(all_done == 3) {
                    elem.state = 0;
                } else {
                    setTimeout("incr('"+id+"')", speed);
                }
            }

            function off(id,stop) {
                if(id && id.length) {
                    var elem = document.getElementById(id);
                } else {
                    var elem = this;
                    id = this.id;
                }

                if(elem.other&&!stop) { off(elem.other.id,true); }

                if(elem.state==1) {
                    setTimeout("off('"+id+"')", speed);
                } else if(elem.state!=2) {
                    elem.state=2;
                    decr(id);
                }
            }

            function decr(id) {
                var elem = document.getElementById(id);
                var i, all_done=0;
                for(i=0; i<3; i++) {
                    elem.cur[i] -= elem.delta[i];
                    if((elem.delta[i]>0 && elem.cur[i] <= elem.from[i]) ||
                            (elem.delta[i]<0 && elem.cur[i] >= elem.from[i])) {
                        elem.cur[i] = elem.from[i];
                        all_done++;
                    }
                }
                if(elem.id.substr(0,9) == "img_item_") {
                    elem.style.border = "2px solid #" + tohex(elem.cur[0]) + tohex(elem.cur[1]) + tohex(elem.cur[2]);
                } else {
                    elem.style.backgroundColor = "#" + tohex(elem.cur[0]) + tohex(elem.cur[1]) + tohex(elem.cur[2]);
                }
                if(elem.state==1) return;
                if(all_done==3) {
                    elem.state=0;
                } else {
                    setTimeout("decr('"+id+"')", speed);
                }
            }

            var hD="0123456789ABCDEF";
            function tohex(d) {
                //if(d>255) d = 255;
                var h = hD.substr(d&15,1);
                while(d>15) {d>>=4;h=hD.substr(d&15,1)+h;}
                if(h.length==1) return "0"+h;
                else return ""+h;
            }

            function parseColor(s) {
                var color_defs = [
                    {
                        re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,
                        process: function (bits){
                            return [
                                parseInt(bits[1]),
                                parseInt(bits[2]),
                                parseInt(bits[3])
                            ];
                        }
                    },
                    {
                        re: /^#(\w{2})(\w{2})(\w{2})$/,
                        process: function (bits){
                            return [
                                parseInt(bits[1], 16),
                                parseInt(bits[2], 16),
                                parseInt(bits[3], 16)
                            ];
                        }
                    },
                    {
                        re: /^#(\w{1})(\w{1})(\w{1})$/,
                        process: function (bits){
                            return [
                                parseInt(bits[1] + bits[1], 16),
                                parseInt(bits[2] + bits[2], 16),
                                parseInt(bits[3] + bits[3], 16)
                            ];
                        }
                    }
                ];

                for (var i = 0; i < color_defs.length; i++) {
                    var re = color_defs[i].re;
                    var processor = color_defs[i].process;
                    var bits = re.exec(s);
                    if (bits) {
                        return processor(bits);
                    }

                }
                return false;
            }


            function getElementsByPattern(pattern) {
                var classElements = new Array();
                node = document;
                tag = '*';
                var els = node.getElementsByTagName(tag);
                var elsLen = els.length;
                var pattern = new RegExp(pattern);
                for (i = 0, j = 0; i < elsLen; i++) {
                    if (pattern.test(els[i].className) ) {
                        classElements[j] = els[i];
                        j++;
                    }
                }
                return classElements;
            }

            var uniqueId=1;
            function fade_init() {
                var elems = getElementsByPattern("(^|\\s)kolom[123][ab](\\s|$)");
                var img;
                for(var i=0; i<elems.length; i++) {
                    e = elems[i];
                    if(!e.id) {
                        e.id = "___" + uniqueId;
                        uniqueId++;
                    }
                    e.from = parseColor(rzGetBg(e));
                    e.cur = parseColor(rzGetBg(e));
                    if(e.id.substr(0,5) == "menu_") {
                        img = document.getElementById("img_item_" + e.id.substr(5,6));
                        if(img) {
                            img.from = parseColor("#ffffff");
                            img.cur = parseColor("#ffffff");
                            img.to = parseColor(rzGetBg(e));;
                            e.other = img;
                            img.onmouseover = on;
                            img.onmouseout = off;
                            img.other = e;
                        }
                    }
                    e.onmouseover = on;
                    e.onmouseout = off;
                }
            }


            function rzCC(s){
              for(var exp=/-([a-z])/; exp.test(s); s=s.replace(exp,RegExp.$1.toUpperCase()));
              return s;
            };

            function rzGetStyle(e,a){
              var v=null;
              if(document.defaultView && document.defaultView.getComputedStyle){
                var cs=document.defaultView.getComputedStyle(e,null);
                if(cs && cs.getPropertyValue) v=cs.getPropertyValue(a);
              }
              if(!v && e.currentStyle) v=e.currentStyle[rzCC(a)];
              return v;
            };
            function rzGetBg(e){
              var v=rzGetStyle(e,'background-color');
              while (!v || v=='transparent' || v=='#000000' || v=='rgba(0, 0, 0, 0)'){
                if(e==document.body) v='#fff'; else {
                  e=e.parentNode;
                  v=rzGetStyle(e,'background-color');
                }
              }
              return v;
            };


