/**
 * @author Tamas Torjek
 */
var Filter = new Class({
    category: 1,
    block: 0,
    filters: [],
    
    initialize: function(category, block, selects, filters) {
        this.category = category;
        this.block = block;
        selects = selects.split(',');
        this.json = new Request.JSON({
            url: LIVE_SITE + 'ajax/nextFilter.php',
            onFailure: ajaxError,
            onException: ajaxException,
            onSuccess: this.buildNext.bind(this)
        });
        if (filters) this.explodeFilters(filters);
        for (var i = 0; selects[i]; i++) {
            if ($(selects[i])) $(selects[i]).disabled = false;
        }
    },
    
    explodeFilters: function(filters) {
        filters = filters.split('@');
        for (var i = 0; filters[i]; i++) {
            this.filters[i] = new Object;
            filters[i] = filters[i].split(';');
            this.filters[i].category = filters[i][0];
            this.filters[i].b1 = new Object;
            this.filters[i].b2 = new Object;
            for (var j = 1; j < 3; j++) {
                if (filters[i][j]) {
                    filters[i][j] = filters[i][j].split('|');
                    this.filters[i]['b' + j].main = filters[i][j][0].split(',');
                    if (filters[i][j][1]) {
                        this.filters[i]['b' + j].opt = filters[i][j][1].split(',');
                    }
                } else {
                    this.filters[i]['b' + j].main = [];
                    this.filters[i]['b' + j].opt = [];
                }
            }
        }
    },
    
    setTab: function(category) {
	
        if (this.category == category) {
            if (!$('filter-tab-' + this.category).hasClass('active-filter-tab')) {
                $('filter-tab-' + this.category).addClass('active-filter-tab');
            }
            if (!$('filter-wrapper-' + this.category).hasClass('active-filter-wrapper')) {
                $('filter-wrapper-' + this.category).addClass('active-filter-wrapper');
            }
        } else {
            $('filter-tab-' + this.category).removeClass('active-filter-tab');
            $('filter-wrapper-' + this.category).removeClass('active-filter-wrapper');
            $('filter-tab-' + category).addClass('active-filter-tab');
            $('filter-wrapper-' + category).addClass('active-filter-wrapper');
        }
        this.category = category;
        if ($('fw-block-selector-' + category + '-0') && 
            $('fw-block-selector-' + category + '-0').checked) this.block = 0;
        else this. block = 1;
    },
    
    setBlock: function(category, block) {
		var needRemove = 1 - block;
		if ($('fw-block-' + this.category + '-' + needRemove))
			$('fw-block-' + this.category + '-' + needRemove).removeClass('activeblock');
        $('fw-block-' + category + '-' + block).addClass('activeblock');
        this.category = category;
        this.block = block;
		
    },
    
	setCheck: function(category,block){	
		$$('.fw-block-selector').each(function(el){
			el.checked=false;
		});
		$('fw-block-selector-'+this.category+'-'+block).checked=true;
	},
    nextFilter: function(el, name, categoryId) {
        var next, select;
        var found = nullValue = false;
        var data = new Object;
        data.values = new Array();
        data.ids = new Array();
        data.category = this.category;
        data.block = this.block;
        for (var i = 0; this.filters[i]; i++) {
            if (this.filters[i].category == this.category) {
                var b = this.block + 1;
                var mainLegth = this.filters[i]['b' + b].main.length;
                if (this.filters[i]['b' + b].opt) {
                    var selects = this.filters[i]['b' + b].main.concat(this.filters[i]['b' + b].opt);
                } else var selects = this.filters[i]['b' + b].main;
                if (selects[selects.length - 1] == name) return;
                for (var j = 0; selects[j]; j++) {
                    if (j == mainLegth - 1) data.lastMain = selects[j];
                  
                    select = $(selects[j]+'-'+this.category+'-'+this.block);
                    if (found === true) {
                        select.disabled = true;
                        select.length = 1;
                    } else {
                        data.values.push(select.options[select.selectedIndex].value);
                        data.ids.push(selects[j]);
                    }
                    if (name == selects[j]) {
                        data.next = selects[j + 1];
                        data.optional = 0;
                        if (this.filters[i]['b' + b].opt) {
                            for (var k = 0; this.filters[i]['b' + b].opt[k]; k++) {
                                if (data.next == this.filters[i]['b' + b].opt[k]) {
                                    data.optional = 1;
                                    break;
                                }
                            }
                        } 
                        found = true;
                        if (select.options[select.selectedIndex].value == 'null') {
                            data.next = selects[j];
                        }
                    }
                }
                break;
            }
        }
        if (categoryId) data.categoryId = categoryId;
        if (gumi_meret) data.gumi_meret = gumi_meret;
        this.nextValues(data);
    },
    
    nextValues: function(data) {
        this.json.send('json='+JSON.encode(data));
    },
    
    buildNext: function(data, text) {
        //$('top_right').set('html', text);
        var selects;
        var select = $(data.next+'-'+this.category+'-'+this.block);
        for (var i = 0; data.values[i]; i++) {
            select.options[i+1] = new Option(data.titles[i], data.values[i]);
        }
        select.disabled = false;
        for (var i = 0; this.filters[i]; i++) {
            if (this.filters[i].category == this.category) {
                selects = this.filters[i]['b' + (this.block + 1)].main;
                break;
            }
        }
        if (data.next == selects[selects.length - 1]) {
            $('submit-'+this.category+'-'+this.block).disabled = false;
        }
    },
    
    checkForm: function(el) {
        var selects, select;
        var valid = true;
        for (var i = 0; this.filters[i]; i++) {
            if (this.filters[i].category == this.category) {
                selects = this.filters[i]['b' + (this.block + 1)].main;
                break;
            }
        }
        if (selects) {
            for (var i = 0; selects[i]; i++) {
                select = $(selects[i]+'-'+this.category+'-'+this.block);
                if (select.options[select.selectedIndex].value == 'null') {
                    valid = false;
                }
            }
        } else valid = false;
        if (!valid) {
            alerter.alert('Nincs elég adat!', 'Kérem válassza ki a kötelező adatokat!');
        }
        return valid;
    },
    
    //felniajanlohoz
    getRims: function(id) {
        var filters = new Object;
        filters.id = id;
        var valid = this.checkForm();
        if (valid) {
            filters.ids = new Array;
            filters.values = new Array;
            for (var i = 0; this.filters[0].b1.main[i]; i++) {
                filters.ids.push(this.filters[0].b1.main[i]);
                select = $(this.filters[0].b1.main[i]+'-1-0');
                filters.values.push(select.options[select.selectedIndex].value);
            }
            var json = new Request.JSON({
                url: LIVE_SITE + 'ajax/getRims.php',
                onFailure: ajaxError,
                onException: ajaxException,
                onSuccess: this.showRims.bind(this)
            });
            json.send('json='+JSON.encode(filters));
        }
    },    
    
    //gumiajánlóhoz
    getGumis: function(id) {
        var filters = new Object;
        filters.id = id;
        var valid = this.checkForm();
        if (valid) {
            filters.ids = new Array;
            filters.values = new Array;
            for (var i = 0; this.filters[0].b1.main[i]; i++) {
                filters.ids.push(this.filters[0].b1.main[i]);
                select = $(this.filters[0].b1.main[i]+'-1-0');
                filters.values.push(select.options[select.selectedIndex].value);
            }
            var json = new Request.JSON({
                url: LIVE_SITE + 'ajax/getGumis.php',
                onFailure: ajaxError,
                onException: ajaxException,
                onSuccess: this.showRims.bind(this)
            });
            json.send('json='+JSON.encode(filters));
        }
    },
    
    showRims: function(data, text) {
        $('ff-rims-wrapper').innerHTML = data.html;
    }
});

