// page init
$(function() {
	initFeeForm();
	initOrderForm();
	validateForms();
});

// validate forms
function validateForms() {
	$('form.validate-form').each(function(){
		initFormValidation($(this), $(this).find('.error-list-holder'));
	});
}

// form validation
function initFormValidation(_validateForm, _errorListHolder) {
	var _validateOnce = true;
	var _easing = 'easeOutExpo';
	var _animSpeed = 850;
	var _regEmail = /^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$/;

	_validateForm.each(function(){
		var _errorClass = 'error';
		var _form = $(this);
		var _errors = '';
		var _valOnce = false;

		function checkFields() {
			var _flag = false;
			_errors = '';

			// fields validation
			_form.find('input.required-email').each(function(){
				if(!_regEmail.test($(this).val())) addError($(this));
			});
			_form.find('div.validate-phone').each(function(){
				var _items = $(this).find('input[type="text"]').not('.skip');
				var _fill = true;
				_items.each(function(){if(!$(this).val().length) _fill=false});
				if(!_fill) addError($(this));
			});
			_form.find('input.required, textarea.required').each(function(){
				if(!$(this).val().length || $(this).val() == $(this).attr('alt')) addError($(this));
			});
			_form.find('input.required-ccard').each(function(){
				if($(this).val().length < 13) addError($(this));
			});
			_form.find('input.required-zip').each(function(){
				if($(this).val().length < 5) addError($(this));
			});
			_form.find('select.required-select').each(function(){
				if(!$(this).attr('selectedIndex')) addError($(this));
			});
			_form.find('input.required-radio').each(function(){
				var _items = $('input[name='+$(this).attr('name')+']');
				var _flag = true;
				_items.each(function(){
					if($(this).is(':checked')) _flag = false;
				})
				if(_flag) addError($(this));
			});

			// error class adding
			function addError(_obj) {
				_errors+=_obj.attr('title')+'\n';
				_valOnce = true;
				_flag=true;
			}
			return _flag;
		}

		// catch form submit event
		_form.submit(function(){
			if(!(_validateOnce && _valOnce)) {
				if(checkFields()) {
					_errorListHolder.empty();
					var _list = $('<ul />');
					_errors = _errors.split('\n');
					for(var i=0; i<_errors.length-1; i++)
						_list.append('<li>'+_errors[i]+'</li>');
					_errorListHolder.append(_list);
					$.scrollTo(_validateForm, _animSpeed, {easing:_easing});
					return false;
				}
			}
		});
	});
}

function initFeeForm() {
	var _list1 = $('#list1 input[type="radio"]');
	var _list2 = $('#list2 input[type="radio"]');
	var _total2 = $('#list2-total');
	var _total1 = $('#list1-total');
	var _total = $('#grand-total');

	var _val1=0;;
	var _val2=0;

	if(_list1.length && _list2.length) {
		_list1.click(function(){
			_val1 = parseInt(_list1.filter(':checked').val());
			reCalc();
		});
		_list2.click(function(){
			_val2 = parseInt(_list2.filter(':checked').val());
			reCalc();
		});

		function reCalc() {
			_total1.text('$'+_val1);
			_total2.text('$'+_val2);
			_total.val("$" + (_val1+_val2));
		}
	}
}

function initOrderForm() {
	$('form.order').each(function(){
		var _form = $(this);
		initFormValidation(_form, _form.find('.error-list-holder'));

		// payment options
		var _labTitles = _form.find('input.lab-name');
		var _labFullPayment = _form.find('input.lab-fullpayment');
		var _labMonth6 = _form.find('input.lab-month6');
		var _labMonth9 = _form.find('input.lab-month9');
		var _multiplier = 1;

		// grand total
		var _grandTotal = _form.find('input.grand-total');
		var _grandDiscountTotal = _form.find('input.grand-discount-total');

		// laboratory select
		var _labBox = _form.find('div.laboratory');
		var _labInputs = _labBox.find('input[type="radio"]');
		var _labTotal = _labBox.find('input.total-sum');
		var _labType = _labBox.find('input.lab-total');
		_labInputs.click(function(){
			reCalc();
		});

		// storage select
		var _storageBox = _form.find('div.storage-plan');
		var _storageInputs = _storageBox.find('input[type="radio"]');
		var _storageTotal = _storageBox.find('input.total-sum');
		var _storageType = _storageBox.find('input.storage-type');
		_storageInputs.click(function(){
			reCalc();
		});

		// financing select
		var _financingBox = _form.find('div.financing');
		var _financingInputs = _financingBox.find('input[type="radio"]');
		var _financingType = _financingBox.find('input.financing-type');

		_financingInputs.click(function(){
			reCalc();
		});

		// recalculate fields
		function genPrice(_price) {
			return ('$ '+parseFloat(_price).toFixed(2));
		}
		function reCalc() {
			if(_labInputs.filter(':checked').length) {
				// select laboratory
				var _labTotalVal = parseInt(_labInputs.filter(':checked').val());
				_labTotal.val(genPrice(_labTotalVal));

				// select storage plan
				if(_storageInputs.filter(':checked').length) {
					var _labStorageVal = parseInt(_storageInputs.filter(':checked').val());
					_storageTotal.val(genPrice(_labStorageVal));

					// financing box
					var _selectedFinancing = _financingInputs.filter(':checked');
					var _selectedIndex = _financingInputs.index(_selectedFinancing);
					_labFullPayment.val('');_labMonth6.val('');_labMonth9.val('');
					if(_selectedIndex == 0) _labFullPayment.val(genPrice(_labTotalVal+_labStorageVal));
					if(_selectedIndex == 1) _labMonth6.val(genPrice((_labTotalVal+_labStorageVal)/6));
					if(_selectedIndex == 2) _labMonth9.val(genPrice((_labTotalVal+_labStorageVal)/9));
					_labTitles.val('').eq(_selectedIndex).val($('label[for="'+_labInputs.filter(':checked').attr('id')+'"]').children().eq(0).text());

					_storageType.val($('label[for="'+_storageInputs.filter(':checked').attr('id')+'"]').children().eq(0).text())
					_labType.val($('label[for="'+_labInputs.filter(':checked').attr('id')+'"]').children().eq(0).text())
					_financingType.val($('label[for="'+_financingInputs.filter(':checked').attr('id')+'"]').text())

					// grand total box
					var _multiplier = parseInt(_selectedFinancing.val());
					_grandTotal.val(genPrice(_labTotalVal+_labStorageVal));
					_grandDiscountTotal.val(genPrice((_labTotalVal+_labStorageVal)/_multiplier));
				}
			}
		}
		reCalc();

		// submit form
		_form.find('a.submit').click(function(){
			_form.submit();
			return false;
		});
	});
}


/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery. Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 */
;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
/*
 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
*/
jQuery.easing.jswing=jQuery.easing.swing;jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(e,f,a,h,g){return jQuery.easing[jQuery.easing.def](e,f,a,h,g)},easeInQuad:function(e,f,a,h,g){return h*(f/=g)*f+a},easeOutQuad:function(e,f,a,h,g){return -h*(f/=g)*(f-2)+a},easeInOutQuad:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f+a}return -h/2*((--f)*(f-2)-1)+a},easeInCubic:function(e,f,a,h,g){return h*(f/=g)*f*f+a},easeOutCubic:function(e,f,a,h,g){return h*((f=f/g-1)*f*f+1)+a},easeInOutCubic:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f+a}return h/2*((f-=2)*f*f+2)+a},easeInQuart:function(e,f,a,h,g){return h*(f/=g)*f*f*f+a},easeOutQuart:function(e,f,a,h,g){return -h*((f=f/g-1)*f*f*f-1)+a},easeInOutQuart:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f+a}return -h/2*((f-=2)*f*f*f-2)+a},easeInQuint:function(e,f,a,h,g){return h*(f/=g)*f*f*f*f+a},easeOutQuint:function(e,f,a,h,g){return h*((f=f/g-1)*f*f*f*f+1)+a},easeInOutQuint:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f*f+a}return h/2*((f-=2)*f*f*f*f+2)+a},easeInSine:function(e,f,a,h,g){return -h*Math.cos(f/g*(Math.PI/2))+h+a},easeOutSine:function(e,f,a,h,g){return h*Math.sin(f/g*(Math.PI/2))+a},easeInOutSine:function(e,f,a,h,g){return -h/2*(Math.cos(Math.PI*f/g)-1)+a},easeInExpo:function(e,f,a,h,g){return(f==0)?a:h*Math.pow(2,10*(f/g-1))+a},easeOutExpo:function(e,f,a,h,g){return(f==g)?a+h:h*(-Math.pow(2,-10*f/g)+1)+a},easeInOutExpo:function(e,f,a,h,g){if(f==0){return a}if(f==g){return a+h}if((f/=g/2)<1){return h/2*Math.pow(2,10*(f-1))+a}return h/2*(-Math.pow(2,-10*--f)+2)+a},easeInCirc:function(e,f,a,h,g){return -h*(Math.sqrt(1-(f/=g)*f)-1)+a},easeOutCirc:function(e,f,a,h,g){return h*Math.sqrt(1-(f=f/g-1)*f)+a},easeInOutCirc:function(e,f,a,h,g){if((f/=g/2)<1){return -h/2*(Math.sqrt(1-f*f)-1)+a}return h/2*(Math.sqrt(1-(f-=2)*f)+1)+a},easeInElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return -(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e},easeOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return g*Math.pow(2,-10*h)*Math.sin((h*k-i)*(2*Math.PI)/j)+l+e},easeInOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k/2)==2){return e+l}if(!j){j=k*(0.3*1.5)}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}if(h<1){return -0.5*(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e}return g*Math.pow(2,-10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j)*0.5+l+e},easeInBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*(f/=h)*f*((g+1)*f-g)+a},easeOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*((f=f/h-1)*f*((g+1)*f+g)+1)+a},easeInOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}if((f/=h/2)<1){return i/2*(f*f*(((g*=(1.525))+1)*f-g))+a}return i/2*((f-=2)*f*(((g*=(1.525))+1)*f+g)+2)+a},easeInBounce:function(e,f,a,h,g){return h-jQuery.easing.easeOutBounce(e,g-f,0,h,g)+a},easeOutBounce:function(e,f,a,h,g){if((f/=g)<(1/2.75)){return h*(7.5625*f*f)+a}else{if(f<(2/2.75)){return h*(7.5625*(f-=(1.5/2.75))*f+0.75)+a}else{if(f<(2.5/2.75)){return h*(7.5625*(f-=(2.25/2.75))*f+0.9375)+a}else{return h*(7.5625*(f-=(2.625/2.75))*f+0.984375)+a}}}},easeInOutBounce:function(e,f,a,h,g){if(f<g/2){return jQuery.easing.easeInBounce(e,f*2,0,h,g)*0.5+a}return jQuery.easing.easeOutBounce(e,f*2-g,0,h,g)*0.5+h*0.5+a}});
