if (!window.Avus)
	var Avus = new Object();


Avus.DropDownControl = {

	openDDs: [],

	add: function(obj) {
		Avus.DropDownControl.openDDs.push(obj);
	},
	
	pop: function() {
		Avus.DropDownControl.openDDs.pop().hideTarget();
	}
}



Avus.DropDownContent = Class.create({
	visible: false,

	options: {
		ajaxUrl: ''
	},
	wrapCreated: false,


	initialize: function(opener, target, options) 
	{
		opener.addClassName('initialized');
		Object.extend(this.options, options || {});

		if (!Object.isElement($(opener)))
			return;
			
		if (!Object.isElement($(target)) && !this.options.ajaxUrl)
			return;

		this.opener = $(opener);
		this.target = $(target);

		this.opener.insert(this.downarrow = new Element('div', {'class': 'dropdown-arrow'}));
		this.opener.addClassName('button-dropdown-arrow');

		if (this.options.ajaxUrl == '')
			this.createWrap();

		this.opener.observe('click', function(ev){
			if (this.visible)
				this.hideTarget();
			else
				this.showTarget();
		}.bindAsEventListener(this));
		
		this.bel = this.offClick.bindAsEventListener(this);
	},
	
	createWrap: function(){
		this.wrap = new Element('div', {'class': 'ddcontent-wrap'}).update(this.target);
		this.wrap.setStyle({
			position: 'absolute'
		});
		document.body.insert(this.wrap);
		this.wrap.hide();
		this.wrap.select('input[type="reset"]').invoke('observe', 'click', this.hideTarget.bindAsEventListener(this));
	},
	
	offClick: function(e){
		var ancestors = e.element().ancestors();
		var b = false;
		for (var i=0; i<ancestors.length && !b; i++)
			if (ancestors[i] == this.wrap)
				b = true;
		if (b || e.element() == this.opener || e.element() == this.downarrow)
			return;
		this.hideTarget();
	},
	
	showTarget: function(){
		this.opener.toggleClassName('inverted');
		this.setWrapPosition();
		this.wrap.show();
		document.observe('click', this.bel);
		this.visible = !this.visible;
		Avus.DropDownControl.add(this);
	},

	hideTarget: function(){
		this.opener.toggleClassName('inverted');
		this.wrap.hide();
		document.stopObserving('click', this.bel);
		this.visible = !this.visible;
	},
	
	setWrapPosition: function()
	{
		var oX = this.opener.cumulativeOffset()[0];
		var oY = this.opener.cumulativeOffset()[1];

		var oW = this.opener.getWidth();
		var oH = this.opener.getHeight();

		var sW = document.viewport.getWidth();
		var sH = document.viewport.getHeight();

		var wW = this.wrap.getWidth();
		var wH = this.wrap.getHeight();

		if (oX + wW + 10 > sW)
			var wX = oX + oW - wW;
		else
			var wX = oX;
		var xY = oY + oH;
		
		this.wrap.setStyle({
			left: wX + 'px',
			top: xY + 'px'
		});
	}

});



Avus.ConditionalCombobox = Class.create({

	options: {
		beforeAction: Prototype.emptyFunction,
		targetDefaultOption: '',
		targetDisabledMessage: '',
	},

	initialize: function(sourceId, targetId, actionURL, options) 
	{
		if (Object.isElement($(sourceId)))
			this.source = $(sourceId);
		else
			return;

		if (Object.isElement($(targetId)))
			this.target = $(targetId);
		else
			return;
		
		Object.extend(this.options, options || {});
		this.actionURL = actionURL;
		
		this.addObservers();
	},
	
	addObservers: function(){
		this.source.observe('change', function(){
			this.options.beforeAction.bind(this)();
			if (this.source.value && this.source.value != 0)
			{
				this.target.disabled = true;
				ajax_submitPostURL(this.actionURL, 'sourceValue=' + this.source.value, function(response){
					this.target.updateOptions(response.list);
					if (this.options.targetDefaultOption)
						this.target.insert({top: new Element('option', {value: 0}).update(this.options.targetDefaultOption)});
					this.target.disabled = false;
					this.target.selectedIndex = 0;
				}.bind(this));
			}
			else
			{
				this.target.updateOptions([this.options.targetDisabledMessage]);
				this.target.disabled = true;
			}
		}.bindAsEventListener(this));
	}
});


Avus.ConditionalCheckbox = Class.create({

	options: {
	},

	initialize: function(sourceId, targetId, options) 
	{
		if (Object.isElement($(sourceId)))
			this.source = $(sourceId);
		else
			return;

		if (Object.isElement($(targetId)))
			this.target = $(targetId);
		else
			return;
		
		Object.extend(this.options, options || {});

		if (this.source.checked)
		{
			this.target.checked = true;
			this.target.disabled = true;
		}
		
		this.addObservers();
	},
	
	addObservers: function(){
		this.source.observe('click', function(){
			if (this.source.checked)
			{
				this.target.checked = true;
				this.target.disabled = true;
			}
			else
				this.target.disabled = false;
		}.bindAsEventListener(this));
	}
});


Avus.AjaxAPICall = Class.create({

	options: {
	},

	initialize: function(command, parameters, callback) 
	{
		var URL = '/a/' + command;
		if (!parameters)
			parameters = '';
		if (!callback)
			callback / Prototype.emptyFunction;
		ajax_submitPostURL(URL, parameters, callback);
	}
	
});


Avus.GoogleMap = Class.create({

	options: {
		maptype: 'roadmap'
	},

	initialize: function(elementId) 
	{
		if (!Object.isElement($(elementId)))
			return;
		
		this.target = $(elementId);
	},
	
	setMapData: function(mapData)
	{
		data = mapData.split(';');
		this.lat = data[0];
		this.lng = data[1];
		this.zoom = data[2];
		if (!this.zoom)
			this.zoom = 14;
		this.showMarker = data[3];
		this.markerLat = data[4];
		this.markerLng = data[5];
	},

	setZoom: function(zoom)
	{
		this.zoom = zoom;
	},

	setLatLng: function(lat, lng)
	{
		this.lat = lat;
		this.lng = lng;
	},
	
	show: function(options)
	{
		Object.extend(this.options, options || {});

		var useragent = navigator.userAgent;

		var myLatlng = new google.maps.LatLng(this.lat, this.lng);
		var myOptions = {
			zoom: parseInt(this.zoom),
			center: myLatlng,
			mapTypeId: google.maps.MapTypeId.ROADMAP
		}
		Object.extend(myOptions, this.options);
		this.map = new google.maps.Map(this.target, myOptions);

		if (this.showMarker == 1)
			this.addMarker(this.markerLat, this.markerLng);
	},
	
	addMarker: function(lat, lng, title)
	{
		if (lat && lng)
			var markerLatlng = new google.maps.LatLng(lat, lng);
		else
			var markerLatlng = this.map.getCenter();
		if (!title)
			title = '';
		var marker = new google.maps.Marker({
			position: markerLatlng, 
			map: this.map,
			title: title
		});

				
	},

	toggleMovableMarker: function(lat, lng, callback)
	{
		if (lat && lng)
			var markerLatlng = new google.maps.LatLng(lat, lng);
		else
			var markerLatlng = this.map.getCenter();
		
		if (!callback)
			callback = Prototype.emptyFunction();
		
		if (this.marker)
		{
			this.marker.setMap();
			this.marker = null;
		}
		else
		{
			this.marker = new google.maps.Marker({
				position: markerLatlng, 
				map: this.map,
				draggable: true
			});

			google.maps.event.addListener(this.marker, 'dragend', function() {
				callback(this.marker.getPosition());
			}.bind(this));
		}	
	},
	
	addMapMoveObserver: function(callback)
	{
		google.maps.event.addListener(this.map, 'center_changed', function() {
			callback(this.map.getCenter());
		}.bind(this));
	},


	addMapZoomObserver: function(callback)
	{
		google.maps.event.addListener(this.map, 'zoom_changed', function() {
			callback(this.map.getZoom());
		}.bind(this));
	},
	
	
	goToAddress: function(address)
	{
		geocoder = new google.maps.Geocoder();
		geocoder.geocode(
			{
				address: address
			},
			function(results, status) {
				if (status == google.maps.GeocoderStatus.OK)
				{
					this.map.setCenter(results[0].geometry.location);
				}
				else
				{
					throw 'A keresett cím: ' + address + ' nem található';
				}
			}.bind(this)
		);
	},
	
	
	redraw: function()
	{
		google.maps.event.trigger(this.map, 'resize');
	},
	
	
	lat2: function()
	{
		return this.map.getCenter().lat();
	},
	
	
	lng2: function()
	{
		return this.map.getCenter().lng();
	}

	
});


Avus.StaticGoogleMap = Class.create({

	options: {
		width: 640,
		height: 640,
		sensor: false,
		https: false,
		zoom: 14,
		maptype: 'roadmap'
	},

	initialize: function(elementId, mapData, options) 
	{
		if (!Object.isElement($(elementId)))
			return;
		
		this.img = $(elementId);
	},
	
	setMapData: function(mapData)
	{
		data = mapData.split(';');
		this.lat = data[0];
		this.lng = data[1];
		this.zoom = data[2];
		this.showMarker = data[3];
		this.markerLat = data[4];
		this.markerLng = data[5];
	},
	
	show: function(options)
	{
		Object.extend(this.options, options || {});
		
		imgURL = (this.options.https) ? 'https://maps.googleapis.com/maps/api/staticmap?' : 'http://maps.google.com/maps/api/staticmap?';
		
		if (this.lat && this.lng)
			imgURL += "center=" + this.lat + ',' + this.lng + '&';
		if (this.zoom)
			imgURL += "zoom=" + this.zoom + '&';
		else
			imgURL += "zoom=" + this.options.zoom + '&';
		imgURL += "size=" + this.options.width + 'x' + this.options.height + '&';
		imgURL += "sensor=" + this.options.sensor + '&';
		imgURL += "maptype=" + this.options.maptype + '&';

		if (this.showMarker == 1)
		{
			imgURL += "markers=color:red%7C" + this.markerLat + ',' + this.markerLng + '&';
		}
		
		this.img.setAttribute('src', imgURL);
	}
	
});


Avus.MobileMenu = Class.create({

	options: {
	},

	initialize: function(elementId, options) 
	{
		if (!Object.isElement($(elementId)))
			return;

		this.nav = $(elementId);
		Object.extend(this.options, options || {});

		this.nav.show();
	}
});




AvusMethods = {

	printElement: function(elementId) {
		element = $(elementId);
		
		if (Object.isElement($('avus_print_iframe')))
		{
			iframe = $('avus_print_iframe');
			iframe.contentWindow.document.body.insert(element.innerHTML);
			iframe.contentWindow.print();
		}
		else
		{
			iframe = new Element('iframe', {id:'avus_print_iframe', src: '/blank.htm'});
			iframe.setStyle({
				width: 0,
				height: 0
			});
			document.body.insert(iframe);

			iframe.contentWindow.onload = function(){
				iframe.contentWindow.document.body.insert(element.innerHTML);
				iframe.contentWindow.print();
			}
		}
	},

	setHomepage: function(element) {
		if(Prototype.Browser.Gecko)
		{
			alert('Amennyiben kezdőoldalként akarja használni a www.ingatlanonki.hu oldalt, kérjük kattintás helyett húzza rá ugyanezt a hivatkozást a böngészőprogramjának kezdőoldal (házikó) ikonjára.');
		}
		else
		{
			this.style.behavior='url(#default#homepage)';
			this.setHomePage('http://www.ingatlanonki.hu');
		}
	},

	addBookmark: function(element) {
		var v = window;
		var desc = 'Ingatlanönki - önkiszolgáló ingatlan adatbank';
		var url = 'http://www.ingatlanonki.hu';
		if (v.sidebar)
		{
			v.sidebar.addPanel(desc, url, '');
		}
		else if (document.all)
		{
			v.external.AddFavorite(url,desc);
		}
	}
}

Object.extend(Avus, AvusMethods);


