// globaler Zugriff auf Ajax-Objekt
var ajax_obj;

function startAjax() {
	//alert('start');
  // Internet Explorer
  ajax_obj = null
  if (window.ActiveXObject) {
    ajax_obj = new ActiveXObject("Microsoft.XMLHTTP");
  }
  // die anderen Browser
  else if (window.XMLHttpRequest) {
    ajax_obj = new XMLHttpRequest();
  }
  
  // Macht nur Sinn an dieser Stelle, wenn die Funktion bereits beim Laden der Seite aufgerufen wird
  // handleEmpty(0);
}

function selectCountry(lng, emptyMessage) {
  if (document.getElementById('country').value > 0) {
	startAjax();
    
    // Mit ajax_obj.open('GET', ...); bauen wir eine Verbindung zur PHP-Datei auf und uebergeben per GET eine URL-kodierte Zeichenkette
    ajax_obj.open('GET', 'css-js/ajax/state.php?country=' + document.getElementById('country').value + '&lng=' + lng);
    
    // nimmt das Ergebnis des Servers entgegen
    ajax_obj.onreadystatechange = getStatesAsXML;
    
    // Daten senden
    ajax_obj.send(null);
  }
  else {
	handleEmpty(emptyMessage);
  }
}


function selectCountry2(country, lng) {
  startAjax();
  document.getElementById('country').value = country;
  
  // Mit ajax_obj.open('GET', ...); bauen wir eine Verbindung zur PHP-Datei auf und uebergeben per GET eine URL-kodierte Zeichenkette
  ajax_obj.open('GET', 'css-js/ajax/state.php?country=' + country + '&lng=' + lng);
  
  // nimmt das Ergebnis des Servers entgegen
  ajax_obj.onreadystatechange = getStatesAsXML;
  
  // Daten senden
  ajax_obj.send(null);
}


function getStatesAsXML() {
  // ueberprueft, ob alle Daten korrekt empfangen wurden
  if (ajax_obj.readyState == 4) {
    states = ajax_obj.responseXML;
    getStates(states);
  }
}

function getStates(states) {
  statesArray = new Array();
  
  // <dataset>-Elemente auslesen und in array eintragen
  for (i = 0; i < states.getElementsByTagName('dataset').length; i++) {
    dataset = states.getElementsByTagName('dataset')[i];
    statesArray[i] = new Array(dataset.getElementsByTagName('id')[0].firstChild.nodeValue,
                               dataset.getElementsByTagName('state')[0].firstChild.nodeValue);
  }

  // Array-Elemente ausgeben
  if (statesArray.length > 0) {
    createStateSelectionList(statesArray);
  }
}

function createStateSelectionList(statesArray) {
  var stateSelection = document.getElementById('state');
  if (stateSelection == null) return;
  
  dropSets();
  
  for (i = 0; i < statesArray.length; i++) {
    /*******************************************/
    /* hier muessen beide Variablen deklariert */
    /* werden, sonst spielt der IE nicht mit.  */
    /* Weiss der Teufel warum                  */
    /*******************************************/
    // neues <option>-Element erzeugen
    var stateOption = document.createElement('option');
    // neuen Textknoten (Texteintrag fuer das <option>-Element) erzeugen
    var stateText = document.createTextNode(statesArray[i][1]);
    // aus <option> und Textknoten wird jetzt <option>Text</option>
    stateOption.appendChild(stateText);
    // <option>-Element in das HTML-Dokument einhaengen
    stateSelection.appendChild(stateOption);
    // Wert des eingehaengten <option>-Elements setzen
    stateSelection.childNodes[i].setAttribute('value', statesArray[i][0]);
  }
  
  showCountryFlag();
  showMap();
  stateSelection.disabled = false;
}

function dropSets() {
  var stateSelection = document.getElementById('state');
  if (stateSelection != null) {
    num = stateSelection.childNodes.length;
    for (i = 0; i < num; i++) {
      childToRemove = stateSelection.childNodes[0];
      stateSelection.removeChild(childToRemove);
    }
  }
}

function showCountryFlag() {
  var index = document.getElementById('country').selectedIndex;
  var imgTag = document.getElementById('countryFlag');
  imgTag.src = 'bilder/ajax/flaggen/' + index + '.gif';
}

function showMap() {
  var index = document.getElementById('country').selectedIndex;
  var imgTag = document.getElementById('MapImage');
  
  if (imgTag != null) updateImageMap(index);
}

function selectState(state) {
  document.getElementById('state').value = state;
}

// Setzt alles zurueck wenn Land == 0 (Bundesland deaktiviert, Flagge: leer, Karte: Europa)
function handleEmpty(emptyMessage) {
  if (document.getElementById('country').selectedIndex == 0) {
	var stateSelect = document.getElementById('state');
	if (stateSelect != null) {
      stateSelect.options.length = 0;
      stateSelect.options[0] = new Option(emptyMessage, '');
      stateSelect.disabled = true;
    }
    document.getElementById('countryFlag').src = 'bilder/ajax/flaggen/0.gif';
    var imgTag = document.getElementById('MapImage');
    
    if (imgTag != null) updateImageMap(0);
    // dropSets();
  }
}

function updateImageMap(index) {
  var imgTag = document.getElementById('MapImage');
  imgTag.src = 'bilder/karten/' + index + '.gif';
  imgTag.useMap = '#' + index;
  
  // Hack, damit auch Opera die useMap aktualisiert
  if(window.opera) {
	  imgTag.outerHTML=imgTag.outerHTML;
  }
}



/***************************/
/* Ajax fuer die Tanzarten */
/***************************/
function selectDancekind(lng, emptyMessage) {
  if (document.getElementById('dancekind').value > 0) {
	startAjax();
    
    // Mit ajax_obj.open('GET', ...); bauen wir eine Verbindung zur PHP-Datei auf und uebergeben per GET eine URL-kodierte Zeichenkette
    ajax_obj.open('GET', 'css-js/ajax/ability.php?dancekind=' + document.getElementById('dancekind').value + '&lng=' + lng);
    
    // nimmt das Ergebnis des Servers entgegen
    ajax_obj.onreadystatechange = getAbilitiesAsXML;
    
    // Daten senden
    ajax_obj.send(null);
  }
  else {
	handleEmptyDancekind(emptyMessage);
  }
}

function getAbilitiesAsXML() {
  // ueberprueft, ob alle Daten korrekt empfangen wurden
  if (ajax_obj.readyState == 4) {
    abilities = ajax_obj.responseXML;
    getAbilities(abilities);
  }
}

function getAbilities(abilities) {
  abilityArray = new Array();
  
  // <dataset>-Elemente auslesen und in array eintragen
  for (i = 0; i < abilities.getElementsByTagName('dataset').length; i++) {
    dataset = abilities.getElementsByTagName('dataset')[i];
    abilityArray[i] = new Array(dataset.getElementsByTagName('id')[0].firstChild.nodeValue,
                                dataset.getElementsByTagName('ability')[0].firstChild.nodeValue);
  }

  // Array-Elemente ausgeben
  if (abilityArray.length > 0) {
    createAbilitySelectionList(abilityArray);
  }
}

function createAbilitySelectionList(abilityArray) {
  var abilitySelection = document.getElementById('ability');
  if (abilitySelection == null) return;
  
  dropAbilitySets();
  
  for (i = 0; i < abilityArray.length; i++) {
    /*******************************************/
    /* hier muessen beide Variablen deklariert */
    /* werden, sonst spielt der IE nicht mit.  */
    /* Weiss der Teufel warum                  */
    /*******************************************/
    // neues <option>-Element erzeugen
    var abilityOption = document.createElement('option');
    // neuen Textknoten (Texteintrag fuer das <option>-Element) erzeugen
    var abilityText = document.createTextNode(abilityArray[i][1]);
    // aus <option> und Textknoten wird jetzt <option>Text</option>
    abilityOption.appendChild(abilityText);
    // <option>-Element in das HTML-Dokument einhaengen
    abilitySelection.appendChild(abilityOption);
    // Wert des eingehaengten <option>-Elements setzen
    abilitySelection.childNodes[i].setAttribute('value', abilityArray[i][0]);
  }
  
  abilitySelection.disabled = false;
}

function dropAbilitySets() {
  var abilitySelection = document.getElementById('ability');
  if (abilitySelection != null) {
    num = abilitySelection.childNodes.length;
    for (i = 0; i < num; i++) {
      childToRemove = abilitySelection.childNodes[0];
      abilitySelection.removeChild(childToRemove);
    }
  }
}


function handleEmptyDancekind(emptyMessage, emptyDancekindText) {
  if (document.getElementById('dancekind').value == emptyDancekindText) {
    document.getElementById('ability').options.length = 0;
    document.getElementById('ability').options[0] = new Option(emptyMessage, "");
    document.getElementById('ability').disabled = true;
  }
}

function activateAjaxForDancekindSelection(element_name, lng, select_dancekind) {
  document.getElementById(element_name).onchange = function(){selectDancekind(lng, select_dancekind)};
}




/***********************/
/* Ajax fuer Tanzmusik */
/***********************/
function selectSong(emptyMessage) {
  if (document.getElementById('interpreter_select').value > 0) {
	startAjax();
    
    // Mit ajax_obj.open('GET', ...); bauen wir eine Verbindung zur PHP-Datei auf und uebergeben per GET eine URL-kodierte Zeichenkette
    ajax_obj.open('GET', 'css-js/ajax/song.php?interpreter_id=' + document.getElementById('interpreter_select').value);
    
    // nimmt das Ergebnis des Servers entgegen
    ajax_obj.onreadystatechange = getSongsAsXML;
    
    // Daten senden
    ajax_obj.send(null);
  }
  else {
	handleEmptyInterpreter(emptyMessage);
  }
}

function getSongsAsXML() {
  // ueberprueft, ob alle Daten korrekt empfangen wurden
  if (ajax_obj.readyState == 4) {
    songs = ajax_obj.responseXML;
    getSongs(songs);
  }
}

function getSongs(songs) {
  titleArray = new Array();
  
  // <dataset>-Elemente auslesen und in array eintragen
  for (i = 0; i < songs.getElementsByTagName('dataset').length; i++) {
    dataset = songs.getElementsByTagName('dataset')[i];
    titleArray[i] = new Array(dataset.getElementsByTagName('id')[0].firstChild.nodeValue,
                              dataset.getElementsByTagName('title')[0].firstChild.nodeValue);
  }
  
  // Array-Elemente ausgeben
  if (titleArray.length > 0) {
    createTitleSelectionList(titleArray);
  }
}

function createTitleSelectionList(titleArray) {
  var titleSelection = document.getElementById('title');
  if (titleSelection == null) return;
  
  dropTitleSets();
  
  for (i = 0; i < titleArray.length; i++) {
    /*******************************************/
    /* hier muessen beide Variablen deklariert */
    /* werden, sonst spielt der IE nicht mit.  */
    /* Weiss der Teufel warum                  */
    /*******************************************/
    // neues <option>-Element erzeugen
    var titleOption = document.createElement('option');
    // neuen Textknoten (Texteintrag fuer das <option>-Element) erzeugen
    var titleText = document.createTextNode(titleArray[i][1]);
    // aus <option> und Textknoten wird jetzt <option>Text</option>
    titleOption.appendChild(titleText);
    // <option>-Element in das HTML-Dokument einhaengen
    titleSelection.appendChild(titleOption);
    // Wert des eingehaengten <option>-Elements setzen
    titleSelection.childNodes[i].setAttribute('value', titleArray[i][0]);
  }
  
  titleSelection.disabled = false;
}

function dropTitleSets() {
  var titleSelection = document.getElementById('title');
  if (titleSelection != null) {
    num = titleSelection.childNodes.length;
    for (i = 0; i < num; i++) {
      childToRemove = titleSelection.childNodes[0];
      titleSelection.removeChild(childToRemove);
    }
  }
}


function handleEmptyInterpreter(emptyMessage) {
  if (document.getElementById('interpreter_select').selectedIndex == 0) {
    document.getElementById('title').options.length = 0;
    document.getElementById('title').options[0] = new Option(emptyMessage, "");
    document.getElementById('title').disabled = true;
  }
}

function activateAjaxForSongSelection(emptyMessage) {
  document.getElementById('interpreter_select').onChange = function(){selectSong(emptyMessage)};
}