var map, mapsx, maps = new Array(), geocoder, google, googleAttached = 0;

function loadGMap(callback) {

    if(!googleAttached) {
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.src = "http://maps.google.com/maps/api/js?sensor=false" + (callback ? "&callback=" + callback : "");
        document.body.appendChild(script);

        googleAttached = 1;	
    }

}

function attachGMap() {
    var mapOptions = {
        zoom: 16,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        disableDefaultUI: false,
        center: new google.maps.LatLng(56.8379, 60.5983)
    };

    geocoder = new google.maps.Geocoder();

    $.each($(".gmap"), function(i){
        var $this = $(this);
        var coords = $this.data('coords');
        var geoAddress = $this.data('address');
        var marker;

        mapsx = new google.maps.Map(this, mapOptions);

        if(coords && coords.latitude && coords.longitude) {
            var point = new google.maps.LatLng(coords.latitude, coords.longitude);
            marker = new google.maps.Marker({
                map: mapsx,
                position: point
            });
            mapsx.setCenter(point);
        }
        else if(geoAddress) {
            geocoder.geocode( {
                'address': geoAddress
            }, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    mapsx.setCenter(results[0].geometry.location);
                    marker = new google.maps.Marker({
                        map: mapsx,
                        position: results[0].geometry.location
                    });
                }
            })
        }
    });
}

function attachYMap() {
    $.each($(".gmap"), function(i){
        var $this = $(this);
        var coords     = $this.data('coords');
        var geoAddress = $this.data('address');
        var marker;

        // Создает экземпляр карты и привязывает его к созданному контейнеру
        var geoResult;
        var map = new YMaps.Map(this);
        map.removeOverlay(geoResult);
        map.addControl(new YMaps.Zoom());
        map.addControl(new YMaps.ToolBar());
        map.addControl(new YMaps.TypeControl());

        if(coords && coords.latitude && coords.longitude) {
            // Устанавливает начальные параметры отображения карты: центр карты и коэффициент масштабирования
            map.setCenter(new YMaps.GeoPoint(coords.latitude, coords.longitude), 10);
        }
        else if(geoAddress) {
            var geocoder = new YMaps.Geocoder(geoAddress, {results: 1, boundedBy: map.getBounds()});

            // Создает обработчик успешного завершения геокодирования
            YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
                // Если объект найден, добавляет его на карту
                // и устанавливает центр карты в центр области показа объекта
                if (this.length()) {
                    geoResult = this.get(0);
                    map.addOverlay(geoResult);
                    map.setBounds(geoResult.getBounds());
                }else {
                    alert("Ничего не найдено")
                }
            });

            // Процесс геокодирования завершен с ошибкой
            YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (gc, error) {
                alert("Произошла ошибка: " + error);
            })
        }
    });
}

function setupSearchBox(searchFormId, websiteUrl, dictionary, target) {
	//warning message for developers
	if (!searchFormId || !websiteUrl || !dictionary) {
		alert("Please specify required parameters (searchformid, websiteurl and dictionary) to setupSearchBox()")
		return;
	}
	
	//opens the definition popup 
	var openPopup = function(lookup) {
        var searchUrl = websiteUrl + "search/" + dictionary + "/";
        if (target) {
        	var popup = window.open(searchUrl + "?q=" + lookup, target, "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,copyhistory=no,width=600,height=550,top=300,left=300");
        	if (popup)
        		popup.focus();
        } else {
        	window.open(searchUrl + "?q=" + lookup);
        }
	};
	
	var getLookupText = function() {
		var lookup = $("#" + searchFormId).find("[name='q']").val();
        lookup = lookup.replace(/[\.\*\?;!()\+,\[:\]<>^_`\[\]{}~\\\/\"\'=]/g, " ");
        lookup = lookup.replace(/\s+/g, " ");
		return (lookup != null && lookup.replace("/\s/g", "").length > 0 ? lookup : "");
	};
	
	$("#" + searchFormId).submit(
		function() {
			var lookup = getLookupText();
			if (lookup.length > 0)
				openPopup(lookup);
			return false;
		}
	);
}

$(function(){
    //loadGMap("attachGMap");
    attachYMap();
    Shadowbox.init({
        skipSetup: true
    });

    Shadowbox.setup("a.popup", {
        gallery: "grinvich"
    });

    //var $calendar = $("#calendar");
    var $calendar = $("#text");
    if($calendar.length) {
        $calendar.find(".prev, .next").live("click", function(e){
            e.preventDefault();
            var $link = $(this);
            var url = $link.attr('href') + '&c';
            $.get(url, {}, function(r){
                $calendar.html(r);
            });
            return false;
        })
    };
    
    setupSearchBox('formname', 'http://www.macmillandictionary.com/', 'british');
})

function toggle(e){
    $(e).toggle();
    }

