﻿//Zmienne globalne
var slides=null //lista portretow (xml)
var p=4; //wskaźnik portretu ostatnio przypisywanego do ramki
var ramki = new Array(); //lista ramek i przypisanych do nich portretow
ramki[0]=new ramka("i_1",0);
ramki[1]=new ramka("i_2",1);
ramki[2]=new ramka("i_3",2);
ramki[3]=new ramka("i_4",3);
ramki[4]=new ramka("i_5",4);
var szybkosc=0.682; //szybkosc ostatnio przypisanego portretu
var Czy_animacja_1=true;
var Czy_animacja_2=true;
var Czy_animacja_3=true;
var Czy_animacja_4=true;
var Czy_animacja_5=true;
var Czy_animacja_antyramki=true;
var Czy_animacja_podpisu=false;
var wersja_animacji_podpisu=1; //0-pionowa, 1-pozioma
//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:'750',                    // Width of rectangular region of 
                                                // plug-in area in pixels.
                height:'130',                   // 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:'48',                 // 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 t_MouseLeftButtonDown(sender, args) {
        //kliknięcie na tle
        Czy_animacja_1=sterowanie_animacja(sender.findName("animacja_1"), Czy_animacja_1);
        Czy_animacja_2=sterowanie_animacja(sender.findName("animacja_2"), Czy_animacja_2);
        Czy_animacja_3=sterowanie_animacja(sender.findName("animacja_3"), Czy_animacja_3);
        Czy_animacja_4=sterowanie_animacja(sender.findName("animacja_4"), Czy_animacja_4);
        Czy_animacja_5=sterowanie_animacja(sender.findName("animacja_5"), Czy_animacja_5);
        Czy_animacja_antyramki=sterowanie_animacja(sender.findName("animacja_antyramki"), Czy_animacja_antyramki);
    }
    function sterowanie_animacja(Animacja,Stan){
        if (Stan){
            Animacja.pause();
        }
        else {
            Animacja.resume();
        }
        return(!Stan);_
    }

    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 i_MouseEnter(sender,args)
    {
        //uruchomienie animacji po znalezieniu sie kursora nad portretem
        var animacja
        var ramka=sender.getParent();
        var podpis=ramka.children.getItem(2);
        var tlo=podpis.children.getItem(0);
        var napis=podpis.children.getItem(1);
        
        animacja=sender.findName("animacja_b");
        animacja.stop();
        
        ramka.opacity = 0.4; //w przypadku szybkich ruchow myszką nad obiektem
        animacja=sender.findName("animacja_a");
        animacja["Storyboard.TargetName"]=ramka.getValue("Name");
        animacja.begin();
        
        if (podpis!=null){
            podpis.setValue("Visibility","Visible");
            //podpis["Canvas.Left"]=args.getPosition(ramka).x+5;
            //podpis["Canvas.Top"]=args.getPosition(ramka).y+5;
            tlo.Width=napis.getValue("ActualWidth")+2;
            tlo.Height=napis.getValue("ActualHeight")+2;
            switch (wersja_animacji_podpisu){
                case 0: {
                    animacja=sender.findName("animacja_podpisu_zanikanie_1");
                    animacja.stop();
                    podpis["Canvas.Left"]=(sender.Width-tlo.Width)/2;
                    animacja=sender.findName("animacja_podpisu_narastanie_1");
                break;}
                case 1: {
                    animacja=sender.findName("animacja_podpisu_zanikanie_2");
                    animacja.stop();
                    animacja=sender.findName("animacja_podpisu_narastanie_2");
                    animacja.children.getItem(1).From=-tlo.Width;
                    animacja.children.getItem(1).To=(sender.Width-tlo.Width)/2;
                break;}
                default:
                    animacja=sender.findName("animacja_podpisu_zanikanie_1");
                    animacja.stop();
                    podpis["Canvas.Left"]=(sender.Width-tlo.Width)/2;
                    animacja=sender.findName("animacja_podpisu_narastanie_1");
                break;
            }
            animacja["Storyboard.TargetName"]=podpis.getValue("Name");
            animacja.begin();
            Czy_animacja_podpisu=true
        }
    }
    function i_MouseLeave(sender,args)
    {
        //uruchomienie animacji po opuszczeniu przez kursor miejsca nad portretem
        var animacja;
        var ramka=sender.getParent();
        var podpis=ramka.children.getItem(2);
        var tlo=podpis.children.getItem(0);
        
        animacja=sender.findName("animacja_a")
        animacja.stop();
        
        ramka.opacity = 0.4; //w przypadku szybkich ruchow myszką nad obiektem
        animacja=sender.findName("animacja_b")
        animacja["Storyboard.TargetName"]=ramka.getValue("Name");
        animacja.begin();
           
        switch (wersja_animacji_podpisu){
            case 0: {
                animacja=sender.findName("animacja_podpisu_narastanie_1");
                animacja.stop();
            break;}
            case 1: {
                animacja=sender.findName("animacja_podpisu_narastanie_2");
                animacja.stop();
            break;}
            default:{
                animacja=sender.findName("animacja_podpisu_narastanie_1");
                animacja.stop();
            }
        }
        if (Czy_animacja_podpisu){
            podpis.setValue("Visibility","Collapsed");
        }
        else {
            switch (wersja_animacji_podpisu){
                case 0: {
                    animacja=sender.findName("animacja_podpisu_zanikanie_1");
                break;}
                case 1: {
                    animacja=sender.findName("animacja_podpisu_zanikanie_2");
                    animacja.children.getItem(1).From=(sender.Width-tlo.Width)/2;
                    animacja.children.getItem(1).To=tlo.Width;
                break;}
                default:{
                    animacja=sender.findName("animacja_podpisu_zanikanie_1");
                break;}
            }
            animacja["Storyboard.TargetName"]=podpis.getValue("Name");
            animacja.begin();
        }
    }
    function pn_Completed(sender, eventArgs){
        Czy_animacja_podpisu=false
    }
    function pz_Completed(sender, eventArgs){
        var podpis=sender.findName(sender.getValue("Storyboard.TargetName"));
        podpis.setValue("Visibility","Collapsed");
    }
    
    function i_Completed(sender, eventArgs)
    {
        //uruchomienie kolejnej animacji
        if (slides!=null) {
            p++;
            if (p > slides.length-1){
                p=0;
            }
            animacja=sender;//sender.findName(sender.getValue("Name"));
            animacja.stop();
            animacja.BeginTime="0:0:0";
            szybkosc=losowanie_szybkosci(szybkosc);
            animacja.SpeedRatio=szybkosc;
            ramka=sender.findName(animacja.getValue("Storyboard.TargetName"));
            //if (ramka.children.count > 0) {
            //    for (j=0; j < ramka.children.count; j++) {
            //        ramka.children.getItem(j).Source=slides[p].getAttribute("thumbnail");
            //    }
            //}
            ramka.children.getItem(0).Source=slides[p].getAttribute("thumbnail");
            ramka.children.getItem(1).Source=slides[p].getAttribute("thumbnail");
            
            var podpis=ramka.children.getItem(2)
            if (podpis!=null) {
                podpis.children.getItem(1).Text=slides[p].getAttribute("title");
            }
            ramka.Opacity="0";
            ramka["Canvas.Left"]=-ramka.Width*szybkosc/4;
            przypisanie_portretu(ramka.children.getItem(0).getValue("Name"),p);
            animacja.begin(); // wymaga: FillBehavior="Stop"
        }
    }
    
    //Funkcje
    function parseXML()
    //pobranie pliku zawierajacego dane o portretach i przepisanie danych do tablicy
    {
        var xmlDoc=null; //opis portretow, 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("MasterPage.xml");
            slides=xmlDoc.getElementsByTagName("slide")
        }
    }
    function ramka(Nazwa, IdPortretu)
    {
        //konstruktor typu
        this.Nazwa=Nazwa;
        this.IdPortretu=IdPortretu;
    }
    function przypisanie_portretu(Nazwa,IdPortretu)
    {
        for (j=0; j < ramki.length; j++){
            if (ramki[j].Nazwa==Nazwa) {
                ramki[j].IdPortretu=IdPortretu;
                break;
            }
        }
        //if (j == ramki.length) {
        //    ramki[j]=new ramka(Nazwa,IdPortretu);
        //}
    }
    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
        }
    }
    function losowanie_szybkosci(poprzednia_szybkosc)
    {
        //losowanie szybkosci poruszania sie portretu z uwzglenieniem, aby kolejne szybkosci nie byly podobne
        var ilosc_losowan=5;
        var minimalne_odchylenie=0.075;
        var dolna_granica = 0.5;
        var gorna_granica = 1.5;
        var sortowana_szybkosc = poprzednia_szybkosc;
        var nowa_szybkosc;
        
        for (j=0; j<ilosc_losowan-1; j++){
            nowa_szybkosc=losowa_wartosc(dolna_granica,gorna_granica);
            if (Math.abs(nowa_szybkosc-poprzednia_szybkosc) > Math.abs(sortowana_szybkosc-poprzednia_szybkosc)){
                sortowana_szybkosc=nowa_szybkosc;
            }
            if (Math.abs(sortowana_szybkosc-poprzednia_szybkosc)/poprzednia_szybkosc >= minimalne_odchylenie){
                break;
            }
        }
        return sortowana_szybkosc;
    }
    function losowa_wartosc(dolna_granica,gorna_granica)
    {
        //losowanie liczby z podanego zakresu
        return dolna_granica + Math.random()*(gorna_granica-dolna_granica);
    }
    