﻿// To enable the feature for zoom-in / zoom-out your Silverlight Page turn sample
// extra.js by Akira Onishi
// http://blogs.msdn.com/aonishi/archive/2007/11/28/how-to-add-the-zooming-feature-for-your-silverlight-page-turn-application-with-silverlight-1-0.aspx
var bInit, SLcontrol;
var mainPage, transformGroupObject, scaleCanvas, scaleFactor=1.0;
var translateCanvas;

var mouseDownPosition = 0;
var mouseDownValue = -1;
var thumbCenter = 6;

function slider_Loaded(sender, args) {
    slider_SetValue(sender, 0);
}


function slider_toUp(sender, args)
{
  var slider = sender.findName("slider");
  var newPosition = slider_GetValue(slider)+10;
  slider_SetValue(slider, newPosition );

}

function slider_toDown(sender, args)
{
  var slider = sender.findName("slider");
  var newPosition = slider_GetValue(slider)-10;
  slider_SetValue(slider, newPosition );

}

function slider_MouseLeftButtonDown(sender, args) {
    
    var coordinate = args.getPosition(null).x;
    var sliderControl = sender.findName("sliderControl");
    coordinate -= sliderControl["Canvas.Left"]+20;
    var slider = sender.findName("slider");
    slider_SetValue(slider, coordinate - thumbCenter);  
}

function slider_thumb_MouseLeftButtonDown(sender, args) {
    var slider = sender.findName("slider");
    sender.captureMouse();
    mouseDownValue = slider_GetValue(slider);
    mouseDownPosition = args.getPosition(null).x;
}

function slider_thumb_MouseLeftButtonUp(sender, args) {
    var slider = sender.findName("slider");
    slider.releaseMouseCapture();
    mouseDownValue = -1;
}

function slider_thumb_MouseMove(sender, args) {
    var slider = sender.findName("slider");
    if (mouseDownValue != -1) {
        var newValue = mouseDownValue + (args.getPosition(null).x - mouseDownPosition);    
        slider_SetValue(slider, newValue);
    }   
}

function slider_GetValue(sender) {
    var thumb = sender.findName("slider_thumb");
    return thumb["Canvas.Left"]; 
}

function slider_SetValue(sender, newValue) {
    
    if (newValue > sender.width ) {
        newValue = sender.width;
        mouseDownValue = -1;
    }
    if (newValue < 0) {
        newValue = 0;
        mouseDownValue = -1;
    }
    var thumb = sender.findName("slider_thumb");
    
    thumb["Canvas.Left"] = newValue;
    
	ApplyZoom(newValue);
}

function ApplyZoom(nValue)
{
    if (bInit == null) return;
    currentScale = 1.0 + nValue / 200;
    scaleCanvas.ScaleX = parseFloat(currentScale);
    scaleCanvas.ScaleY = parseFloat(currentScale);

}

function createTransformObjects(target, scale, x, y)
{
    var newScale = scale*scaleFactor;
    var xamlString = '<TransformGroup><ScaleTransform ScaleX="'+newScale.toString()+'" ScaleY="'+newScale.toString()+'" />';
    xamlString = xamlString + '<TranslateTransform X="'+x.toString()+'" Y="'+y.toString()+'" /></TransformGroup>';

    transformGroupObject = SLcontrol.content.createFromXaml(xamlString);
    scaleCanvas = transformGroupObject.children.getItem(0);
    translateCanvas = transformGroupObject.children.getItem(1);
    target.RenderTransform = transformGroupObject;
}

