var point = 2;
var addr_field = 0;
var distance;
var via_points;
var cost;
station = '';

$(document).ready(function(){
	$('#calc_order').click(function(){
		addOrder();
	});
	
});

function addOrder(){

    $phone = $('#orderPhone').attr('value');

       $phone = $phone.replace(/[^0-9]/mg,'');
       $phone = $phone.replace(/^(?:8|7)(.*)/mg,'$1');

    if($phone.length != 10 && $phone.length != 7) {
     alert('Неверно указан телефон! Пример 89269560956');
     return false;
    }

    $('.order_map').modal({
    	minWidth: 1000,
    	maxWidth: 1280,
    	autoResize: true
    });
    initMap();
    clearRoute();
    $('#addr_0').attr('value', $('#from').attr('value'));
    $('#addr_1').attr('value', $('#to').attr('value'));
    distance = 0;
    via_points = 0;
    $('#simplemodal-container').css('height', '');
    
    $('.metro').autocomplete({
		source: list_metro
	});
	
	$('.addr').autocomplete({
		source: list_street
	});
	
}

function addRoute(){
    route = '<div id="route_'+point+'" class="route"><div class="field">Метро<br /><input type="text" name="metro_'+point+'" id="metro_'+point+'" class="metro" /></div>'+
            '<div class="field addr">Адрес<br /><input type="text" name="addr_'+point+'" id="addr_'+point+'" class="addr" /></div></div>';
    $('.routes').append(route);
    point++;
    $('.metro').autocomplete({
		source: list_metro
	});
	$('.addr').autocomplete({
		source: list_street
	});
}

function reCalc(){
    hour = new Date().getHours();
    if (hour > 7 && hour < 22 && distance != 0 && distance <= 10){
        if ($('#center').attr('checked')){
            if (distance <= 5){
                cost = 350;
            }else if (distance <= 10){
                cost = 400;
            }
        }else{
            if (distance <= 5){
                cost = 250;
            }else if (distance <= 10){
                cost = 350;
            }
        }
        total_cost = cost+(via_points*100);
        $('#show_cost').text(total_cost);
    }
}

function reCalc10(){
    if(cost){
        if ($('#discount10').attr('checked')){
            c = $('#show_cost').text();
            $('#show_cost').text(parseInt(c - (c / 100 * 10)));
        }else{
            if ($('#discount15').attr('checked')){
                $('#show_cost').text(parseInt((cost*2) - ((cost*2) / 100 * 15)));
            }else{
                $('#show_cost').text(cost);
            }
        }
    }else{
        $('#show_cost').text(0);
    }
}

function reCalc15(){
    if(cost){
        if ($('#discount15').attr('checked')){
            c = $('#show_cost').text();
            $('#show_cost').text(parseInt((c*2) - ((c*2) / 100 * 15)));
        }else{
            if ($('#discount10').attr('checked')){
                $('#show_cost').text(parseInt(cost - (cost / 100 * 10)));
            }else{
                $('#show_cost').text(cost);
            }
        }
    }else{
        $('#show_cost').text(0);
    }
}

function initMap(){
    var map = new YMaps.Map(document.getElementById("YMapsID"));
    
    map.addControl(new YMaps.ToolBar());
    map.addControl(new YMaps.Zoom());
    map.addControl(new YMaps.ScaleLine());
    // map.addControl(new YMaps.SearchControl({
    //     resultsPerPage: 5,  // Количество объектов на странице
    //     useMapBounds: 1     // Объекты, найденные в видимой области карты 
    //                         // будут показаны в начале списка
    // }));
    
    map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10);
    // Создает квадратную область 1х1 градус с центром в Москве, а затем устанавливает ее в качестве границ карты.
    var bound = YMaps.GeoBounds.fromCenterAndSpan(new YMaps.GeoPoint(37.63, 55.75), new YMaps.Size(1, 1));
    map.setBounds(bound);
    var router;
    listenClick(map, router);

    return map;
    // var router = new YMaps.Router(
    //        // Список точек, которые необходимо посетить
    //        points,[],
    //        { viewAutoApply: true, boundedBy:bound }
    //    );
    // map.addOverlay(router); // Добавляет на карту полный маршрут
    
    // YMaps.Events.observe(router, router.Events.Success, function () {
    //     // Задаем содержание меток для начальной и конечной точек.
    //     // Транзитные точки на карте не отмечаются и не возвращаются методом getWayPoint
    //     router.getWayPoint(0).setIconContent('Точка отправления');
    //     router.getWayPoint(1).setIconContent('Точка прибытия');
    //     
    //     alert(router.getDistance()/1000+' км.'+router.getDuration()/60/60+' ч.');
    // });
}

function showOnMap(){
    point = 2;
    addr_field = 0;
    points = [];

    $('#imgcode').attr('src', '/captcha?'+Math.random()*10000);
    $('.route').each(function(index) {
        if ($('#addr_'+index).attr('value') == ''){
            points.push($('#metro_'+index).attr('value'));
        }else{
            points.push($('#addr_'+index).attr('value'));
        }
    });
    $('#from').attr('value', points[0]);
    $('#to').attr('value', points[points.length-1]);
    map = initMap();
    map.destructor();
    
    var map = new YMaps.Map(document.getElementById("YMapsID"));
    map.addControl(new YMaps.ToolBar());
    map.addControl(new YMaps.Zoom());
    map.addControl(new YMaps.ScaleLine());
    var bound = YMaps.GeoBounds.fromCenterAndSpan(new YMaps.GeoPoint(37.63, 55.75), new YMaps.Size(1, 1));
    map.setBounds(bound);
    // if (router) {
        map.removeOverlay(router);
    // }
    // alert(points);
    var router = new YMaps.Router(
           // Список точек, которые необходимо посетить
           points,[],
           { viewAutoApply: true, boundedBy:bound }
       );
       
       

		

    
    map.addOverlay(router); // Добавляет на карту полный маршрут
    YMaps.Events.observe(router, router.Events.Success, function () {
        distance = Math.ceil(router.getDistance()/1000);
        notceil_distance = router.getDistance()/1000;
/* 		alert(router.getWayPoint(1)); */
        $('#show_distance').text(notceil_distance.toFixed(1));
        hour = new Date().getHours();
        via_points = points.length - 2;
        
        points_low = [];
        points.forEach(function(element, index) {
            points_low.push(element.toLowerCase());
        });
        
        

		/*ТУТ НУЖНО ДОПИЛИТЬ !!
        var geocoder = new YMaps.Geocoder(router.getWayPoint(0).GeoPoint());

        // Обработчик успешного завершения геокодирования
        YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
            // Получение результата поиска
            geoResult = this.getResult(geocoder);
            
        });
                
        var metro = new YMaps.Metro.Closest(new YMaps.GeoPoint(geoResult), { results: 1 });
 		alert(router.getWayPoint(0)); 
		YMaps.Events.observe(metro, metro.Events.Load, function () {
			if (this.length()) {
		    	station = metro.get(0).AddressDetails.Country.Locality.Thoroughfare.Premise.PremiseName;
		    	station = station.replace('метро ', '');
		alert(station);
				$('#addr_'+addr_field).attr('value', addr);
				$('#metro_'+addr_field).attr('value', station);
				addr_field++;
		    } else {
		    	$('#addr_'+addr_field).attr('value', addr);
				addr_field++;
		    }
		});
	
		YMaps.Events.observe(metro, metro.Events.Fault, function (metro, error) {
		    $('#addr_'+addr_field).attr('value', addr);
			addr_field++;
		});

		*/
		
		
	        
        port_cost = {
            27: 850, 28: 870, 29: 900, 30: 900, 31: 930, 32: 950, 33: 970, 34: 1000, 35: 1000, 36: 1030, 37: 1050, 38: 1070, 39: 1100, 40: 1100, 41: 1130, 42: 1150, 43: 1170, 44: 1200, 45: 1200
        };
        
        day_of_week = new Date().getDay();
        
        if (points_low.indexOf('домодедово') != -1 || points_low.indexOf('шереметьево') != -1 || points_low.indexOf('внуково') != -1){
            if (distance < 27){
                if (hour > 7 && hour < 22){
                    cost = 850;
                }else{
                    cost = 800;
                }
            }else if (distance > 45){
                if (hour > 7 && hour < 22){
                    cost = 1200;
                }else{
                    cost = 1000;
                }
            }else{
                cost = port_cost[distance];
            }
            // alert(distance+' - '+cost);
        }else{
            if (day_of_week == 6 || day_of_week == 0){
                if (distance <= 5){
                    cost = 300;
                }else if (distance <= 10){
                    cost = 400;
                }else{
                    cost = (distance-10)*20+400;
                }
            }else{
                if (hour > 6 && hour < 22){
                    if ($('#center').attr('checked')){
                        if (distance <= 5){
                            cost = 400;
                        }else if (distance <= 10){
                            cost = 450;
                        }else{
                            cost = (distance-10)*22+450;
                        }
                    }else{
                        if (distance <= 5){
                            cost = 300;
                        }else if (distance <= 10){
                            cost = 400;
                        }else{
                            cost = (distance-10)*22+400;
                        }
                    }
                }else{
                    if (distance <= 5){
                        cost = 300;
                    }else if (distance <= 10){
                        cost = 400;
                    }else{
                        cost = (distance-10)*20+400;
                    }
                }
            }
        }

        total_cost = cost+(via_points*100);
        $('#show_cost').text(total_cost);
		$('#cost_info').slideDown();
    });
    
    listenClick(map, router);
}

function listenClick(map, router){
    listener = YMaps.Events.observe(map, map.Events.Click, function (map, mEvent) {
        if (!addr_field){
            $('.route').each(function(index) {
                    $('#metro_'+index).attr('value', '');
                    $('#addr_'+index).attr('value', '');
            });
        }
        var geoResult;
        var clickPoint = mEvent.getGeoPoint();
        if (geoResult) {
            map.removeOverlay(geoResult);
            result = null;
        }
        if (router) {
            map.removeOverlay(router);
            $('#cost_info').slideUp();
            clearRoute();
	        router = null;
        }

        // Отмечает точку, по которой щелкнул пользователь
        // var route = new YMaps.Router(
        //     // Список точек, которые необходимо посетить
        //     [new YMaps.GeoPoint(clickPoint)],[],
        //     { viewAutoApply: true, boundedBy:bound }
        // );
        // // route.WayPoint(new YMaps.GeoPoint(clickPoint));
        // map.addOverlay(route); // Добавляет на карту полный маршрут
        
        // clickPlace = new YMaps.Placemark(clickPoint, {});
        // clickPlace.description = clickPoint.toString();
        // map.addOverlay(clickPlace);
        // alert(clickPoint.getGeoPoint());
        // $('#addr_0').attr('value', clickPoint.get(0).getGeoPoint());
        // Запускает процесс геокодирования
        this.geocode(clickPoint);
    }, this);
    
    // Геокодирует координаты щелчка мыши по карте
    this.geocode = function (clickPoint) {
        // Выключает обработчики событий, чтобы создать не более одного запроса к геокодеру
        // (по окончании геокодирования обработчик включается вновь)
        listener.disable();

        // Запуск процесса геокодирования
        var geocoder = new YMaps.Geocoder(clickPoint);

        // Обработчик успешного завершения геокодирования
        YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
            // Получение результата поиска
            geoResult = this.getResult(geocoder);

            if (geoResult) {
                // Добавляет на карту результат геокодирования и открывает балун
                map.addOverlay(geoResult);
                geoResult.openBalloon();
                // alert(geoResult.getGeoPoint());
                addr = geocoder.get(0).text;
                addr = addr.replace('Россия, ', '');
                addr = addr.replace('Московская область, ', '');
                // addr = geocoder.get(0).AddressDetails.Country.Locality.LocalityName+', '+geocoder.get(0).AddressDetails.Country.Locality.Thoroughfare.ThoroughfareName+', '+geocoder.get(0).AddressDetails.Country.Locality.Thoroughfare.Premise.PremiseNumber;
                
                // Определяем ближайшую станцию метро и вставляем в поле
			    var metro = new YMaps.Metro.Closest(clickPoint, { results: 1 });
			    YMaps.Events.observe(metro, metro.Events.Load, function () {
			    	if (this.length()) {
				    	station = metro.get(0).AddressDetails.Country.Locality.Thoroughfare.Premise.PremiseName;
				    	station = station.replace('метро ', '');

						$('#addr_'+addr_field).attr('value', addr);
						$('#metro_'+addr_field).attr('value', station);
						addr_field++;
				    } else {
				    	$('#addr_'+addr_field).attr('value', addr);
						addr_field++;
				    }
				});
					
				YMaps.Events.observe(metro, metro.Events.Fault, function (metro, error) {
				    $('#addr_'+addr_field).attr('value', addr);
					addr_field++;
				});

                if(addr_field > 1){
                    addRoute();
                }
                              
                // point++;
                // getAddress(geoResult.getGeoPoint());
                // var route = new YMaps.Router(
                //     // Список точек, которые необходимо посетить
                //     [new YMaps.GeoPoint(geoResult)],[],
                //     { viewAutoApply: true, boundedBy:bound }
                // );
                // var route = new YMaps.WayPoint(new YMaps.GeoPoint(geoResult));
                // map.addOverlay(route); // Добавляет на карту полный маршрут
            } else {
                alert("Ничего не найдено!");
            }

            // Включает обработчик щелчка мыши по карте
            listener.enable();
        }, this);

        // Обработчик неудачного геокодирования
        YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, err) {
            alert("Произошла ошибка при геокодировании: " + err);

            // Включает обработчик щелчков мыши по карте
            listener.enable();
        });
    };
    
     // Возвращает результат геокодирования с точностью, зависящей от масштаба
    this.getResult = function (geocoder) {
       // Точность: город, страна
       function isOther (result) {
           return result.precision == "other";
       }

       // Точность: улица
       function isStreet (result) {
           return result.precision == "street";
       }

       // Точность: дом
       function isHouse (result) {
           return !isOther(result) && !isStreet(result);
       };

       // Выбирает точность поиска
       var filter = isHouse;
       if (map.getZoom() < 10) {
           filter = isOther;
       } else if (map.getZoom() < 15) {
           filter = isStreet;
       }

       // Возвращает первый найденный результат с необходимой точностью
       return geocoder.filter(filter)[0];
    };
}

function clearRoute(){
    $('.route').each(function(index) {
            $('#metro_'+index).attr('value', '');
            $('#addr_'+index).attr('value', '');
            if (index > 1){
                $('#route_'+index).remove();
            }
    });
    addr_field = 0;
    point = 2;
    station = '';
}

function closeForm(){
	$.modal.close();
}

$sendme = 0;

function sendRes() {

 if($sendme == 1) return;

    $phone = $('#phone').attr('value');

    $phone = $phone.replace(/[^0-9]/mg,'');
    $phone = $phone.replace(/^(?:8|7)(.*)/mg,'$1');

    $zone = $('#zone').attr('value');
    $car  = $('#car').attr('value');
    $fio  = $('#fio').attr('value');

if($fio.length < 10) {
     alert('Неправильно указано ФИО');
 return false;
}

if($phone.length != 10 && $phone.length != 7) {
     alert('Неправильно указан телефон');
 return false;
}

if($car.length < 3) {
     alert('Неправильно указана машина');
 return false;
}

 $sendme = 1;

$.post	('/send'+'res',{action: 'sendres', car: $car, fio: $fio, zone: $zone, phone: $phone}, function(data) {
   $sendme = 0;
   if(data == '0') {
     alert('Ошибка добавления записи на собеседование');
   } else {
     alert('Ваш заявка принята!');
     document.location = '/work';
   }
 });

}

function sendForm() {

    $phone = $('#orderPhone').attr('value');

       $phone = $phone.replace(/[^0-9]/mg,'');
       $phone = $phone.replace(/^(?:8|7)(.*)/mg,'$1');

    $path = '';
    $('.route').each(function(index) {
        if ($('#addr_'+index).attr('value') == ''){
            $path += ($path!=''?' - ':'') + $('#metro_'+index).attr('value');
        }else{
            $path += ($path!=''?' - ':'') + $('#addr_'+index).attr('value');
        }
    });


 $.post	('/sendorder',{notchild:$('#notsmoke').attr('checked')?1:0,smoke:$('#smoke').attr('checked')?1:0,child:$('#child').attr('checked')?1:0, time:$('#orderDate').attr('value')+' '+$('#orderTime').attr('value'), path: $path, phone: $phone, code: $('#code').attr('value'), action: 'sendorder'}, function(data) {
   if(data == '0') {
     alert('Неверно указан код на картинке!');
    $('#code').attr('value','');
    $('#imgcode').attr('src', '/captcha?'+Math.random()*10000);
     
   } else {
     alert('Ваш заказ успешно отправлен!');
     document.location = '/';
   }
 });

}






