/**
 * @author Alexander Kuznetcov (coolmen@siteleader.ru)
 * @copyright SiteLeader, 2005-2008 || http://www.siteleader.ru/ 
 * @version 20090731 
 */


/**
 * Пересчёт заказа
 */
function calculation () {
	var sum = 0, val, price;
	for ( var key in form_data ) {

		$('input[name=' + key + ']').each( function() {
			var val = $(this).val();
			// Нажата?
			if ( $(this).attr('checked') ) {
				// цена?
				if ( exists( form_data[key] ) && exists( form_data[key][val]['price'] ) ) {
					price = form_data[key][val]['price'];
					sum += price - 0;
				}
				if ( exists( form_data[key][val] ) && exists( form_data[key][val]['child'] ) && $('#'+ form_data[key][val]['child'] + ':hidden' ) ) {
					$('#'+ form_data[key][val]['child']).slideDown();
				}				
			}
			// Не нажата
			else {
				// Закрывать наследников?
				if ( exists( form_data[key][val] ) && exists( form_data[key][val]['child'] ) && $('#'+ form_data[key][val]['child'] + ':visible' ) ) {
					$('#'+ form_data[key][val]['child']).slideUp();
				}
			}
		});

	}
}


/**
 * Валицация
 */
function validate ( ) {

	var valid = true, val;
	for ( var key in form_data ) {

		$('input[name=' + key + '], textarea[name=' + key + '], select[name=' + key + ']' ).each( function() {
			var val = $(this).val();
			val = val && val.toString();

			// Валидация чекбоксов/радиобутонов
			if ( exists( form_data[key][val] ) && exists( form_data[key][val]['validate'] ) ) {
				console.info( key, ":", val, " - validate as ", form_data[key][val]['validate'] );
			}
			// Валидация текстовых полей
			if ( exists( form_data[key] ) && exists( form_data[key]['validate'] ) ) {
				if ( form_data[key]['validate'] == 'text' ) {
					if ( val.match(/[^\s]+/i) ) {
						$( '#' + form_data[key]['target'] ).removeClass('false')
						$( this ).removeClass('need');
					}
					else {
						$( '#' + form_data[key]['target'] ).addClass('false');
						$( this ).addClass('need');
						valid = false;
					}
				}
				else if ( form_data[key]['validate'] == 'email' ) {
					if ( val.match(/^[\-\.\w]+@([\w\-]+\.)+\w{2,3}$/i) ) {
						$( '#' + form_data[key]['target'] ).removeClass('false')
						$( this ).removeClass('need');
					}
					else {
						$( '#' + form_data[key]['target'] ).addClass('false');
						$( this ).addClass('need');
						valid = false;
					}
				}
				else if ( form_data[key]['validate'] == 'num' ) {
					if ( val && val.match(/^[\d,\.]+$/i) ) {
						$( '#' + form_data[key]['target'] ).removeClass('false')
						$( this ).removeClass('need');
					}
					else {
						$( '#' + form_data[key]['target'] ).addClass('false');
						$( this ).addClass('need');
						valid = false;
					}
				}
			}

		});
	}
	if ( valid ) $('#submit').attr( 'disabled', '' )
		else $('#submit').attr( 'disabled', 'disabled' );
		
	return valid;
}


/**
 * Развес событий
 * @param {Object} form
 */
function add_events ( form ) {
	
	// FIXME ЖООПА!
	if ("\v"=="v") { 
		$( form + ' input:radio, ' + form + ' input:checkbox,' + form + ' input:text, '  + form + ' textarea, '  + form + ' select' ).click( function() { $(this).trigger( 'change' ) });
		$( form + ' input:radio, ' + form + ' input:checkbox,' + form + ' input:text, '  + form + ' textarea, '  + form + ' select' ).bind( 'change', function() {
			calculation();
			validate();
		});
	}
	else {
		$( form + ' input:radio, ' + form + ' input:checkbox, '  + form + ' input:text, '  + form + ' textarea, '  + form + ' select' ).change( function() {
			calculation();
			validate();
		});
		$( form + ' input:text, '  + form + ' textarea' ).keyup( function() {
			calculation();
			validate();
		});
	}
}


/**
 * Перл аналоги 
 * @param {} el
 * @return {}
 */
function defined ( el ) {
	return typeof( el ) != 'undefined'; 
}

function exists ( el ) { return defined(el) }


window.onload = function () {
	add_events('#order-form');
	calculation();
	validate();
	
	// Календарь
	$("input[name=real_birth]").datepicker({
		monthNames: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
		monthNamesShort: ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'],
		dayNames: [ 'Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота' ],
		dateFormat: 'd M yy',
		dayNamesMin: [ 'Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' ],
		nextText: '&nbsp;>&nbsp;',
		prevText: '&nbsp;<&nbsp;',
		changeYear: true,
		changeMonth: true,
		minDate: new Date(1900,0,1),
		showOtherMonths: true,
		yearRange: '-100:+100',
		maxDate: 0,
		firstDay: 1
	});

}

