var dealers    = new Array();
var placemarks = new Array();
var placemarkp = new Array();
var loader     = $("#loader");
var ajax_url   = "/ru/ajax/payment-js/";
var debug      = false;

// loadDealers();

var map, geoResult;
var minZoom;

if ($("#cities option:selected").metadata().hasSubway == 'Yes') {
		minZoom = $("#cities option:selected").metadata().zoom;
	} else {
	$("#cities option").each(function(i){
		if ( $(this).metadata().hasSubway == 'Yes') minZoom = $(this).metadata().zoom;
		 return false;
	});
}

var map = new YMaps.Map(document.getElementById("mapCanvas"));
map.addControl(new YMaps.TypeControl());
map.addControl(new YMaps.Zoom());
map.addControl(new YMaps.ScaleLine());


initMap();
 loadMetro($("#cities option:selected").metadata().citiId);
 getPoints();


$("#cities").change(function () {
	initMap();
	loadMetro($("#cities option:selected").metadata().citiId);
});


$("#subways").change(function () {
	map.setCenter(new YMaps.GeoPoint($("#subways").val().split(",")[0],$("#subways").val().split(",")[1]), minZoom);
});

$("#payments_type").change(function () {
	getPoints();
});

map.listenMouseEvent(map.Events.MouseUp, true);

YMaps.Events.observe(map, map.Events.Update, function () {
	getPoints();
});


var flag_user_move = false;
YMaps.Events.observe(map, map.Events.MoveEnd, function () {
   if (flag_user_move) {
  	 	getPoints();
       flag_user_move = false;
   }
})

YMaps.Events.observe(map, map.Events.MouseUp, function () {
   flag_user_move = true;
})



// Point styles

var terminals = new YMaps.Style();
terminals.iconStyle = new YMaps.IconStyle("yota#terminalsPointIcon");
terminals.iconStyle.offset = new YMaps.Point(-11, -28);
terminals.iconStyle.href = "/images/map/marker-blue.png";
terminals.iconStyle.size = new YMaps.Point(22, 28);
terminals.iconStyle.shadow = new YMaps.IconShadowStyle();
terminals.iconStyle.shadow.offset = new YMaps.Point(-15, -35);
terminals.iconStyle.shadow.href = "/images/map/point-shadow.png";
terminals.iconStyle.shadow.size = new YMaps.Point(36, 34);
YMaps.Styles.add("yota#terminalsPoint", terminals);

var t = new YMaps.Template();
t.text = "<div><img alt='' style='height:$[style.iconStyle.size.y];width:$[style.iconStyle.size.x];' src='$[style.iconStyle.href]'\/><div class='CustomPointName'>$[name| ]</div></div>";
YMaps.Templates.add("yota#terminalsPointIcon", t);


var atm = new YMaps.Style();
atm.iconStyle = new YMaps.IconStyle("yota#atmPointIcon");
atm.iconStyle.offset = new YMaps.Point(-11, -28);
atm.iconStyle.href = "/images/map/marker-green.png";
atm.iconStyle.size = new YMaps.Point(22, 28);
atm.iconStyle.shadow = new YMaps.IconShadowStyle();
atm.iconStyle.shadow.offset = new YMaps.Point(-15, -35);
atm.iconStyle.shadow.href = "/images/map/point-shadow.png";
atm.iconStyle.shadow.size = new YMaps.Point(36, 34);
YMaps.Styles.add("yota#atmPoint", atm);

var t1 = new YMaps.Template();
t1.text = "<div><img alt='' style='height:$[style.iconStyle.size.y];width:$[style.iconStyle.size.x];' src='$[style.iconStyle.href]'\/><div class='CustomPointName'>$[name| ]</div></div>";
YMaps.Templates.add("yota#atmPointIcon", t1);

var counters = new YMaps.Style();
counters.iconStyle = new YMaps.IconStyle("yota#countersPointIcon");
counters.iconStyle.offset = new YMaps.Point(-11, -28);
counters.iconStyle.href = "/images/map/marker-yellow.png";
counters.iconStyle.size = new YMaps.Point(22, 28);
counters.iconStyle.shadow = new YMaps.IconShadowStyle();
counters.iconStyle.shadow.offset = new YMaps.Point(-15, -35);
counters.iconStyle.shadow.href = "/images/map/point-shadow.png";
counters.iconStyle.shadow.size = new YMaps.Point(36, 34);
YMaps.Styles.add("yota#countersPoint", counters);

var t2 = new YMaps.Template();
t2.text = "<div><img alt='' style='height:$[style.iconStyle.size.y];width:$[style.iconStyle.size.x];' src='$[style.iconStyle.href]'\/><div class='CustomPointName'>$[name| ]</div></div>";
YMaps.Templates.add("yota#countersPointIcon", t2);



function showAddress (value) {
map.removeOverlay(geoResult);
var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});

YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
    if (this.length()) {
        geoResult = this.get(0);
        geoResult.setBalloonContent(geoResult.text);
        geoResult.setStyle("default#greenPoint");
        map.addOverlay(geoResult);
        map.setBounds(geoResult.getBounds());
    }
//    else {
//        alert("Ничего не найдено!");
//        }
    });
};


function getPoints() {

$lb = map.getBounds().getLeftBottom().toString().split(",");
$rt = map.getBounds().getRightTop().toString().split(",");
$type = $("#payments_type").val();
zoom = map.getZoom();

loader.show();

map.removeOverlay(placemarks);
placemarks = [];
placemarkp = [];
data = [];

if (zoom < minZoom) {
	debugMap();
	$('#salesList').html("<p>Точки оплаты видны в масштабе улицы или дома. Приблизьте интересующий вас район, и если точки  есть в данной области, они появятся на экране</p>");
	loader.hide();
	return;
}

$.ajax({
   type: "GET",
    url: ajax_url,
   dataType: "json",
   data: ({long1 : $lb[0], lat1: $lb[1], long2: $rt[0], lat2: $rt[1], type: $type}),
   success: function(data){
	var ind = 1;
		for (var i in data) {
			var point = new YMaps.GeoPoint(data[i].longitude, data[i].latitude);

			placemark = new YMaps.Placemark(point);
			placemarkp[ind] = placemark;
			placemark.name = ind;

	    baloonContent = '<h4>' + data[i].owner_name + '</h4>';
	    baloonContent += '<div class="payment-baloon">';

	    baloonContent +=  '<div>';
	    baloonContent +=  '<p>' + data[i].address + '</p>' +
	    '<p>' + data[i].note + '</p>';
	    if (data[i].time) {
	    	baloonContent += '<p>Время работы: ' + data[i].time + '</p>';
	    }
	   // baloonContent += '<p>' + data[i].type + '</p>';
	   // baloonContent += '<p>' +  data[i].longitude + ', ' +  data[i].latitude + '</p>';
	    baloonContent +=  '</div>';
	    if (data[i].owner_logo) {
	    	baloonContent += '<img src="' + data[i].owner_logo + '" alt="' + data[i].owner_name + '" class="baloon-dealer-logo"  />';
	    }
	    baloonContent +=  '</div>';
	    placemark.setBalloonContent(baloonContent);
	    placemark.setStyle("yota#"+ data[i].type + "Point");

	    YMaps.Events.observe(placemark, placemark.Events.BalloonOpen, function () {
	    	 flag_user_move = false;
	    });

	    placemarks.push(placemark);
	    ind++;
  		}
		map.addOverlay(placemarks);
		pointsList(data);
		loader.hide();
		debugMap();
	   }
	 });
 }


function showBalloon(ind) {
	 YMaps.Events.observe(placemarkp[ind], placemarkp[ind].Events.BalloonOpen, function () {
   });
	 flag_user_move = false;
	placemarkp[ind].openBalloon();
}


function pointsList(points) {
	var ind = 1;
	var html = '';
	if (points.nopoints) {
		html ='';
	} else {
	for (var id in points) {
		if (points[id]!= null) {
			$tt = eval(points[id].type);
			$icon = $tt.iconStyle.href;
			if(typeof document.body.style.maxHeight === "undefined") {
				$icon = $tt.iconStyle.href.replace(/png/,'gif');
			}
			// $icon = $.support.opacity ? $tt.iconStyle.href : $tt.iconStyle.href.replace(/png/,'gif');
			// TODO IE6 icon fix
			html += '<dl pointID="' + id + '"><dt><span><a href="#point' + ind + '" onclick="showBalloon(' + ind + ');return false;" style="background-image: url(' + $icon + ')">' + (ind) + '</a></span>' +
			'<a href="#point' + ind + '" onclick="showBalloon(' + ind + ');return false;">' + points[id].owner_name + '</a></dt>' +
			'<dd>'+points[id].address+ '</dd></dl>';
			ind++;
		}
	}
	}
	if (html.length == 0) {
		html = "<p>В указанной области точек оплаты не найдено.</p>";
	}
	$('#salesList').html(html);
	html = '';

	$('#salesList').jScrollPane({
		scrollbarWidth: 14,
		showArrows: true,
		arrowSize: 17,
		dragMinHeight: 15
	});


}

function initMap() {
	metadata = $('#cities option:selected').metadata();
	$('#salesList').empty();
	map.setCenter(new YMaps.GeoPoint(metadata.long, metadata.lat), metadata.zoom, YMaps.MapType.MAP);
	debugMap();
}

function debugMap() {
	if (debug) {
	geores = typeof(geoResult)!="undefined" ? geoResult.text + '.  Координаты: ' + geoResult.getGeoPoint().toString() : '';
	$("#result").html(geores +
      '<br/>LeftBottom: ' + map.getBounds().getLeftBottom().toString() +
			' RightTop: ' + map.getBounds().getRightTop().toString() +
			' Zoom:' + map.getZoom()
        );
	}
}


function loadMetro(cityId){
	if ($("#cities option:selected").metadata().hasSubway == 'Yes') {
		$('#subways').empty().append( $('<option>').val('').text(LANG.loadingSubwaysStations));
		$.ajax({
		   type: "GET",
		   url: ajax_url,
		   data: {cityId: cityId},
		   dataType: "json",
		   success: function(subways){
				// add options to metro select
				$('#subways').empty().append( $('<option>').val('').text(LANG.selectSubwayStation) );
				for (var subwayID in subways) {
					var opt = $('<option>').val(subways[subwayID].longitude + ',' + subways[subwayID].latitude).text(subways[subwayID].name);
					$('#subways').append(opt);
					}
				$('#subways_div').show();
				}
		});
	} else {
		$('#subways_div').hide();
	}
}

