window.nn = (window.nn || {}); 
window.nn.map = (window.nn.map || {});

nn.init = function() {
  Dom.addClass('nno-map', "nielsen_off");
  Dom.addClass('nno-map', "CityNet_on");
  Dom.addClass('nno-map', "Airport_on");
  Dom.addClass('nno-map', "TrainStation_on");
  Dom.addClass('nno-map', "Event_on");
  Dom.addClass('nno-map', "ShoppingNet_on");
  
  nn.searchIndex = [];
  i = 0;
  for(var blockId in nn.cities){
    nn.map.addToMap(blockId);
    nn.addToIndex(i, blockId);
    i = i + 1;
  }
  
  nn.currentSearchResultURL = "";
  
  nn.map.draw();
  nn.netAutoComplete();
};

nn.classMap = {
  "city_network"     : "CityNet",
  "airport_network"  : "Airport",
  "events"           : "Event",
  "shopping_network" : "ShoppingNet",
  "train_station"    : "TrainStation"
};

nn.translationMap = {
    "de" : {
        "city_network"     : "Stadtnetz",
        "airport_network"  : "AirportNet",
        "events"           : "Event",
        "shopping_network" : "ShoppingNet",
        "train_station"    : "Bahnhof"
    },
    "en" : {
        "city_network"     : "CityNet",
        "airport_network"  : "AirportNet",
        "events"           : "Event",
        "shopping_network" : "ShoppingNet",
        "train_station"    : "TrainStation"
    }
};

nn.addToIndex = function (index, blockId) {
  var c_data = nn.cities[blockId];
  var my_city_name = c_data.label[activeLang];
  nn.searchIndex[i] = [my_city_name, {"link" : c_data.url  }];
};

nn.map.addToMap = function (blockId) {
  var c_data = nn.cities[blockId];
  var el_id = "city_element_"+blockId;
  var label_id = "city_label_"+blockId;
  c_data.label_el = [];
  c_data.city_el = wNode.create({
    nodeName: "div",
    id: el_id,
    className: "locName city_element",
    onclick: function(){
      //nn.p.selectCity(this);
    },
    onmouseover: function(){
      //Dom.addClass(el_id,'focussed');
    },
    onmouseout: function(){
      //Dom.removeClass(el_id,'focussed');
    },
    parentNode: Dom.get('mapelements')
  });
  
  var nets = c_data.network_types;
  var net_names = [];
  for (var n = 0; n < nets.length; n++){
    net_names[n] = nn.translationMap[activeLang][nets[n]];
  }
  var net_string = net_names.join(", ");
  for (var n = 0; n < nets.length; n++){
    wNode.create({
      nodeName: "div",
      className: "city_net " + nn.classMap[nets[n]],
      parentNode: c_data.city_el //Dom.get('mapelements')
    });
    c_data.label_el[n] = wNode.create({
      nodeName: "a",
      id: label_id,
      href: c_data.url,
      className: nn.classMap[nets[n]],
      textNode: c_data.label[activeLang],
      title: net_string,
      parentNode: c_data.city_el
    });
  }
  c_data.city_el.style.width = (nets.length*12)+"px";
};

nn.map.draw = function () {
  var lang = activeLang;
  var new_xy,new_label_xy;
  var defaultX = 540;
  var defaultY = 120;
  for(var blockId in nn.cities){
    var c_data = nn.cities[blockId];
    
    // position of city
    new_xy = [defaultX,defaultY];
    if (c_data.coordinate_city_x[lang] !== undefined) {
      new_xy[0] = c_data.coordinate_city_x[lang];
      new_xy[1] = c_data.coordinate_city_y[lang];
    } else {
      defaultY += 20;
    }
    this.setXY(c_data.city_el,new_xy);
    
    // position of label
    new_label_xy = [0,0];
    if (c_data.coordinate_label_x[lang] !== undefined) {
      new_label_xy[0] = c_data.coordinate_label_x[lang];
      new_label_xy[1] = c_data.coordinate_label_y[lang];
    }
    new_label_xy[0] += new_xy[0];
    new_label_xy[1] += new_xy[1];
    var nets = c_data.network_types;
    for (var n = 0; n < nets.length; n++){
      this.setXY(c_data.label_el[n],new_label_xy);
      c_data.label_el[n].innerHTML = c_data.label[lang];
    }
  }
};

nn.map.toggleLayers = function (element,whichLayer) {
  element.blur();
  what = Dom.hasClass('nno-map', whichLayer+"_off");
  if (what) {
    Dom.removeClass('nno-map', whichLayer+"_off");
    Dom.addClass('nno-map', whichLayer+"_on");
  } else {
    Dom.addClass('nno-map', whichLayer+"_off");
    Dom.removeClass('nno-map', whichLayer+"_on");
  }
};

nn.map.setXY = function (el, xy) {
  var offset = [0,0];
  if(Dom.hasClass(el,'city_element')) {
    offset = [parseInt(Dom.getStyle(el, 'width'), 10)+10,10];
  }  
  var mapXY = Dom.getXY('map_img');
  var xy_new = [mapXY[0]+xy[0]-offset[0],mapXY[1]+xy[1]-offset[1]];
  Dom.setXY(el,xy_new);
};

nn.netAutoComplete = function() {
    // Instantiate JS Array DataSource
    nn.oACDS = new Y.widget.DS_JSArray(nn.searchIndex);
    
    // Instantiate second AutoComplete
    nn.oAutoComp = new YAHOO.widget.AutoComplete('mapsearchinput','mapsearchresult', nn.oACDS);
    nn.oAutoComp.prehighlightClassName = "hilocation";
    nn.oAutoComp.typeAhead = true;
    nn.oAutoComp.useShadow = true;
    nn.oAutoComp.forceSelection = true;
    
    nn.oAutoComp.formatResult = function(oResultItem, sQuery) {
        //var sMarkup = "<span class='"+oResultItem[1].type+"'>" + oResultItem[0] + " (" + oResultItem[1].typeName + ")</span>";
        var sMarkup = "<span>" + oResultItem[0] + "</span>";
        return (sMarkup);
    };
    
    nn.oAutoComp.itemSelectEvent.subscribe(function(e, args){
      nn.currentSearchResultURL = args[2][1].link;
    });
};

nn.goCity = function(){
  theForm = document.getElementById('mapsearchform');
  if(theForm.city.value && nn.currentSearchResultURL) {
    location.href = nn.currentSearchResultURL;
  }
};

yui.Event.onDOMReady(function() {
  nn.init();
});
