﻿function initMapService(mapid, hiddenid, onsubmit) {
  var listboxid = mapid+"listbox";
  var infoboxid = mapid+"infobox";
  if(mapservice) {

		mapservice.infoboxDisplayed = true;
		
		mapservice.displayInfoBoxSelect = function() {
		  if(this.regionId!="0")
				this.infoboxDisplayed = true;
			if(this.regionId=="0" && this.municipalityId=="0" && !this.infoboxDisplayed) {
				var infobox = $(infoboxid);
				if(infobox)
					infobox.style.display="block";
					infobox.style.top = "5px"
					infobox.style.width = "170px"
					infobox.innerHTML = infobox.inforegion;
				this.infoboxDisplayed = true;
			} else if(!this.infoboxPostalDisplayed) {
				this.hideInfoBox();
			}
			this.infoboxPostalDisplayed=false;
		}
		mapservice.displayInfoBoxZoom = function() {
			this.hideInfoBox();
			var infobox = $(infoboxid);
			if(infobox) {
				if(this.regionId!="0" && this.municipalityId!="0") {
					infobox.innerHTML = infobox.infopostnummer;
					infobox.style.display="block";
					infobox.style.top = "25px";
					infobox.style.width = "138px";
					this.infoboxPostalDisplayed=true;
				}
			}
		}
		mapservice.hideInfoBox = function() {
			this.infoboxDisplayed = true;
				var infobox = $(infoboxid);
				if(infobox)
					infobox.style.display="none";
		}
  
    mapservice.data = {
      Landsdele:{},
      Kommuner:{},
      PostNumre:{}
    };
    
    mapservice.imagePrefix='';
    
    mapservice.serialize = function() {
      var text = this.regionId + '[1]' + this.municipalityId + '[1]';
      var keys =  new Array('Landsdele','Kommuner','PostNumre');
      for(var i=0;i<keys.length;i++) {
        var list = this.data[keys[i]];
        var text2 = '';
        for(var ID in list) {
          var datum = list[ID];
          text2 += (datum.ID + '|' + datum.Text + '[]');
        }
        if(text2.length>2)
          text2 = text2.substring(0, text2.length-2);
        text += (text2 + '[2]');
      }
      if(text.length>3)
        text = text.substring(0, text.length-3);
      return text;
    };
    
    mapservice.deserialize = function(text) {
      var a = text.split('[1]');
      if(a.length==3) {
				this.regionId = a[0];
				this.municipalityId = a[1];
				text = a[2];
				var a = text.split('[2]');
				var list;
				for(var ia=0;ia<3;ia++) {
					switch(ia) {
						case 0: list = this.data.Landsdele; break;
						case 1: list = this.data.Kommuner; break;
						case 2: list = this.data.PostNumre; break;   
					}
					var b = a[ia].split('[]');
					for(var ib=0;ib<b.length;ib++) {
						if(b[ib].length>0) {
							var c = b[ib].split('|');
							list[c[0]] = {ID:c[0], Text:c[1]};
						}
					}
				}
				this.setSelected();
				this.showMap();
				mapservice.infoboxDisplayed = false;
			}
    };

		mapservice.setSelected = function() {
      var keys =  new Array('Landsdele','Kommuner','PostNumre');
      var keys2 =  new Array('regions','municipalities','postals');
      for(var i=0;i<keys.length;i++) {
				var arr = this.selected[keys2[i]] = new Array();
        var list = this.data[keys[i]];
        for(var ID in list) {
          var datum = list[ID];
					arr[arr.length]=datum.ID;
        }
      }
      this.updateListBox();
		};
    
    mapservice.removeSelected = function() {
      var listBox = $(listboxid);
      while (listBox.selectedIndex != -1)
      {
				var value = listBox.options[listBox.selectedIndex].value;
				switch(value.substring(0,1)) {
				case "l":
					delete this.data.Landsdele[value.substring(1)];
				  break;
				case "k":
				  delete this.data.Kommuner[value.substring(1)];
				  break;
				case "p":
				  delete this.data.PostNumre[value.substring(1)];
				  break;
				}
        listBox.options[listBox.selectedIndex].selected = false;
      }
      if(onsubmit)
        onsubmit();
      this.setSelected();
      this.showMap();
    };
    
    mapservice.removeAll = function() {
      this.data.Landsdele = {};
      this.data.Kommuner = {};
      this.data.PostNumre = {};
      if(onsubmit)
        onsubmit();
      this.setSelected();
      this.showMap();
    };
    
    mapservice.updateListBox = function() {
      var listBox = $(listboxid);
      if(listBox) {
        listBox.options.length = 0;
        for(var LandsdelID in this.data.Landsdele) {
          var option = document.createElement('option');
          option.text = this.data.Landsdele[LandsdelID].Text;
          option.value = "l" + this.data.Landsdele[LandsdelID].ID;
          listBox.options[listBox.options.length] = option;
        }
        for(var KommuneID in this.data.Kommuner) {
          var option = document.createElement('option');
          option.text = this.data.Kommuner[KommuneID].Text;
          option.value = "k" + this.data.Kommuner[KommuneID].ID;
          listBox.options[listBox.options.length] = option;
        }
        for(var PostNummer in this.data.PostNumre) {
          var option = document.createElement('option');
          option.text = this.data.PostNumre[PostNummer].Text;
          option.value = "p" + this.data.PostNumre[PostNummer].ID;
          listBox.options[listBox.options.length] = option;
        }
        if(listBox.options.length==0) {
					var option = document.createElement('option');
          option.text = "Vælg beliggenhed på kort";
          option.style.color = "#797979";
          option.value = "";
          listBox.options[listBox.options.length] = option;
        }
      }
    };
  
    var hidden = $(hiddenid);
    if(hidden) {
      mapservice.deserialize(hidden.value);
      var back = $('mapback');
      if(mapservice.regionId!=0) {
				if(mapservice.municipalityId!=0) {
					back.innerHTML = 'Tilbage til Landsdelskort';
				} else {
					back.innerHTML = 'Tilbage til Danmarkskort';
				}
			}
			if(back) back.style.display = mapservice.regionId==0 ? 'none' : 'block';
    }
		
    mapservice.callbackZoom = function(regionId, municipalityId, areaText) {
      this.hideInfoBox();
			var back = $('mapback');
      if(regionId!=0) {
				if(municipalityId!=0) {
					back.innerHTML = 'Tilbage til Landsdelskort';
				} else {
					back.innerHTML = 'Tilbage til Danmarkskort';
				}
			}
			if(back) back.style.display = regionId==0 ? 'none' : 'block';
      if(municipalityId>0 && !(this.municipalityId>0)) {
        this.data.Kommuner[municipalityId] = {ID:municipalityId, Text:areaText};
      }
      else if(regionId>0 && !(this.region)) {
        this.data.Landsdele[regionId] = {ID:regionId, Text:areaText};
      }
      this.regionId = regionId;
      this.municipalityId = municipalityId;
			if(municipalityId>0)
				delete this.data.Landsdele[regionId];
      this.setSelected();
      if(onsubmit)
        onsubmit();
      this.showMap();
    };
		mapservice.goback=function() {
		  this.hideInfoBox();
			this.back();
			var back = $('mapback');
			if(back) back.style.display = this.regionId==0 ? 'none' : 'block';
      if(mapservice.regionId!=0) {
				if(mapservice.municipalityId!=0) {
					back.innerHTML = 'Tilbage til Landsdelskort';
				} else {
					back.innerHTML = 'Tilbage til Danmarkskort';
				}
			}
		};
    mapservice.callbackSelect = function(regionId, municipalityId, postalId, areaText) {
      this.displayInfoBoxSelect();
      if(this.municipalityId>0) {
        delete this.data.Kommuner[municipalityId];
        this.data.PostNumre[postalId] = {ID:postalId, Text:areaText};
      }
      else if(this.regionId>0) {
        municipalityId = postalId; // bugfix
        delete this.data.Landsdele[regionId];
        this.data.Kommuner[municipalityId] = {ID:municipalityId, Text:areaText};
      } else {
        regionId = postalId; // bugfix
        this.data.Landsdele[regionId] = {ID:regionId, Text:areaText};
      }
      if(onsubmit)
        onsubmit();
      this.setSelected();
    };

    mapservice.callbackDeselect = function(regionId, municipalityId, postalId) {
      this.displayInfoBoxSelect();
      if(this.municipalityId>0) {
        delete this.data.PostNumre[postalId];
      }
      else if(this.regionId>0) {
        municipalityId = postalId; // bugfix
        delete this.data.Kommuner[municipalityId];
      } else {
        regionId = postalId; // bugfix
        delete this.data.Landsdele[regionId];
      }
      if(onsubmit)
        onsubmit();
      this.setSelected();
    };
    
  }
}
