﻿
var _Items = [];
var _ItemsCanvas = null;
var _ItemText = null;
var _LoadingCanvas = null;
var _NavCanvas = null;
var _SilverLightControl = null;
var _InError = false;
var _Debug = false;
var CarouselID = 0;

var url_string = String(document.location);
var url_array1 = url_string.split('?');
if(url_array1[1]){
    var e_array = url_array1[1].split('&');
    for(i=0;i<=(e_array.length);i++){
        if(e_array[i]){
	        var varPair = e_array[i].split('=');
	        CarouselID = varPair[1];
        }
    } 
}

function roundNumber(num, dec) {
	var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
	return result;
}

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");
    SetConstants(_SilverLightControl.Content.ActualWidth);
    StartIntro();
}

function StartIntro() {
    StartStopLoader(true,"Carousel");
    CWICarousel.CWICarousel.GetCarouselItems(canvasWidth,canvasHeight,imageWidth,imageHeight,radiusX,radiusY,centerX,centerY,perspective,CarouselID,onWSRequestComplete,onWSRequestFail);
    var NavCanvas = _SilverLightControl.Content.FindName("NavCanvas");
    var newLeft = (_SilverLightControl.Content.ActualWidth - NavCanvas.Width) / 2;
    var newTop = (_SilverLightControl.Content.ActualHeight - 75);
    NavCanvas.SetValue("Canvas.Left", newLeft);
    NavCanvas.SetValue("Canvas.Top", newTop);
    }

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 badItems = new Array();
    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 {
        window.open(Item.NavURL,"_top");
        //location.href = Item.NavURL;
      }
      catch (e) {}
   }
}

function onMouseEnter(sender,args) {
   sender.Stroke = "Teal";    

   var id = sender.Name;
   try {
       var reflect = _SilverLightControl.Content.FindName(sender.Name + "Reflection");
       reflect.Stroke = "Teal";
   }
   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 = roundNumber(i * ((Math.PI * 2) / ItemCount),4);
        angle += currAngle;
        var x = roundNumber((Math.cos(angle) * radiusX) + centerX,4);
        var y = roundNumber((Math.sin(angle) * radiusY) + centerY,4);
        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 SetConstants(scale){
    canvasWidth = roundNumber(scale,4);
    canvasHeight = roundNumber((scale / 2),4);  
    imageWidth = roundNumber((scale / 4.7),4); 
    imageHeight = roundNumber((scale / 8),4); 
    radiusX = roundNumber((scale * (0.3454)),4); 
    radiusY = roundNumber((scale / 64),3); 
    centerX = roundNumber(((scale / 2) - (imageWidth / 2.5)),4);
    centerY = roundNumber(((scale / 4) - (imageHeight * 1.5)),4);
    speed = 0.05;
    perspective = -25;
    currAngle = 0;
    delay = 15;
    tid = null;
    angleChange = 0;
}

