
////////////////////////////////////////////////////////////////////////////////////
//
//        ***** Elements.js *****
//     Definitions of page elements
//
//     © CM Group Ltd. All rights reserved.
//     Version 1.0
////////////////////////////////////////////////////////////////////////////////////

// ROLLOVER //

contentmaster.rollover = function(xaml, content, holder, targetWindow, index, windowInstance)
{
    this.XAMLsource = xaml;
    this.content = content;
    this.holder = holder;
    this.target = targetWindow;
    this.index = index;
    this.control = document.getElementById("silverlightControl1");
    this.rollElement;
    this.hoverIndex = 0;
    this.windowInstance = windowInstance;
    this.loadXAML(this.XAMLsource);
    
    // TEMPLATE CHILDREN INDEX
    // 0. Border
    // 1. Background Graphics
    // 2. Hover Blocks
    // 3. Foreground Graphics
    // 4. Text Box
    
}

contentmaster.rollover.prototype.loadXAML = function(url)
{       
	DownloadItem(this.control, url, Silverlight.createDelegate(this, this.XAMLloaded ));

}

contentmaster.rollover.prototype.XAMLloaded = function(sender, eventArgs)
{
  var xamlFragment = null;
	try
	{
		if (IS_USING_DOWNLOADER)
		{
			xamlFragment = this.control.content.createFromXamlDownloader(sender, ""); 
		}
		else
		{
			xamlFragment = this.control.content.createFromXaml(sender); 
		}
	}
	catch (ex)
	{
		return;
	}
  this.holder.add(xamlFragment);
  this.rollElement = this.holder.getItem(this.holder.count-1);
  
  var contentObjects = this.target.children.getItem(8).children.getItem(0).children.getitem(0);
  var prevSibling = contentObjects.children.getItem(this.index-1).children.getItem(0);
  var newElement = contentObjects.children.getItem(this.index).children.getItem(0);
  newElement["Canvas.Top"] = (prevSibling["Canvas.Top"] + prevSibling.actualHeight) -18;
  this.addEvents();
  
  var textBlock = this.rollElement.children.getItem(4).children.getItem(2);
  textBlock.Text = this.content.childNodes[0].childNodes[0].nodeValue;
  
  var overItems = this.rollElement.children.getItem(2).children;
  overItems.getItem(0).Visibility = "Visible";
  
  xamlFragment.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.EnterPopup));
  xamlFragment.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.LeavePopup));
  xamlFragment.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.OpenPopup));
  
  this.windowInstance.resizeControl.arrangePage(this.windowInstance.layoutType, this.windowInstance.xamlObject.children.getItem(8).children.getItem(0).children.getitem(0)); // updates window content once click table loaded

}

contentmaster.rollover.prototype.addEvents = function() // assign events to hover blocks
{
    var rollItems = this.rollElement.children.getItem(3).children;
    var overItems = this.rollElement.children.getItem(2).children;
    for (i=0; i<overItems.count; i++){
        overItems.getItem(i).Visibility = "Collapsed";
        rollItems.getItem(i).addEventListener("MouseEnter", Silverlight.createDelegate(this, this.rollEnter));
    }
}

contentmaster.rollover.prototype.rollEnter = function(sender)
{
    var rollItems = this.rollElement.children.getItem(3).children;
    var overItems = this.rollElement.children.getItem(2).children;
    overItems.getItem(this.hoverIndex).Visibility = "Collapsed";
    
    for (i=0; i<overItems.count; i++){
        if (rollItems.getItem(i)["Canvas.Left"] != sender["Canvas.Left"]) continue;
        else if (rollItems.getItem(i)["Canvas.Top"] == sender["Canvas.Top"]){
            overItems.getItem(i).Visibility = "Visible";
            this.hoverIndex = i;
            var textBlock = this.rollElement.children.getItem(4).children.getItem(2);
            textBlock.Text = this.content.childNodes[i].childNodes[0].nodeValue;
        }
    }
    
}

contentmaster.rollover.prototype.rollLeave = function(sender)
{
    var overItems = this.rollElement.children.getItem(2).children;
    overItems.getItem(this.hoverIndex).Visibility = "Collapsed";
    this.hoverIndex = null;
}

contentmaster.rollover.prototype.OpenPopup = function(sender, args)
{
	if (sender.children)
	{
		window.Temp_Rollover_Storage = this.content;
		window.open('RolloverView.htm?'+this.XAMLsource,'rolloverWindow','toolbar=0,resizable=1,scrollbars=1');
	}
}

contentmaster.rollover.prototype.EnterPopup = function(sender, args)
{
	if (sender.children)
	{
		var parent = sender;
		if (parent != null && parent.children != null)
		{
			var control = document.getElementById("silverlightControl1");
			var popxaml = '<Canvas><Rectangle Fill="Yellow" RadiusX="5" RadiusY="5" Stroke="Black" /><TextBlock Canvas.Left="2" FontSize="10" Text="Click for an Enlarged Image" /></Canvas>';
			var pop = control.content.createFromXaml(popxaml);

			pop.Width = pop.children.getItem(1).ActualWidth + 4;
			pop.Height = pop.children.getItem(1).ActualHeight;
			pop.children.getItem(0).Width = pop.Width;
			pop.children.getItem(0).Height = pop.Height;

			pop["Canvas.Left"] = sender["Canvas.Left"] + (sender.Width * 0.5) - (pop.Width * 0.5);
			pop["Canvas.Top"] = sender["Canvas.Top"] - pop.Height - 5;
			parent.children.add(pop);
		}
	}
}

contentmaster.rollover.prototype.LeavePopup = function(sender, args)
{
	if (sender.children != null)
	{
		var parent = sender;
		if (parent != null && parent.children != null && parent.children.count > 1)
		{
			parent.children.removeAt(parent.children.count - 1);
		}
	}
}

///////////////////////////////////////////////
//          TABLE
//////////////////////////////////////////////

contentmaster.infoTable = function(holder, url)
{
    this.control = document.getElementById("silverlightControl1");
    this.holder = holder;
    this.url = url;
    this.createTable();
}
contentmaster.infoTable.prototype.createTable = function()
{
DownloadItem(this.control, this.url, Silverlight.createDelegate(this, this.tableLoaded ));
}

contentmaster.infoTable.prototype.tableLoaded = function(sender, eventArgs)
{
  var xamlFragment = null;
	try
	{
		if (IS_USING_DOWNLOADER)
		{
			xamlFragment = this.control.content.createFromXamlDownloader(sender, ""); 
		}
		else
		{
			xamlFragment = this.control.content.createFromXaml(sender); 
		}
	}
	catch (ex)
	{
		return;
	}
  this.holder.add(xamlFragment);
}

///////////////////////////////////////////////
//                  CLICKTABLE
//////////////////////////////////////////////

contentmaster.clickTable = function(content, holder, targetWindow, type, windowInstance)
{
    this.content = content;
    this.holder = holder;
    this.target = targetWindow;
    this.control = document.getElementById("silverlightControl1");
    this.clickElement;
    this.selectedIndex = null;
    this.windowInstance = windowInstance;
    
    this.createTable();
    
    this.clickType = type; // "click" or "tab"
    this.scrollControl = null;
}

contentmaster.clickTable.prototype.createTable = function()
{
	DownloadItem(this.control, "template-clicktable.xaml", Silverlight.createDelegate(this, this.clickTemplateLoaded ));
}

contentmaster.clickTable.prototype.clickTemplateLoaded = function(sender, eventArgs)
{
  var xamlFragment = null;
	try
	{
		if (IS_USING_DOWNLOADER)
		{
			xamlFragment = this.control.content.createFromXamlDownloader(sender, ""); 
		}
		else
		{
			xamlFragment = this.control.content.createFromXaml(sender); 
		}
	}
	catch (ex)
	{
		return;
	}
	
  this.holder.add(xamlFragment);
  this.clickElement = this.holder.getItem(this.holder.count-1);
    
    var boxHolder = this.clickElement.children.getItem(2); //BOX HOLDER
    var hitHolder = this.clickElement.children.getItem(3);
    this.boxHolder = boxHolder;
    this.hitHolder = hitHolder;
    this.hitIndex = 0; // index of selected item (0 defualt);
    var marginTop = 0;
    var margin = 8;
    var boxSize;
    
    for (var itemCount = 0; itemCount < this.content.length; itemCount ++){
        // add boxes for each item
        var boxXaml = createBox();
        var newBox = this.control.content.createFromXaml(boxXaml);
        boxHolder.children.add(newBox); // ADD BOX HOLDER CANVAS TO FILE
        var newBox = boxHolder.children.getItem(itemCount);
        boxSize = newBox.children.getItem(0).Height;
          
        if (itemCount == 0){
            newBox["Canvas.Top"] = marginTop;
            this.boxHolder.children.getItem(0).children.getItem(0).Fill = this.getHitGrad("green");
            this.boxHolder.children.getItem(0).children.getItem(0).Stroke = "#FF0E4819";
            }
        else{
            newBox["Canvas.Top"] = boxSize + (boxHolder.children.getItem(itemCount-1)["Canvas.Top"] + margin);
        }
        newBox.children.getItem(2).Text = this.content[itemCount].childNodes[0].childNodes[0].nodeValue;
        
        newBox.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.enterBox));
        newBox.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.leaveBox));
        newBox.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.clickBox));

    }
    // size main template accordingly
    var clickShape = this.clickElement.children.getItem(0).children.getItem(0);
    var innerShape = this.clickElement.children.getItem(0).children.getItem(1);
    clickShape.Height = 21 + ((boxSize + margin) * this.content.length);
    innerShape.Height = clickShape.Height - 16;
    var clipString = "0,-8,400,"+(innerShape.Height);
    this.clickElement.children.getItem(0).children.getItem(2).Clip.Rect = clipString;
    this.clickElement.Height = clickShape.Height;
    
    var txtWidth = 350;
    
    if (this.clickType == "tab"){
        this.addImage();
        if (this.content[0].childNodes[2].childNodes[0].nodeValue){
            this.imageBox.Source = this.content[0].childNodes[2].childNodes[0].nodeValue;
            txtWidth = 340;
            }
        else if (!this.content[0].childNodes[2].childNodes[0].nodeValue){
            this.imageBox.Source = "";
            this.rect.Visibility = "Collapsed";
            txtWidth = 470;
            }
        }

    var mainTextHolder = this.clickElement.children.getItem(0).children.getItem(2).children.getItem(0);
    this.arrangeContent(this.content[0].childNodes[1], mainTextHolder.children, txtWidth); //default content

    function createBox()
    {
        var boxXaml = '';
        boxXaml += '<Canvas Width="172" Height="69" Canvas.Left="0" Canvas.Top="0"><Rectangle RadiusX="4" RadiusY="4" Width="173" Height="70" Stroke="#FFE1E1E1"><Rectangle.Fill><LinearGradientBrush EndPoint="0.5,0.014" StartPoint="0.5,0.986"><GradientStop Color="#FFD9D9D9" Offset="0.856"/><GradientStop Color="#FFFFFFFF" Offset="1"/><GradientStop Color="#FFE8E8E8" Offset="0.471"/><GradientStop Color="#FFCFCFCF" Offset="0"/></LinearGradientBrush></Rectangle.Fill></Rectangle><Rectangle RadiusX="4" RadiusY="4" Width="162.5" Height="58.5" Canvas.Left="5" Canvas.Top="6"><Rectangle.Fill><LinearGradientBrush EndPoint="0.5,-0.034" StartPoint="0.5,1.026"><GradientStop Color="#FFE5E5E5" Offset="0"/><GradientStop Color="#FFFFFFFF" Offset="1"/></LinearGradientBrush></Rectangle.Fill></Rectangle><TextBlock Width="152" Height="48" Canvas.Left="9" Canvas.Top="11" FontFamily="Arial" FontSize="12" TextWrapping="Wrap" Text="Item text" /></Canvas>';
        
        return boxXaml;
    }
    
    function createHitBox()
    {
        var hitBoxXaml = '';
        hitBoxXaml += '<Canvas Width="172" Height="69" Canvas.Left="0" Canvas.Top="0"><Rectangle RadiusX="4" RadiusY="4" Width="173" Height="70" Stroke="#FF0E4819"><Rectangle.Fill><LinearGradientBrush EndPoint="0.5,0.014" StartPoint="0.5,0.986"><GradientStop Color="#FF57A447" Offset="0.856"/><GradientStop Color="#FF97C98E" Offset="1"/><GradientStop Color="#FF5F9A53" Offset="0.471"/><GradientStop Color="#FF1B5B0D" Offset="0"/></LinearGradientBrush></Rectangle.Fill></Rectangle><Rectangle RadiusX="4" RadiusY="4" Width="162.5" Height="58.5" Canvas.Left="5" Canvas.Top="6"><Rectangle.Fill><LinearGradientBrush EndPoint="0.5,-0.034" StartPoint="0.5,1.026"><GradientStop Color="#FFE5E5E5" Offset="0"/><GradientStop Color="#FFFFFFFF" Offset="1"/></LinearGradientBrush></Rectangle.Fill></Rectangle><TextBlock Width="152" Height="48" FontFamily="Arial" FontSize="12" TextWrapping="Wrap" Canvas.Left="10" Canvas.Top="10" Text="Item Text" /></Canvas>';
        
        return hitBoxXaml;
    
    }

}

contentmaster.clickTable.prototype.arrangeContent = function(content, target, txtWidth)
{
          var lineSpace = 10; 
          var heightCount = 0;
          
          for (j=0; j<content.childNodes.length; j++){
          // add content
          var complexType = content.childNodes[j].nodeName;
          
          if (complexType == "list"){
            var holder = defineElement(complexType, target);
            if (j >= 1) holder["Canvas.Top"] = (target.getItem(j-1)["Canvas.Top"] + target.getItem(j-1).actualHeight)+lineSpace;

            var numberCount = 1;
                for (k=0; k<content.childNodes[j].childNodes.length; k++){

                    var bulletNode = content.childNodes[j].childNodes[k].nodeName;
                    var bulletItem = defineElement(bulletNode, holder.children);
                    bulletItem.children.getItem(1).Text = content.childNodes[j].childNodes[k].childNodes[0].nodeValue;
                    bulletItem.children.getItem(1).Width = txtWidth - bulletItem["Canvas.Left"]; //added canvas left

                    if (bulletNode == "number"){
                        bulletItem.children.getItem(0).Text = numberCount+".";
                        numberCount++;
                        }
                    if (k >= 1) bulletItem["Canvas.Top"] = (holder.children.getItem(k-1)["Canvas.Top"] + holder.children.getItem(k-1).children.getItem(1).actualHeight)+lineSpace;

                    if (k == content.childNodes[j].childNodes.length) heightCount += (bulletItem["Canvas.Top"] + bulletItem.children.getItem(1).actualHeight);
                    heightCount += bulletItem.children.getItem(1).actualHeight + lineSpace;
                }
            }
          else if ((complexType == "para")||(complexType == "paraBold")||(complexType == "paraCode")||(complexType == "paraItalic")||(complexType == "paraLink2")){
            var paraEl = defineElement(complexType, target);
            paraEl.Text = content.childNodes[j].childNodes[0].nodeValue;
            paraEl.Width = txtWidth;
            if (complexType == "paraLink2"){
                paraEl.Foreground = "MediumBlue";
                paraEl.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.open_link2));
                paraEl.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.fwdLink_enter));
                paraEl.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.fwdLink_leave));
                paraEl.Cursor = "Hand";
            }
            if (j >= 1){
                var prevItem = target.getItem(j-1);
                if (prevItem == "TextBlock") paraEl["Canvas.Top"] = (prevItem["Canvas.Top"] + prevItem.actualHeight)+lineSpace;
                else if (prevItem == "Image") paraEl["Canvas.Top"] = (prevItem["Canvas.Top"] + prevItem.Height)+lineSpace;
                else paraEl["Canvas.Top"] = prevItem["Canvas.Top"] + ((prevItem.children.getItem(prevItem.children.count-1)["Canvas.Top"] + prevItem.children.getItem(prevItem.children.count-1).children.getItem(1).actualHeight) + lineSpace);
                }
                heightCount += paraEl.actualheight + lineSpace;
            }
           else if ((complexType == "imagegeneric")||(complexType == "image2")||(complexType == "image3")){
            var paraEl = defineElement(complexType, target);
            if (complexType == "imagegeneric"){
                paraEl.Width = 360;
                paraEl.Height = 400;
            }
            if (complexType != "image3" && complexType != "image2")
            {
				paraEl.Stretch = "None";
			}
            paraEl.Source = content.childNodes[j].childNodes[0].nodeValue;

            if (j >= 1){
                var prevItem = target.getItem(j-1);
                if (prevItem == "TextBlock") paraEl["Canvas.Top"] = (prevItem["Canvas.Top"] + prevItem.actualHeight)+lineSpace;
                else if (prevItem == "Image") paraEl["Canvas.Top"] = (prevItem["Canvas.Top"] + prevItem.Height)+lineSpace;
                else paraEl["Canvas.Top"] = prevItem["Canvas.Top"] + ((prevItem.children.getItem(prevItem.children.count-1)["Canvas.Top"] + prevItem.children.getItem(prevItem.children.count-1).children.getItem(1).actualHeight) + lineSpace);
                }
                heightCount += paraEl.Height + lineSpace;
            }
            
        }
        // size main template accordingly
        var clickShape = this.clickElement.children.getItem(0).children.getItem(0);
        var innerShape = this.clickElement.children.getItem(0).children.getItem(1);
        
        if (21 + heightCount > clickShape.Height){
            clickShape.Height = 21 + heightCount;
            innerShape.Height = clickShape.Height - 16;
            var clipString = "0,-8,400,"+(innerShape.Height);
            this.clickElement.children.getItem(0).children.getItem(2).Clip.Rect = clipString;
            }
        this.clickElement.Height = clickShape.Height;

        this.windowInstance.resizeControl.arrangePage(this.windowInstance.layoutType, this.windowInstance.xamlObject.children.getItem(8).children.getItem(0).children.getitem(0)); // updates window content once click table loaded
        return heightCount;
}

contentmaster.clickTable.prototype.open_link2 = function(sender)
{
    window.open('http://go.microsoft.com/fwlink/?LinkId=94696','');
}
contentmaster.clickTable.prototype.fwdLink_enter = function(sender)
{
    sender.Foreground = "Blue";
}
contentmaster.clickTable.prototype.fwdLink_leave = function(sender)
{
    sender.Foreground = "MediumBlue";
}

contentmaster.clickTable.prototype.scrollCheck = function(heightCount)
{
   var element = this.clickElement;
   var areaToScroll = element.children.getItem(0).children.getItem(2);
   var shape = element.children.getItem(0).children.getItem(1);

   if (heightCount > shape.Height){
        if (this.scrollControl == null){
            this.scrollControl = new contentmaster.scrollBarBasic(element, areaToScroll, heightCount, shape.Height, shape, -50);
        }
         else{
            this.scrollControl.configureScrollBar(heightCount, shape.Height);
        }
    }
    else if (heightCount <= shape.Height){
        if (this.scrollControl != null){
            this.scrollControl.removeScrollBar();
            delete this.scrollControl;
            this.scrollControl = null;
        }
    }

}

contentmaster.clickTable.prototype.enterBox = function(sender)
{
    sender.children.getItem(0).Stroke = "#FF0E4819";
}

contentmaster.clickTable.prototype.clickBox = function(sender)
{
    var textHolder = this.clickElement.children.getItem(0).children.getItem(2).children.getItem(0);
    for (var boxCount=0; boxCount<this.boxHolder.children.count; boxCount++){
        if (sender["Canvas.Top"] == this.boxHolder.children.getItem(boxCount)["Canvas.Top"]){
            if (textHolder.children.count > 0) textHolder.children.clear();
            var txtWidth = 360;
            textHolder["Canvas.Top"] = 0;
            this.arrangeContent(this.content[boxCount].childNodes[1], textHolder.children, txtWidth);
            this.boxHolder.children.getItem(this.hitIndex).children.getItem(0).Fill = this.getHitGrad("gray");
            this.boxHolder.children.getItem(this.hitIndex).children.getItem(0).Stroke = "#FFE1E1E1";
            this.boxHolder.children.getItem(boxCount).children.getItem(0).Fill = this.getHitGrad("green");
            this.boxHolder.children.getItem(boxCount).children.getItem(0).Stroke = "#FF0E4819";
            this.activeBoxText = sender.children.getItem(2).Text;
            this.hitIndex = boxCount;
            break;
        }
    }

}

contentmaster.clickTable.prototype.getHitGrad = function(setColor)
{
    var xamlFragment = '';
    if (setColor == "green"){
    xamlFragment += '<LinearGradientBrush EndPoint="0.5,0.014" StartPoint="0.5,0.986">';
    xamlFragment += '<GradientStop Color="#FF57A447" Offset="0.856"/>';
    xamlFragment += '<GradientStop Color="#FF97C98E" Offset="1"/>';
    xamlFragment += '<GradientStop Color="#FF5F9A53" Offset="0.471"/>';
    xamlFragment += '<GradientStop Color="#FF1B5B0D" Offset="0"/>';
    xamlFragment += '</LinearGradientBrush>';              
    }
    if (setColor == "gray"){
    xamlFragment += '<LinearGradientBrush EndPoint="0.5,0.014" StartPoint="0.5,0.986">';
    xamlFragment += '<GradientStop Color="#FFD9D9D9" Offset="0.856"/>';
    xamlFragment += '<GradientStop Color="#FFFFFFFF" Offset="1"/>';
    xamlFragment += '<GradientStop Color="#FFE8E8E8" Offset="0.471"/>';
    xamlFragment += '<GradientStop Color="#FFCFCFCF" Offset="0"/>';
    xamlFragment += '</LinearGradientBrush>';                 
    }
    return this.control.content.createFromXaml(xamlFragment);
}

contentmaster.clickTable.prototype.leaveBox = function(sender)
{
    if (sender.children.getItem(2).Text != this.activeBoxText) sender.children.getItem(0).Stroke = "#FFE1E1E1";
}

contentmaster.clickTable.prototype.addImage = function()
{
    var clickShape = this.clickElement.children.getItem(0).children.getItem(0);
    var innerShape = this.clickElement.children.getItem(0).children.getItem(1);
    clickShape.Width += 120;
    innerShape.Width += 120;
    
    this.rect = defineElement("rect", this.clickElement.children)
    this.imageBox = defineElement("imagegeneric", this.clickElement.children)
    
    this.imageBox["Canvas.Left"] = "560";
    this.imageBox["Canvas.Top"] = "25";
    this.imageBox.Height = innerShape.Height - 30;
    this.imageBox.Width = 140;
    
    this.rect["Canvas.Left"] = this.imageBox["Canvas.Left"]-1;
    this.rect["Canvas.Top"] = this.imageBox["Canvas.Top"]-1;
    this.rect.Width = this.imageBox.Width+2;
    this.rect.Height = this.imageBox.Height+2;
}


///////////////////////////////////////////////////////////////////////////// Element Definitions /////////////////////////////////////////////////////////////////////////////////////

function defineElement(complexType, target)
{
    var txtEl = createElement(complexType);
    var wpfControl = document.getElementById("silverlightControl1");  
    var elXaml = wpfControl.content.createFromXaml(txtEl);
    target.add(elXaml);
    var newItem = target.getItem(target.count-1);
    return newItem;

}

function OpenImagePopup (sender, args)
{
	if (sender.Source != null)
	{
		//window.open(''+sender.Source,'imageWindow','left=0,top=0,width=900,height=700,toolbar=0,resizable=1');
		window.open('ImageView.htm?'+sender.Source,'imageWindow','toolbar=0,resizable=1,scrollbars=1');
		//popImage(sender.Source, sender.Source);
	}
}

function EnterImagePopup (sender, args)
{
	if (sender.Source != null)
	{
		var parent = sender.GetParent();
		if (parent != null && parent.children != null)
		{
			var control = document.getElementById("silverlightControl1");
			var popxaml = '<Canvas><Rectangle Fill="Yellow" RadiusX="5" RadiusY="5" Stroke="Black" /><TextBlock Canvas.Left="2" FontSize="10" Text="Click for an Enlarged Image" /></Canvas>';
			var pop = control.content.createFromXaml(popxaml);

			pop.Width = pop.children.getItem(1).ActualWidth + 4;
			pop.Height = pop.children.getItem(1).ActualHeight;
			pop.children.getItem(0).Width = pop.Width;
			pop.children.getItem(0).Height = pop.Height;

			pop["Canvas.Left"] = sender["Canvas.Left"] + (sender.Width * 0.5) - (pop.Width * 0.5);
			pop["Canvas.Top"] = sender["Canvas.Top"] + pop.Height;
			parent.children.add(pop);
		}
	}
}

function LeaveImagePopup (sender, args)
{
	if (sender.Source != null)
	{
		var parent = sender.GetParent();
		if (parent != null && parent.children != null && parent.children.count > 1)
		{
			parent.children.removeAt(parent.children.count - 1);
		}
	}
}

function createElement(type) // holders for basic element types
{
    switch(type){
    case "title":
    return '<TextBlock Width="490" FontFamily="Arial" FontSize="16" Text="Title" TextWrapping="Wrap" />';
    case "text":
    return '<TextBlock Width="490" FontFamily="Arial" FontSize="12" Text="Content" TextWrapping="Wrap" />';
    case "image":
    return '<Image Source="Images/loading.png" Width="100" MouseLeftButtonDown="OpenImagePopup" MouseEnter="EnterImagePopup" MouseLeave="LeaveImagePopup"/>';
    case "image2":
    return '<Image Source="Images/loading.png" Height="240" Width="360" Stretch="Uniform" MouseLeftButtonDown="OpenImagePopup" MouseEnter="EnterImagePopup" MouseLeave="LeaveImagePopup"/>';
    case "image3":
    return '<Image Source="Images/loading.png" Height="100" Width="360" Stretch="Fill" MouseLeftButtonDown="OpenImagePopup" MouseEnter="EnterImagePopup" MouseLeave="LeaveImagePopup"/>';
    case "image4":
    return '<Image Source="Images/loading.png" Height="200" Width="370" MouseLeftButtonDown="OpenImagePopup" MouseEnter="EnterImagePopup" MouseLeave="LeaveImagePopup"/>';
    case "imagegeneric":
    return '<Image Source="Images/loading.png" MouseLeftButtonDown="OpenImagePopup" MouseEnter="EnterImagePopup" MouseLeave="LeaveImagePopup"/>';
    case "imagelarge":
    return '<Image Source="Images/loading.png" Height="200" MouseLeftButtonDown="OpenImagePopup" MouseEnter="EnterImagePopup" MouseLeave="LeaveImagePopup"/>';
    case "imagelarge2":
    var imgXaml = '';
        imgXaml += '<Canvas>'
        imgXaml += '<Canvas>'
        imgXaml += '<Rectangle RadiusX="4" RadiusY="4" Width="520" Height="548" Stroke="#FFE1E1E1">'
        imgXaml += '<Rectangle.Fill>'
        imgXaml += '<LinearGradientBrush EndPoint="0.5,0.023" StartPoint="0.5,0.983">'
        imgXaml += '<GradientStop Color="#FFECECEC" Offset="0.519"/>'
        imgXaml += '<GradientStop Color="#FFFFFFFF" Offset="1"/>'
        imgXaml += '<GradientStop Color="#FFDFDFDF" Offset="0.942"/>'
        imgXaml += '<GradientStop Color="#FFDDDDDD" Offset="0"/>'
        imgXaml += '</LinearGradientBrush>'
        imgXaml += '</Rectangle.Fill>'
        imgXaml += '</Rectangle>'
        imgXaml += '<Rectangle RadiusX="4" RadiusY="4" Width="508" Height="530" Canvas.Left="6" Canvas.Top="10">'
        imgXaml += '<Rectangle.Fill>'
        imgXaml += '<LinearGradientBrush EndPoint="0.5,0.023" StartPoint="0.5,0.983">'
        imgXaml += '<GradientStop Color="#FFECECEC" Offset="0"/>'
        imgXaml += '<GradientStop Color="#FFF2F2F2" Offset="1"/>'
        imgXaml += '<GradientStop Color="#FFFFFFFF" Offset="0.942"/>'
        imgXaml += '</LinearGradientBrush>'
        imgXaml += '</Rectangle.Fill>'
        imgXaml += '</Rectangle>'
        imgXaml += '</Canvas>'
        imgXaml += '<Rectangle RadiusX="4" RadiusY="4" Width="486" Height="20" Canvas.Top="510" Canvas.Left="19" Fill="#FFF8F8F8" />'
        imgXaml += '<Image Source="silverlight.jpg" Height="480" Width="500" Canvas.Top="20" Canvas.Left="10" MouseLeftButtonDown="OpenImagePopup" MouseEnter="EnterImagePopup" MouseLeave="LeaveImagePopup"/>'
        imgXaml += '<TextBlock Text="Image Description" Width="506" Canvas.Top="514" Canvas.Left="30" FontFamily="Arial" FontSize="10" Foreground="Gray" />'
        imgXaml += '</Canvas>'
    return imgXaml;
    case "demo":
    return '<Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"></Canvas>';
    case "animation":
    return '<Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"></Canvas>';
    case "anigram":
    return '<Canvas></Canvas>';
    case "para":
    return '<TextBlock Width="490" FontFamily="Arial" FontSize="12" Text="Content" TextWrapping="Wrap" />';
    case "paraLink1":
    return '<TextBlock Width="490" FontFamily="Arial" FontSize="12" Text="Content" TextWrapping="Wrap" />';
    case "paraLink2":
    return '<TextBlock Width="490" FontFamily="Arial" FontSize="12" Text="Content" TextWrapping="Wrap" />';
    case "paraIND":
    return '<TextBlock Canvas.Left="50" Width="490" FontFamily="Arial" FontSize="12" Text="Content" TextWrapping="Wrap" />';
    case "paraItalic":
    return '<TextBlock Width="490" FontFamily="Arial" FontSize="12" Text="Content" TextWrapping="Wrap" FontStyle="Italic" />';
    case "paraBold":
    return '<TextBlock Width="490" FontFamily="Arial" FontSize="12" Text="Content" TextWrapping="Wrap" FontWeight="Bold" />';
    case "paraCode":
    return '<TextBlock Width="490" FontFamily="Courier New" FontSize="12" Text="Content" TextWrapping="Wrap" Foreground="Gray" />';
    case "bullet":
    return '<Canvas><Ellipse Height="5" Width="5" Fill="Black" Canvas.Top="4" /><TextBlock Canvas.Left="10" Width="480" FontFamily="Arial" FontSize="12" Text="Content" TextWrapping="Wrap" /></Canvas>';
    case "bulletBold":
    return '<Canvas><Ellipse Height="5" Width="5" Fill="Black" Canvas.Top="4" /><TextBlock Canvas.Left="10" Width="480" FontFamily="Arial" FontSize="12" Text="Content" TextWrapping="Wrap" FontWeight="Bold" /></Canvas>';
    case "bulletIND":
    return '<Canvas Canvas.Left="50"><Ellipse Height="5" Width="5" Fill="Black" Canvas.Top="4" /><TextBlock Canvas.Left="10" Width="430" FontFamily="Arial" FontSize="12" Text="Content" TextWrapping="Wrap" /></Canvas>';
    case "bulletCode":
    return '<Canvas><Canvas></Canvas><TextBlock Canvas.Left="10" Width="430" FontFamily="Courier New" FontSize="12" Text="Content" TextWrapping="Wrap" Foreground="Gray" /></Canvas>';
    case "bulletCodeIND":
    return '<Canvas Canvas.Left="50"><Canvas></Canvas><TextBlock Canvas.Left="10" Width="430" FontFamily="Courier New" FontSize="12" Text="Content" TextWrapping="Wrap" Foreground="Gray" /></Canvas>';
    case "number":
    return '<Canvas><TextBlock Width="20" FontFamily="Arial" FontSize="12" Text="N" TextWrapping="Wrap" /><TextBlock Canvas.Left="18" Width="480" FontFamily="Arial" FontSize="12" Text="Content" TextWrapping="Wrap" /></Canvas>';
    case "list":
    return '<Canvas></Canvas>';
    case "selftest":
    return '<Canvas><TextBlock Width="490" FontFamily="Arial" FontSize="12" Text="SELF TEST" TextWrapping="Wrap" /></Canvas>';
    case "lablink":
    return '<Canvas><Rectangle Width="300" Height="90" Canvas.Left="0" Canvas.Top="10" Stroke="LightGray" Fill="White" RadiusX="4" RadiusY="4" /><Image Source="Images/abobe_reader.jpg" Height="80" Canvas.Left="2" Canvas.Top="15" /><TextBlock Width="150" Canvas.Left="110" Canvas.Top="25" FontFamily="Arial" FontSize="14" Text="Download Lab" FontWeight="Bold" TextWrapping="Wrap" /><TextBlock Width="150" Canvas.Left="110" Canvas.Top="47" FontFamily="Arial" FontSize="10" Text="ADOBE READER REQUIRED" TextWrapping="Wrap" /><Rectangle Width="160" Height="20" Canvas.Left="110" Canvas.Top="65" Fill="#FF922222" RadiusX="4" RadiusY="4" /><TextBlock Width="150" Canvas.Left="120" Canvas.Top="69" FontFamily="Arial" FontSize="10" Text="CLICK HERE TO DOWNLOAD" Foreground="White" /></Canvas>';
    case "rect":
    return '<Rectangle Width="10" Height="10" Stroke="Gray" Fill="White" />';
    }
    
    // remove width etc
}




///////////////////////////////////////////////////////////////////////////////////////////////////
//
//  Self Test
//
///////////////////////////////////////////////////////////////////////////////////////////////////

contentmaster.selfTest = function(content, holder, targetWindow, windowInstance)
{

    this.content = content;
    this.questionArray = new Array(); // stores questions and answers
    this.questionNumber = 1;
    this.questionPart = "question";
    this.holder = holder; // holder canvas
    this.control = document.getElementById("silverlightControl1");
    this.testElement = null; // reference to test xaml
    this.partFragment = null; // part to download (store to prevent repeated server trips)
    this.resultTracker = new Array();
    this.windowInstance = windowInstance;
    
    this.sortQuestions();
}

contentmaster.selfTest.prototype.sortQuestions = function()
{
    for (var itemCount = 0; itemCount < this.content.childNodes.length; itemCount++){
        
        var qItem ={
        question: "",
        answers: new Array(),
        feedback: "",
        selection: new Array(),
        correctAmount: ""
        }
        
        this.questionArray.push(qItem);
        this.questionArray[itemCount].question = this.content.childNodes[itemCount].childNodes[0].childNodes[0].nodeValue; // add question
        this.questionArray[itemCount].feedback = this.content.childNodes[itemCount].childNodes[2];
        //this.questionArray[itemCount].incorrectFB = this.content.childNodes[itemCount].childNodes[2].childNodes[1];
        this.questionArray[itemCount].correctAmount = this.content.childNodes[itemCount].childNodes[1].attributes.getNamedItem("correctAmount").nodeValue;
        var qAnswers = this.content.childNodes[itemCount].childNodes[1];

        for (var ansCount = 0; ansCount < qAnswers.childNodes.length; ansCount++){
            var aItem ={
                answer: "",
                correct: ""
            }
            this.questionArray[itemCount].answers[ansCount] = aItem;
            this.questionArray[itemCount].answers[ansCount].answer = qAnswers.childNodes[ansCount].childNodes[0].nodeValue;
            this.questionArray[itemCount].answers[ansCount].correct = qAnswers.childNodes[ansCount].attributes.getNamedItem("result").nodeValue;
            this.questionArray[itemCount].selection[ansCount] = "deselected";
        }
    }
    this.createTest("question");
}

contentmaster.selfTest.prototype.configureTest = function()
{
 // removed
}

contentmaster.selfTest.prototype.createTest = function(page)
{
    var url;
    if (page == "question") url = "XAML/SelfTest/template-selftest.xaml";
    if (page == "result") url = "XAML/SelfTest/template-result.xaml";
    
    DownloadItem(this.control, url, Silverlight.createDelegate(this, this.testLoaded ));
   
}

contentmaster.selfTest.prototype.testLoaded = function(sender, eventArgs)
{
  var xamlFragment = null;
	try
	{
		if (IS_USING_DOWNLOADER)
		{
			xamlFragment = this.control.content.createFromXamlDownloader(sender, ""); 
		}
		else
		{
			xamlFragment = this.control.content.createFromXaml(sender); 
		} 
	}
	catch (ex)
	{
		return;
	}
  this.holder.add(xamlFragment);
  this.testElement = this.holder.getItem(this.holder.count-1);
  
  this.activeButton = null;
  
  var questionHolder = this.testElement.children.getItem(2);
  this.partHolder = questionHolder;
  this.partHolder.Height = 0;
  
  this.qTotal = this.testElement.children.getItem(1).children.getItem(2);
  this.qTotal.Text = this.questionNumber +"/"+ this.questionArray.length;
  
  this.qHeader = this.testElement.children.getItem(1).children.getItem(1);
  
  var newStatus = null;
  
  if (this.questionPart == "question") this.qHeader.Text = "Question";
  
  else if (this.questionPart == "result"){
      this.qHeader.Text = "Results";
      newStatus = checkRight(this.questionArray[this.questionNumber-1]);
      //var contButton = this.testElement.children.getItem(3);
      //contButton.Cursor = "Hand";
      //contButton.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.continue_hit));
      }
  var contButton = this.testElement.children.getItem(3);
  contButton.Cursor = "Hand";
  contButton.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.continue_hit));
  
  this.multiSelected = 0;
         
  this.resultTracker[this.questionNumber-1] = newStatus;
      
  this.addQuestFeed(newStatus);
      
  function checkRight(questionArray)
    {
        var status = "correct";
        for (rCount = 0; rCount < questionArray.answers.length; rCount++){
            if (questionArray.answers[rCount].correct == "correct"){
                if (questionArray.selection[rCount] == "selected") continue;
                else{
                status = "incorrect";
                break;
                }
            }
            else if (questionArray.answers[rCount].correct == "incorrect"){
                if (questionArray.selection[rCount] == "deselected") continue;
                else{
                status = "incorrect";
                break;
                }
            }
        }
        return status;
    }
}

contentmaster.selfTest.prototype.addPart = function(type)
{
    var url;
    switch(type){
    case "answer":
    url = "XAML/SelfTest/template-answer.xaml";
    break;
    }
    
    DownloadItem(this.control, url, Silverlight.createDelegate(this, this.partLoaded ));

}

contentmaster.selfTest.prototype.partLoaded = function(sender, eventArgs)
{
    this.partFragment = "";
    if (IS_USING_DOWNLOADER)
	{
		this.partFragment = this.control.content.createFromXamlDownloader(sender, ""); 
	}
	else
	{
		this.partFragment = this.control.content.createFromXaml(sender); 
	}
    this.partHolder.children.add(this.partFragment);

    var number = this.questionNumber-1;
    var newPart = this.partHolder.children.getItem(this.partHolder.children.count-1);
    if (this.partHolder.children.count > 1){
        var prevPart = this.partHolder.children.getItem(this.partHolder.children.count-2);
        newPart["Canvas.Top"] = (prevPart["Canvas.Top"] + prevPart.Height) + 10;
        }
        
    // Reduce button sizes
    newPart.children.getItem(0).Height -= 20;
    newPart.Height -= 20;
    
    newPart.children.getItem(1)["Canvas.Top"] -= 8;
    newPart.children.getItem(1)["Canvas.Left"] -= 5;
    
    newPart.children.getItem(2)["Canvas.Top"] -= 8;
    newPart.children.getItem(2)["Canvas.Left"] -= 5;
    
    newPart.children.getItem(3)["Canvas.Left"] -= 16;
    newPart.children.getItem(3).Width += 16;
    
    newPart.children.getItem(1).Width -= 5;
    newPart.children.getItem(1).Height -= 5;
    
    newPart.children.getItem(2).children.getItem(0).Width -= 5;
    newPart.children.getItem(2).children.getItem(0).Height -= 5;
    
    newPart.children.getItem(2).children.getItem(1).Width -= 5;
    newPart.children.getItem(2).children.getItem(1).Height -= 5;
    
    newPart.children.getItem(2).children.getItem(1).Visibility = "Collapsed";
        
    
    newPart.children.getItem(3).Text = this.questionArray[number].answers[this.partHolder.children.count-1].answer; //**
    this.partHolder.Height += newPart.Height + 10;
    
    var contButton = this.testElement.children.getItem(3);
    contButton["Canvas.Top"] = (this.partHolder.Height + this.partHolder["Canvas.Top"]) + 20;
    
    if (this.questionPart == "question"){
        newPart.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.answer_enter));
        newPart.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.answer_leave));
        newPart.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.answer_hit));
    }
    
    
    if (this.questionPart == "result"){
        if (this.questionArray[number].answers[this.partHolder.children.count-1].correct == "incorrect"){
            if (this.questionArray[number].selection[this.partHolder.children.count-1] == "selected"){
                newPart.children.getItem(2).children.getItem(1).Visibility = "Visible";
                this.status = "incorrect"; //notify wrong
            }
            else {
                this.status = "correct";
                newPart.Opacity = "0.2";
                }

            newPart.children.getItem(0).fill = this.createLinearGradientBrush("incorrect");
              var crossString = '<Canvas Canvas.Left="16" Canvas.Top="-4"><Rectangle RenderTransformOrigin="0.5,0.5" Fill="#FE11236B" RadiusX="0" RadiusY="0" Width="7" Height="43.75"><Rectangle.RenderTransform><TransformGroup><RotateTransform Angle="135"/></TransformGroup></Rectangle.RenderTransform></Rectangle><Rectangle Fill="#FE11236B" RadiusX="0" RadiusY="0" Width="7" Height="43.75" RenderTransformOrigin="0.5,0.5"><Rectangle.RenderTransform><TransformGroup><RotateTransform Angle="45"/></TransformGroup></Rectangle.RenderTransform></Rectangle></Canvas>';
              var crossXaml = this.control.content.createFromXaml(crossString);
              newPart.children.removeAt(1);
              newPart.children.removeAt(1);
              newPart.children.getItem(2).children.add(crossXaml);
              newPart.children.getItem(2)["Canvas.Left"] -= 8;
              newPart.children.getItem(2)["Canvas.Top"] -= 10;
    
        }
        else if (this.questionArray[number].answers[this.partHolder.children.count-1].correct == "correct"){
            if (this.questionArray[number].selection[this.partHolder.children.count-1] == "deselected"){
                newPart.Opacity = "0.2";
                this.status = "incorrect"; //notify wrong
            }
            else if (this.questionArray[number].selection[this.partHolder.children.count-1] == "selected"){
                this.status = "correct";
                newPart.children.getItem(2).children.getItem(1).Visibility = "Visible";
                }
            
            newPart.children.getItem(0).fill = this.createLinearGradientBrush("correct");
              var tickString = '<Path Fill="#FE11236B" Stretch="Fill" Width="47" Height="43.75" Canvas.Left="0" Canvas.Top="-4" Data="M314.71738,385.29788 C331.77716,356.03192 347,353 347,353 323.7663,373.30851 316.91847,395.81915 316.91847,395.81915 307.62499,388.72341 301.02174,387.25532 301.02174,387.25532 L304.38586,379.76596 z"/>';
              var tickXaml = this.control.content.createFromXaml(tickString);
              newPart.children.removeAt(1);
              newPart.children.removeAt(1);
              newPart.children.getItem(2).children.add(tickXaml);
              newPart.children.getItem(2)["Canvas.Left"] -= 8;
              newPart.children.getItem(2)["Canvas.Top"] -= 10;
        }
    
    }

    if (this.currentPart < this.totalParts-1){
            this.currentPart++;
            this.addPart("answer");
    }
    if (this.currentPart == this.totalParts-1){
        var contentHolder = this.windowInstance.xamlObject.children.getItem(8).children.getItem(0);
        contentHolder["Canvas.Top"] = 0;
        this.windowInstance.resizeControl.arrangePage(this.windowInstance.layoutType, contentHolder.children.getItem(0));
        }
}

contentmaster.selfTest.prototype.createLinearGradientBrush = function(status)
{
        // Define a XAML fragment.
        var xamlFragment = '<LinearGradientBrush EndPoint="0.886,1.029" StartPoint="0.886,0.015">';
        if (status == "correct") xamlFragment +=   '<GradientStop Color="#FFBDE8BD" Offset="0"/>';
        else if (status == "incorrect") xamlFragment +=   '<GradientStop Color="#FFFFA4A4" Offset="0"/>';
        else if (status == "selected") xamlFragment +=   '<GradientStop Color="#FFD7D7D7" Offset="0"/>';
        else if (status == "deselected") xamlFragment +=   '<GradientStop Color="#FFF0F0F0" Offset="0"/>';
           xamlFragment +=   '<GradientStop Color="#FFFFFFFF" Offset="1"/>';
           xamlFragment += '</LinearGradientBrush>';

        // Create the XAML fragment and return it.
        return this.control.content.createFromXaml(xamlFragment);
}

contentmaster.selfTest.prototype.addQuestFeed = function(status)
{
    var questionHolder;
    
    var contButton = this.testElement.children.getItem(3);
    
    if (this.questionPart == "question"){
        contButton.Opacity = "0.2";
        questionHolder = this.testElement.children.getItem(0).children.getItem(2);
        questionHolder.children.getItem(0).Text = this.questionArray[this.questionNumber-1].question;
        questionHolder.Height = this.testElement.children.getItem(0).children.getItem(0).Height + 10;
        
        var newEl = defineElement("para", questionHolder.children);
        if (this.questionArray[this.questionNumber-1].correctAmount == "single") newEl.Text = "Select the one best answer.";
        if (this.questionArray[this.questionNumber-1].correctAmount == "multiple") newEl.Text = "Select all answers that apply.";
        newEl["Canvas.Top"] = (questionHolder.children.getItem(0)["Canvas.Top"] + questionHolder.children.getItem(0).actualHeight) + 10;
        
    }
    else if (this.questionPart == "result"){
        questionHolder = this.testElement.children.getItem(0).children.getItem(3);
        questionHolder.Height = questionHolder.children.getItem(0).Height + questionHolder.children.getItem(0)["Canvas.Top"];
        
        var route;
        var correctAmount = this.questionArray[this.questionNumber-1].correctAmount;
        
        if (correctAmount == "multiple"){
            if (status == "correct") route = this.questionArray[this.questionNumber-1].feedback.childNodes[0];
            if (status == "incorrect") route = this.questionArray[this.questionNumber-1].feedback.childNodes[1];
        }
        if (correctAmount == "single"){
            route = this.questionArray[this.questionNumber-1].feedback.childNodes[this.sIndex];
        }
        for (var paras = 0; paras<route.childNodes.length; paras++){
            var type = route.childNodes[paras].nodeName;
            var newEl = defineElement(type, questionHolder.children);
            newEl.Text = route.childNodes[paras].childNodes[0].nodeValue;
            newEl["Canvas.Top"] = (questionHolder.children.getItem(paras)["Canvas.Top"] + questionHolder.children.getItem(paras).actualHeight) + 10;
            if (newEl == "TextBlock") questionHolder.Height += newEl.actualHeight + 10;
            if (newEl != "TextBlock") questionHolder.Height += newEl.Height + 10;
        }

        var resultRed = this.testElement.children.getItem(0).children.getItem(1);
        var resultGreen = this.testElement.children.getItem(0).children.getItem(0);
        var inner = this.testElement.children.getItem(0).children.getItem(2);
        inner.Height = questionHolder.Height + 40;
        resultRed.Height = inner.Height + 16;
        resultGreen.Height = inner.Height + 16;
        questionHolder.Height = resultRed.Height + 10;
        if (status == "correct"){
            resultRed.Visibility = "Collapsed";
            questionHolder.children.getItem(0).Text = "That is correct.";
            }
        else{
            questionHolder.children.getItem(0).Text = "That is incorrect.";
        }
    }
    this.partHolder["Canvas.Top"] = (questionHolder["Canvas.Top"] + questionHolder.Height) + 40;
    this.totalParts = this.questionArray[this.questionNumber-1].answers.length;
    this.currentPart = 0;
    this.addPart("answer");

}

contentmaster.selfTest.prototype.answer_enter = function(sender)
{
    sender.children.getItem(0).Stroke = "#FF0E4819";

}

contentmaster.selfTest.prototype.answer_leave = function(sender)
{
    sender.children.getItem(0).Stroke = "#FFDDDDDD";

}

contentmaster.selfTest.prototype.answer_hit = function(sender)
{
    var number = this.questionNumber-1;
    
    var correctAmount = this.questionArray[number].correctAmount;
    var check = sender.children.getItem(2).children.getItem(1);
    
    if (correctAmount == "single"){
        if (this.activeButton){
            this.activeButton.Visibility = "Collapsed";
            this.activeButton = check;
            }
        else if (!this.activeButton) this.activeButton = check;
        this.activeButton.Visibility = "Visible";
        this.multiSelected = 1;
        if (this.previousSelection) this.previousSelection.Fill = this.createLinearGradientBrush("deselected");
        this.previousSelection = sender.children.getItem(0);
        sender.children.getItem(0).Fill = this.createLinearGradientBrush("selected");
        
        for (var pCount = 0; pCount < this.partHolder.children.count; pCount++){
            if (this.questionArray[number].selection[pCount] != "deselected") this.questionArray[number].selection[pCount] = "deselected";
            if (sender["Canvas.Top"] == this.partHolder.children.getItem(pCount)["Canvas.Top"]){
                this.questionArray[number].selection[pCount] = "selected";
                this.sIndex = pCount;
            }
        }
        
    }
    
    var contButton = this.testElement.children.getItem(3);
    
    if (correctAmount == "multiple"){
        if (check.Visibility == "Collapsed"){
            check.Visibility = "Visible";
            this.multiSelected++;
            sender.children.getItem(0).Fill = this.createLinearGradientBrush("selected");
            }
        else if (check.Visibility == "Visible"){
            check.Visibility = "Collapsed";
            this.multiSelected--
            sender.children.getItem(0).Fill = this.createLinearGradientBrush("deselected");
            if (this.multiSelected == 0){
                contButton.Opacity = "0.2";
                contButton.Cursor = "Arrow";
                }
            }

        
        for (var pCount = 0; pCount < this.partHolder.children.count; pCount++){
            if (sender["Canvas.Top"] == this.partHolder.children.getItem(pCount)["Canvas.Top"]){
                if (this.questionArray[number].selection[pCount] != "selected") this.questionArray[number].selection[pCount] = "selected";
                else this.questionArray[number].selection[pCount] = "deselected";
            }
        }
    }
    
    
    if (contButton.Opacity != "1" && this.multiSelected > 0){
        contButton.Opacity = "1";
        contButton.Cursor = "Hand";
    }

    
}

contentmaster.selfTest.prototype.continue_hit = function(sender)
{
    if (this.multiSelected > 0 || this.questionPart == "result"){
        var number = this.questionNumber-1;
        var qLength = this.questionArray.length;
        
        this.partFragment = null;
        
        if (this.questionPart == "result"){
            if (this.questionNumber < this.questionArray.length){
                this.questionNumber++;
                this.holder.clear();
                this.questionPart = "question";
                this.createTest("question");
            }
            else if (this.questionNumber == this.questionArray.length){
                this.finalResults();
            }
        }
        else if (this.questionPart == "question"){
            this.holder.clear();
            this.questionPart = "result";
            this.createTest("result");
            }
    }
}

contentmaster.selfTest.prototype.finalResults = function()
{
    this.partHolder.children.clear();
    this.qTotal.Visibility = "Collapsed";
    this.qHeader.Text = "Final Results";
    this.testElement.children.removeAt(0);
    this.testElement.children.removeAt(2);//3
    this.partHolder["Canvas.Top"] = (this.testElement.children.getItem(0)["Canvas.Top"]+this.testElement.children.getItem(0).children.getItem(0).Height) + 20;
    
    var corTracker = 0;
    
    for (var k=0; k<this.questionArray.length; k++){
        var resItem = createResult(this.partHolder, "result");
        if (k > 0) resItem["Canvas.Top"] = this.partHolder.children.getItem(k-1)["Canvas.Top"] + 20;
        resItem.children.getItem(0).Text = "Question "+ (k+1)+":";
        var qResult = this.resultTracker[k];
        
        if (qResult == "correct"){
            corTracker++;
            resItem.children.getItem(1).Text = "Correct";
            }
        if (qResult == "incorrect"){
            resItem.children.getItem(1).Text = "Incorrect";
            resItem.children.getItem(1).Foreground = "Crimson";
            }
        if (k == this.questionArray.length-1){
            var totItem = createResult(this.partHolder, "total");
            totItem["Canvas.Top"] = resItem["Canvas.Top"] + 30;
            totItem.children.getItem(1).Text = corTracker+" out of "+this.questionArray.length + " ("+Math.round((corTracker / this.questionArray.length) * 100 )+"%)";
        }
    }
    
    var contentHolder = this.windowInstance.xamlObject.children.getItem(8).children.getItem(0);
    contentHolder["Canvas.Top"] = 0;
    this.windowInstance.scrollCheck(300, this.windowInstance.xamlObject.children.getItem(1).Height);

    function createResult(partHolder, type)
    {
        var resEl;
        if (type == "result") resEl = '<Canvas><TextBlock Width="490" FontFamily="Arial" FontSize="14" Text="Question N" TextWrapping="Wrap" /><TextBlock Width="490" Canvas.Left="80" FontFamily="Arial" FontSize="14" Text="Result" TextWrapping="Wrap" Foreground="Green" /></Canvas>';
        if (type == "total") resEl = '<Canvas><TextBlock Width="490" FontFamily="Arial" FontSize="16" Text="Total Score:" TextWrapping="Wrap" FontWeight="Bold" /><TextBlock Width="490" Canvas.Left="100" FontFamily="Arial" FontSize="16" Text="Result" TextWrapping="Wrap" Foreground="Green" /></Canvas>';
        var wpfControl = document.getElementById("silverlightControl1");  
        var elXaml = wpfControl.content.createFromXaml(resEl);
        partHolder.children.add(elXaml);
        var newItem = partHolder.children.getItem(partHolder.children.count-1);
        return newItem;
    }

}



///////////////////////////////////////////////////////////////
//
// Scrollbar Basic
//
//
//////////////////////////////////////////////////////////////

contentmaster.scrollBarBasic = function(parentWindow, areaToScroll, contentHeight, shapeHeight, scrollSizeRef, topY) 
{
    this.parentWindow = parentWindow;
    this.areaToScroll = areaToScroll.children.getItem(0);
    this.control = document.getElementById("silverlightControl1");
    this.scrollBar = null;
    this.scrollAmount = 20;
    this.contentHeight = contentHeight;
    this.shapeHeight = shapeHeight;
    this.scrollSizeRef = scrollSizeRef;
    this.topY = topY;
    this.createScrollBar();
    this.isMouseDown = false;
    this.scrollToDrag;
}

contentmaster.scrollBarBasic.prototype =
{
	createScrollBar: function() 
	{
	    var scrollbar = this.getScrollBar();
        var scrollbarXaml = this.control.content.createFromXaml(scrollbar);
        this.parentWindow.children.add(scrollbarXaml);
        
        this.scrollBar = this.parentWindow.children.getItem(this.parentWindow.children.count-1);
        this.configureScrollBar(this.contentHeight, this.shapeHeight, true);
        
        var scrTop = this.scrollBar.children.getItem(0);
        var scrBot = this.scrollBar.children.getItem(2);
        var scrDrag = this.scrollBar.children.getItem(3);
        scrDrag.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.dragScrollDown));
        scrDrag.addEventListener("MouseMove", Silverlight.createDelegate(this, this.dragScroll));
        scrDrag.addEventListener("MouseLeftButtonUp", Silverlight.createDelegate(this, this.dragScrollUp));
	},
	
	getScrollBar: function() 
	{
	    var scroller = "";
        scroller += '<Canvas Canvas.Top="75" Canvas.Left="640">';
        scroller += '<Canvas Canvas.Top="0">';
        scroller += '<Rectangle Width="16" Height="25" Fill="LightGray" Cursor="Hand" RadiusX="4" RadiusY="4" />';
        scroller += '</Canvas>';
        scroller += '<Canvas Canvas.Top="25">';
        scroller += '<Rectangle Width="16" Height="300" Fill="GhostWhite" RadiusX="4" RadiusY="4" />';
        scroller += '</Canvas>';
        scroller += '<Canvas Canvas.Top="325">';
        scroller += '<Rectangle Width="16" Height="25" Fill="LightGray" Cursor="Hand" RadiusX="4" RadiusY="4" />';
        scroller += '</Canvas>';
        scroller += '<Canvas Canvas.Top="100">';
        scroller += '<Rectangle Width="16" Height="50" Fill="Gray" Cursor="Hand" RadiusX="4" RadiusY="4" />';
        scroller += '</Canvas>';
        scroller += '</Canvas>';
        return scroller;
	},
	
	configureScrollBar: function(contentHeight, shapeHeight)
	{
	    var scrTop = this.scrollBar.children.getItem(0);
        var scrBot = this.scrollBar.children.getItem(2);
        var scrBar = this.scrollBar.children.getItem(1);
        var scrDrag = this.scrollBar.children.getItem(3);
        var scrDragHeight = scrDrag.children.getItem(0).Height;
        var scrTopHeight = scrTop.children.getItem(0).Height;
        var scrDragTop = scrDrag["Canvas.Top"];

        this.contentHeight = contentHeight;
        this.shapeHeight = shapeHeight-0;
        
        var winArea = this.scrollSizeRef;

        this.scrollBar["Canvas.Left"] = this.scrollSizeRef ? winArea.Width + 174 : 400;
        
        scrTop["Canvas.Top"] = this.topY ? this.topY : 0;
        scrBar["Canvas.Top"] = scrTop["Canvas.Top"] + scrTop.children.getItem(0).Height;
        scrBar.children.getItem(0).Height = winArea.Height - 62;
        var scrBarHeight = scrBar.children.getItem(0).Height;
        scrBot["Canvas.Top"] = scrBar["Canvas.Top"] + scrBar.children.getItem(0).Height;
        this.ratio = scrBarHeight / (contentHeight-50);
        this.ratioUp = (contentHeight-50) / scrBarHeight;
        scrDrag["Canvas.Top"] = (4+scrTopHeight)+(-(this.areaToScroll["Canvas.Top"]*this.ratio) + (this.topY-4));
        var origHeight = scrDrag.children.getItem(0).Height;
        scrDrag.children.getItem(0).Height = (scrBarHeight * this.ratio);
        var heightDifference = scrDrag.children.getItem(0).Height - origHeight;
	
	},
	
	dragScrollDown: function(sender, mouseEventArgs)
	{
	    this.beginX = mouseEventArgs.getPosition(null).x;
        this.beginY = mouseEventArgs.getPosition(null).y;
        this.isMouseDown = true;
        this.scrollToDrag = sender;
        sender.captureMouse();
	},
	
	dragScroll: function(sender, mouseEventArgs)
	{
	    if (this.isMouseDown == true){
            var scrTopHeight = this.scrollBar.children.getItem(0).children.getItem(0).Height;
            var scrDrag = this.scrollBar.children.getItem(3);
            var scrBarHeight = this.scrollBar.children.getItem(1).children.getItem(0).Height;
            var scrDragHeight = scrDrag.children.getItem(0).Height;
            var scrDragTop = scrDrag["Canvas.Top"];
            
            var scrDragTrueTop = scrDragTop - scrTopHeight;

            var currY = mouseEventArgs.getPosition(null).y;

            if (this.areaToScroll["Canvas.Top"] <= 0){
                this.scrollToDrag["Canvas.Top"] += currY - this.beginY;
                this.areaToScroll["Canvas.Top"] += -((currY - this.beginY)*this.ratioUp);
            }
            if (this.areaToScroll["Canvas.Top"] > 0){
                this.areaToScroll["Canvas.Top"] = 0;
                this.scrollToDrag["Canvas.Top"] = scrTopHeight + this.scrollBar.children.getItem(0)["Canvas.Top"];
            }
            if (this.scrollToDrag["Canvas.Top"] > (scrBarHeight - scrDragHeight) + (scrTopHeight+4) + (this.topY-4)){
                this.scrollToDrag["Canvas.Top"] = (scrBarHeight - scrDragHeight) + (scrTopHeight+4 + (this.topY-4));
                this.areaToScroll["Canvas.Top"] = -((this.scrollToDrag["Canvas.Top"] - ((scrTopHeight+4) + (this.topY-4)))*this.ratioUp);
            }
            this.beginY = currY;
        }
	},
	
	dragScrollUp: function(sender)
	{
        this.isMouseDown = false;
        sender.releaseMouseCapture();
	},
	
	removeScrollBar: function()
	{
        this.parentWindow.children.removeAt(this.parentWindow.children.count-1);
    }

	
}


////////////////////////////////////////////////////////////////////////
// Horizontal Scroll Bar
////////////////////////////////////////////////////////////////////////


contentmaster.scrollBarHor = function(parentWindow, areaToScroll, contentWidth, shapeWidth, scrollSizeRef, leftX, windowNum, scrollNum)
{
    this.parentWindow = parentWindow;
    this.areaToScroll = areaToScroll;
    this.control = document.getElementById("silverlightControl1");
    
    this.scrollBar = null;
    this.scrollAmount = 20;
    
    this.contentWidth = contentWidth;
    this.shapeWidth = shapeWidth;
    this.scrollSizeRef = scrollSizeRef;
    this.leftX = leftX;
    
    this.windowNum = windowNum;
    this.scrollNum = scrollNum;
    
    this.createScrollBar();
    
    this.isMouseDown = false;
    
    this.scrollToDrag;
}

contentmaster.scrollBarHor.prototype.createScrollBar = function() //create from XAML
{
    var scrollbar = this.getScrollBar();
    var updatedXaml = scrollbar.replaceName("$winnum", this.windowNum);
    var updatedXaml2 = updatedXaml.replaceName("$scrnum", this.scrollNum);
    var scrollbarXaml = this.control.content.createFromXaml(updatedXaml2);
    this.parentWindow.children.add(scrollbarXaml);
    
    this.scrollBar = this.parentWindow.children.getItem(this.parentWindow.children.count-1);
    this.configureScrollBar(this.contentWidth, this.shapeWidth, true);
    
    var scrTop = this.scrollBar.children.getItem(0);
    var scrBot = this.scrollBar.children.getItem(2);
    var scrDrag = this.scrollBar.children.getItem(3);
    scrTop.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.scrollLeft));
    scrBot.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.scrollRight));
    scrDrag.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.dragScrolldown));
    scrDrag.addEventListener("MouseMove", Silverlight.createDelegate(this, this.dragScroll));
    scrDrag.addEventListener("MouseLeftButtonUp", Silverlight.createDelegate(this, this.dragScrollup));
}


contentmaster.scrollBarHor.prototype.getScrollBar = function()
{
    var scroller = "";
    scroller += '<Canvas Canvas.Top="600" Canvas.Left="100" Name="ScrollBar_$winnum_$scrnum" >';
    scroller += '<Canvas Canvas.Left="0">';
    scroller += '<Rectangle Width="25" Height="16" Fill="LightGray" Cursor="Hand" RadiusX="4" RadiusY="4" />';
    scroller += '</Canvas>';
    scroller += '<Canvas Canvas.Left="25">';
    scroller += '<Rectangle Width="300" Height="16" Fill="GhostWhite" RadiusX="4" RadiusY="4" />';
    scroller += '</Canvas>';
    scroller += '<Canvas Canvas.Left="325">';
    scroller += '<Rectangle Width="25" Height="16" Fill="LightGray" Cursor="Hand" RadiusX="4" RadiusY="4" />';
    scroller += '</Canvas>';
    scroller += '<Canvas Canvas.Left="25">';
    scroller += '<Rectangle Width="50" Height="16" Fill="Gray" Cursor="Hand" RadiusX="4" RadiusY="4" />';
    scroller += '</Canvas>';
    scroller += '</Canvas>';
    return scroller;
}

contentmaster.scrollBarHor.prototype.configureScrollBar = function(contentWidth, shapeWidth, initial)
{
    var scrTop = this.scrollBar.children.getItem(0);
    var scrBot = this.scrollBar.children.getItem(2);
    var scrBar = this.scrollBar.children.getItem(1);
    var scrDrag = this.scrollBar.children.getItem(3);

    var scrDragWidth = scrDrag.children.getItem(0).Width;
    var scrTopWidth = scrTop.children.getItem(0).Width;
    var scrDragLeft = scrDrag["Canvas.Left"];

    this.contentWidth = contentWidth;
    this.shapeWidth = shapeWidth-30;
    
    var winArea = this.scrollSizeRef;
    this.scrollBar["Canvas.Top"] = this.scrollSizeRef ? winArea.Height+24 : 600;
    
    scrTop["Canvas.Left"] = this.leftX ? this.leftX : 5;
    scrBar["Canvas.Left"] = scrTop["Canvas.Left"] + scrTop.children.getItem(0).Width;
    scrBar.children.getItem(0).Width = winArea.Width - 75;
    var scrBarWidth = scrBar.children.getItem(0).Width;
    scrBot["Canvas.Left"] = scrBar["Canvas.Left"] + scrBarWidth;
    this.ratio = scrBarWidth / (contentWidth-30);
    this.ratioUp = (contentWidth-30) / scrBarWidth;
    scrDrag["Canvas.Left"] = (4+scrTopWidth)+(-(this.areaToScroll["Canvas.Left"]*this.ratio))-90;
    var origHeight = scrDrag.children.getItem(0).Width;
    scrDrag.children.getItem(0).Width = (scrBarWidth * this.ratio);
}


contentmaster.scrollBarHor.prototype.removeScrollBar = function()
{
   try
   {
    var scrollR = this.control.content.findName("ScrollBar_"+this.windowNum+"_"+this.scrollNum);
    this.parentWindow.children.remove(scrollR);
   }
   catch(e)
   {
    this.parentWindow.children.removeAt(this.parentWindow.children.count-1);
   }
}



contentmaster.scrollBarHor.prototype.scrollLeft = function(sender)
{
    var scrTopWidth = this.scrollBar.children.getItem(0).children.getItem(0).Width;
    var scrDrag = this.scrollBar.children.getItem(3);
    
    if (this.areaToScroll["Canvas.Left"] < 0){
        this.areaToScroll["Canvas.Left"] += this.scrollAmount;
        scrDrag["Canvas.Left"] -= this.scrollAmount * this.ratio;

    }
    if (this.areaToScroll["Canvas.Left"] > 0){
        scrDrag["Canvas.Left"] = (scrTopWidth + 4)-90;
        this.areaToScroll["Canvas.Left"] = 0;
    }
}

contentmaster.scrollBarHor.prototype.scrollRight = function(sender)
{
    var scrTopWidth = this.scrollBar.children.getItem(0).children.getItem(0).Width;
    var scrDrag = this.scrollBar.children.getItem(3);
    var scrBot = this.scrollBar.children.getItem(2);
    var scrBarWidth = this.scrollBar.children.getItem(1).children.getItem(0).Width;
    var scrDragWidth = scrDrag.children.getItem(0).Width;
    var scrDragLeft = scrDrag["Canvas.Left"];
    
    if (((scrDragLeft + scrDragWidth)-scrTopWidth) < scrBarWidth-90){
        scrDrag["Canvas.Left"] += this.scrollAmount * this.ratio;
        this.areaToScroll["Canvas.Left"] -= this.scrollAmount;
         if (scrDrag["Canvas.Left"] > (scrBarWidth - scrDragWidth) + (scrTopWidth+4)-90){
            scrDrag["Canvas.Left"] = scrBot["Canvas.Left"] - scrDrag.children.getItem(0).Width;
        }
    }
}


contentmaster.scrollBarHor.prototype.dragScrolldown = function(sender, mouseEventArgs)
{
    this.beginX = mouseEventArgs.getPosition(null).x;
    this.beginY = mouseEventArgs.getPosition(null).y;
    this.isMouseDown = true;
    this.scrollToDrag = sender;
    sender.captureMouse();
}

contentmaster.scrollBarHor.prototype.dragScroll = function(sender, mouseEventArgs)
{
    if (this.isMouseDown == true){
        var scrTopWidth = this.scrollBar.children.getItem(0).children.getItem(0).Width;
        var scrDrag = this.scrollBar.children.getItem(3);
        var scrBarWidth = this.scrollBar.children.getItem(1).children.getItem(0).Width;
        var scrDragWidth = scrDrag.children.getItem(0).Width;
        var scrDragTop = scrDrag["Canvas.Left"];
        var scrBot = this.scrollBar.children.getItem(2);
        var scrDragTrueTop = scrDragTop - scrTopWidth;
        
        
        var currX = mouseEventArgs.getPosition(null).x;

        if (this.areaToScroll["Canvas.Left"] <= 0){
            this.scrollToDrag["Canvas.Left"] += currX - this.beginX;
            this.areaToScroll["Canvas.Left"] += -((currX - this.beginX)*this.ratioUp);
        }
        if (this.areaToScroll["Canvas.Left"] > 0){
            this.areaToScroll["Canvas.Left"] = 0;
            this.scrollToDrag["Canvas.Left"] = scrTopWidth + this.scrollBar.children.getItem(0)["Canvas.Left"];
        }
        if (this.scrollToDrag["Canvas.Left"] > (scrBarWidth - scrDragWidth) + (scrTopWidth+4)-90){
            this.scrollToDrag["Canvas.Left"] = scrBot["Canvas.Left"] - this.scrollToDrag.children.getItem(0).Width;
            this.areaToScroll["Canvas.Left"] = -(((this.scrollToDrag["Canvas.Left"] - scrTopWidth)*this.ratioUp)+90);
        }
        this.beginX = currX;
    }
}

contentmaster.scrollBarHor.prototype.dragScrollup = function(sender)
{
    this.isMouseDown = false;
    sender.releaseMouseCapture();
}



///////////////////////////////////////////////
//                  TABTABLE
//////////////////////////////////////////////

contentmaster.tabTable = function(content, holder, targetWindow, windowInstance, header1, header2, header3)
{
    this.content = content;
    this.holder = holder;
    this.target = targetWindow;
    this.control = document.getElementById("silverlightControl1");
    this.clickElement;
    this.selectedIndex = null;

    this.windowInstance = windowInstance;

    this.clickType = "click"; // "click" or "tab"
    this.scrollControl = null;
    
    this.activeColumn = 1;
    this.header1 = header1;
    this.header2 = header2;
    this.header3 = header3;
        
    this.createTable();
    

}

contentmaster.tabTable.prototype.createTable = function()
{
    DownloadItem(this.control, "template-clicktable.xaml", Silverlight.createDelegate(this, this.clickTemplateLoaded ));

}

contentmaster.tabTable.prototype.clickTemplateLoaded = function(sender, eventArgs)
{
  var xamlFragment = null;
	try
	{
		if (IS_USING_DOWNLOADER)
		{
			xamlFragment = this.control.content.createFromXamlDownloader(sender, ""); 
		}
		else
		{
			xamlFragment = this.control.content.createFromXaml(sender); 
		}
	}
	catch (ex)
	{
		return;
	}
  this.holder.add(xamlFragment);
  this.clickElement = this.holder.getItem(this.holder.count-1);
  
  var columnCount = 2;
  if (this.header3) columnCount = 3;
  var clickShape = this.clickElement.children.getItem(0).children.getItem(0);
  var leftPos = this.clickElement.children.getItem(0)["Canvas.Left"];
  
  for (var bC=0; bC<columnCount; bC++){
      var topButton = createBox();
      var topButtonXaml = this.control.content.createFromXaml(topButton);
      this.clickElement.children.add(topButtonXaml);
      var topBtn = this.clickElement.children.getItem(this.clickElement.children.count-1);
      topBtn["Canvas.Top"] = 0;
      topBtn["Canvas.Left"] = leftPos;
      topBtn.children.getItem(0).Width = (clickShape.Width-(5*(columnCount-1))) / columnCount;
      topBtn.children.getItem(1).Width = topBtn.children.getItem(0).Width - 10;
      topBtn.Width = topBtn.children.getItem(0).Width;
      leftPos += topBtn.Width + 5;
      topBtn.children.getItem(0).Height -= 34;
      topBtn.children.getItem(1).Height -= 34;
      topBtn.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.enterBox));
      topBtn.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.leaveBox));
  }
  
  this.topBtn1 = this.clickElement.children.getItem(4);
  this.topBtn2 = this.clickElement.children.getItem(5);
  this.topBtn1.children.getItem(2).Text = this.header1;
  this.topBtn2.children.getItem(2).Text = this.header2;
  
  this.topBtn1.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.tab1_click));
  this.topBtn2.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.tab2_click));
  
  if (this.header3){
    this.topBtn3 = this.clickElement.children.getItem(6);
    this.topBtn3.children.getItem(2).Text = this.header3;
    this.topBtn3.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.tab3_click));
  }
  
  this.topBtn1.children.getItem(0).Fill = this.getHitGrad("green");
  if (this.content[0].childNodes[2].attributes.getNamedItem("state").nodeValue != "active"){
    this.topBtn2.Opacity = "0.2";
    this.tempState1 = true;
  }
  if (this.content[0].childNodes[3]){
      if (this.content[0].childNodes[3].attributes.getNamedItem("state").nodeValue != "active"){
        this.topBtn3.Opacity = "0.2";
        this.tempState2 = true;
      }
  }
  
  this.clickElement.children.getItem(0)["Canvas.Top"] += 32;
  this.clickElement.children.getItem(1)["Canvas.Top"] += 32;
  this.clickElement.children.getItem(2)["Canvas.Top"] += 32;
  this.clickElement.children.getItem(3)["Canvas.Top"] += 32;
  
    var boxHolder = this.clickElement.children.getItem(2); //BOX HOLDER
    var hitHolder = this.clickElement.children.getItem(3);
    this.boxHolder = boxHolder;
    this.hitHolder = hitHolder;
    this.hitIndex = 0; // index of selected item (0 defualt);
    var marginTop = 0;
    var margin = 8;
    var boxSize;
    
    for (var itemCount = 0; itemCount < this.content.length; itemCount ++){
        // add boxes for each item
        var boxXaml = createBox();
        var newBox = this.control.content.createFromXaml(boxXaml);
        boxHolder.children.add(newBox); // ADD BOX HOLDER CANVAS TO FILE
        var newBox = boxHolder.children.getItem(itemCount);
        boxSize = newBox.children.getItem(0).Height;
  
        if (itemCount == 0){
            newBox["Canvas.Top"] = marginTop;
            this.boxHolder.children.getItem(0).children.getItem(0).Fill = this.getHitGrad("green");
            this.boxHolder.children.getItem(0).children.getItem(0).Stroke = "#FF0E4819";
            }
        else{
            newBox["Canvas.Top"] = boxSize + (boxHolder.children.getItem(itemCount-1)["Canvas.Top"] + margin);
        }
        newBox.children.getItem(2).Text = this.content[itemCount].childNodes[0].childNodes[0].nodeValue;
        
        newBox.addEventListener("MouseEnter", Silverlight.createDelegate(this, this.enterBox));
        newBox.addEventListener("MouseLeave", Silverlight.createDelegate(this, this.leaveBox));
        newBox.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.clickBox));

    }
    // size main template accordingly
    var clickShape = this.clickElement.children.getItem(0).children.getItem(0);
    var innerShape = this.clickElement.children.getItem(0).children.getItem(1);
    clickShape.Height = 21 + ((boxSize + margin) * this.content.length);
    innerShape.Height = clickShape.Height - 16;
    this.clickElement.Height = clickShape.Height;
    
    var txtWidth = 350;

    var mainTextHolder = this.clickElement.children.getItem(0).children.getItem(2).children.getItem(0);
    this.arrangeContent(this.content[0].childNodes[1], mainTextHolder.children, txtWidth); //default content

    function createBox()
    {
        var boxXaml = '';
        boxXaml += '<Canvas Width="172" Height="69" Canvas.Left="0" Canvas.Top="0"><Rectangle RadiusX="4" RadiusY="4" Width="173" Height="70" Stroke="#FFE1E1E1"><Rectangle.Fill><LinearGradientBrush EndPoint="0.5,0.014" StartPoint="0.5,0.986"><GradientStop Color="#FFD9D9D9" Offset="0.856"/><GradientStop Color="#FFFFFFFF" Offset="1"/><GradientStop Color="#FFE8E8E8" Offset="0.471"/><GradientStop Color="#FFCFCFCF" Offset="0"/></LinearGradientBrush></Rectangle.Fill></Rectangle><Rectangle RadiusX="4" RadiusY="4" Width="162.5" Height="58.5" Canvas.Left="5" Canvas.Top="6"><Rectangle.Fill><LinearGradientBrush EndPoint="0.5,-0.034" StartPoint="0.5,1.026"><GradientStop Color="#FFE5E5E5" Offset="0"/><GradientStop Color="#FFFFFFFF" Offset="1"/></LinearGradientBrush></Rectangle.Fill></Rectangle><TextBlock Width="152" Height="48" Canvas.Left="9" Canvas.Top="11" FontFamily="Arial" FontSize="12" TextWrapping="Wrap" Text="Item text" /></Canvas>';
        
        return boxXaml;
    }
    
    function createHitBox()
    {
        var hitBoxXaml = '';
        hitBoxXaml += '<Canvas Width="172" Height="69" Canvas.Left="0" Canvas.Top="0"><Rectangle RadiusX="4" RadiusY="4" Width="173" Height="70" Stroke="#FF0E4819"><Rectangle.Fill><LinearGradientBrush EndPoint="0.5,0.014" StartPoint="0.5,0.986"><GradientStop Color="#FF57A447" Offset="0.856"/><GradientStop Color="#FF97C98E" Offset="1"/><GradientStop Color="#FF5F9A53" Offset="0.471"/><GradientStop Color="#FF1B5B0D" Offset="0"/></LinearGradientBrush></Rectangle.Fill></Rectangle><Rectangle RadiusX="4" RadiusY="4" Width="162.5" Height="58.5" Canvas.Left="5" Canvas.Top="6"><Rectangle.Fill><LinearGradientBrush EndPoint="0.5,-0.034" StartPoint="0.5,1.026"><GradientStop Color="#FFE5E5E5" Offset="0"/><GradientStop Color="#FFFFFFFF" Offset="1"/></LinearGradientBrush></Rectangle.Fill></Rectangle><TextBlock Width="152" Height="48" FontFamily="Arial" FontSize="12" TextWrapping="Wrap" Canvas.Left="10" Canvas.Top="10" Text="Item Text" /></Canvas>';
        
        return hitBoxXaml;
    
    }

}

contentmaster.tabTable.prototype.tab1_click = function(sender)
{
    if ((this.activeColumn == 2)||(this.activeColumn == 3)){
        var mainTextHolder = this.clickElement.children.getItem(0).children.getItem(2).children.getItem(0);
        mainTextHolder.children.clear();
        this.arrangeContent(this.content[this.hitIndex].childNodes[1], mainTextHolder.children, 350);
        sender.children.getItem(0).Fill = this.getHitGrad("green");
        if (this.activeColumn == 2) this.topBtn2.children.getItem(0).Fill = this.getHitGrad("gray");
        if (this.activeColumn == 3) this.topBtn3.children.getItem(0).Fill = this.getHitGrad("gray");
        this.activeColumn = 1;
    }
}

contentmaster.tabTable.prototype.tab2_click = function(sender)
{
    if (sender.Opacity == 1){
        if ((this.activeColumn == 1)||(this.activeColumn == 3)){
            var mainTextHolder = this.clickElement.children.getItem(0).children.getItem(2).children.getItem(0);
            mainTextHolder.children.clear();
            this.arrangeContent(this.content[this.hitIndex].childNodes[2], mainTextHolder.children, 350);
            sender.children.getItem(0).Fill = this.getHitGrad("green");
            if (this.activeColumn == 1) this.topBtn1.children.getItem(0).Fill = this.getHitGrad("gray");
            if (this.activeColumn == 3) this.topBtn3.children.getItem(0).Fill = this.getHitGrad("gray");
            this.activeColumn = 2;
        }
    }
}

contentmaster.tabTable.prototype.tab3_click = function(sender)
{
    if (sender.Opacity == 1){
        if ((this.activeColumn == 1)||(this.activeColumn == 2)){
            var mainTextHolder = this.clickElement.children.getItem(0).children.getItem(2).children.getItem(0);
            mainTextHolder.children.clear();
            this.arrangeContent(this.content[this.hitIndex].childNodes[3], mainTextHolder.children, 350);
            sender.children.getItem(0).Fill = this.getHitGrad("green");
            if (this.activeColumn == 1) this.topBtn1.children.getItem(0).Fill = this.getHitGrad("gray");
            if (this.activeColumn == 2) this.topBtn2.children.getItem(0).Fill = this.getHitGrad("gray");
            this.activeColumn = 3;
        }
    }
}

contentmaster.tabTable.prototype.arrangeContent = function(content, target, txtWidth)
{
          var lineSpace = 10; 
          var heightCount = 0;
          
          for (j=0; j<content.childNodes.length; j++){
          // add content
          var complexType = content.childNodes[j].nodeName;
          
          if (complexType == "list"){
            var holder = defineElement(complexType, target);
            if (j >= 1) holder["Canvas.Top"] = (target.getItem(j-1)["Canvas.Top"] + target.getItem(j-1).actualHeight)+lineSpace;
            
                for (k=0; k<content.childNodes[j].childNodes.length; k++){

                    var bulletNode = content.childNodes[j].childNodes[k].nodeName;
                    var bulletItem = defineElement(bulletNode, holder.children);
                    bulletItem.children.getItem(1).Text = content.childNodes[j].childNodes[k].childNodes[0].nodeValue;
                    bulletItem.children.getItem(1).Width = txtWidth - bulletItem["Canvas.Left"]; //added canvas left
                    if (bulletNode == "number") bulletItem.children.getItem(0).Text = (k+1)+".";
                    if (k >= 1) bulletItem["Canvas.Top"] = (holder.children.getItem(k-1)["Canvas.Top"] + holder.children.getItem(k-1).children.getItem(1).actualHeight)+lineSpace;

                    if (k == content.childNodes[j].childNodes.length) heightCount += (bulletItem["Canvas.Top"] + bulletItem.children.getItem(1).actualHeight);
                    heightCount += bulletItem.children.getItem(1).actualHeight + lineSpace;
                }
            }
          else if ((complexType == "para")||(complexType == "paraCode")||(complexType == "paraBold")||(complexType == "paraItalic")){
            var paraEl = defineElement(complexType, target);
            paraEl.Text = content.childNodes[j].childNodes[0].nodeValue;
            paraEl.Width = txtWidth;
            if (j >= 1){
                var prevItem = target.getItem(j-1);
                if (prevItem == "TextBlock") paraEl["Canvas.Top"] = (prevItem["Canvas.Top"] + prevItem.actualHeight)+lineSpace;
                else if (prevItem == "Image") paraEl["Canvas.Top"] = (prevItem["Canvas.Top"] + prevItem.Height)+lineSpace;
                else paraEl["Canvas.Top"] = prevItem["Canvas.Top"] + ((prevItem.children.getItem(prevItem.children.count-1)["Canvas.Top"] + prevItem.children.getItem(prevItem.children.count-1).children.getItem(1).actualHeight) + lineSpace);
                }
                heightCount += paraEl.actualheight + lineSpace;
            }
           else if (complexType == "imagegeneric" || complexType == "image2" || complexType == "image3" || complexType == "image4" || complexType == "imagelarge"){
           if (complexType == "image4") this.clickElement.children.getItem(0).children.getItem(2).Clip.Rect = "0,-8,400,600";
            var paraEl = defineElement(complexType, target);
            paraEl.Stretch = "None";
            if (complexType == "imagegeneric"){
                paraEl.Width = 300;
                paraEl.Height = 400;
                paraEl.Stretch = "Uniform";
            }
            
            paraEl.Source = content.childNodes[j].childNodes[0].nodeValue;
            if (j >= 1){
                var prevItem = target.getItem(j-1);
                if (prevItem == "TextBlock") paraEl["Canvas.Top"] = (prevItem["Canvas.Top"] + prevItem.actualHeight)+lineSpace;
                else if (prevItem == "Image") paraEl["Canvas.Top"] = (prevItem["Canvas.Top"] + prevItem.Height)+lineSpace;
                else paraEl["Canvas.Top"] = prevItem["Canvas.Top"] + ((prevItem.children.getItem(prevItem.children.count-1)["Canvas.Top"] + prevItem.children.getItem(prevItem.children.count-1).children.getItem(1).actualHeight) + lineSpace);
                }
                heightCount += paraEl.Height + lineSpace;
                
            }
            
        }
        
    // size main template accordingly
    var clickShape = this.clickElement.children.getItem(0).children.getItem(0);
    var innerShape = this.clickElement.children.getItem(0).children.getItem(1);
    if (21 + heightCount > clickShape.Height){
        clickShape.Height = 21 + heightCount;
        innerShape.Height = clickShape.Height - 16;
        var clipString = "0,-8,400,"+(innerShape.Height);
        this.clickElement.children.getItem(0).children.getItem(2).Clip.Rect = clipString;
        }
    this.clickElement.Height = clickShape.Height;
        
    this.windowInstance.resizeControl.arrangePage(this.windowInstance.layoutType, this.windowInstance.xamlObject.children.getItem(8).children.getItem(0).children.getitem(0)); // updates window content once click table loaded

    return heightCount;
}



contentmaster.tabTable.prototype.enterBox = function(sender)
{
    if (sender.Opacity == 1){
        sender.children.getItem(0).Stroke = "#FF0E4819";
        }
}

contentmaster.tabTable.prototype.clickBox = function(sender)
{
    var hitStroke = sender.children.getItem(0).Stroke.Color;
    var textHolder = this.clickElement.children.getItem(0).children.getItem(2).children.getItem(0);
    
    for (var boxCount=0; boxCount<this.boxHolder.children.count; boxCount++){
        if (hitStroke == this.boxHolder.children.getItem(boxCount).children.getItem(0).Stroke.Color){
            if (textHolder.children.count > 0) textHolder.children.clear();
            var txtWidth = 360;
            if (this.clickType == "tab"){
                if(!this.content[boxCount].childNodes[2].childNodes[0]){
                    this.rect.Visibility = "Collapsed";
                    this.imageBox.Source = "";
                    txtWidth = 470;
                    }
                else if(this.content[boxCount].childNodes[2].childNodes[0].nodeValue){
                    if (this.rect.Visibility = "Collapsed") this.rect.Visibility = "Visible";
                    this.imageBox.Source = this.content[boxCount].childNodes[2].childNodes[0].nodeValue;
                    txtWidth = 340;
                    }
            }
            textHolder["Canvas.Top"] = 0;

            if (this.activeColumn == 2){
                if (this.content[boxCount].childNodes[2].attributes.getNamedItem("state").nodeValue == "active"){
                    this.arrangeContent(this.content[boxCount].childNodes[2], textHolder.children, txtWidth);
                    if (this.tempState1){
                        this.topBtn2.Opacity = "1";
                        this.topBtn2.children.getItem(0).Fill = this.getHitGrad("green");
                        this.topBtn1.children.getItem(0).Fill = this.getHitGrad("gray");
                        this.tempState1 = false;
                    }
                }
                if (this.content[boxCount].childNodes[2].attributes.getNamedItem("state").nodeValue != "active"){
                    this.arrangeContent(this.content[boxCount].childNodes[1], textHolder.children, txtWidth);
                    this.topBtn1.children.getItem(0).Fill = this.getHitGrad("green");
                    this.topBtn2.children.getItem(0).Fill = this.getHitGrad("gray");
                    this.topBtn2.Opacity = "0.2";
                    this.tempState1 = true;
                    }
                if (this.content[boxCount].childNodes[3]){
                        if (this.content[boxCount].childNodes[3].attributes.getNamedItem("state").nodeValue != "active"){
                            this.topBtn3.Opacity = "0.2";
                            this.tempState2 = true;
                        }
                        else{
                            this.topBtn3.Opacity = "1";
                            this.tempState2 = false;
                        }
                }
            }
            if (this.activeColumn == 3){
                if (this.content[boxCount].childNodes[3].attributes.getNamedItem("state").nodeValue == "active"){
                    this.arrangeContent(this.content[boxCount].childNodes[3], textHolder.children, txtWidth);
                    if (this.tempState2){
                        this.topBtn3.Opacity = "1";
                        this.topBtn3.children.getItem(0).Fill = this.getHitGrad("green");
                        this.topBtn1.children.getItem(0).Fill = this.getHitGrad("gray");
                        this.tempState2 = false;
                    }
                }
                else{
                    this.arrangeContent(this.content[boxCount].childNodes[1], textHolder.children, txtWidth);
                    this.topBtn1.children.getItem(0).Fill = this.getHitGrad("green");
                    this.topBtn3.children.getItem(0).Fill = this.getHitGrad("gray");
                    this.topBtn3.Opacity = "0.2";
                    this.tempState2 = true;
                    }
            }
            if (this.activeColumn == 1){
                this.arrangeContent(this.content[boxCount].childNodes[1], textHolder.children, txtWidth);
                if (this.tempState1){
                    this.topBtn2.Opacity = "1";
                }
                if (this.content[boxCount].childNodes[2].attributes.getNamedItem("state").nodeValue != "active"){
                    this.topBtn2.Opacity = "0.2";
                    this.tempState1 = true;
                }
                if (this.content[boxCount].childNodes[3]){
                    if (this.content[boxCount].childNodes[3].attributes.getNamedItem("state").nodeValue != "active"){
                        this.topBtn3.Opacity = "0.2";
                        this.tempState2 = true;
                    }
                    else{
                        this.topBtn3.Opacity = "1";
                        this.tempState2 = false;
                    }
                }
            }
            
            this.boxHolder.children.getItem(this.hitIndex).children.getItem(0).Fill = this.getHitGrad("gray");
            this.boxHolder.children.getItem(this.hitIndex).children.getItem(0).Stroke = "#FFE1E1E1";
            this.boxHolder.children.getItem(boxCount).children.getItem(0).Fill = this.getHitGrad("green");
            this.boxHolder.children.getItem(boxCount).children.getItem(0).Stroke = "#FF0E4819";
            this.activeBoxText = sender.children.getItem(2).Text;
            this.hitIndex = boxCount;
        }
    }
}

contentmaster.tabTable.prototype.getHitGrad = function(setColor)
{
    var xamlFragment = '';
    
    if (setColor == "green"){
    xamlFragment += '<LinearGradientBrush EndPoint="0.5,0.014" StartPoint="0.5,0.986">';
    xamlFragment += '<GradientStop Color="#FF57A447" Offset="0.856"/>';
    xamlFragment += '<GradientStop Color="#FF97C98E" Offset="1"/>';
    xamlFragment += '<GradientStop Color="#FF5F9A53" Offset="0.471"/>';
    xamlFragment += '<GradientStop Color="#FF1B5B0D" Offset="0"/>';
    xamlFragment += '</LinearGradientBrush>';              
    }
    if (setColor == "gray"){
    xamlFragment += '<LinearGradientBrush EndPoint="0.5,0.014" StartPoint="0.5,0.986">';
    xamlFragment += '<GradientStop Color="#FFD9D9D9" Offset="0.856"/>';
    xamlFragment += '<GradientStop Color="#FFFFFFFF" Offset="1"/>';
    xamlFragment += '<GradientStop Color="#FFE8E8E8" Offset="0.471"/>';
    xamlFragment += '<GradientStop Color="#FFCFCFCF" Offset="0"/>';
    xamlFragment += '</LinearGradientBrush>';                 
    }
    return this.control.content.createFromXaml(xamlFragment);
}

contentmaster.tabTable.prototype.leaveBox = function(sender)
{
    if (sender.Opacity == 1){
        if (sender.children.getItem(2).Text != this.activeBoxText) sender.children.getItem(0).Stroke = "#FFE1E1E1";
    }
}


///////////////////////////////////////////////////////////
//
// EXPLORE PAGE
//
///////////////////////////////////////////////////////////

contentmaster.explorer = function(xamlSource, contentArray, holder)
{
    this.xamlSource = xamlSource;
    this.contentArray = contentArray;
    this.holder = holder;
    this.control = document.getElementById("silverlightControl1");
    
    this.createExplorer();
}

contentmaster.explorer.prototype.createExplorer = function()
{
	DownloadItem(this.control, this.xamlSource, Silverlight.createDelegate(this, this.explorerLoaded ));

}


contentmaster.explorer.prototype.explorerLoaded = function(sender, eventArgs)
{
  var xamlFragment = null;
	try
	{
		if (IS_USING_DOWNLOADER)
		{
			xamlFragment = this.control.content.createFromXamlDownloader(sender, ""); 
		}
		else
		{
			xamlFragment = this.control.content.createFromXaml(sender); 
		}
	}
	catch (ex)
	{
		return;
	}
  this.holder.add(xamlFragment);
  this.explorer = this.holder.getItem(this.holder.count-1);
  
  for (var i=0; i<this.explorer.children.count; i++){
    if (i>0) this.explorer.children.getItem(i).Visibility = "Collapsed";
  }
  this.slideNum = 0;
  this.introText = this.contentArray.childNodes[1].childNodes[0].nodeValue;
  
  this.configureExpSlide(0);
  
  this.control.content.findName("TimerForExplorer").addEventListener("Completed", Silverlight.createDelegate(this, this.timer_ended));
  
  // EXPLORER LAYERS
  //0: BG Image
  //1: Over states
  //2: Highlights
  //3: Catchall
  //4: Hotspot click
  //5: Hotspot rollover
  //6: Step box
  //7: Feedback box
}

contentmaster.explorer.prototype.configureExpSlide = function(slideNum)
{
    var catchall = this.explorer.children.getItem(slideNum).children.getItem(3);
    this.highlights = this.explorer.children.getItem(slideNum).children.getItem(2);
    this.hotspots = this.explorer.children.getItem(slideNum).children.getItem(4);
    
    this.steps = this.contentArray.childNodes[2].childNodes[this.slideNum].childNodes[1];
    this.stepBox = this.explorer.children.getItem(this.slideNum).children.getItem(6).children.getItem(1);
    this.stepBox.Text = this.introText;
    
    catchall.Opacity = "0.0";
    this.highlights.Visibility = "Collapsed";
    
    this.rollovers = this.explorer.children.getItem(slideNum).children.getItem(5);
    
    for (var i=0; i<this.rollovers.children.count; i++){
        this.rollovers.children.getItem(i).Opacity = "0.1";
        this.rollovers.children.getItem(i).addEventListener("MouseEnter", Silverlight.createDelegate(this, this.rollover_enter));
        this.rollovers.children.getItem(i).addEventListener("MouseLeave", Silverlight.createDelegate(this, this.rollover_leave));
        this.rollovers.children.getItem(i).Cursor = "Hand";
    }
    
    for (var j=0; j<this.hotspots.children.count; j++){
        this.hotspots.children.getItem(j).Opacity = "0.1";
        this.hotspots.children.getItem(j).addEventListener("MouseEnter", Silverlight.createDelegate(this, this.hotspot_enter));
        this.hotspots.children.getItem(j).addEventListener("MouseLeave", Silverlight.createDelegate(this, this.hotspot_leave));
        this.hotspots.children.getItem(j).addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.hotspot_click));
        this.hotspots.children.getItem(j).Cursor = "Hand";
    }
    
    catchall.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.catchall_click));

}

contentmaster.explorer.prototype.rollover_enter = function(sender)
{
    sender.Opacity = "0.2";
    for (var i=0; i<this.rollovers.children.count; i++){
        if (this.rollovers.children.getItem(i).Opacity == sender.Opacity){
            this.stepBox.Text = this.steps.childNodes[i].childNodes[0].nodeValue;
            break;
        }
    }
}

contentmaster.explorer.prototype.rollover_leave = function(sender)
{
    sender.Opacity = "0.1";
    this.stepBox.Text = this.introText;
}

contentmaster.explorer.prototype.hotspot_enter = function(sender)
{
    sender.Opacity = "0.2";
    this.stepBox.Text = "Click to expand/hide code";
    this.stepBox.FontWeight = "Bold";
}

contentmaster.explorer.prototype.hotspot_leave = function(sender)
{
    sender.Opacity = "0.1";
    this.stepBox.Text = this.introText;
    this.stepBox.FontWeight = "Normal";
}

contentmaster.explorer.prototype.catchall_click = function(sender) // click in wrong place
{
    this.highlights.Visibility = "Visible";
    sender.findName("TimerForExplorer").Begin();
}


contentmaster.explorer.prototype.hotspot_click = function(sender)
{
    var clicks = this.contentArray.childNodes[2].childNodes[this.slideNum].childNodes[0];

    for (var i=0; i<this.hotspots.children.count; i++){
        if (this.hotspots.children.getItem(i).Opacity == sender.Opacity){
            var newRoute = clicks.childNodes[i].childNodes[0].nodeValue;
            var newRouteInt = parseInt(newRoute);
            this.explorer.children.getItem(newRouteInt).Visibility = "Visible";
            this.explorer.children.getItem(this.slideNum).Visibility = "Collapsed";
            this.slideNum = newRouteInt;
            this.configureExpSlide(newRouteInt);
            break;
        }
    }
}

contentmaster.explorer.prototype.timer_ended = function()
{
    this.control.content.findName("TimerForExplorer").Stop();
    this.highlights.Visibility = "Collapsed";
}