﻿
var _Items = [];
var _ItemsCanvas = null;
var _ItemText = null;
var _LoadingCanvas = null;
var _NavCanvas = null;
var _SilverLightControl = null;
var _InError = false;
var _Debug = false;

function pageLoad() {
    Silverlight.createObject("Xaml/EmptyTemplate.xaml", $get("SilverLightControlHost"), "SilverLightControl",
      {width:'796', height:'250', inplaceInstallPrompt:false, background: '#ffffff', isWindowless:'true', framerate:'30', version:'1.0'},
      {onError:null, onLoad:null},null);
}

function onSilverlightLoaded() {
    _SilverLightControl = document.getElementById("SilverLightControl");
    _ItemsCanvas = _SilverLightControl.Content.FindName("ItemsCanvas");    
    _ItemText = _SilverLightControl.Content.FindName("ItemText");
    _LoadingCanvas = _SilverLightControl.Content.FindName("LoadingCanvas");    
    _NavCanvas = _SilverLightControl.Content.FindName("NavCanvas");
    StartIntro();
}

function StartIntro() {
    StartStopLoader(true,"The Wire");
    CWICarousel.CWICarousel.GetCarouselItems(canvasWidth,canvasHeight,imageWidth,imageHeight,
        radiusX,radiusY,onWSRequestComplete,onWSRequestFail);
}

function onWSRequestComplete(results) {
    StartStopLoader(false,"");
    RemoveItems();
    if (results != null && results != 'undefined') {
        _Items = results.CarouselItems;
        UpdateXaml(results.XamlFrag);
    }
}

function onWSRequestFail(error) {
    _Items = [];
    StartStopLoader(false,"");
    _NavCanvas.Opacity = "0";
    _ItemText.Text = "Unable to locate Item.  Please try another one.";
    RemoveItems();
}


function StartStopLoader(start,itemText) {
    _LoadingCanvas.Opacity = (start==true)?"1":"0";
    _ItemsCanvas.Opacity = (start==true)?"0":"1";
    _NavCanvas.Opacity = (start==true)?"0":"1";
    _ItemText.Text = "";
    if (start) {
        _SilverLightControl.Content.FindName("LoadingCanvasAnimation").Begin();
    } else {
        _SilverLightControl.Content.FindName("LoadingCanvasAnimation").Stop();
    }
}

function UpdateXaml(fragments) {
    var tb = $get("txtXaml");
    var badItems = new Array();
    tb.value = "";
    for (var i=0;i<fragments.length;i++) {
        if (_Debug) tb.value += fragments[i];
        try {
            if (_InError) { 
                badItems[badItems.length] = i-1;
                _InError = false;
            }
            var newItem = _SilverLightControl.Content.CreateFromXaml(fragments[i]);
            _ItemsCanvas.Children.Add(newItem);
        }
        catch (e) {
           _InError = true;
        }
    }
    if (_InError) { 
        if (fragments.length > 0) badItems[badItems.length] = fragments.length-1;
        _InError = false;
    }
    if (badItems.length > 0) { 
        for (var j=0;j<badItems.length;j++) {
            _ItemsCanvas.Children.RemoveAt(badItems[j])
        }
    }
}

function RemoveItems() {
   var Items = _ItemsCanvas.children;
   while (Items.Count > 0) {
      Items.RemoveAt(0);
   }
}

function onLeftMouseButtonDown(sender, args) {
   var id = sender.Name;
   var Item = null;
   for (var i=0;i<_Items.length;i++) {
      if (id == _Items[i].ItemID + "_Rect") {
          Item = _Items[i];
          break;
      }
   }
   if (Item != null) {
      try {
        location.href = Item.NavURL;
      }
      catch (e) {}
   }
}

function onMouseEnter(sender,args) {
   sender.Stroke = "Yellow";    

   var id = sender.Name;
   try {
       var reflect = _SilverLightControl.Content.FindName(sender.Name + "Reflection");
       reflect.Stroke = "Yellow";
   }
   catch (e) {}
   
}

function onMouseLeave(sender,args) {
    sender.Stroke = "Gray";
    try {
        var reflect = _SilverLightControl.Content.FindName(sender.Name + "Reflection");
        reflect.Stroke = "Gray";
    }
    catch (e) {}
}

function NavLeft_Enter(sender,args) {   
    SetNavImageSource(sender,"enter");
    angleChange = .01;
    SetInterval();
}

function NavRight_Enter(sender,args) {
    SetNavImageSource(sender,"enter");
    angleChange = -.01;
    SetInterval();
}

function NavLeft_Leave(sender,args) {
    SetNavImageSource(sender,"leave");
    ClearInterval();
}

function NavRight_Leave(sender,args) {
    SetNavImageSource(sender,"leave");
    ClearInterval();
}

function SetInterval() {
    tid = window.setInterval("MoveItems()",delay);
}

function ClearInterval() {
    window.clearInterval(tid);
    tid = null;
}

function SetNavImageSource(img,state) {
    var baseImage = "Images/" + img.Name;
    var endImage = (state=="enter")?"Over.png":".png";
    var fullImage = baseImage + endImage;
    img.Source = fullImage;
    _NavCanvas.FindName(img.Name + "_Reflect").Source = fullImage;
}


function MoveItems() {
    currAngle = currAngle + angleChange;
    var ItemCount = _Items.length;
    var ItemCanvases = _ItemsCanvas.children;

    for (var i=0; i < ItemCount; i++)
    {
        var angle = i * ((Math.PI * 2) / ItemCount);
        angle += currAngle;
        var x = (Math.cos(angle) * radiusX) + centerX;
        var y = (Math.sin(angle) * radiusY) + centerY;
        var scale = (y - perspective) / (centerY + radiusY - perspective);
        var c = ItemCanvases.GetItem(i);
        var ysplit = (canvasHeight - centerY) / ItemCount
        c["Canvas.Left"] = x;
        c["Canvas.Top"] = y;
        c["Canvas.ZIndex"] = Math.round((y/(centerY * 2))*100);
        var rect = c.FindName(c.Name + "_Rect");
        var s = (y  - c.RenderTransform.ScaleY) / (centerY+radiusY-c.RenderTransform.ScaleY);
        c.RenderTransform.ScaleX = s;
        c.RenderTransform.ScaleY = s;
    }
}

function onKeyPress(e) {
    var evt = new Sys.UI.DomEvent(e);  
    if (evt.charCode == Sys.UI.Key.enter) {   
        evt.stopPropagation(); 
		DoItemSearch();
	}
}

function onError(line, col, hr, string) {
    _InError = true;  
}  
  
function CarouselGetIntParam(paramname,defaultvalue) { 
    var paramvalue = defaultvalue; 
    if (document.getElementById(paramname)) { 
        document.getElementById(paramname).style.visibility="hidden"; 
        document.getElementById(paramname).style.height="1px"; 
        document.getElementById(paramname).style.width="1px"; 
        paramvalue = document.getElementById(paramname).value; 
    } 
    paramvalue = parseInt(paramvalue); 
    if (isNaN(paramvalue)) { 
        paramvalue = parseInt(defaultvalue); 
    } 
    return paramvalue; 
}

var canvasWidth = CarouselGetIntParam("CarouselCanvasWidth",796);
var canvasHeight = CarouselGetIntParam("CarouselCanvasHeight",400); 
var imageWidth = CarouselGetIntParam("CarouselImageWidth",174);
var imageHeight = CarouselGetIntParam("CarouselImageHeight",100);
var radiusX = CarouselGetIntParam("CarouselRadiusX",275);  
var radiusY = CarouselGetIntParam("CarouselRadiusY",15);    
var centerX = (canvasWidth / 2) - (imageWidth / 2.5);
var centerY = (canvasHeight / 2) - (imageHeight * 1.5);
var speed = 0.05;
var perspective = -75;
var currAngle = 0;
var delay = 15;
var tid = null;
var angleChange = 0;


