﻿


function FindName(name)
{
    return Plugin.content.findName(name);
}
    
function LoadCanvas(xamlContent, name)
{
    return CreateFromXaml('<Canvas RenderTransformOrigin="0.0,0.0" Name="' + name + '"><Canvas.RenderTransform><TransformGroup><ScaleTransform Name="scale_' + name + '" ScaleX="1.0" ScaleY="1.0" /><TranslateTransform Name="translate_' + name +'" X="0" Y="0" /><RotateTransform Name="rotate_' + name +'" Angle="0" /></TransformGroup></Canvas.RenderTransform>' + (xamlContent?xamlContent:"") + '</Canvas>');    
}

function CreateCanvas(name, tag)
{
    return CreateFromXaml('<Canvas RenderTransformOrigin="0.0,0.0" Name="' + name + '" Tag="' + (tag) + '"><Canvas.RenderTransform><TransformGroup><ScaleTransform Name="scale_' + name + '" ScaleX="1.0" ScaleY="1.0" /><TranslateTransform Name="translate_' + name +'" X="0" Y="0" /><RotateTransform Name="rotate_' + name +'" Angle="0" /></TransformGroup></Canvas.RenderTransform></Canvas>');
}

function CreateTextBlock(name, text)
{
    return CreateFromXaml('<TextBlock Name="' + name + '" Text="' + (text?text:"") + '" RenderTransformOrigin="0.0,0.0"><TextBlock.RenderTransform><TransformGroup><ScaleTransform Name="scale_' + name + '" ScaleX="1.0" ScaleY="1.0" /><TranslateTransform Name="translate_' + name +'" X="0" Y="0" /><RotateTransform Name="rotate_' + name +'" Angle="0" /></TransformGroup></TextBlock.RenderTransform></TextBlock>');    
}

function CreateFromXaml(xaml)
{
    /// <param name="xaml" type="String" />
    /// <returns type="object" />
                
    return Plugin.content.createFromXaml(xaml, false);
}

function SetRotate(name, angle)
{
    FindName("rotate_" + name).Angle = angle;    
}

function SetScale(name, x, y)
{
    var c = FindName("scale_" + name);
    c.ScaleX = x;
    c.ScaleY = y;    
}

function SetTranslate(name, x, y)
{
    var c = FindName("translate_" + name);
    c.X = x;
    c.Y = y;    
}

function SetOpacity(name, opacity)
{
    FindName(name).Opacity = opacity;    
}

function SetPos(visual, x, y)
{
    visual["Canvas.Left"] = x;
    visual["Canvas.Top"] = y;    
}


function AnimateOpacity(name, from, to, speed, timeout, completed, autoReverse)
{
    if (timeout)
    {
        setTimeout('AnimateOpacity("'+name+'", "'+from+'", "'+to+'", "'+speed+'", null, ' + (completed ? completed:"null") +','+ (autoReverse ? "true":"false") + ');', timeout);
        return;
    }

    var sb = CreateFromXaml('<Storyboard Name="opacity_' + name + '"><DoubleAnimation Storyboard.TargetProperty="Opacity" From="' + from + '" To="' + to + '" SpeedRatio="' + speed + '" AutoReverse="' + (autoReverse?"true":"false") + '" /></Storyboard>');    
    sb["StoryBoard.TargetName"] = name;
    if (completed) sb.addEventListener("completed", completed);
    
    for(i=0; i<MainCanvas.Resources.Count; i++)
    {
        var storyboard = MainCanvas.resources.getItem(i);
        if(storyboard.name == 'opacity_' + name)
        {
            storyboard.stop();
            MainCanvas.resources.remove(storyboard); 
        }
    }
    MainCanvas.resources.add(sb);
    sb.begin();
}



function AnimateScale(name, from, to, speed, timeout, completed, autoReverse)
{
    AnimateScaleX(name, from, to, speed, timeout, null, autoReverse);
    AnimateScaleY(name, from, to, speed, timeout, completed, autoReverse);
}

function AnimateScaleX(name, from, to, speed, timeout, completed, autoReverse)
{
    if (timeout)
    {
        setTimeout('AnimateScaleX("'+name+'", "'+from+'", "'+to+'", "'+speed+'", null, ' + (completed ? completed:"null") + ',' + (autoReverse?"true":"false") + ');', timeout);
        return;
    }

    var sb = CreateFromXaml('<Storyboard Name="scaleAniX_' + name + '"><DoubleAnimation Storyboard.TargetProperty="ScaleX" From="' + from + '" To="' + to + '" SpeedRatio="' + speed + '" AutoReverse="'+ (autoReverse?'true':'false') +'" /></Storyboard>');    
    sb["Storyboard.TargetName"] = 'scale_'+name;
    if (completed) sb.addEventListener("completed", completed);
    
    for(i=0; i<MainCanvas.Resources.Count; i++)
    {
        var storyboard = MainCanvas.Resources.getItem(i);
        if(storyboard.Name == 'scaleAniX_' + name)
        {
            storyboard.stop();
            MainCanvas.Resources.remove(storyboard); 
        }
    }
    MainCanvas.Resources.add(sb);
    sb.begin();
}

function AnimateScaleY(name, from, to, speed, timeout, completed, autoReverse)
{
    if (timeout)
    {
        setTimeout('AnimateScaleY("'+name+'", "'+from+'", "'+to+'", "'+speed+'", null, ' + (completed ? completed:"null") + ',' + (autoReverse?"true":"false") + ');', timeout);
        return;
    }

    var sb = CreateFromXaml('<Storyboard Name="scaleAniY_' + name + '"><DoubleAnimation Storyboard.TargetProperty="ScaleY" From="' + from + '" To="' + to + '" SpeedRatio="' + speed + '" AutoReverse="'+ (autoReverse?'true':'false') +'" /></Storyboard>');    
    sb["Storyboard.TargetName"] = 'scale_'+name;
    if (completed) sb.addEventListener("completed", completed);
    
    for(i=0; i<MainCanvas.Resources.Count; i++)
    {
        var storyboard = MainCanvas.Resources.getItem(i);
        if(storyboard.Name == 'scaleAniY_' + name)
        {
            storyboard.stop();
            MainCanvas.Resources.remove(storyboard); 
        }
    }
    MainCanvas.Resources.add(sb);
    sb.begin();
}

//function AnimateScale(name, from, to, speed, timeout, completed, autoReverse)
//{
//    if (timeout)
//    {
//        setTimeout('AnimateScale("'+name+'", "'+from+'", "'+to+'", "'+speed+'", null, ' + (completed ? completed:"null") + ',' + (autoReverse?"true":"false") + ');', timeout);
//        return;
//    }

//    var sb = CreateFromXaml('<Storyboard Name="scaleAni_' + name + '"><DoubleAnimation Storyboard.TargetProperty="ScaleX" From="' + from + '" To="' + to + '" SpeedRatio="' + speed + '" AutoReverse="'+ (autoReverse?'true':'false') +'" /><DoubleAnimation Storyboard.TargetProperty="ScaleY" From="' + from + '" To="' + to + '" SpeedRatio="' + speed + '" AutoReverse="'+ (autoReverse?'true':'false') +'"/></Storyboard>');    
//    sb["Storyboard.TargetName"] = 'scale_'+name;
//    if (completed) sb.addEventListener("completed", completed);
//    
//    for(i=0; i<MainCanvas.Resources.Count; i++)
//    {
//        var storyboard = MainCanvas.Resources.getItem(i);
//        if(storyboard.Name == 'scaleAni_' + name)
//        {
//            storyboard.stop();
//            MainCanvas.Resources.remove(storyboard); 
//        }
//    }
//    MainCanvas.Resources.add(sb);
//    sb.begin();
//}

function AnimateRotate(name, from, to, speed, timeout, completed)
{
    if (timeout)
    {
        setTimeout('AnimateRotate("'+name+'", "'+from+'", "'+to+'", "'+speed+'", null' + (completed ? ', ' + completed:"") + ');', timeout);
        return;
    }

    var sb = CreateFromXaml('<Storyboard Name="rotateAni_' + name + '"><DoubleAnimation Storyboard.TargetProperty="Angle" ' + (from!=null?('From="' + from + '"'):'') + ' To="' + to + '" SpeedRatio="' + speed + '" /></Storyboard>');    
    sb["Storyboard.TargetName"] = 'rotate_'+name;
    if (completed) sb.addEventListener("Completed", completed);
    
    for(i=0; i<MainCanvas.Resources.Count; i++)
    {
        var storyboard = MainCanvas.Resources.getItem(i);
        if(storyboard.Name == 'rotateAni_' + name)
        {
            storyboard.stop();
            MainCanvas.Resources.remove(storyboard);             
        }
    }
    MainCanvas.Resources.add(sb);
    sb.begin();
}


function AnimateX(name, from, to, speed, timeout, completed)
{    
    if (timeout)
    {
        setTimeout('AnimateX("'+name+'", "'+from+'", "'+to+'", "'+speed+'", null' + (completed ? ', ' + completed:"") + ');', timeout);
        return;
    }

    if (!from) from = FindName("translate_"+name).X;
    var sb = CreateFromXaml('<Storyboard Name="xAni_' + name + '"><DoubleAnimation Storyboard.TargetProperty="X" From="' + from + '" To="' + to + '" SpeedRatio="' + speed + '" /></Storyboard>');    
    sb["Storyboard.TargetName"] = 'translate_'+name;
    if (completed) sb.addEventListener("completed", completed);
    
    for(i=0; i<MainCanvas.Resources.Count; i++)
    {
        var storyboard = MainCanvas.Resources.getItem(i);
        if(storyboard.Name == 'xAni_' + name)
        {
            storyboard.stop();
            MainCanvas.Resources.remove(storyboard); 
        }
    }
    MainCanvas.Resources.add(sb);
    sb.begin();
}

function AnimateY(name, from, to, speed, timeout, completed)
{
    if (timeout)
    {
        setTimeout('AnimateY("'+name+'", "'+from+'", "'+to+'", "'+speed+'", null' + (completed ? ', ' + completed:"") + ');', timeout);
        return;
    }

    if (!from) from = FindName("translate_"+name).Y;
    var sb = CreateFromXaml('<Storyboard Name="yAni_' + name + '"><DoubleAnimation Storyboard.TargetProperty="Y" From="' + from + '" To="' + to + '" SpeedRatio="' + speed + '" /></Storyboard>');    
    sb["Storyboard.TargetName"] = 'translate_'+name;
    if (completed) sb.addEventListener("completed", completed);
    
    for(i=0; i<MainCanvas.Resources.Count; i++)
    {
        var storyboard = MainCanvas.Resources.getItem(i);
        if(storyboard.Name == 'yAni_' + name)
        {
            storyboard.stop();
            MainCanvas.Resources.remove(storyboard); 
        }
    }
    MainCanvas.Resources.add(sb);
    sb.begin();
}
//function AnimatePosition(name, fromX, fromY, toX, toY, speed, timeout, completed)
//{
//    if (timeout)
//    {
//        setTimeout('AnimatePosition("'+name+'", "'+fromX+'", "'+fromY+'", "'+toX+'", "'+toY+'", "'+speed+'", null' + (completed ? ', '+completed:"") + ');', timeout);
//        return;
//    }

//    var sbX = CreateFromXaml('<Storyboard Name="posx_' + name + '"><DoubleAnimation Storyboard.TargetProperty="Canvas.Left" From="' + fromX + '" To="' + toX + '" SpeedRatio="' + speed + '" /></Storyboard>');    
//    var sbY = CreateFromXaml('<Storyboard Name="posy_' + name + '"><DoubleAnimation Storyboard.TargetProperty="Canvas.Top" From="' + fromY + '" To="' + toY + '" SpeedRatio="' + speed + '" /></Storyboard>');    
//    sbX["Storyboard.TargetName"] = name;
//    sbY["Storyboard.TargetName"] = name;
//    if (completed) sbX.add_Completed(completed);
//    
//    for(i=0; i<MainCanvas.resources.count; i++)
//    {
//        var storyboard = MainCanvas.resources.getItem(i);
//        if(storyboard.Name == 'posx_' + name || storyboard.Name == 'posy_' + name)
//        {
//            storyboard.stop();
//            MainCanvas.resources.removeAt(i); 
//        }
//    }
//    MainCanvas.resources.add(sbX);
//    MainCanvas.resources.add(sbY);
//    sbX.begin();
//    sbY.begin();
//}


function AnimateUsingKeyFrames(targetName, propertyName, completed, timeout, keySpline, keyTime, value, startValue)
{

    if (timeout)
    {
        //setTimeout('AnimateUsingKeyFrames("'+targetName+'", "'+propertyName + '", ' + (completed ? ', "'+completed+'"':"") + ', null, "'+keySpline+'", "' + keyTime+'", "' + value +'");', timeout);
        setTimeout('AnimateUsingKeyFrames("'+targetName+'", "'+propertyName + '", ' + (completed ? completed:'""') + ', null, "'+keySpline+'", "' + keyTime+'", "' + value +'", "' + startValue +'");', timeout);
        return;
    }
    
    var diskrt = "";
    if (typeof(startValue) != undefined && startValue != "" && startValue != "undefined" && startValue != null)
        diskrt = '<DiscreteDoubleKeyFrame Value="' + startValue + '" KeyTime="0:0:0.0" />';
    
    var sb = CreateFromXaml('<Storyboard Name="keyFrames_' + propertyName + '_' + targetName + '"><DoubleAnimationUsingKeyFrames Duration="' + keyTime + '" Storyboard.TargetProperty="(' + propertyName + ')">' + diskrt + '<SplineDoubleKeyFrame KeySpline="' + keySpline + '"  KeyTime="' + keyTime + '" Value="' + value + '"/></DoubleAnimationUsingKeyFrames></Storyboard>');
    sb["Storyboard.TargetName"] = targetName;
    if (completed) sb.addEventListener("completed", completed);
    
    for(i=0; i<MainCanvas.Resources.Count; i++)
    {
        var storyboard = MainCanvas.Resources.getItem(i);
        if(storyboard.Name == 'keyFrames_' + propertyName + '_' + targetName)
        {
            storyboard.stop();            
            MainCanvas.Resources.remove(storyboard); 
            
        }
    }
    MainCanvas.Resources.add(sb);
    sb.begin();
} 




function LoadTextBlock(xaml, name, foreground, fonsize, fontfamily)
{
    var front = '<TextBlock RenderTransformOrigin="0.0,0.0" Name="' + name + '" Foreground="' + foreground + '" FontSize="' + fonsize + '" FontFamily="' + fontfamily + '"><TextBlock.RenderTransform><TransformGroup><ScaleTransform Name="scale_' + name + '" ScaleX="1.0" ScaleY="1.0" /><TranslateTransform Name="translate_' + name +'" X="0" Y="0" /><RotateTransform Name="rotate_' + name +'" Angle="0" /></TransformGroup></TextBlock.RenderTransform>';
    var back = '</TextBlock>';
    
    return CreateFromXaml(front + xaml + back);
    
}

function CreateFromXamlFile(downloader, name, tag, width, height, fillUniformly)
{
    var xaml = downloader.getResponseText("");
    var element = CreateFromXaml('<Canvas ' + (name?('Name="'+name+'"'):'') + (tag?(' Tag="'+tag+'"'):'') + '>'
                                  + (name?(  
                                  + '<Canvas.RenderTransform>'
                                    + '<TransformGroup>'
                                      + '<ScaleTransform Name="scale_' + name + '" />'
                                      + '<RotateTransform Name="rotate_' + name + '" />'
                                      + '<TranslateTransform Name="translate_' + name + '" />'
                                    + '</TransformGroup>'
                                  + '</Canvas.RenderTransform>'):'')
                                  + xaml 
                               + '</Canvas>');
                               
    var child = element.Children.getItem(0);
    
    
    if (fillUniformly)
    {
        var childRatio = child.Width/child.Height;
        var ratio = width/height;
        if (childRatio>ratio) 
        {
            height = width/childRatio;
        }
        else 
        {
            width = height*childRatio;
        }
    }
    
    element.Width=width;
    element.Height = height;
    
    var xRatio = width / child.Width;
    var yRatio = height / child.Height;
    child.RenderTransform = CreateScaleTransform(null, xRatio, yRatio);
                                                               
    return element;
}

function CreateScaleTransform(name, scaleX, scaleY)
{
    return CreateFromXaml('<ScaleTransform ' + (name?'Name="'+ name + '"':"") + ' ScaleX="' + scaleX + '" ScaleY="' + scaleY + '" />');
}


function SetDownloaderAsSource(elementName, downloader, progressChanged)
{
    if (downloader.status != 200)
    {
        downloader.addEventListener("completed", new Function("sender", "args", 'SetDownloaderAsSource("' + elementName + '", sender, "' + progressChanged + '" );'));
    }
    else
    {
        FindName(elementName).SetSource(downloader, null);
    }
}




function GetURLParam(paramName)
{  
    paramName = paramName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");  
    var regexS = "[\\?&]" + paramName + "=([^&#]*)";  
    var regex = new RegExp( regexS );  
    var results = regex.exec( window.location.href );  
    if( results == null )    
        return "";  
    else    
        return results[1];
    
}


function showDiv(id)
{
    document.getElementById(id).style.visibility="visible";
} 

function hideDiv(id)
{
    document.getElementById(id).style.visibility="hidden";
} 


function SecondsToTimeSpan(seconds)
{
    var sec = Math.floor(seconds);    
    var min = Math.floor(sec / 60);
    sec -= 60*min;
    var hrs = Math.floor(min / 60);
    min -= 60*hrs;
    return ""+hrs+":"+min+":"+sec;
}