YAHOO.catFilter = function(){
	var $D = YAHOO.util.Dom;
	var $E = YAHOO.util.Event;

 	return {
        init:function(){
            $E.on('metal', 'change', YAHOO.catFilter.filterChange, 'metal');
            $E.on('price_range', 'change', YAHOO.catFilter.filterChange, 'price_range');
            $E.on('shape_f', 'change', YAHOO.catFilter.filterChange, 'shape_f');
            var pagers = YAHOO.util.Dom.getElementsByClassName('paging_control');
            for (var p=0;p<pagers.length;p++) {
                $E.on(pagers[p], 'change', YAHOO.catFilter.pageChange);
            }
            var metals = document.getElementById('metal_icons');
            if (metals) {
                var inputs = metals.getElementsByTagName('input');
                for (var i=0;i<inputs.length;i++) {
                    $E.on(inputs[i], 'click', YAHOO.catFilter.filterChange, 'metals[]');
                }
            }
			var metals_plus = document.getElementById('metal_icons_plus');
            if (metals_plus) {
                var inputs = metals_plus.getElementsByTagName('input');
                for (var i=0;i<inputs.length;i++) {
                    $E.on(inputs[i], 'click', YAHOO.catFilter.filterChange, 'metals[]');

                }
            }
			var category = document.getElementById('category_icons');
            if (category) {
                var inputs = category.getElementsByTagName('input');
                for (var i=0;i<inputs.length;i++) {
                    $E.on(inputs[i], 'click', YAHOO.catFilter.filterChange, 'categories[]');

                }
            }
        },
        filterChange:function(e, v){
            var new_val;
            var name;
            if (this.nodeName.toLowerCase() == 'select') {
                new_val = this.options[this.selectedIndex].value;
            } else if (this.nodeName.toLowerCase() == 'input' && this.getAttribute('type').toLowerCase() == 'checkbox') {
                name = this.value;
                new_val = this.checked;
            }
            var updated = false;
            if (new_val != qs_vars[v] || this.nodeName.toLowerCase() == 'input') {
                if (v.indexOf('[]') !== -1) {
                    if (new_val) {
                        if (qs_vars[v] && qs_vars[v].length > 0) {
                            if (qs_vars[v].toString().indexOf(name)===-1) {
                                qs_vars[v].push(name);
                                updated = true;
                            }
                        } else {
                            qs_vars[v] = new Array(name);
                            updated = true;
                        }
                    } else {
                        var arr = new Array();
                        for(var i=0;i<qs_vars[v].length;i++) {
                            if (qs_vars[v][i] != name) {
                                arr.push(qs_vars[v][i]);
                            } else {
                                updated = true;
                            }
                        }
                        qs_vars[v] = arr;
                    }
                } else {
                    updated = true;
                    qs_vars[v] = new_val;
                }
                if (updated) {
                    window.location.href = YAHOO.catFilter.bulidURL();
                }
            }
        },
        pageChange:function(){
            if (this.value != page) {
                window.location.href = YAHOO.catFilter.bulidURL(this.options[this.selectedIndex].value);
            }
        },
        bulidURL:function(new_page){
            var url = base_url;
            if (new_page != undefined) {
                url += '/' + new_page;
            } else if (page) {
                url += '/' + 1;
            }
            var qs = new Array();
            var v;
            for (v in qs_vars) {
                if (qs_vars[v]) {
                    if (v.indexOf('[]') !== -1) {
                        if (qs_vars[v].length > 0) {
                            qs.unshift(v + '=' + qs_vars[v].join('&' + v + '='));
                        }
                    } else {
                        qs.unshift(v + '=' + qs_vars[v]);
                    }
                }
            }
            qs = qs.join('&');
            if (qs) {
                url += '?' + qs;
            }
            return url;
        }
    };
}();

YAHOO.util.Event.addListener(window, "load", YAHOO.catFilter.init);
