function getObjectByKey(obj, key) {
	for ( var keyVar in obj ) {
		//alert(keyVar + "_" + obj[keyVar]);
		if (keyVar == key) {
			return obj[keyVar];
		}
	}
}
function range (low, high, step) {
    // Create an array containing the range of integers or characters from low to high (inclusive)  
    // 
    // version: 1107.2516
    // discuss at: http://phpjs.org/functions/range    // +   original by: Waldo Malqui Silva
    // *     example 1: range ( 0, 12 );
    // *     returns 1: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
    // *     example 2: range( 0, 100, 10 );
    // *     returns 2: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]    // *     example 3: range( 'a', 'i' );
    // *     returns 3: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
    // *     example 4: range( 'c', 'a' );
    // *     returns 4: ['c', 'b', 'a']
    var matrix = [];    var inival, endval, plus;
    var walker = step || 1;
    var chars = false;
 
 		low = parseInt(low);
		high = parseInt(high);
    if (!isNaN(low) && !isNaN(high)) {        inival = low;
        endval = high;
    } else if (isNaN(low) && isNaN(high)) {
        chars = true;
        inival = low.charCodeAt(0);        endval = high.charCodeAt(0);
    } else {
        inival = (isNaN(low) ? 0 : low);
        endval = (isNaN(high) ? 0 : high);
    } 
    plus = ((inival > endval) ? false : true);
    if (plus) {
        while (inival <= endval) {
            matrix.push(((chars) ? String.fromCharCode(inival) : inival));            inival += walker;
        }
    } else {
        while (inival >= endval) {
            matrix.push(((chars) ? String.fromCharCode(inival) : inival));            inival -= walker;
        }
    }
 
    return matrix;
}
function drawButtons(pagenum) {
	var retVal = '';
	
	retVal += '<p id="prevStep" onclick="onCalcPrev(' + pagenum + ');" >Назад</p><p id="nextStep" onclick="onCalcOpen(' + pagenum + ');" >Далее</p>';
	return retVal;
}
function onCalcPrev( pagenum ) {
	if ( ((typeof $("#dialogCalc #prevStep").button( "option", "disabled")) == 'boolean' &&  $("#dialogCalc #prevStep").button( "option", "disabled") == false)) {
		$('#dialogCalc #page'+(pagenum-2)).remove();
		$('#dialogCalc #page'+(pagenum-1)).remove();
		$('#dialogCalc #page'+(pagenum)).remove();
		$("#dialogCalc").append('<div id="page'+(pagenum-2)+'" style="text-align: right"></div>');
		onCalcOpen(pagenum-2, true);
	}
}
function onCalcOpen(pagenum, makerequest) {
	if (makerequest==null)
		makerequest = false;
	
	// $("#dialogCalc").show();
	if( pagenum==1 ) {
		$("#dialogCalc").dialog('open');
		$("#dialogCalc").html('<div id="page1" />');
	}
	
	//alert(typeof $("#dialogCalc #nextStep").button( "option", "disabled"));
	if ( ((typeof $("#dialogCalc #nextStep").button( "option", "disabled")) == 'boolean' &&  $("#dialogCalc #nextStep").button( "option", "disabled") == false) || pagenum==1 ||
	makerequest )
	{
	//$("#dialogCalc #page"+(pagenum)).html('');
	///*
	// alert($('input[name=rooms]'));
	var fRooms = ($('input[name=rooms]:checked').val() != undefined ? $('input[name=rooms]:checked').val() : $('#snumroom').text() );
	var fSquares = ($('input[name=squares]:checked').val() != undefined ? $('input[name=squares]:checked').val() : $('#ssquare').text() );
	var fSfloor = ($('input[name=ifloors]:checked').val() != undefined ? $('input[name=ifloors]:checked').val() : $('#sfloor').text() );
	var fSpay = ($('input[name=ifpays]:checked').val() != undefined ? $('input[name=ifpays]:checked').val() : $('#spay').text() );
	
	$.ajax({
		url: "/calcs/",
		type: "POST",
		data: "stepcalc="+pagenum+"&rooms="+fRooms+"&squares="+fSquares+"&sfloor="+fSfloor+"&spay="+fSpay, 
		
		//+"&spaytxt="+$('input[name=ifpays]:checked + label').text(),
		context: document.body,
		dataType: "json",
		success: function(result){
			//alert(result.numrooms);
			
			switch (pagenum) {
					case 1:
						$("#dialogCalc #page1").html('');
						var p1html = '<div id="roomsrad">Тип квартиры (количество комнат) - ';
						for ( keyVar in result.numrooms ) {
							//alert(result.numrooms[keyVar]);
							p1html += '<input type="radio" id="room'+result.numrooms[keyVar]+'" name="rooms" value="'+result.numrooms[keyVar]+'" /><label for="room'+result.numrooms[keyVar]+'">'+result.numrooms[keyVar]+'</label>';
						}
						p1html += '</div>';
						$("#dialogCalc #page1").html(p1html);
						$("#dialogCalc").append('<div id="page2" style="text-align: right">'+drawButtons(2)+'</div>');
						$("#dialogCalc #nextStep").button({ disabled: true });
						$("#dialogCalc #prevStep").button({ disabled: true });
						$( "#dialogCalc #roomsrad" ).buttonset();
						$('input[name=rooms]').change(function() {
							$("#dialogCalc #nextStep").button( "option", "disabled", false );
						});
						break;
					case 2:
						var rnum_text = ( (parseInt(result.numrooms)==1 ) ? '1-но комн. студия' : '3-х комнатная' )
						$("#dialogCalc #page1").html('Тип квартиры (количество комнат) - <span id="snumroomt">' + rnum_text + '</span><span id="snumroom" style="display: none">' + result.numrooms + '</span>');
						var p1html = '<div id="squarerad">Общая оплачиваемая площадь, кв. м - ';
						for ( keyVar in result.square ) {
							//alert(result.numrooms[keyVar]);
							p1html += '<input type="radio" id="square'+keyVar+'" name="squares" value="'+result.square[keyVar]+'" /><label for="square'+keyVar+'">'+result.square[keyVar]+'</label>';
						}
						$("#dialogCalc #page2").css("text-align", "left");
						$("#dialogCalc #page2").html(p1html);
						
						$("#dialogCalc").append('<div id="page3" style="text-align: right">'+drawButtons(3)+'</div>');
						$("#dialogCalc #nextStep").button({ disabled: true });
						$("#dialogCalc #prevStep").button({ disabled: false });
						$( "#dialogCalc #squarerad" ).buttonset();
						$('input[name=squares]').change(function() {
							$("#dialogCalc #nextStep").button( "option", "disabled", false );
						});
						break;
					case 3:
						$("#dialogCalc #page2").html('Общая оплачиваемая площадь, кв. м - <span id="ssquare">' + result.squares + '</span>');
						var floats_arr = [];
						for ( var keyVar in result.floors ) {
							if (result.floors[keyVar].hasOwnProperty($('#snumroom').text() + '_' + $('#ssquare').text())) {
								for ( var keyV in result.floors[keyVar] ) {
									for ( var k in result.floors[keyVar][keyV] ) {
										var pvalue = result.floors[keyVar][keyV][k];
										if ( pvalue.indexOf('-') > 0 ) {
											floats_arr = floats_arr.concat( range(pvalue.split('-')[0], pvalue.split('-')[1], 1) );
										} else {
											floats_arr.push( parseInt(pvalue) );
										}
									}
								}
						  }
							//alert('keyVar='+keyVar+'; val='+result.floors[keyVar]+'.');
						}
						floats_arr.sort(function(a,b){return a - b});
						var p1html = '<div id="floors">Этаж - ';
						//p1html += floats_arr.length + '_' + floats_arr;
						for ( var key in floats_arr ) {
							p1html += '<input type="radio" id="floor'+key+'" name="ifloors" value="'+floats_arr[key]+'" /><label for="floor'+key+'">'+floats_arr[key]+'</label>';
							//alert(floats_arr[key]);
						}
						p1html += '</div>';
						
						$("#dialogCalc #page3").css("text-align", "left");
						$("#dialogCalc #page3").html(p1html);
						$("#dialogCalc").append('<div id="page4" style="text-align: right">'+drawButtons(4)+'</div>');
						$("#dialogCalc #nextStep").button({ disabled: true });
						$("#dialogCalc #prevStep").button({ disabled: false });
						$("#dialogCalc #floors" ).buttonset();
						$('input[name=ifloors]').change(function() {
							$("#dialogCalc #nextStep").button( "option", "disabled", false );
						});
						break;
					case 4:
						$("#dialogCalc #page3").html('Этаж - <span id="sfloor">' + result.sfloor + '</span>');
						
						var floats_arr = [];
						for ( var keyVar in result.pays ) {

							if (keyVar == $('#snumroom').text()) {
								floats_arr = result.pays[keyVar];
							}
						}

						var p1html = '<div id="oplata">';
						for ( var key in floats_arr ) {
							p1html += '<input type="radio" id="fpay'+key+'" name="ifpays" value="'+floats_arr[key].split('_')[0]+'" /><label for="fpay'+key+'">'+floats_arr[key].split('_')[1]+'</label>';
						}
						p1html += '</div>';

						
						$("#dialogCalc #page4").css("text-align", "left");
						$("#dialogCalc #page4").html(p1html);
						$("#dialogCalc").append('<div id="page5" style="text-align: right">'+drawButtons(5)+'</div>');
						$("#dialogCalc #nextStep").button({ disabled: true });
						$("#dialogCalc #prevStep").button({ disabled: false });
						$("#dialogCalc #oplata" ).buttonset();
						$('input[name=ifpays]').change(function() {
							$("#dialogCalc #nextStep").button( "option", "disabled", false );
						});
						break;
					case 5:
						var numRoom = $("#snumroom").text();
						var square = parseFloat( $("#ssquare").text().replace(",", ".") );
						var floorNum = parseInt( $("#sfloor").text() );
						var paySelected = $('input[name=ifpays]:checked + label').text();
						var paySelectedID = result.spay;
						var meterCost = 0;
						
						
						var selected_price = getObjectByKey(result.prices, numRoom + "_" + paySelectedID);
						//alert(selected_price + '_' + result);
						for ( var fls in selected_price ) {
							for ( var flsd in selected_price[fls] ) {
								var minfloor = parseInt(flsd.split("-")[0]);
								var maxfloor = parseInt(flsd.split("-")[1]);
								if (floorNum>=minfloor && floorNum<=maxfloor) {
									meterCost = selected_price[fls][flsd];
								}
							}
						}
						//meterCost = (paySelectedID)
						//alert(paySelectedID + '_' + meterCost);
						var flatPrice = (meterCost*square);
						//alert( numRoom + '; ' + square + '; ' + floorNum + '; ' + paySelected + '; ' + paySelectedID + '; ' + meterCost + '; '  );
						$("#dialogCalc #page4").html('Вариант оплаты - <span id="spay">' + paySelected + '</span>');
						$("#dialogCalc #page5").css("text-align", "left");
						$("#dialogCalc #page5").html('Цена за 1 кв. м квартиры, руб. - <span id="metercost">' + meterCost + '</span>');
						var cost_text = ( (paySelectedID==1 || paySelectedID==3 ) ? 'Цена договора (стоимость квартиры), руб.' : 'Цена договора (сумма на приобретение квартиры), руб. ' )
						$("#dialogCalc").append('<div id="page6" style="text-align: left">' + cost_text + ' - <span id="metercost">' + Math.round(flatPrice) + '</span></div>');
						switch ( parseInt(paySelectedID) ) {
							case 2:
								$("#dialogCalc").append('<div id="page7" style="text-align: left">Первоначальный платеж, руб. - <span id="firstPay">' + Math.round(flatPrice*0.4) + '.</span></div>');
								$("#dialogCalc").append('<div id="page8" style="text-align: left">Остаток неоплаченной суммы, руб. - <span id="lastPay">' + Math.round(flatPrice -(flatPrice*0.4)) + '</span></div>');
								$("#dialogCalc").append('<div id="page9" style="text-align: left">Ежемесячный платеж (в течение <span id="monthes">23</span> мес.), руб. - <div id="slider" style="width:40%; float: right; margin-top: 4px; margin-right: 10px;"></div><span id="monthPay">' + Math.round((flatPrice -(flatPrice*0.4))/23) + '</span></div>');
								$( "#slider" ).slider({
									max: 23,
									min: 6,
									value: 23,
									change: function(event, ui) { $("#monthes").text( ui.value ); $("#monthPay").text( Math.round((flatPrice -(flatPrice*0.4))/ui.value) ); }
								});
								break;
							case 4:
								$("#dialogCalc").append('<div id="page7" style="text-align: left">Первоначальный платеж, руб. - <span id="firstPay">' + Math.round(flatPrice * 0.6) + '</span></div>');
								$("#dialogCalc").append('<div id="page8" style="text-align: left">Остаток неоплаченной суммы, руб. - <span id="lastPay">' + Math.round(flatPrice * 0.4) + '</span></div>');
								$("#dialogCalc").append('<div id="page9" style="text-align: left">Ежемесячный платеж (в течение <span id="monthes">23</span> мес.), руб. <div id="slider" style="width:50%; float: right; margin-top: 4px; margin-right: 10px;"></div><span id="monthPay">' + Math.round((flatPrice * 0.4)/23) + '</span></div>');
								$( "#slider" ).slider({
									max: 23,
									min: 6,
									value: 23,
									change: function(event, ui) { $("#monthes").text( ui.value ); $("#monthPay").text( Math.round((flatPrice * 0.4)/ui.value) ); }
								});
								break;
						}
						break;
			}
  	}
	});
	};
	//*/
}
