Ext.ns('component.gvd');

component.gvd.companyMap = new function() {
	
	this.parentMarkers = new Array();
	this.subMarkers = new Array();
	this.map = null;
	this.subcategoriesHeight = null;
	
	this.showParentCompanys = function(id, elm) {
		elm = Ext.get(elm);
		
		if(elm.dom.checked) {
			Ext.Ajax.request({
				url: 'ajax.php',
				success: component.gvd.companyMap.displayParentCompanys,
				params: {
					comp: 'com_gvd_companymap',
					action: 'getByParentCategpries',
					id: id
				}
			});
		} else {
			for(var i = 0; i < this.parentMarkers.length; i++) {
				this.map.removeOverlay(this.parentMarkers[i]);
			}
			
			this.showActiveParentCompanys();
		}
	};
	
	this.showActiveParentCompanys = function() {
		var elements = Ext.query('.gvd-map-parentcompany');
		
		for(var i = 0; i < elements.length; i++) {
			if(elements[i].checked) {
				this.showParentCompanys(elements[i].value, elements[i]);
			}
		}
	};
	
	this.showActiveSubCompanys = function() {
		var elements = Ext.query('.gvd-map-subcompany');
		
		for(var i = 0; i < elements.length; i++) {
			if(elements[i].checked) {
				this.showSubCompanys(elements[i].value, elements[i]);
			}
		}
	};
	
	this.showSubCompanys = function(id, elm) {
		elm = Ext.get(elm);
		
		if(elm.dom.checked) {
			Ext.Ajax.request({
				url: 'ajax.php',
				success: component.gvd.companyMap.displaySubCompanys,
				params: {
					comp: 'com_gvd_companymap',
					action: 'getBySubCategpries',
					id: id
				}
			});
//			core.ajax.request('component.gvd.companyMap.displaySubCompanys', {
//				comp: 'com_gvd_companymap',
//				action: 'getBySubCategpries',
//				id: id
//			});
		} else {
			for(var i = 0; i < this.subMarkers.length; i++) {
				this.map.removeOverlay(this.subMarkers[i]);
			}
			
			this.showActiveSubCompanys();
		}
	};
	
	this.displayParentCompanys = function(response) {
		response = Ext.decode(response.responseText);
		
		for(var i = 0; i < response.length; i++) {
			component.gvd.companyMap.parentMarkers.push(component.gvd.companyMap.addMarker(response[i].id, response[i].company_name, response[i].street, response[i].zip, response[i].city, response[i].geocode_x, response[i].geocode_y));
		}
	};
	
	this.displaySubCompanys = function(response) {
		response = Ext.decode(response.responseText);
		
		for(var i = 0; i < response.length; i++) {
			component.gvd.companyMap.subMarkers.push(component.gvd.companyMap.addMarker(response[i].id, response[i].company_name, response[i].street, response[i].zip, response[i].city, response[i].geocode_x, response[i].geocode_y));
		}
	};
	
	this.hideSubcategories = function(id) {
		var wrapper = Ext.get('gvd-sub-' + id);
//		var messagebox = Ext.get('gvd-sub-hide-' + id);
		
		if(wrapper.isDisplayed()) { 
			wrapper.setDisplayed('none');
//			messagebox.setDisplayed('block');
		} else {
			wrapper.setDisplayed('block');
//			messagebox.setDisplayed('none');
		}
	};
	
	this.loadMap = function() {
		this.subcategoriesHeight = new Array();
		
		if (GBrowserIsCompatible()) {
			var map_canvas = document.getElementById("map");
			this.map = new GMap2(map_canvas);
			var geocoder = new GClientGeocoder();
			
			this.map.addControl(new GLargeMapControl());
			
			geocoder.getLatLng("Dieburg",
				function(point) {
					if(point) {
						component.gvd.companyMap.map.setCenter(point, 13);
					}
				}
			);
		}
	};
	
	this.addMarker = function(company_id, company_name, street, zip, city, x, y) {
		var point = new GLatLng(x, y);
		var marker = new GMarker(point);
		
		component.gvd.companyMap.map.addOverlay(marker);
		
		GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml(company_name + '<br/>' + street + '<br/>' + zip + ' ' + city + '<br/><a href="?comp=com_gvd_showcompany&id=' + company_id + '">Zum Gewerbe</a>');
		});
		
		return marker;
	};
	
};