<<<<----- Return to Wes Mantooth
var $t; // initalize a global variable to hold the target DOM node
// make sure everything is loaded
window.onload = function() {
    
    // cache the target dom node
    $t = document.getElementById('target');

    // add the cursor object
    $w.add_object(
        1,
        Cursor,{
            width:100,
            height:100,
            color:{
                fill:'#ffec00',
                stroke:'#000000'
            },
            opacity:0.7
        },
        $t
    );
    // add a circle
    $w.add_object(
        1,
        Circle,{
            x:($t.scrollWidth/6),
            y:($t.scrollHeight/2),
            radius:100,
            color:'#3c00ff',
            opacity:0.5
        },
        $t
    );
    // add a square
    $w.add_object(
        1,
        Square,{
            x:($t.scrollWidth/4),
            y:($t.scrollHeight/3),
            width:150,
            height:150,
            color:{
                fill:'#ff0000',
                stroke:'#000000'
            },
            opacity:0.7
        },
        $t
    );
    // add a complex polygon
    var x = ($t.scrollWidth/7);
    var y = ($t.scrollHeight/9);
    $w.add_object(
        1,
        Polygon,{
            a:[
                [x,y],
                [x+90,y+180],
                [x-100,y+60],
                [x+100,y+60],
                [x-60,y+180]
            ],
            color:{
                fill:'#73621e',
                stroke:'#000000'
            },
            opacity:0.7
        },
        $t
    );
    // add some text to display if a collision occured
    $w.add_object(
        1,
        Text, {x:50,y:50,font:'30px Arial'},
        $t
    )
    // get the mouse position and form the loop
    $w.loop();
}
/**
 * creates a simple box that follows the mouse and acts as a target
 * @param {Object}
 * */
var Cursor = function(o) {
    // initalize
    var x, y;
    // the loop
    var loop = function() {
        // get the mouse position
        $w.mouse.trackMouse($t,function(m) {
            // init some locals
            x = m.x;
            y = m.y;
            // center the box over the mouse coords
            x -= (o.width / 2);
            y -= (o.height / 2);
            // clear the canvas
            $w.canvas.clear(o.i);
            // draw the rectangle
            $w.canvas.rectangle(
                                o.i,
                                x,
                                y,
                                o.width,
                                o.height,
                                o.color.stroke,
                                'both',
                                o.color.fill,
                                o.opacity
                            );
            /**
             * normally we might use the engines game loop
             * but in this case we'll use the mouse event and loop through
             * each object...we are only instantiating 1 instance per object so
             * we can easily know its position in the objects array
             * */
            var c = "";
            var chk = [];
            // check the collisions for each object
            chk.push($w.objects.Square[2].checkCollision());
            chk.push($w.objects.Circle[1].checkCollision());
            chk.push($w.objects.Polygon[3].checkCollision());
            for(var i=0; i<3;i++){
                if(chk[i])c = "Collision!";   
            }
            // if collision pass that to the text object
            $w.objects.Text[4].loop(c);
        });
    }
    // getter
    var get_pos = function() {
        o.x = x;
        o.y = y;
        o.a =   [
                    [o.x,o.y],
                    [(o.x+o.width),o.y],
                    [(o.x+o.width),(o.y+o.height)],
                    [o.x,(o.y+o.height)]
                ];
        return o;   
    }
    return {
        loop:loop,
        get_pos:get_pos
    }
}
/**
 * @param {Object}
 * */
var Circle = function(o) {
    var loop = function(){
        $w.canvas.circle(
                         o.i,
                         o.x,
                         o.y,
                         o.radius,
                         o.color,
                         o.opacity
                        );
    };
    var checkCollision = function() {
        // get the cursor mouse position
        var a = $w.objects.Cursor[0].get_pos();
        return $w.collision.circle(a.a,o);
    }
    return {
        loop:loop,
        checkCollision:checkCollision
    }
}
/**
 * @param {Object}
 * */
var Square = function(o) {
    var loop = function(){
        $w.canvas.rectangle(
                            o.i,
                            o.x,
                            o.y,
                            o.width,
                            o.height,
                            o.color.stroke,
                            "both",
                            o.color.fill,
                            o.opacity
                        );
    };
    var checkCollision = function() {
        var b = $w.objects.Cursor[0].get_pos();
        var a = [
                    [o.x,o.y],
                    [(o.x+o.width),o.y],
                    [(o.x+o.width),(o.y+o.height)],
                    [o.x,(o.y+o.height)]
                ];
        var isc = false;
        var l = a.length;
        for(var i=0; i<l; i++) {
            if($w.collision.inside(a[i],b.a))isc = true;
        }
        return isc;
    }
    return {
        loop:loop,
        checkCollision:checkCollision
    }
}
/**
 * @param {Object}
 * */
var Polygon = function(o) {
    var loop = function(){
        $w.canvas.polygon(
                            o.i,
                            o.a,
                            o.color.fill,
                            "fill",
                            o.color.stroke,
                            o.opacity
                        );
    };
    var checkCollision = function() {
        var b = $w.objects.Cursor[0].get_pos();
        var isc = false;
        var l = o.a.length;
        for(var i=0; i<l; i++) {
            if($w.collision.inside(o.a[i],b.a))isc = true;
        }
        return isc;
    }
    return {
        loop:loop,
        checkCollision:checkCollision
    }
}
/**
 * @param {Object}
 * */
var Text = function(o) {
    var loop = function(text) {
        if (typeof text === 'undefined') text = '';
        $w.log('collision = '+text);
        $w.canvas.clear(o.i);
        $w.canvas.text(o.i,o.x,o.y,text,true,o.font);    
    }
    return {
        loop:loop
    }
}