﻿//Zmienne globalne
var Czy_pauza=false; //wstrzymanie wszystkich animacji
var stany = new Array(); //lista animacji i ich stanów
stany[0]=new stan_animacji("timer_2","start");
stany[1]=new stan_animacji("animacja_1","stop");
stany[2]=new stan_animacji("animacja_2","stop");
stany[3]=new stan_animacji("animacja_3","stop");
stany[4]=new stan_animacji("animacja_4","stop");
stany[5]=new stan_animacji("animacja_5","stop");

var plik_danych="/pw/default_data.xml"; //lista portretów: spis zdjęć, opisów i linków do artykułów
var slides=null; //lista portretow (xml)
var p=-1; //wskaźnik portretu ostatnio przypisywanego do ramki

var ramki = new Array(); //lista ramek i przypisanych do nich portretow
ramki[0]=new ramka("i_0",null);
ramki[1]=new ramka("i_1",null);
ramki[2]=new ramka("i_2",null);
ramki[3]=new ramka("i_3",null);
ramki[4]=new ramka("i_4",null);
ramki[5]=new ramka("i_5",null);


//Konstruktory
function stan_animacji(Nazwa, Stan){
        //konstruktor typu
        this.Nazwa=Nazwa;
        this.Stan=Stan; //start, pauza, stop
    }
function ramka(Nazwa, IdPortretu){
        //konstruktor typu
        this.Nazwa=Nazwa;
        this.IdPortretu=IdPortretu;
    }
//Inicjalizacja
function utworzenie_sl()
    // utworzenie silverlight plug-in
    {  
        Silverlight.createObject(
            "/MasterPage_v2.xaml?p=" + losowa_wartosc(0,100),           // Source property value.
            parentElement,                      // DOM reference to hosting DIV tag.
            "SilverlightPlugin_1",              // Unique plug-in ID value.
            {                                   // Per-instance properties.
                width:'460',                    // Width of rectangular region of 
                                                // plug-in area in pixels.
                height:'212',                   // Height of rectangular region of 
                                                // plug-in area in pixels.
                inplaceInstallPrompt:false,     // Determines whether to display 
                                                // in-place install prompt if 
                                                // invalid version detected.
                background:'transparent',       // Background color of plug-in.
                isWindowless:'true',            // Determines whether to display plug-in 
                                                // in Windowless mode.
                framerate:'24',                 // MaxFrameRate property value.
                version:'1.0'                   // Silverlight version to use.
            },
            {
                onError:null,                   // OnError property value -- 
                                                // event handler function name.
                onLoad:null                     // OnLoad property value -- 
                                                // event handler function name.
            },
            null);                              // Context value -- event handler function name.
        parseXML();
    }
    
    //Przerwania
    function rootCanvasLoaded(sender, args){
        konfiguracja_animacji(sender,0,"animacja_0");
        //sender.findName("animacja_0s").begin();
    }
    function t_MouseLeftButtonDown(sender, args) {
        Czy_pauza=sterowanie_animacja(sender);
    }
    
    function timer_1_Completed(sender, args){
        //alert(color);
        uruchomienie_animacji(sender);
        sender.findName("timer_2").begin();
    }
    function timer_2_Completed(sender, args) {
        //timer cykliczny
        uruchomienie_animacji(sender);
        sender.begin();
    }
    function animacja_Completed(sender, args) {
        sender.stop();
        for (j=0; j < stany.length; j++){
            if (stany[j].Nazwa==sender.getValue("Name")){
                stany[j].Stan="stop";
                break;
            }
        }
    }
    function animacja_0_Completed(sender, args) {
        //sender.stop();
    }
    function i_MouseEnter(sender,args){
        var obraz=sender.getParent();
        var podpis=obraz.children.getItem(1);
        var tekst=podpis.children.getItem(0);
        var animacja;
        var stan_koncowy;

        animacja=sender.findName("animacja_b");
        stan_koncowy=tekst.Opacity;
        animacja.stop();
        
        animacja=sender.findName("animacja_a");
        animacja["Storyboard.TargetName"]=tekst.getValue("Name");
        animacja.children.getItem(0).From=stan_koncowy;
        animacja.begin();
        //tekst.Foreground="#f0f8ff";
    }
    function i_MouseLeave(sender,args){        
        var obraz=sender.getParent();
        var podpis=obraz.children.getItem(1);
        var tekst=podpis.children.getItem(0);
        var animacja;
        var stan_koncowy;
        
        animacja=sender.findName("animacja_a");
        stan_koncowy=tekst.Opacity;
        animacja.stop();
        
        animacja=sender.findName("animacja_b");
        animacja["Storyboard.TargetName"]=tekst.getValue("Name");
        animacja.children.getItem(0).From=stan_koncowy;
        animacja.begin();
        //tekst.Foreground="#483d8b";
    }
    function i_MouseLeftButtonDown(sender, args){
        //przejscie pod nowy adres po kliknieciu na portret (link)
        var IdPortretu=wyszukanie_portretu(sender.getValue("Name"))
        if (IdPortretu != null) {
            window.location=slides[IdPortretu].getAttribute("article");
        }
    }
    function przycisk_MouseEnter(sender,args){
        var animacja=sender.findName("animacja_d");
        var stan_koncowy=sender.Opacity;
        animacja.stop();
        
        animacja=sender.findName("animacja_c");
        animacja["Storyboard.TargetName"]=sender.getValue("Name");
        animacja.children.getItem(0).From=stan_koncowy;
        animacja.begin();
    }
    function przycisk_MouseLeave(sender,args){
        var animacja=sender.findName("animacja_c");
        var stan_koncowy=sender.Opacity;
        animacja.stop();
        
        animacja=sender.findName("animacja_d");
        animacja["Storyboard.TargetName"]=sender.getValue("Name");
        animacja.children.getItem(0).From=stan_koncowy;
        animacja.begin();
    }
     function przycisk_MouseLeftButtonDown(sender,args){
        Czy_pauza=sterowanie_animacja(sender);
    }
    //funkcje
    function parseXML()
    //pobranie pliku zawierajacego dane o portretach i przepisanie danych do tablicy
    {
        var xmlDoc=null; //opis zdjęć, xml
        if (window.ActiveXObject){
            // code for IE
            xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
        }
        else if (document.implementation.createDocument){
            // code for Firefox, Mozilla, Opera, etc.
            xmlDoc=document.implementation.createDocument("","",null);
        }
        else{
            alert('Your browser cannot handle this script');
        }
        if (xmlDoc!=null){
            xmlDoc.async=false;
            xmlDoc.load(plik_danych);
            slides=xmlDoc.getElementsByTagName("slide")
        }
    }
    function sterowanie_animacja(sender){
        var przycisk_a=sender.findName("przycisk");
        var przycisk_p=sender.findName("przycisk_pauza");
        var przycisk_s=sender.findName("przycisk_start");
        if (Czy_pauza) {
            for (j=0; j < stany.length; j++){
                if (stany[j].Stan=="pauza"){
                    sender.findName(stany[j].Nazwa).resume();
                    stany[j].Stan="start";
                }
            }
            przycisk_a.Opacity=0.4;
            przycisk_p.Visibility="Visible";
            przycisk_s.Visibility="Collapsed";
        }
        else {
            for (j=0; j < stany.length; j++){
                if (stany[j].Stan=="start"){
                    sender.findName(stany[j].Nazwa).pause();
                    stany[j].Stan="pauza";
                }
            }
            przycisk_a.Opacity=0.4;
            przycisk_p.Visibility="Collapsed";
            przycisk_s.Visibility="Visible";
        }
        return (!Czy_pauza);
    }
    function losowa_wartosc(dolna_granica,gorna_granica)
    {
        //losowanie liczby z podanego zakresu
        return dolna_granica + Math.random()*(gorna_granica-dolna_granica);
    }
    
    function uruchomienie_animacji(sender){
        if (slides!=null) {
            for (j=0; j < stany.length; j++){
                //znalezienie pierwszej "wolnej" ramki i uruchomienie jej animacji
                //brak wolnej ramki spowoduje opuszczenie sygnalu timera
                if (stany[j].Stan=="stop"){
                    p=nastepny_slajd(p);
                    konfiguracja_animacji(sender,p,stany[j].Nazwa);
                    stany[j].Stan="start";
                    break;
                }
            }
        }
    }
    function nastepny_slajd(nr_slajdu){
        nr_slajdu++;
        if (nr_slajdu > slides.length-1){
            nr_slajdu=1; //opuszczenie slide[0], ktory jest statyczny
        }
        return nr_slajdu;
    }
    function konfiguracja_animacji(sender,nr_slajdu,nazwa_animacji){
        var animacja=sender.findName(nazwa_animacji);
        var obraz=sender.findName(animacja.getValue("Storyboard.TargetName"));
        var zdjecie=obraz.children.getItem(0);
        var podpis=obraz.children.getItem(1);
        var tekst=podpis.children.getItem(0);
                            
        //alert(zdjecie.getValue("Name")+", "+nr_slajdu);
        przypisanie_portretu(zdjecie.getValue("Name"),nr_slajdu);
        //alert(wyszukanie_portretu(zdjecie.getValue("Name")));
        zdjecie.Source=slides[nr_slajdu].getAttribute("thumbnail");
        tekst.Text=slides[nr_slajdu].getAttribute("title");
        podpis["Canvas.Left"]=(105-tekst.GetValue("ActualWidth"))/2;
        animacja.begin();
    }
    function przypisanie_portretu(Nazwa_ramki,IdPortretu)
    {
        for (j=0; j < ramki.length; j++){
            if (ramki[j].Nazwa==Nazwa_ramki) {
                ramki[j].IdPortretu=IdPortretu;
                break;
            }
        }
    }
    function wyszukanie_portretu(Nazwa_ramki)
    {
        for (j=0; j < ramki.length; j++){
            if (ramki[j].Nazwa==Nazwa_ramki) {
                break;
            }
        }
        if (j < ramki.length) {
            return ramki[j].IdPortretu;
        }
        else {
            return null
        }
    }