Event.observe(window, 'load', init, false);

function init(){
	var elements = document.getElementsByClassName('buyanchor');
	for (var i = 0; i < elements.length; i++) {
      var elem = elements[i];
      elem.onclick = function(){ showform(this,this.innerHTML); return false; };
   };
	if ($('form_0')) {
		var formelem = $('form_0');
		formelem.onsubmit = function(){ sendform('0'); return false; };
		init_giftvalue_converter('0');
	};
}

function showform(anchor,btnlabel){
	var anchorid = anchor.id;
   var itemid = anchorid.split('_')[1];
	var target = 'buy_'+itemid;
	var patience = setTimeout(function(){location.href = anchor.href},5000)
	var myAjax = new Ajax.Updater(target, anchor.href, {
		method: 'get',
		onSuccess: function() {
			//new Effect.BlindDown(target, {duration: 0.6});
			//initialise_form(itemid);
		},
		onFailure: function() {
			location.href = anchor.href;
		},
		onComplete: function() {
			clearTimeout(patience);
			initialise_form(itemid,btnlabel);
			Event.addBehavior.reload();
		}
	});
	if (typeof Prototype=='undefined') {
		// if (mysteriously) Prototype isn't loaded properly, do something sensible...
		location.href = anchor.href;
	} else {
		var itemblock = $('item_'+itemid);
		//itemblock.className = 'open';
		itemblock.removeClassName('available').addClassName('open');
		var buyanchor = $('buyanchor_'+itemid);
		buyanchor.onclick = function(){ hideform(this,btnlabel); return false; }
		Element.update(buyanchor,'Close');
		new Effect.BlindDown(target, {duration: 0.6}); // now includes loader gif
	}
}

function hideform(anchor,btnlabel){
	var anchorid = anchor.id;
   var itemid = anchorid.split('_')[1];
	var buyblock = 'buy_'+itemid;
	new Effect.BlindUp(buyblock, {duration: 0.4});
	var itemblock = $('item_'+itemid);
	if ($('thanks_'+itemid) && !($$('span.remaining_'+itemid).first() && (parseFloat($$('span.remaining_'+itemid).first().innerHTML) > 0))) {
		//itemblock.className = 'taken';
		itemblock.removeClassName('open').addClassName('taken');
		if ($('reserved_'+itemid)) {
			$('reserved_'+itemid).show();
		}
		if ($$('.disclosure_'+itemid)) {
			$$('.disclosure_'+itemid).each(function(elem){
				elem.hide();
			});
		}
	} else {
		//itemblock.className = 'available';
		itemblock.removeClassName('open').addClassName('available');
		var buyanchor = $('buyanchor_'+itemid);
		buyanchor.onclick = function(){ showform(this,btnlabel); return false; }
		Element.update(buyanchor,btnlabel);
	}
}

function initialise_form(itemid,btnlabel){
	if ($('form_'+itemid)) {
		var formelem = $('form_'+itemid);
		formelem.onsubmit = function(){ sendform(itemid,btnlabel); return false; };
	}
	init_giftvalue_converter(itemid);
}

function init_giftvalue_converter(itemid) {
	if ($('converted_'+itemid)) {
		new Form.Element.Observer( 'giftvalue_'+itemid, 0.8, function(el, val) {
			update_converted_giftvalue(itemid,val);
		});
	}
}

function update_converted_giftvalue(itemid,val) {
	var target = 'converted_'+itemid;
	var formaction = $('form_'+itemid).action;
	var url = formaction.replace('/buy','/convert');
	var parms = 'value=' + val;
	var myAjax = new Ajax.Updater(target, url, {
		method: 'get',
		parameters: parms
	});
}

function sendform(itemid,btnlabel){
	$('submitform_'+itemid).hide();
	$('loadergif_'+itemid).show();
	var formelem = $('form_'+itemid);
	var target = 'buy_'+itemid;
	var giftvalue = $('giftvalue_' + itemid).value;
	var giftvalue_index;
	if ($('multiple_'+itemid)) {
		giftvalue_index = $('giftvalue_'+itemid).selectedIndex;
	}
	var myAjax = new Ajax.Updater(target, formelem.action, {
		method: 'post',
		parameters: Form.serialize(formelem),
		onComplete: function() {
			var msgelem = 'message_'+itemid;
			initialise_form(itemid);
			update_checkout_total(itemid,giftvalue);
			update_remaining_value(itemid,giftvalue_index);
			init_continue_btn(itemid,btnlabel);
			if (usenifty == true) {
				Nifty('a.checkout_'+itemid,"transparent small");
			}
			init_repeatgift_link(itemid); // 31 May 2010
			Event.addBehavior.reload();
		}
	});
}

function update_checkout_total(itemid,giftvalue) {
	if ($$('.checkout_total') && $('thanks_' + itemid)) {
		var curtotal = $$('.checkout_total').first().innerHTML;
		var newtotal = parseFloat(curtotal) + parseFloat(giftvalue);
		newtotal = newtotal + ''; // convert to string
		newtotal = sprintf('%.2f',newtotal);
		$$('.checkout_total').each(function(elem) {
			elem.update(newtotal);
		});
		if (curtotal == '0') {
			$$('.checkout_bar').each(function(elem) {
				new Effect.Appear(elem);
			});
		}
	}
}

function update_remaining_value(itemid,idx) {
	if ($('multiple_'+itemid)) {
		if ($('thanks_' + itemid)) {
			idx = idx + 1;
			var cur_remaining = $$('span.remaining_'+itemid).first().innerHTML;
			var new_remaining = parseFloat(cur_remaining) - idx;
			if (new_remaining > 0) {
				$$('span.remaining_'+itemid).each(function(remains){
					Element.update(remains,new_remaining);
				});
			} else {
				$('multiple_'+itemid).hide();
				$$('span.remaining_'+itemid).each(function(remains){
					Element.update(remains,new_remaining); // used as a helper for hideform()
				});
			}
		}
	}
}

function init_continue_btn(itemid,btnlabel) {
	if ($$('#thanks_'+itemid+' .continuebtn')) {
		$$('#thanks_'+itemid+' .continuebtn').each(function(elem) {
			elem.onclick = function(){ hideform($('buyanchor_'+itemid),btnlabel); return false; }
		})
	}
}

function init_repeatgift_link(itemid) {
	$$('.repeatgift_'+itemid).each(function(elem) {
		elem.onclick = function(){
			$('form_'+itemid).show();
			$('already_'+itemid).hide();
			return false;
		};
	});
}