var formObj = {
	
	init : function(){
	
		this.addFocusActions();
		this.initPaymentForms();
		this.initProductLists();
	},
	
	
	
	addFocusActions : function(){
		var els = document.getElementsByTagName('*');
		for (var i = 0, il = els.length; i < il; i++){
			switch (els[i].getAttribute('focusAction')){
				case 'highlight':
					addEvent(els[i], 'focus', function(){ this.select() });
				break;
				case 'delete':
					// function deletes input value on focus then removes itself, so the deletion only happens once
					var func = 	els[i].tagName == 'input' ? 
											function(){ this.setAttribute('value', this.value = ''); removeEvent(this, 'focus', func); } : 
											function(){ this.value = this.innerHTML = ''; removeEvent(this, 'focus', func); };
					addEvent(els[i], 'focus', func);
				break;
			}
		}
	},
	
	initPaymentForms : function(){
		var containers = getElementsByClass('paymentInput'), inputs, labels, def, checkboxes, that = this, ccYear, y, ccNums;
		for (var i = 0; i < containers.length; i++){
			checkboxes = getElementsByClass('chooseType', containers[i])[0];
			labels = checkboxes.getElementsByTagName('label');
			inputs = checkboxes.getElementsByTagName('input');
			for (var j = 0; j < inputs.length; j++){
				if (def == undefined && !inputs[j].className.match('disabled')){ // use first enabled type as default
					def = j;
				}
				inputs[j].onclick = (function(container){
					return function(){
						that.selectPaymentType(this.value, container);
					};
				})(containers[i]);
				labels[j].setAttribute('for', (inputs[j].id = 'randomId-' + Math.random()));
			}
			
			// fill year select box to keep it current
			//console.log(getElementsByClass('chooseType', containers[i]));
			ccYear = getElementsByClass('expiry', getElementsByClass('paymentOption creditCard', containers[i])[0])[0].getElementsByTagName('select')[1];
			ccYear.options.length = 0;
			for (var i = (y = (new Date()).getFullYear()); i < y + 12; i++)
				ccYear.options[ccYear.options.length] = (new Option(i));
			
			//console.log(def);
			// select default payment type
			this.selectPaymentType(inputs[def].value, containers[i]);
			inputs[def].checked = true;
			
			// set up cc num auto move focus
			ccNums = getElementsByClass('number', getElementsByClass('paymentOption creditCard', containers[i])[0])[0].getElementsByTagName('input');
			for (var i = 0; i < ccNums.length; i++){
				ccNums[i].onkeyup = (function(next){
					return function(){
						if (this.value.length >= 4 && next)
							next.focus();
					};
				})(ccNums[i + 1] || null);
				ccNums[i].onfocus = function(){
					this.select();
				};
			}
			
		}
	},
	selectPaymentType : function(type, container){
		var options = getElementsByClass('paymentOption', container);
		for (var i = 0; i < options.length; i++){
			if (options[i].className.match(type))
				options[i].style.display = 'block';
			else
				options[i].style.display = 'none';
		}
	},
	
	initProductLists : function(){
		var containers = getElementsByClass('product-listInput'), inputs, sumFunc, that = this;
		for (var i = 0; i < containers.length; i++){
			inputs = containers[i].getElementsByTagName('input');
			
			sumFunc = (function(container){
				return function(){
					that.sumProductPrice(container);
				}
			})(containers[i]);
			
			for (var j = 0; j < inputs.length; j++){
				inputs[j].onchange = inputs[j].onkeyup = sumFunc;
			}
			
		}
	},
	
	sumProductPrice : function(container){
		var inputs = container.getElementsByTagName('input'),
				total = 0;
			
		for (var j = 0; j < inputs.length; j++){
			inputs[j].value = parseInt(inputs[j].value) || 0;
			total += inputs[j].value * parseFloat(inputs[j].parentNode.innerHTML.match(/\$([0-9\.]+)/)[1]);
		}
		
		getElementsByClass('total', container, 'li')[0].getElementsByTagName('span')[0].innerHTML = '$' + total
	}
	
};

addEvent(window, 'load', function(){
	formObj.init();
});
