var total,added = new Hash(),li,span,currency;
var update_totals = function(e){
    total = 0;
	var increment = 0;
    if (opt = e.getElement('option[value="'+e.get('value')+'"]')) {
        increment = opt.get('rel');
    } else {
        increment = e.get('rel');
	}
	if (!increment) increment = '0.00';
	var name,url;
	if (e.tagName == 'INPUT') {
		var img = e.getParent().getElement('img');
		name = img.get('alt');
		url = img.get('rel');
		if (url != undefined) name = new Element('a',{'href' : '/item/view/' + url}).set('text',name);
		else name = new Element('span').set('text',name);
	}
	if (name != undefined) {
		if (increment.indexOf('0.00') < 1) var price = new Element('span').set('html','<br/>' + increment); // the increment isn't like 0.00 - 10.00 is allowed
		var h3 = e.getParent('li.header').getElement('h3');
		var strong = h3.getElement('strong');
		if (strong) strong.dispose();
		strong = new Element('strong');
		strong.grab(name);
		if (price) strong.grab(price);
		h3.grab(strong);
	}
    added.set(e.get('name'),parseFloat(increment.replace(/[^0-9\.]/,'')));
    added.each(function(k,v){total += k});
    if (total > 0) {
        if (li == undefined) {
            li = new Element('li',{ id : 'additional-costs' }).addClass('header');
            li.grab(new Element('h3').set('text','Additional Costs'));
            span = new Element('span');
            li.grab(span);
            document.getElement('#customise').grab(li);
        }
        li.setStyle('display','block');
        span.set('text',currency + total.toFixed(2).toString());
    } else {
        if (li != undefined) li.setStyle('display','none');
	}
}

window.addEvent('domready',function(){
    // play with the radio buttons
    var radios = $(document).getElements('input[type="radio"]');
    var alter_radios = function(e){
        e.setStyle('display','none');
        var nm = e.get('name');
        var label = e.getParent('label');
        label.addEvent('click',function(ev){
            this.getParent('form').getElements('input[name="'+nm+'"]').each(function(l){l.getParent('label').removeClass('selected')});
            e.set('checked','checked');
            update_totals(e);
            label.addClass('selected');
            ev.stop();
            return false;
        });
    };
    radios.each(alter_radios);
    // declare validation stuff first
    currency = document.getElement('#change_currency option:selected');
    if (currency) currency = currency.get('text');
    else currency = '';

    var finishes = document.getElements('select[name^="finish"]');
    finishes.addEvent('change',function(){
        update_totals(this);
    });

    var topform = document.getElement('form[action^="/shopping-bag/set-total-main"]');
    topform.addEvent('submit',function(e){
        document.id('metres-bottom').set('value',document.id('metres').get('value'));
        // see if any of the customise options are set
        var customises = document.getElements('#customise input, #customise select');
        var out = false;
        customises.each(function(e){
            var type = e.get('type');
            if (e.tagName == 'INPUT' && (type == 'radio' || type == 'checkbox')) {
                if (e.get('checked') == true) out = true;
            } else if (e.tagName == 'SELECT') {
                if (e.get('value') != '0' && e.get('value') != '') out = true;
            }
        });
        if (out == false) {
            var h3 = document.getElement('#customise-product h3');
            h3.setStyle('font-weight','bold');
            var sc = new Fx.YScroll(window,{duration : 400}).start(0,h3.getPosition().y);
        } else {
            document.id('customise-product').submit();
        }
        e.preventDefault();
        e.stop();
        return false;
    });
    // create the more link and make it do stuff
    var more = $(document).getElement('#more-fabrics');
    if (!more) return false;
    more.setStyle('display','block');
    more.addEvent('click',function(){
        var m_text = more.get('text');
        more.set('text',more.get('rel'));
        var p = this.get('href').replace(/^\//,'').split('/');
        more.set('href','/' + p[0] + '/' + (p[1].toInt() + 1));
		var ul = this.getParent('li').getElement('ul');
        new Request.JSON({
            url : '/item/customise-fabric/' + p[0] + '/' + (p[1].toInt() + 1),
            onSuccess : function(j,t){
                if (j.length == 0) {
                    more.dispose();
                    return false;
				}
                var radios = new Array();
				j.each(function(e){
                    var li = new Element('li');
                    var lbl = new Element('label')
                    var im = new Element('img',{'src' : e.image});
                    var radio = new Element('input',{
                        'type' : 'radio',
                        'name' : 'item[]',
						'value' : e.id,
						'rel' : e.rel
					});
                    radios.push(radio);
                    var hid = new Element('input',{
                        'type' : 'hidden',
                        'name' : 'rqd['+e.id+']',
                        'value' : e.rqd
                    });
                    
                    li.grab(lbl);
                    lbl.grab(im);
                    lbl.grab(radio);
                    li.grab(hid);
                    ul.grab(li);
                });
                radios.each(alter_radios);
                more.set('text',m_text);
            }.bindWithEvent(this)
        }).send();
        return false;
    });
});

Fx.YScroll = new Class({
    Extends : Fx,
    initialize : function(element,options){
        this.parent(options);
        this.element = element;
    },
    set : function(now){
        this.element.scrollTo(0,now);
    }
});

