/*
function imgmover_setonload()
{
    var oldonload = window.onload;
    
    window.onload = function()
    {
        imgmover_create('head');
        if(oldonload) oldonload();
    }
}
imgmover_setonload();
*/
function imgmover_create(el)
{
    var mover = {
        type: 'img',
        element: el.firstChild,
        x: 0,
        y: 0,
        w: el.firstChild.offsetWidth - el.offsetWidth,
        h: el.firstChild.offsetHeight - el.offsetHeight,
        incx: 1,
        incy: 1,
        stopped: false,
	    dbgel: document.getElementById('dbg'),
	    dbg: function(s) {
	        if(mover.dbgel) {
	            n = s + ' <br />' + mover.dbgel.innerHTML;
	            n=n.substr(0, 2000);
	            mover.dbgel.innerHTML = n;
		}
	    }
    };
    mover.x = 2 + Math.floor(Math.random() * (mover.w - 4));
    mover.y = 2 + Math.floor(Math.random() * (mover.h - 4));

    do {
        if(mover.w <= 0) mover.incx = 0;
        else mover.incx = Math.floor(Math.random() * 3) - 1;
        
        if(mover.h <= 0) mover.incy = 0;
        else mover.incy = Math.floor(Math.random() * 3) - 1;
    } while(mover.incx == 0 && mover.incy == 0); // prevent not moving
    

    el.mover = mover;
    el.imgsrc = el.firstChild.src;
    
    // it's faster in IE to move <img>
    if(navigator.userAgent.indexOf('MSIE') == -1 || navigator.userAgent.indexOf('Opera') != -1) {
        mover.element = el;
        el.style.background = "url('" + el.firstChild.src + "') no-repeat";
        el.removeChild(el.firstChild);
        mover.type = 'div';
    }
    else
        el.firstChild.style.position = 'absolute';

    mover.get_inc_divisor = function(dist) {
    	if(dist <= 10) {
            if(dist >= 4) return (12 - dist) / 2;
            else return (12 - 4) / 2;
        }
        else return 1;
    }
    
    imgmover_step(mover);
}
//function nn(n) { return "<div style='float:left;text-align:right;width:50px'>" + (Math.round((n+0.001)*1000)/1000)+'</div>'; }
function imgmover_step(mover)
{
    if(!mover.stopped) {
        //incx = mover.incx / mover.get_inc_divisor(dx=Math.min(mover.w - (mover.x + mover.incx), mover.x + mover.incx));
        //incy = mover.incy / mover.get_inc_divisor(dy=Math.min(mover.h - (mover.y + mover.incy), mover.y + mover.incy));
        //mover.dbg('<div style="height: 8px">'+nn(dx)+nn(dy)+nn(incx) + nn(incy)+'</div>');

        mover.x += mover.incx;
        mover.y += mover.incy;
        mover.x = Math.max(mover.x, 0);
        mover.x = Math.min(mover.x, mover.w);
        mover.y = Math.max(mover.y, 0);
        mover.y = Math.min(mover.y, mover.h);
        
        if(mover.type == 'div') {
            mover.element.style.backgroundPosition = '-' + mover.x + 'px -' + mover.y + 'px';
        }
        else if(mover.type == 'img') {
            mover.element.style.left = '-' + mover.x + 'px';
            mover.element.style.top = '-' + mover.y + 'px';
        }
        else return;
    
        // randomly stop moving horizontally xor vertically
        if(mover.w > 0 && Math.random() < 0.005 && mover.incy != 0) mover.incx = (mover.incx == 0 ? 1 : 0);
        if(mover.h > 0 && Math.random() < 0.005 && mover.incx != 0) mover.incy = (mover.incy == 0 ? 1 : 0);
    
        // when border reached, change direction
        if(mover.x + mover.incx > mover.w || mover.x + mover.incx < 0) {
            mover.incx *= -1;
            mover.x = Math.max(mover.x, 1);
            mover.x = Math.min(mover.x, mover.w - 1);
            mover.stopped = true;
            setTimeout(function() { mover.stopped = false; }, 500);
	}
        if(mover.y + mover.incy > mover.h || mover.y + mover.incy < 0) {
            mover.incy *= -1;
            mover.y = Math.max(mover.y, 1);
            mover.y = Math.min(mover.y, mover.h - 1);
            mover.stopped = true;
            setTimeout(function() { mover.stopped = false; }, 500);
	}
    }
    setTimeout(function() { imgmover_step(mover); }, 100);
}
