﻿///////////////////////////////////////////////////////////////////////////////
//
//  surface.js
//
///////////////////////////////////////////////////////////////////////////////
var actiontype;
var active_magazine;
var magazine_center_x;
var magazine_center_y;
var _translateTransform;
var _rotateTransform;
var _scaleTransform;
var lastposition;

SurfaceControl = function(plugIn) {
    this.plugIn = plugIn;
    var _allControls = this.plugIn.content.findname("allControls");
    var _translateControls = this.plugIn.content.findname("translateControls");
    var _rotateScaleControls = this.plugIn.content.findname("rotateScaleControls");
    _translateTransform = this.plugIn.content.findname("translateTransform");
    _rotateTransform = this.plugIn.content.findname("rotateTransform");
    _scaleTransform = this.plugIn.content.findname("scaleTransform");
    var _mainCanvas = this.plugIn.content.findname("MainCanvas");
    //var _pageCanvas = this.plugIn.content.findname("PageCanvas");
    
    _allControls.addEventListener("mouseEnter", Silverlight.createDelegate(this, this.allcontrols_mouseenter));
    _allControls.addEventListener("mouseLeave", Silverlight.createDelegate(this, this.allcontrols_mouseleave));
    _translateControls.addEventListener("mouseLeftButtonDown", Silverlight.createDelegate(this, this.translateControls_mouseleftbuttondown));
    _rotateScaleControls.addEventListener("mouseLeftButtonDown", Silverlight.createDelegate(this, this.rotateScaleControls_mouseleftbuttondown));
    _mainCanvas.addEventListener("mouseLeftButtonUp",Silverlight.createDelegate(this, this.maincanvas_mouseleftbuttonuporleave));
    _mainCanvas.addEventListener("mouseLeave",Silverlight.createDelegate(this, this.maincanvas_mouseleftbuttonuporleave));
    _mainCanvas.addEventListener("mouseMove",Silverlight.createDelegate(this, this.maincanvas_mousemove));
    //_pageCanvas.addEventListener("mouseLeftButtonDown", Silverlight.createDelegate(this, this.pagecanvas_mouseleftbuttondown));

    var _centerx = 40 + _width + (_width / 2);
    var _centery = 30 + (_height / 2);
    _rotateTransform.CenterX = _centerx;
    _rotateTransform.CenterY = _centery;
    _scaleTransform.CenterX = _centerx;
    _scaleTransform.CenterY = _centery;
}

SurfaceControl.prototype.allcontrols_mouseenter = function(sender, args)
{
    sender.opacity="0.6";
}

SurfaceControl.prototype.allcontrols_mouseleave = function(sender, args)
{
    sender.opacity="0";
}

SurfaceControl.prototype.translateControls_mouseleftbuttondown = function(sender, args)
{
    active_magazine='true';
    actiontype='translate';
    lastposition=args.getPosition(null);
    magazine_center_x = _translateTransform.X + _rotateTransform.CenterX;
    magazine_center_y = _translateTransform.Y + _rotateTransform.CenterY;
   
    //alert(lastposition.x);
    //alert(lastposition.y);
}

SurfaceControl.prototype.rotateScaleControls_mouseleftbuttondown = function(sender, args)
{
    active_magazine='true';
    actiontype='rotatescale';
    lastposition=args.getPosition(null);
    magazine_center_x = _translateTransform.X + _rotateTransform.CenterX;
    magazine_center_y = _translateTransform.Y + _rotateTransform.CenterY;
}

SurfaceControl.prototype.maincanvas_mouseleftbuttonuporleave = function(sender, args)
{
    if (null != active_magazine) active_magazine=null;
}

SurfaceControl.prototype.maincanvas_mousemove = function(sender, args)
{
    if (null != active_magazine)
    {
        var position=args.getPosition(null);
        switch (actiontype)
        {
            case 'translate':
                _translateTransform.X += (position.X - lastposition.X);
                _translateTransform.Y += (position.Y - lastposition.Y);
                break;
            case 'rotatescale':
               // Rotate
               var radiansToDegrees = 360 / (2 * Math.PI);
               var lastAngle = Math.atan2(lastposition.Y - magazine_center_y, lastposition.X - magazine_center_x) * radiansToDegrees;
               var currentAngle = Math.atan2(position.Y - magazine_center_y, position.X - magazine_center_x) * radiansToDegrees;
               var deltaAngle = currentAngle - lastAngle;
               _rotateTransform.Angle += deltaAngle;

               // Scale
               var lastLength = Math.sqrt(Math.pow(lastposition.Y - magazine_center_y, 2) + Math.pow(lastposition.X - magazine_center_x, 2));
               var currentLength = Math.sqrt(Math.pow(position.Y - magazine_center_y, 2) + Math.pow(position.X - magazine_center_x, 2));
               var deltaScale = currentLength / lastLength;
               _scaleTransform.ScaleX *= deltaScale;
               _scaleTransform.ScaleY *= deltaScale;
               break;
        }
        lastposition=position;
    }
}

SurfaceControl.prototype.pagecanvas_mouseleftbuttondown = function(sender, args)
{
    alert(args.getPosition(null).x);
    alert(args.getPosition(null).y);
}
