$(document).ready(function(){


	$.ajaxSetup({
		url: '/wizard.php',
		type: 'POST'
	});
	Wizard().print( hWizardData );


});



function Wizard(){
	var _t = this;
	var eContent = $( '#Wizard .Content .Canvas' );
	var eToolbarCanvas = $( '#Wizard #Toolbar' ).append( sBR );
	var eToolbar = $( '<div></div>' ).prependTo( eToolbarCanvas );
	var iWindowCounter = 1;

	$( '<p><span class="Tool tSum">Посчитать стоимость</span></p>' )
		.appendTo( eToolbarCanvas )
		.find('span')
		.click(function(){
			_t._printList();
		});


	// Вывод одного шага
	this.print = function( hData ){
		var sContentBefore = hData.sContentBefore ? hData.sContentBefore : '';
		eContent.html( sContentBefore );

		for( var iCounter = 0; iCounter < hData.hData.length; iCounter++ ){
			this._printSection( hData.hData[ iCounter ] );
		}

		var sContentAfter = hData.sContentAfter ? hData.sContentAfter : '';
		eContent.append( sContentAfter );

// TODO: Если были сохранены окна, то выводить тулбар
//		_t._printToolbar();
//		eToolbarCanvas.show();

		/* Псевдо-ссылки */
		$( '.Tool, #Wizard .Canvas .Window' ).makeHover();

	}


	// Вывод одного элемента выбора в текущем шаге
	this._printSection = function( hData ){
		var sWidth = hData.iWidth ? ' style="width: ' + hData.iWidth + 'px"' : '';
		$( '<div class="Window"' + sWidth + '>'+
			'<span>' + hData.sTitle + '</span>'+
			'<div style="background-position: -' + eval(100 * hData.x -100) + 'px -' + eval(100 * hData.y -100) + 'px"></div>'+
		'</div>' )
			.appendTo( eContent )
			.click(function(){
				if( hData.hData ){
					_t.print( hData );
				} else {
					_t._printOptions( hData );
				}
			});
	}


	// Последний шаг (параметры)
	this._printOptions = function( hData ){
		eContent.html( '' );
		var sContentBefore = hData.sContentBefore ? hData.sContentBefore : '';
		eContent.html( sContentBefore );


		$( '<div class="Options">'+
		  	'<div class="OptionsCol1">'+
				'<p><label for="w_house_type">Тип дома</label>'+
				'<select name="Type" id="w_house_type" class="textInput">'+
					'<option value="1">Кирпичный</option>'+
					'<option value="2">Панельный</option>'+
					'<option value="3">Другой</option>'+
				'</select></p>'+
				'<p><label for="w_glass">Стеклопакет</label>'+
				'<select name="Glass" id="w_glass" class="textInput">'+
					'<option value="1">Однокамерный</option>'+
					'<option value="2" selected="selected">Двухкамерный</option>'+
					'<option value="3">Более двух камер</option>'+
				'</select></p>'+
				'<p><label for="w_width">Ширина</label>'+
				'<input type="text" name="Width" id="w_width" class="textInput" maxlength="3" />см</p>'+
				'<p><label for="w_height">Высота</label>'+
				'<input type="text" name="Height" id="w_height" class="textInput" maxlength="3" />см</p>'+
			'</div>'+
			'<div class="OptionsCol2">'+
				'<p><input type="checkbox" name="Colored" id="Colored" /><label for="Colored">Не белое</label></p>'+
				'<p><input type="checkbox" name="Slope" id="Slope" checked="checked" /><label for="Slope">Откосы</label></p>'+
				'<p><input type="checkbox" name="Outflow" id="Outflow" checked="checked" /><label for="Outflow">Отлив</label></p>'+
				'<p><input type="checkbox" name="Windowsill" id="Windowsill" checked="checked" /><label for="Windowsill">Подоконник</label></p>'+
				'<p><input type="checkbox" name="Frost" id="Frost" /><label for="Frost">Морозостойкое</label></p>'+
			'</div>'+
			'<div class="spacer"></div>'+
		'</div>' ).appendTo( eContent );


		// Заполнение данных формы
		if( hData.hParams ){
			if( hData.hParams.Type != undefined  ) $( '[name=Type]', eContent ).val( hData.hParams.Type );
			if( hData.hParams.Glass != undefined  ) $( '[name=Glass]', eContent ).val( hData.hParams.Glass );
			if( hData.hParams.Width != undefined  ) $( '[name=Width]', eContent ).val( hData.hParams.Width );
			if( hData.hParams.Height != undefined  ) $( '[name=Height]', eContent ).val( hData.hParams.Height );
			if( hData.hParams.Colored != undefined ) $( '[name=Colored]', eContent ).check( hData.hParams.Colored );
			if( hData.hParams.Slope != undefined  ) $( '[name=Slope]', eContent ).check( hData.hParams.Slope );
			if( hData.hParams.Outflow != undefined  ) $( '[name=Outflow]', eContent ).check( hData.hParams.Outflow );
			if( hData.hParams.Windowsill != undefined  ) $( '[name=Windowsill]', eContent ).check( hData.hParams.Windowsill);
			if( hData.hParams.Frost != undefined  ) $( '[name=Frost]', eContent ).check( hData.hParams.Frost );
		};

		var hSaveData = {
			sTitle: hData.sTitle
			, sContentBefore: hData.sContentBefore
			, sContentAfter: hData.sContentAfter
			, iWidth: hData.iWidth
			, x: hData.x
			, y: hData.y
		};
		if( hData.iKey ){
			hSaveData.iKey = hData.iKey;
		}


		$( '<span class="Tool tSave">Сохранить</span>' )
			.click(function(){
				_t._save( hSaveData );
			})
			.appendTo( eContent )

		$( '<span class="Tool tSaveAdd">Сохранить и добавить ещё одно окно</span>' )
			.click(function(){
				_t._save( hSaveData );
				_t.print( hWizardData );
				$( '.Selected', eToolbar ).removeClass( 'Selected' );
			})
			.appendTo( eContent );

		$( '<span class="Tool tCancel">Отменить</span>' )
			.click(function(){
				_t.print( hWizardData );
			})
			.appendTo( eContent );

		var sContentAfter = hData.sContentAfter ? hData.sContentAfter : '';
		eContent.append( sContentAfter );

		/* Псевдо-ссылки */
		$( '.Tool, #Wizard .Canvas .Window' ).makeHover();

	}


	this._printList = function(){

		var aParams = new Array();
		$( '.Window', eToolbar )
			.removeClass( 'Selected' )
			.each(function( iCounter, eWindow ){
                /*$.alert( $( eWindow ).data( 'hData' ).hParams );*/
				aParams.push( $( eWindow ).data( 'hData' ) );
			});


		eContent.html( '' );
		$( '<p>Оформление заявки</p>'+
		  	'<div class="OrderCol1">'+
				'<p><label for="w_order_name">Имя</label>'+
				'<input type="text" name="Name" id="w_order_name" class="textInput" /></p>'+
				'<p><label for="w_order_email">Электронная почта</label>'+
				'<input type="text" name="Email" id="w_order_email" class="textInput" /></p>'+
				'<p><label for="w_order_phone">Телефон</label>'+
				'<input type="text" name="Phone" id="w_order_phone" class="textInput" /></p>'+
				'<p class="OrderComment"><label for="w_order_comment">Комментарий</label><br />'+
				'<textarea name="Comment" id="w_order_comment" class="textInput"></textarea></p>'+
			'</div>'+
			'<ul class="Company"></ul><div class="spacer">' ).appendTo( eContent );

        function replacer(key, value) {
            if (typeof value === 'number' && !isFinite(value)) {
                return String(value);
            }
            return value;
        }
		var aCompany;
		$.json({
			query: 'company'
			, params: JSON.stringify(aParams, replacer)
		}, function( jResult ){
			aCompany = jResult.aCompany;            
			$.each( aCompany, function( iCounter, hData ){
				var sChecked = hData.bChecked ? ' checked="checked"' : '';
				var eItem = $( '<li>'+
						'<input type="checkbox" name="Company" id="company' + hData.iID + '"' + sChecked + ' value="' + hData.iID + '" />'+
						'<label for="company' + hData.iID + '">' + hData.sTitle + '</label>'+
					'</li>' );
				if( hData.bLeader ) eItem.addClass( 'Leader' );
				if( hData.sLink ){
					$( '<a href="' + hData.sLink + '" target="_blank"><img style="margin:0 0 0 5px" align="absmiddle" src="/img/ar_go.gif" alt="Открыть описание" title="Открыть описание" /></a>' ).appendTo( eItem );
				}
				eItem.appendTo( '.Company', eContent )
			});

			$( '<p><span class="Tool tSendOrder">Отправить заявку на уточнение</span></p>' )
				.appendTo( eContent )
				.find('span')
				.click(function(){
					_t._sendRequest();
				});

		});
	}


	// Отправка заявки на уточнение стоимости
	this._sendRequest = function(){

		var aParams = new Array();
		$( '.Window', eToolbar )
			.each(function( iCounter, eWindow ){
//				aParams.push( $( eWindow ).data( 'hData' ).hParams );
				aParams.push( $( eWindow ).data( 'hData' ) );
			});
        
		var aCompany = new Array();
		$( '[name=Company]', eContent ).each(function(){
			//alert( $( this ).val() );
			if( $( this ).check() ){
				aCompany.push( $( this ).val() );
			}
		});
        function replacer(key, value) {
            if (typeof value === 'number' && !isFinite(value)) {
                return String(value);
            }
            return value;
        }
        var aUser = new Array();
        aUser.push( $('#w_order_name').val() );
        aUser.push( $('#w_order_email').val() );
        aUser.push( $('#w_order_phone').val() );
        aUser.push( $('#w_order_comment').val() );
        
		$.json({
			query: 'request'
			, params: JSON.stringify( aParams, replacer )
			, company: JSON.stringify( aCompany, replacer )
            , user: JSON.stringify( aUser, replacer )
		}, function( jResult ){
            
			alert( jResult.answer );
		})
	}


	// Сохранение окна
	this._save = function( hData ){
		hData.hParams = {
			Type: $( '[name=Type]', eContent ).val()
			, Glass: $( '[name=Glass]', eContent ).val()
			, Width: $( '[name=Width]', eContent ).val()
			, Height: $( '[name=Height]', eContent ).val()
			, Colored: $( '[name=Colored]', eContent ).check()
			, Slope: $( '[name=Slope]', eContent ).check()
			, Outflow: $( '[name=Outflow]', eContent ).check()
			, Windowsill: $( '[name=Windowsill]', eContent ).check()
			, Frost: $( '[name=Frost]', eContent ).check()
		};

		var eWindows = $( '.Window', eToolbar );
		var bAdd = true;
		if( eWindows.length ){
			eWindows.each(function( iCounter, eWindow ){
				if( $( eWindow ).data( 'hData' ).iKey == hData.iKey ){
					$( eWindow ).data( 'hData' ).hParams = hData.hParams;
					bAdd = false;
				}
			});
		} else {
			bAdd = true;
		}

		if( bAdd ) _t._edit( _t._addWindow( hData ) );
	}


	// Добавление окна
	this._addWindow = function( hData ){

		hData.iKey = iWindowCounter++;

		// Ноготок окна (переход к редактированию)
		var sWidth = hData.iWidth ? '; width: ' + eval( hData.iWidth -30 ) + 'px"' : '';
		var eItem = $( '<div class="Window" style="background-position: -' + eval(100 * hData.x -100) + 'px -' + eval(100 * hData.y -100) + 'px' + sWidth + '"></div>' )
			.data( 'hData', hData )
			.click(function(){
				_t._edit( eItem );
			})

		// Кнопка удаления окна
		var eRemove = $( '<img src="/img/wizard-remove.png" class="Remove" alt="Удалить" title="Удалить">' )
			.click(function(){
				if( confirm( 'Удалить окно?' ) ){
					_t._removeWindow( eItem );
				} else {
					return false;
				}
			})

		eRemove.appendTo( eItem );
		eItem.appendTo( eToolbar );
		eToolbarCanvas.show();

		return eItem;
	}


	// Удаление окна
	this._removeWindow = function( eItem ){
		if( eItem.next().length ){
			eItem.next().click();
		} else if( eItem.prev().length ) {
			eItem.prev().click();
		} else {
			_t.print( hWizardData );
			eToolbarCanvas.hide();
		}
		eItem.remove();
	}


	// Редактирование паретров окна
	this._edit = function( eItem ){
		$( '.Window', eToolbar ).removeClass( 'Selected' );
		eItem.addClass( 'Selected' );
		_t._printOptions( eItem.data( 'hData' ) );
	}


	return _t;
}
