document.observe('dom:loaded', function() {
	bindAddButtons();
    bindFollowButtons();
    bindSizerSelects();
    bindTransformSwitch();
    unfollowButtons();
});

function bindAddButtons(referal) {
	var referal = referal || '';
	var css     = 'button.add';

	if (referal != '') {
		css = referal+' '+css;
	}

	$$(css).each(function (b) {
		b.observe('click', addProduct.curry(b));
	});
}

function bindFollowButtons(referal) {
	var referal = referal || '';
	var css     = 'button.follow';

	if (referal != '') {
		css = referal+' '+css;
	}

	$$(css).each(function (b) {
		b.observe('click', follow.curry(b));
	});
}

function bindTransformSwitch(referal) {
    var referal = referal || '';
    var css1 = '.transform';
    var css2 = '.card-image img';

    if (referal != '') {
		css1 = referal+' '+css1;
		css2 = referal+' '+css2;
	}

    $$(css1).each(function (s) {
        s.observe('click', function (e) {
            $$(css2).each (function (i) {
                var src = i.readAttribute('src');

                i.observe('load', function() {
                  i.stopObserving('load');
                  new Effect.Opacity(i.id, {from: 0.5, to: 1, duration: 0.5});
                });

                new Effect.Opacity(i.id, {from: 1, to: 0, duration: 0});

                if (s.hasClassName('night')) {
                    s.removeClassName('night').addClassName('day');
                    i.writeAttribute('src', src.replace(/([0-9]+)a/, '$1b'));
                }
                else {
                    s.removeClassName('day').addClassName('night');
                    i.writeAttribute('src', src.replace(/([0-9]+)b/, '$1a'));
                }
            });
        });
    });
}

function bindSizerSelects() {
    $$('.sizer select').each(function (s) {
		s.observe('change', function (e) {
		    var parts = e.element().value.split('-');

            goToUrl('result.php?start='+parts[0]+'&chunk='+parts[1]);
		});
	});
}

function follow(button, event) {
    var id   = retrieveKey(button.id);
    var data = getProduct(id);

    blockFollowButton(button);

    new Ajax.Request('action.php?what=follow', {method: 'post', parameters: {p: data['id'], t: translateType(data['type'])}});
}

function unfollowButtons() {
    var css     = 'button.follow';
    var query   = {};

	$$(css).each(function (b) {
        id   = retrieveKey(b.id);
	    data = getProduct(id);

        query[id] = {id: data['id'], type: translateType(data['type'])};
	});

    new Ajax.Request('action.php?what=checkfollow', {method: 'post', parameters: {data: Object.toJSON(query)}, onComplete: blockFollowButtons});
}

function blockFollowButtons(response) {
    response.responseJSON.each(function (e) {
        blockFollowButton('follow'+e);
    });
}

function blockFollowButton(button) {
	new Effect.Morph(button, {style: 'opacity: 0;', duration: 0.25});
}
