// page init
$(function() {
	initOrderForm();
	initCheckboxAutocomplete();
	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('input.required-confirm-email').each(function(){
				var _confEmail = $(this).val();
				var _trueEmail = $(this).parents('div.cols1').find('input.required-email').val();
				if(_trueEmail != _confEmail) 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 initCheckboxAutocomplete(){
	var _form = $('form.order');
	var _checkshiping = _form.find('input.check-shipping');
	
	//billing
	_billingArray = [];
	var _billingAddress1 = _form.find('#address-05');
	var _billingAddress2 = _form.find('#address-06');
	var _billingCity = _form.find('#city-07');
	var _billingState = _form.find('#state-07');
	var _billingZip = _form.find('#zip-08');
	_billingArray.push(_billingAddress1,_billingAddress2,_billingCity,_billingState,_billingZip);
	
	//shipping
	_shippingArray = [];
	var _shippingAddress1 = _form.find('#in-05');
	var _shippingAddress2 = _form.find('#in-06');
	var _shippingCity = _form.find('#in-07');
	var _shippingState = _form.find('#sel-07');
	var _shippingZip = _form.find('#in-08');
	
	_shippingArray.push(_shippingAddress1,_shippingAddress2,_shippingCity,_shippingState,_shippingZip);
	
	function reCalc(){
		if (_checkshiping.is(':checked')) {
			for (var i = 0; i < _billingArray.length; i++) {
				_shippingArray[i].val(_billingArray[i].val());
			}
		} else {
			for (var i = 0; i < _billingArray.length; i++) {
				_shippingArray[i].val('');
			}
		}
	}
	
	for (var i = 0; i < _billingArray.length; i++) {
		_billingArray[i].blur(function(){
			if (_checkshiping.is(':checked')) {
				reCalc();
			}	
		});
	}
	
	_checkshiping.click(function(){
		reCalc();
	});
	
	reCalc();
	
}
function initOrderForm() {
	$('form.order').each(function(){
		var _form = $(this);
		initFormValidation(_form, _form.find('.error-list-holder'));
		
		
		// Fetal Doppler Model & Accessories:
		var _fetalBox = _form.find('div.doppler');
		var _fetalRadios = _fetalBox.find('input[type="radio"]');
		var _fetalCheckboxes = _fetalBox.find('input[type="checkbox"]');
		
		var _fetalTotal = _fetalBox.find('input.total-sum');
		var _dopplerType = _fetalBox.find('input.doppler-type');
		var _accessoriesType = _fetalBox.find('input.accessories-type');
		
		_fetalRadios.click(function(){
			reCalc();
		});
		_fetalCheckboxes.click(function(){
			reCalc();
		});
		
		//Shipping 
		var _shipingBox = _form.find('div.shipping-plan');
		var _shipingInputs = _shipingBox.find('input[type="radio"]');
		var _shipingTotal = _shipingBox.find('input.total-sum');
		var _shipingType = _shipingBox.find('input.shipping-type');
		
		_shipingInputs.click(function(){
			reCalc();
		});
		
		// grand total
		var _grandTotal = _form.find('input.grand-total');
		
		// recalculate fields
		function genPrice(_price) {
			return ('$ '+parseFloat(_price).toFixed(2));
		}
		
		function reCalc() {
			if (_fetalRadios.filter(':checked').length) {
				var _fetalRadiosVal = parseFloat(_fetalRadios.filter(':checked').val());
				_dopplerType.val($('label[for="'+_fetalRadios.filter(':checked').attr('id')+'"]').children().eq(0).text() + '  ' + $('label[for="'+_fetalRadios.filter(':checked').attr('id')+'"]').children().eq(1).text() )
				
				
				
				var _fetalCheckboxesVal = 0;
				var _accessoriesTypeVal = '';
				_fetalCheckboxes.filter(':checked').each(function(i){
					_fetalCheckboxesVal += parseFloat($(this).val());
					_accessoriesTypeVal += ($('label[for="'+_fetalCheckboxes.filter(':checked').eq(i).attr('id')+'"]').children().eq(0).text() + '  '+ $('label[for="'+_fetalCheckboxes.filter(':checked').eq(i).attr('id')+'"]').children().eq(1).text() +'<br />');
				});
				
				_accessoriesType.val(_accessoriesTypeVal)
				
				if (_fetalCheckboxes.filter(':checked').length) {
					_fetalTotal.val(genPrice(_fetalRadiosVal + _fetalCheckboxesVal));
				} else {
					_fetalTotal.val(genPrice(_fetalRadiosVal));
				}
				
				if (_shipingInputs.filter(':checked').length) {
					var _shipingTotalVal = parseInt(_shipingInputs.filter(':checked').val());
					_shipingTotal.val(genPrice(_shipingTotalVal));
					_shipingType.val($('label[for="'+_shipingInputs.filter(':checked').attr('id')+'"]').children().eq(0).text() + '  ' + $('label[for="'+_shipingInputs.filter(':checked').attr('id')+'"]').children().eq(1).text());
					
					// grand total box
					_grandTotal.val(genPrice(_fetalCheckboxesVal + _fetalRadiosVal + _shipingTotalVal));
				}
			}
		}
		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}});
