if (!window.BmnPortfolio)
	window.BmnPortfolio = {};

BmnPortfolio.Page = function() 
{
}

BmnPortfolio.Page.prototype =
{
	handleLoad: function(control, userContext, rootElement) 
	{
		this.control = control;
		
		// Sample event hookup:	
		rootElement.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.handleMouseDown));
		preLoad(control, rootElement);
		
		//rootElement.findName("thumbnailsBegin").begin();
	},
	
	// Sample event handler
	handleMouseDown: function(sender, eventArgs) 
	{
		// The following line of code shows how to find an element by name and call a method on it.
		// this.control.content.findName("Timeline1").Begin();
	}
}

var SCREENSHOT_IMAGE_URL = "Images/Portfolio/Static/Screenshot.png";
var SCREENSHOT_HOVER_IMAGE_URL = "Images/Portfolio/Static/ScreenshotOver.png";
var selectedCaseStudyNumber = "";
var portfolioDataXml = "";
var isIE = false;
var screenshotUrlArray = new Array();
var selectedScreenshot = "";
var websiteUrl = "";

function preLoad(control, rootElement) { 
	// Create a downloader object.
	var downloader = control.createObject("downloader");
		
	// Add DownloadProgressChanged and Completed events.
    downloader.addEventListener("downloadProgressChanged", onDownloadProgressChanged);
    downloader.addEventListener("completed", onCompleted);

    // Initialize the Downloader request. NOTE: downloader APIs disallow file:\\ scheme so must run on server
    downloader.open("GET", "PortfolioData.xml");

    // Execute the Downloader request.
    downloader.send();
    	        
}

// Event handler for updating visual progress indicator
function onDownloadProgressChanged(sender, eventArgs)
{
    // Calculate the downloaded percentage.
    var percentage = Math.floor(sender.downloadProgress * 100);

    // Update the Rectangle and TextBlock objects of the visual progress indicator.
    //sender.findName("progressText").text = percentage + "%";
    //sender.findName("progressRectangle").width = percentage * 2;
}

// Event handler for the Completed event.
function onCompleted(sender, eventArgs)
{
    // Retrieve downloaded XAML content.
    portfolioDataXml = sender.ResponseText;
    
    var doc = processXML();
                 
    var caseStudies = doc.getElementsByTagName("casestudy");
    
    for  (var i=0; i < caseStudies.length; i++) {
        var dispName = caseStudies[i].getElementsByTagName("name")[0].firstChild.data;
        var textBlockName = "textBlock" + (i+1).toString();
        sender.findName(textBlockName).Text = dispName;    
    }
    
    // Data loaded, now run initial storyboard                  
    sender.findName("portfolioBegin").begin();
}

function btnBack_MouseLeftButtonUp(sender, args) {
    var highlightTextblock = "";
    var highlightArrow = "";
    
    if(selectedCaseStudyNumber != "") {
        highlightTextblock = "textBlock" + selectedCaseStudyNumber;
        highlightArrow = "arrow" + selectedCaseStudyNumber;
        menuItemLeave(sender, highlightTextblock, highlightArrow);
    }
    selectedCaseStudyNumber = "";

	sender.findName("caseStudyMainBegin").stop();
	sender.findName("thumbnails").visibility = "Visible";
	sender.findName("WhiteFader").visibility = "Visible";
	sender.findName("thumbnailsBegin").begin();	
}

function btnBack_MouseEnter(sender, args) {
    sender.cursor = "Hand";		
}

function btnBack_MouseLeave(sender, args) {
    sender.cursor = "Default";		
}

function btnMenu_MouseEnter(sender, args) {
	menuItemEnter(sender, "textBlock", "arrow");			
}


function btnMenu_MouseLeave(sender, args) {
	menuItemLeave(sender, "textBlock", "arrow");	
}

function btnMenu_MouseLeftButtonUp(sender, args) {

    var highlightTextblock = "";
    var highlightArrow = "";
    if(selectedCaseStudyNumber != "") {
        highlightTextblock = "textBlock" + selectedCaseStudyNumber;
        highlightArrow = "arrow" + selectedCaseStudyNumber;
        menuItemLeave(sender, highlightTextblock, highlightArrow);
    }
    selectedCaseStudyNumber = "";        

	sender.findName("caseStudyMainBegin").stop();
	sender.findName("thumbnails").visibility = "Visible";
	sender.findName("WhiteFader").visibility = "Visible";
	sender.findName("thumbnailsBegin").begin();	
}

function selectorMouseEnter(sender, args) {
    
    var highlightTextblock = "";
    var highlightArrow = "";
    var storyboardEnter = "";
    var storyboardLeave = "";    
    var caseStudyNumber = "";
             
    caseStudyNumber = getCaseStudyNumber(sender.name);
    
    // change menu element attributes and run storyboards   
    if (caseStudyNumber != "") {
    
        highlightTextblock = "textBlock" + caseStudyNumber;
        highlightArrow = "arrow" + caseStudyNumber;
        storyboardEnter = "thumbnail" + caseStudyNumber + "_Enter";
        storyboardLeave = "thumbnail" + caseStudyNumber + "_Leave";
    	
	    menuItemEnter(sender, highlightTextblock, highlightArrow);
	    sender.findName(storyboardEnter).begin();	
	    sender.findName(storyboardLeave).stop();
    }
}

function selectorMouseLeave(sender, args) {
    
    var highlightTextblock = "";
    var highlightArrow = "";
    var storyboardEnter = "";
    var storyboardLeave = "";
    var caseStudyNumber = "";
           
    caseStudyNumber = getCaseStudyNumber(sender.name);
        
    // change menu element attributes and run storyboards
    if (caseStudyNumber != "") {            
        
        highlightTextblock = "textBlock" + caseStudyNumber;
        highlightArrow = "arrow" + caseStudyNumber;
        storyboardEnter = "thumbnail" + caseStudyNumber + "_Enter";
        storyboardLeave = "thumbnail" + caseStudyNumber + "_Leave";
     
        menuItemLeave(sender, highlightTextblock, highlightArrow);
	    sender.findName(storyboardLeave).begin();
	    sender.findName(storyboardEnter).stop();
    }
}

function processXML() {

    if (window.ActiveXObject)
    {
        var doc=new ActiveXObject("Microsoft.XMLDOM");
        doc.async="false";
        doc.loadXML(portfolioDataXml);
        isIE = true;        
    }
    // code for Mozilla, Firefox, Opera, etc.
    else
    {        
        var parser = new DOMParser();
        var doc = parser.parseFromString(portfolioDataXml,"application/xml");               
    }
    
    return doc; 

}

function selectorMouseLeftButtonUp(sender, args) {
  
    var caseStudyNumber = "";                          
    
    if(selectedCaseStudyNumber != "") {
        highlightTextblock = "textBlock" + selectedCaseStudyNumber;
        highlightArrow = "arrow" + selectedCaseStudyNumber;
        menuItemLeave(sender, highlightTextblock, highlightArrow);
    }
        
    caseStudyNumber = getCaseStudyNumber(sender.name);    
    selectedCaseStudyNumber = caseStudyNumber;
    
    // Get Portfolio data from memory
    
    var doc = processXML();  
            
    var caseStudies = doc.getElementsByTagName("casestudy");
    var selectedCaseStudy = caseStudies[caseStudyNumber -1];   
    
    // Populate fields    
    sender.findName("txtProjectTitle").Text = selectedCaseStudy.getElementsByTagName("name")[0].firstChild.data;
    sender.findName("txtProject").Text = selectedCaseStudy.getElementsByTagName("project")[0].firstChild.data;
    sender.findName("txtClient").Text = selectedCaseStudy.getElementsByTagName("client")[0].firstChild.data;
    sender.findName("txtSector").Text = selectedCaseStudy.getElementsByTagName("sector")[0].firstChild.data;
    sender.findName("txtUserBase").Text = selectedCaseStudy.getElementsByTagName("userBase")[0].firstChild.data;
    sender.findName("txtDeliveryPeriod").Text = selectedCaseStudy.getElementsByTagName("deliveryPeriod")[0].firstChild.data;
    
    // Dynamically construct XAML for project description and place in container
    var desc = selectedCaseStudy.getElementsByTagName("description");    
    var descParaColl = desc[0].getElementsByTagName("paragraph");
    
    var xamlFragment = '<TextBlock Width="495" Height="130" TextWrapping="Wrap" FontFamily="Verdana" FontSize="11" Foreground="#FF666666">';
       
    for (var i=0; i<descParaColl.length; i++) {
        xamlFragment = xamlFragment + '<Run Text="' + descParaColl[i].firstChild.data + '"/><LineBreak/><LineBreak/>';                
    }
    xamlFragment = xamlFragment + "</TextBlock>"; 
       
    // Retrieve a reference to the plugin
    slPlugin = sender.getHost(); 
		
    descriptionXaml = slPlugin.content.createFromXaml(xamlFragment);
    sender.findName("descriptionContainer").children.clear();  // Clear any previous contents
    sender.findName("descriptionContainer").children.insert(0, descriptionXaml);    // Insert new XAML        
        
    // Determine which screenshot icons to show and set the first highlight
    var imagesElement = selectedCaseStudy.getElementsByTagName("images");    
    var imgColl = imagesElement[0].getElementsByTagName("image");    
    
    for(i=1; i<6; i++) {
        // Hide images not used
        if(i>imgColl.length) {
            sender.findName("screenshotCanvas" + i.toString()).visibility = "Collapsed";
        }
        else {    
            sender.findName("screenshotCanvas" + i.toString()).visibility = "Visible";        
            screenshotUrlArray[i] = imgColl[i-1].firstChild.data;
        }
                
    }
    var initialScreenshot = screenshotUrlArray[imgColl.length]; 
    sender.findName("imagePlaceholder").source = screenshotUrlArray[imgColl.length];
    
    // Reset the currently selected screenshot back to default
    if(selectedScreenshot != "") {
        previousSelectedScreenshotIcon = "screenshotIcon" + selectedScreenshot;            
        sender.findName(previousSelectedScreenshotIcon).source = SCREENSHOT_IMAGE_URL; //"Portfolio/Images/Static/Screenshot.png";        
    }
    
    // Set first icon in "hover" state
    defaultScreenshotIconOverImage = "screenshotIcon" + imgColl.length;        
    sender.findName(defaultScreenshotIconOverImage).source = SCREENSHOT_HOVER_IMAGE_URL; //"Portfolio/Images/Static/ScreenshotOver.png";
    selectedScreenshot = imgColl.length;
    
    // Decide whether to show hyperlink & set url
    var hyperlinkElement = selectedCaseStudy.getElementsByTagName("hyperlink");    
    var visibilityMode = "Collapsed";
    
    if(hyperlinkElement[0].firstChild != null) {     
      websiteUrl= "http://" + hyperlinkElement[0].firstChild.data;
      visibilityMode = "Visible";  // Override visibility if necessary      
    }
    sender.findName("hyperlink").visibility = visibilityMode;
    
    // Run storyboards
	sender.findName("caseStudyMainBegin").begin();	
	sender.findName("thumbnails").visibility = "Collapsed";
	sender.findName("WhiteFader").visibility = "Collapsed";
}

function menuItemEnter(sender, textBlockName, arrowName)
{
	sender.findName(textBlockName).foreground = "#ff666666";	
	sender.findName(arrowName).fill = "#ff666666";
	sender.cursor = "Hand";		
}

function menuItemLeave(sender, textBlockName, arrowName)
{
    // determine if selectedCaseStudyNumber is equal to current one and only clear it out if it is...
    var caseStudyNumber = getCaseStudyNumber(sender.name);
        
    if (selectedCaseStudyNumber != caseStudyNumber) { 
	    sender.findName(textBlockName).foreground = "#ff34648a";
	    sender.findName(arrowName).fill = "#ffffffff";	
	}
	sender.cursor = "Default";
}

function getCaseStudyNumber(senderName) {

    var retVal = "";
    
    switch (senderName) {
    
        case "btnMenu":
            retVal = "0";
            break;
            
        case "btnCaseStudyOne":
        case "thumbnailOne":
            retVal = "1";            
            break;
            
        case "btnCaseStudyTwo":
        case "thumbnailTwo":
            retVal = "2";            
            break;  
            
        case "btnCaseStudyThree":
        case "thumbnailThree":
            retVal = "3";            
            break;                      
    
        case "btnCaseStudyFour":
        case "thumbnailFour":
            retVal = "4";                       
            break;
            
        case "btnCaseStudyFive":
        case "thumbnailFive":
            retVal = "5";            
            break;  
            
        case "btnCaseStudySix":
        case "thumbnailSix":
            retVal = "6";            
            break;

        case "btnCaseStudySeven":
        case "thumbnailSeven":
            retVal = "7";           
            break;
            
        case "btnCaseStudyEight":
        case "thumbnailEight":
            retVal = "8";            
            break;  
            
        case "btnCaseStudyNine":
        case "thumbnailNine":
            retVal = "9";            
            break;
    
        case "btnCaseStudyTen":
        case "thumbnailTen":
            retVal = "10";                       
            break;
            
        case "btnCaseStudyEleven":
        case "thumbnailEleven":
            retVal = "11";            
            break;  
            
        case "btnCaseStudyTwelve":
        case "thumbnailTwelve":
            retVal = "12";            
            break;

        default:
            retVal = "";
            break;                
    }
    
    return retVal;
}

function screenshots_MouseEnter(sender, args) {
    toggleScreenshotIcon(sender, "enter");
}

function screenshots_MouseLeave(sender, args) {
    toggleScreenshotIcon(sender, "leave");
}

function toggleScreenshotIcon(sender, mode) {
    var senderName = sender.name;
    var screenshotNumber = senderName.substring(senderName.length -1);
    var screenshotIcon = "screenshotIcon" + screenshotNumber;
    var imgUrl = "";
    
    if(mode=="enter") {
        imgUrl = SCREENSHOT_HOVER_IMAGE_URL; //"Portfolio/Images/Static/ScreenshotOver.png";
    }
    else {
        imgUrl = SCREENSHOT_IMAGE_URL; //"Portfolio/Images/Static/Screenshot.png"
    }
    
    if(screenshotNumber != selectedScreenshot) {
        sender.findName(screenshotIcon).source = imgUrl;
    }
    
}

function screenshots_MouseLeftButtonUp(sender, args) {    
    var senderName = sender.name;
    var screenshotNumber = senderName.substring(senderName.length -1);    

    previousSelectedScreenshotIcon = "screenshotIcon" + selectedScreenshot;            
    sender.findName(previousSelectedScreenshotIcon).source = SCREENSHOT_IMAGE_URL; //"Portfolio/Images/Static/Screenshot.png";
    selectedScreenshot = screenshotNumber;
    sender.findName("FadeOut").begin();
}

function hyperlink_MouseLeftButtonDown(sender, args) {
    window.open(websiteUrl);
}

function hyperlink_MouseEnter(sender,args) {
    sender.findName("hyperlink_line").opacity = 1;
}

function hyperlink_MouseLeave(sender,args) {
    sender.findName("hyperlink_line").opacity = 0;
}


function FadeOut_Completed(sender, args) {  
  var screenshotUrl = screenshotUrlArray[selectedScreenshot];
  sender.findName("imagePlaceholder").source = screenshotUrl;
  sender.findName("FadeIn").begin();
}


