/* ***** tpl/ldPortfel.inicjalneZlecenie.php *****
   ***** tpl/ldPortfel.konwersja.php ***** */

// ograniczenia do walidacji
var ldPortfel_MinFundusz = 10; // minimalny udzial jednego funduszu
var ldPortfel_MaxFundusz = 50; // maksymalny udzial jednego funduszu
var ldPortfel_MinFCount = 4; // minimalna liczba różnych funduszy w portfelu
var ldPortfel;
var ldPortfelData = new Array();
var ldKonwersjaJednostkiMax;

// obiekt portfela

function ldPortfelObject() {
    
    this.fundusze = new Array();
    this.sliders = new Array();
    this.maxSlider = 50;
    this.suma = 0;
    this.lock = false;
    this.form;
    this.totalField1;
    this.totalField2;
    
    this.konSlider;
    this.konValField;
    this.konJMax;
    this.konVal;
    this.konLock;
    
    // inicjuje obiekt na podstawie tablicy ldPortfelData
    // inicjuje slidery
    this.init = function(data) {
        
        this.fundusze = data;
        this.form = document.getElementById('ldPortfelForm');
        this.totalField1 = $('#ldPortfelTotal1');
        this.totalField2 = $('#ldPortfelTotal2');
        
        this.recalcSuma();
        this.recalcMaxSlider();
        // inicjuje slidery
        for(i in this.fundusze) {
            this.sliders[i] = $("#ldPortfelSlider_"+i.toString()).slider({
                min: 0,
                max: ldPortfel_MaxFundusz,
                stepping: 1,
                slide: ldPortfelSlider_OnSlide,
                change: ldPortfelSlider_OnChange
            });
            
            this.sliders[i].slider('moveTo', this.fundusze[i]);
        }
    }
    
    // inicjuje suwak konwersji
    this.initKonwersja = function(j) {
        this.konJMax = j;
        this.konValField = this.form.elements['konValField'];
        this.konLock = false;
        
        this.konSlider = $("#ldPortfelSlider_Konwersja").slider({
                min: -100,
                max: 0,
                stepping: 1,
                slide: ldPortfelSlider_Konwersja_OnSlide
            });
        this.konSlider.slider('moveTo', 0);
        
        
        this.konValField.onchange = konValField_OnChange;
        
    }
    
    // przelicza sume portfela
    this.recalcSuma = function() {
        this.suma = 0;
        for(i in this.fundusze) {
            this.suma = this.suma + this.fundusze[i];
        }
        this.totalField1.text(this.suma.toString()+'%');
        this.totalField2.text(this.suma.toString()+'%');
        return this.suma;
    }
    
    // przelicza maksymalnę wartość slidera
    this.recalcMaxSlider = function() {
        this.maxSlider = 100 - this.suma;
        return this.maxSlider;
    }
    
    this.setBySliderId = function(id, val) {
        i = parseInt(id.substring(16));
        if(this.fundusze[i] != undefined) {
            this.fundusze[i] = parseInt(val);
            return true;
        }
        else return false;
    }
    
    this.setKonwersjaBySlider = function(v) {
        if(!this.konLock) {
            this.konVal = Math.round(Math.abs(v)*this.konJMax*1000)/100000;
            this.konValField.value = this.konVal.toString().replace('.',',');
        }
    }
    
    this.setKonwersjaByField = function() {
        this.konLock = true;
        this.konVal = parseFloat(this.konValField.value.replace(',','.'));
        
        if(isNaN(this.konVal)) {
            this.konVal = 0;
            this.konValField.value = 0;
        }
        else {
            this.konVal = Math.round(this.konVal*100000)/100000;
            this.konValField.value = this.konVal.toString().replace('.',',');
        }
        
        if(this.konVal < 0) {
            this.konVal = 0;
            this.konValField.value = 0;
        }
        if(this.konVal > this.konJMax) {
            this.konVal = this.konJMax;
            this.konValField.value = this.konVal.toString().replace('.',',');
        }
        this.konSlider.slider('moveTo', -Math.round(100*this.konVal/this.konJMax));
        this.konLock = false;
        
        
    }
    
    
    this.startChange = function(id) {
        this.lock = id;
    }
    
    this.underChange = function(id) {
        if(this.lock == id) return true;
        else return false;
    }
    
    this.releaseChange = function() {
        this.lock = false;
    }
    
    this.run = function() {
        err = false;
        clearMsg();
        
        // suma portfela
        if(this.recalcSuma() < 100) {
            appendMsg('Podziel 100% środków!', 'error');
            err = true;
        }
        
        //minimalne i maksymalne wartości
        cnt = 0;
        min = false;
        max = false;
        for(i in this.fundusze) {
            if(this.fundusze[i] > 0) {
                cnt++;
                if(this.fundusze[i] < ldPortfel_MinFundusz) min = true;
                if(this.fundusze[i] > ldPortfel_MaxFundusz) max = true;
            }
        }
        if(min) {
            appendMsg('Minimalny udział funduszu w portfelu to '+ldPortfel_MinFundusz+'%', 'error');
            err = true;
        }
        if(max) {
            appendMsg('Maksymalny udział funduszu w portfelu to '+ldPortfel_MaxFundusz+'%', 'error');
            err = true;
        }
        if(cnt < ldPortfel_MinFCount) {
            appendMsg('Podziel swoje środki między minimum '+ldPortfel_MinFCount+' fundusze.', 'error');
            err = true;
        }
        if(err) {
            showMsg();
            return false;
        }
        else {
            for(i in this.fundusze) {
                this.form.elements['new_udzial['+i+']'].value = this.fundusze[i];
            }
            return true;
        }
    }
    
    this.runKonwersja = function () {
        err = false;
        clearMsg();
        
        if(this.konVal <= 0) {
            appendMsg('Skonwertuj jednostki uczestnictwa.', 'error');
            err = true;
        }
        if(err) {
            showMsg();
            return false;
        }
        else {
            form.elements['konwersjaJednostki'].value = this.konVal;
            return this.run();
        }
    }

}

function ldPortfelSlider_OnSlide() {
    val = parseInt($(this).slider("value", 0));
    $(this).children('.ui-slider-value').text(val+"%");
    return true;
}

function ldPortfelSlider_OnChange() {
    id = $(this).attr('id');
    
    if(!ldPortfel.underChange(id)) {
        
        ldPortfel.startChange(id);
        ldPortfel.setBySliderId(id, 0); // kasowanie starej wartości
        sum = ldPortfel.recalcSuma();
        max = ldPortfel.recalcMaxSlider();
        val = parseInt($(this).slider("value", 0));
        
        if(val > max) {
            val = max;
            //tu onchange strzela drugi raz, po to jest start/releaseChange()
            $(this).slider("moveTo", val); 
        }
        
        ldPortfel.setBySliderId(id, val);
        ldPortfel.recalcSuma();
        ldPortfel.recalcMaxSlider();
        ldPortfel.releaseChange();
    }
    return true;
}

function ldPortfelSlider_Konwersja_OnSlide() {
    val = parseInt($(this).slider("value", 0));
    $(this).children('.ui-slider-value').text(val+"%");
    ldPortfel.setKonwersjaBySlider(val);
    return true;
}

function konValField_OnChange() {
    ldPortfel.setKonwersjaByField();
}

$(window).load(function() {
    form = document.getElementById('ldPortfelForm');
    if(form) {
        ldPortfel = new ldPortfelObject();
        ldPortfel.init(ldPortfelData);
        if(form.elements['action'].value == 'zlecenieKonwersji') ldPortfel.initKonwersja(ldKonwersjaJednostkiMax);
    }
});


/* ***** tpl/ldPortfel.php ***** */
function runKonwersja(fid) {
    form = document.getElementById('ldPortfelView');
    form.elements['fundusz_id'].value = fid;
    form.submit();
}