﻿/// <reference name="MicrosoftAjax.js" />

Type.registerNamespace("ServerTransformed");

ServerTransformed.Utilities = function() {}

ServerTransformed.Utilities.SetCanvasFonts = function ServerTransformed$Utilities$SetCanvasFonts(canvas, fonts)
{
    for(var i = 0; i < canvas.children.count; i++)
    {
        var canvasItem = canvas.children.getItem(i);
        if (canvasItem.toString() == "Canvas")
        {
            ServerTransformed.Utilities.SetCanvasFonts(canvasItem, fonts);
        }
        else if(canvasItem.toString() == "TextBlock")
        {
            canvasItem.setFontSource(fonts);
        }
    }
}

ServerTransformed.Utilities.MakeVideoCanvas = function ServerTransformed$Utilities$MakeVideoCanvas(control, name, videoFileURL) 
{
    /// <summary>Returns a MediaElement that must be added to the current control set in order for the video to load. 
    ///     AutoPlay is set to false and Opacity is set to 0. These must be adjusted as needed. 
    ///     The x:Name is the name parameter with a _Video suffix.</summary>
    /// <param name="control" type="SilverlightObject" optional="false" mayBeNull="false"></param>
    /// <param name="name" type="string" optional="false" mayBeNull="false"></param>
    /// <param name="videoFileURL" type="string" optional="false" mayBeNull="false"></param>
    /// <returns type="MediaElement"></returns>
    var mediaPlayer = control.content.CreateFromXaml(
        "<MediaElement " +
        "xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' " +
        "x:Name='" + name + "_Video' Source='" + videoFileURL + "' AutoPlay='False' Opacity='0'></MediaElement>"
    );
    
    return mediaPlayer; 
}

ServerTransformed.Utilities.URLLookup = function ServerTransformed$Utilities$URLLookup(linkName, url, title)
{
    var retVal;
    switch(linkName.toLowerCase())
    {
        case "facebook":
            retVal = String.format(ServerTransformed.Res.URL[linkName.toLowerCase()], encodeURIComponent(url));
            break;
        case "digg":
            retVal = String.format(ServerTransformed.Res.URL[linkName.toLowerCase()], encodeURIComponent("http://" + url), encodeURIComponent(title));
            break;
        case "delicious":
            retVal = String.format(ServerTransformed.Res.URL[linkName.toLowerCase()], encodeURIComponent("http://" + url), encodeURIComponent(title));
            break;
        case "reddit":
            retVal = String.format(ServerTransformed.Res.URL[linkName.toLowerCase()], encodeURIComponent("http://" + url), encodeURIComponent(title));
            break;
        case "stumble":
            retVal = String.format(ServerTransformed.Res.URL[linkName.toLowerCase()], encodeURIComponent("http://" + url), encodeURIComponent(title));
            break;
        default:
            retVal = null;
            break;
    }
    
    return retVal;
}

ServerTransformed.Utilities.ConvertSecondsToTimeCode = function ServerTransformed$Utilities$ConvertSecondsToTimeCode(value)
{
    var hours = Math.floor(value/3600);
    var minutes = Math.floor((value - (hours*60))/60);
    var seconds = value - (hours*3600) - (minutes*60); // Math.floor((value - (hours*3600) - (minutes*60)));
    if(hours < 10)
        hours = "0" + hours;
    if(minutes < 10)
        minutes = "0" + minutes;
    if(seconds < 10)
        seconds = "0" + seconds;
    if (seconds.toString().length > 12)
        seconds = seconds.toString().substring(0, 12);
    return hours + ":" + minutes + ":" + seconds;
}

ServerTransformed.Utilities.ConvertHTMLToXAML = function ServerTransformed$Utilities$ConvertHTMLToXAML(value)
{
    ///<summary>
    ///This is a really simple transform. More types should be added. For now though
    /// it will only convert <p> to <Run>, <br /> to <LineBreak />, and <h2> to a <Run />
    /// with a bold font weight.
    ///</summary>
    value = value.replace(new RegExp("\"", "ig"), "&quot;");
    value = value.replace(new RegExp('<()*p([^>])*>', "ig"), "<Run Text=\"");    
    
    // VV
    //  3/5 added for text formatting
    if(Sys.Browser.name.indexOf("Firefox") >= 0){
        value = value.replace(new RegExp('</*p([^>])*>', "ig"), "\" /><LineBreak />");
    }
    else{
        value = value.replace(new RegExp('</*p([^>])*>', "ig"), "\" />");
    }    
    
    //value = value.replace(new RegExp('</*p([^>])*>', "ig"), "\" />");
    
    value = value.replace(new RegExp('<()*br([^>])*>', "ig"), "<LineBreak />");
    
    // VV 
    //  3/5 commented this out for text formatting (instead add the additional line break for firefox on the closing p tag)
    /*if(Sys.Browser.name.indexOf("Firefox") >= 0)
        value = value.replace(new RegExp('<()*LineBreak([^>])*>', "ig"), "<LineBreak /><LineBreak />");*/
        
    value = value.replace(new RegExp('<()*h2([^>])*>', "ig"), "<Run FontWeight=\"Bold\" Text=\"");
    value = value.replace(new RegExp('</*h2([^>])*>', "ig"), "\" /><LineBreak />");
    return "<TextBlock xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" x:Name=\"BodyCopy\">" + value + "</TextBlock>";
}

ServerTransformed.Utilities.registerClass("ServerTransformed.Utilities");