
/*******************************************************************
 * show_xml.js                                                     *
 *                                                                 *
 * Copyright (c) de-bit GmbH. All Rights Reserved.                 *
 *                                                                 *
 * Permission to use, copy, modify, and distribute this software   *
 * and its documentation for any purposes and without              *
 * fee is hereby denied!                                           *
 *                                                                 *
 ******************************************************************/

var announces_arr = [];
var announces_tmp = null;
var announces_cnt = 0;


var env = {lines: -1,
           to_parse_rows: [],
           to_show: [],
           sponsor: {cur_sponsor: -1, obj: null},
           announcement: {
             notes: [],
             obj: null,
             obj_acc: null,
             is_show_last: false
             },
           col_span: [],
           runname: '',
           clear_announcement: false,
           style: null};
	
var cur_run = {read_xml_file: null,
               read_xml_annoucement_file: null,
               change_sponsor: null
               };
	
var cache = {target_fld: [],
             target_value: [],
	      flags: [],
	      sponsor: [],
	      marker: [],
	      header: {flag: 'none'},
	      lines: -1,
	      followmarker: [],
	      row2no: [],
	      times: {
	        lastime: [],
	        secondbesttime: [],
	        section0: [],
	        section1: [],
	        section2: [],
	        section3: [],
	        section4: [],
	        bestsection0: [],
	        bestsection1: [],
	        bestsection2: [],
	        bestsection3: [],
	        bestsection4: []
               }
             };

function numsort(a, b) {
  return a - b;
}

function timesort(a, b) {
  return (a[0] === b[0] ? 0 : (a[0] < b[0] ? -1 : 1));
}

function whitespacetonbsp(text) {
  var newstr = "&nbsp;";
  var teilstr = text.split(' ');

  if(teilstr.length === 1) var newstr = teilstr[0];
  else if(teilstr.length === 2) var newstr = teilstr[0] + "&nbsp;" + teilstr[1];
  else if(teilstr.length === 3) var newstr = teilstr[0] + "&nbsp;" + teilstr[1] + "&nbsp;" + teilstr[2];
  else if(teilstr.length === 4) var newstr = teilstr[0] + "&nbsp;" + teilstr[1] + "&nbsp;" + teilstr[2] + "&nbsp;" + teilstr[3];
  else if(teilstr.length === 5) var newstr = teilstr[0] + "&nbsp;" + teilstr[1] + "&nbsp;" + teilstr[2] + "&nbsp;" + teilstr[3] + "&nbsp;" + teilstr[4];
  else if(teilstr.length === 6) var newstr = teilstr[0] + "&nbsp;" + teilstr[1] + "&nbsp;" + teilstr[2] + "&nbsp;" + teilstr[3] + "&nbsp;" + teilstr[4] + "&nbsp;" + teilstr[5];
  else var newstr = "[Fehler 0x01]";

  return newstr;
}

function time2seconds(time) {
  if(time.length === 0) return 0;
  if(time.indexOf(':') === -1) return 1*time;

  var rc = 0.0;
  var parts = time.split(':');

  if(parts.length === 2) {
    rc = (60 * parts[0]) + (1* parts[1]);
  } else if(parts.length === 3) {
    rc = (3600 * parts[0]) + (60 * parts[1]) + (1* parts[2]);
  }

  return rc;
}

function followmarker(cur_tr) {
  var cur_no = cache.row2no[cur_tr];

  if(array_key_exists(cur_no, cache.followmarker) && cache.followmarker[cur_no] >= 0) {
    cache.followmarker[cur_no] = -1;
    return true;
  }

  cache.followmarker[cur_no] = 1;
  return true;
}

function read_xml_file(req, from) {

  var xml_content = req.read(from, false);
  if(!is_string(xml_content) || strlen(xml_content)===0) return false;
	
  var xmlobject = req.getXmlObj(xml_content);
  if(is_null(xmlobject)) return false;
	
  var root = xmlobject.getElementsByTagName('resultspage')[0];
  if(!root) return false;
	
  write_xml_head(root);
  write_xml_results(root);
	
  root = null;
  xmlobject = null;
  xml_content = null;
	
  return true;
}

function write_xml_head(root) {

  var labels = root.getElementsByTagName('label');
  var obj = null;
  var target_obj = null;
  var std_add = 'v_header_';
  var obj_name = '';
  var obj_int_name = '';
  var w_text = '';

  for(var i = 0; i < labels.length; i++) {

    obj = labels[i];
    if(!obj) continue;

    obj_int_name = obj.getAttributeNode('type').nodeValue;
    obj_name = std_add + obj_int_name;

    target_obj = document.getElementById(obj_name);
    if(!target_obj) continue;

    w_text = ((obj.firstChild) && (obj.firstChild.nodeValue) ? obj.firstChild.nodeValue : '');
    target_obj.innerHTML = w_text;

    if(obj_int_name === 'groupname') {
      if(env.runname != w_text) {
        env.clear_announcement = true;
        env.runname = w_text;		
      }
    }

    if(obj_int_name === 'flag') {
      cache.header['flag'] = w_text;
      document.getElementById('flag').src = cache.flags[w_text].src;
      document.getElementById('flag').height = 42
      document.getElementById('flag').width = 42
      continue;
    }
  }

  return true;
}

function write_xml_results(root) {	

  var results = root.getElementsByTagName('result');
  var obj = null;
  check_result_lines(results.length);
  var obj_name = '';
	
  var j;
  var target_obj = null;
  var value = null;
  
  var cur_row = 0;
  var cur_section = '';

  var cur_no = 0;
  var cur_row_obj = null;

  cache.lines = results.length;

  var cur_times = {lasttime: 0,
                   secondbesttime: 0,
                   section0: 0,
                   section1: 0,
                   section2: 0,
                   section3: 0,
                   section4: 0,
                   bestsection0: 0,
                   bestsection1: 0,
                   bestsection2: 0,
                   bestsection3: 0,
                   bestsection4: 0};

  var tmp_str = '';
  var tmp = '';
  var tmp2 = '';  
  
  var is_markit1 = false;
  var is_markit2 = false;

  var tempbsa0 = null;
  var tempbsa1 = null;
  var tempbsa2 = null;
  var tempbsa3 = null;
  var tempbsa4 = null;

  var BestSectionArray0 = new Array();
  var BestSectionArray1 = new Array();
  var BestSectionArray2 = new Array();
  var BestSectionArray3 = new Array();
  var BestSectionArray4 = new Array();

  var FinalBestSectionArray0 = null;
  var FinalBestSectionArray1 = null;
  var FinalBestSectionArray2 = null;
  var FinalBestSectionArray3 = null;
  var FinalBestSectionArray4 = null;

		
  for(var i = 0; i < results.length; i++) {

    // START FOR EACH TABLE
    obj = results[i];
    if(!obj) continue;

    cur_times.lasttime = time2seconds(obj.getAttributeNode('lasttime').nodeValue);
    cur_times.secondbesttime = time2seconds(obj.getAttributeNode('besttime').nodeValue);

    tmp_str = obj.getAttributeNode('section0').nodeValue;
    cur_times.section0 = (tmp_str.length > 0 ? time2seconds(tmp_str) : -1);

    tmp_str = obj.getAttributeNode('section1').nodeValue;
    cur_times.section1 = (tmp_str.length > 0 ? time2seconds(tmp_str) : -1);

    tmp_str = obj.getAttributeNode('section2').nodeValue;
    cur_times.section2 = (tmp_str.length > 0 ? time2seconds(tmp_str) : -1);

    tmp_str = obj.getAttributeNode('section3').nodeValue;
    cur_times.section3 = (tmp_str.length > 0 ? time2seconds(tmp_str) : -1);

    tmp_str = obj.getAttributeNode('section4').nodeValue;
    cur_times.section4 = (tmp_str.length > 0 ? time2seconds(tmp_str) : -1);
	
    tmp_str = obj.getAttributeNode('bestsection0').nodeValue;
    cur_times.bestsection0 = (tmp_str.length > 0 ? time2seconds(tmp_str) : -1);

    tmp_str = obj.getAttributeNode('bestsection1').nodeValue;
    cur_times.bestsection1 = (tmp_str.length > 0 ? time2seconds(tmp_str) : -1);

    tmp_str = obj.getAttributeNode('bestsection2').nodeValue;
    cur_times.bestsection2 = (tmp_str.length > 0 ? time2seconds(tmp_str) : -1);

    tmp_str = obj.getAttributeNode('bestsection3').nodeValue;
    cur_times.bestsection3 = (tmp_str.length > 0 ? time2seconds(tmp_str) : -1);

    tmp_str = obj.getAttributeNode('bestsection4').nodeValue;
    cur_times.bestsection4 = (tmp_str.length > 0 ? time2seconds(tmp_str) : -1);

    for(var cur_row = 0; cur_row < env.to_parse_rows.length; cur_row++) {

      // START FOR EACH ROW

      if(env.style != 'mobile') {
        cur_section = com_ini.get_key('rows', '' + (cur_row+1), '');
      } else {
        cur_section = com_ini.get_key('mobile', '' + (cur_row+1), '');
      }

      if(cur_section === '') continue;
      if(env.to_parse_rows[cur_row].length === 0) continue;

      for(j in env.to_parse_rows[cur_row]) {
			
        // START FOR EACH CELL
        obj_name = (env.to_parse_rows[cur_row][j] !== 'marker' ? 'td_' : 'img_') + i + '_' + env.to_parse_rows[cur_row][j];
        value = obj.getAttributeNode(env.to_parse_rows[cur_row][j]).nodeValue;

        if(env.to_parse_rows[cur_row][j] === 'no') {
          cur_no = 1*value;
          cur_row_obj = document.getElementById('tr_' + (((i+1)*env.to_parse_rows.length)+cur_row));

          if(cur_row_obj) {
            cur_row_obj.className = (array_key_exists(cur_no, cache.followmarker) && cache.followmarker[cur_no] === 1 ? 'followmarker' : '');
          }
        }

        is_markit1 = false;
        is_markit2 = false;

        switch(env.to_parse_rows[cur_row][j]) {

          case 'section0':
            if(cur_times.section0 == cur_times.bestsection0) { is_markit1 = true; }
            tmp = "" + cur_times.section0;
            tmp2 = tmp.substring (0, 1);
    	     if(isNaN(tmp2)) { is_markit2 = true; }
            break;

          case 'section1':
            if(cur_times.section1 == cur_times.bestsection1) { is_markit1 = true; }
            tmp = "" + cur_times.section1;
            tmp2 = tmp.substring (0, 1);
            if(isNaN(tmp2)) { is_markit2 = true; }
            break;		    

          case 'section2':
            if(cur_times.section2 == cur_times.bestsection2) { is_markit1 = true; }
            tmp = "" + cur_times.section2;
            tmp2 = tmp.substring (0, 1);
            if(isNaN(tmp2)) { is_markit2 = true; }
            break;		    

          case 'section3':
            if(cur_times.section3 == cur_times.bestsection3) { is_markit1 = true; }
            tmp = "" + cur_times.section3;
            tmp2 = tmp.substring (0, 1);
    	     if(isNaN(tmp2)) { is_markit2 = true; }
            break;		    
	       
          case 'section4':
            if(cur_times.section4 == cur_times.bestsection4) { is_markit1 = true; }
            tmp = "" + cur_times.section4;
            tmp2 = tmp.substring (0, 1);
            if(isNaN(tmp2)) { is_markit2 = true; }
            break;		       

          case 'lasttime':
            if(cur_times.lasttime <= cur_times.secondbesttime) { is_markit1 = true; }
            tmp = "" + cur_times.lasttime;
            tmp2 = tmp.substring (0, 1);
            if(isNaN(tmp2)) { is_markit2 = true; }
            break;

          case 'bestsection0':
            if(cur_times.bestsection0 == -1) cur_times.bestsection0 = 999.999;
            tempbsa0 = BestSectionArray0.push(cur_times.bestsection0);
            break;

          case 'bestsection1':
            if(cur_times.bestsection1 == -1) cur_times.bestsection1 = 999.999;
            tempbsa1 = BestSectionArray1.push(cur_times.bestsection1);
            break;

          case 'bestsection2':
            if(cur_times.bestsection2 == -1) cur_times.bestsection2 = 999.999;
            tempbsa2 = BestSectionArray2.push(cur_times.bestsection2);
            break;

          case 'bestsection3':
            if(cur_times.bestsection3 == -1) cur_times.bestsection3 = 999.999;
            tempbsa3 = BestSectionArray3.push(cur_times.bestsection3);
            break;

          case 'bestsection4':
            if(cur_times.bestsection4 == -1) cur_times.bestsection4 = 999.999;
            tempbsa4 = BestSectionArray4.push(cur_times.bestsection4);
            break;

          default:
            break;
        }		

        if(value === cache.target_value[obj_name]) continue;
        if(env.to_parse_rows[cur_row][j] === 'no') cache.row2no[i] = 1*value;
        target_obj = cache.target_fld[obj_name];
        if(!target_obj) continue;
        if(value.length == 0) value = '&nbsp;';

        if(env.to_parse_rows[cur_row][j] !== 'marker') {

          if(env.style == 'mobile' && env.to_parse_rows[cur_row][j] == 'lastname') {
            target_obj.innerHTML = value.substr(0, 9);
          } else {
            target_obj.innerHTML = value;
          }

        } else {
          target_obj.src = cache.marker[value].src;      	
        }

        switch(env.to_parse_rows[cur_row][j]) {

          case 'section0':
          case 'section1':
          case 'section2':
          case 'section3':                  
          case 'section4':      
          case 'lasttime':
      
            target_obj.className = '';
            target_obj.style.color = '';      
      
            if(is_markit1) {
              if(value != '&nbsp;') {
                target_obj.className = 'bt';
                target_obj.style.color = '#FFFFFF';
              }
            } else if (is_markit2) {
              if(value != '&nbsp;') { 
                target_obj.className = 'bz';
                target_obj.style.color = '#3D3D3D';
              }
            } else {
              target_obj.className = '';
              target_obj.style.color = '';
            }
            break;

          case 'additional8':
            if(value != '&nbsp;') {
              target_obj.innerHTML = '<center><img src="images/languageflags/' + value + '.png" alt="" title="" /></center>';
            }
            break;

          default:
            break;
        }

        is_markit1 = false;
        is_markit2 = false;
        cache.target_value[obj_name] = value;

      // END FOR EACH CELL
      }

    // END FOR EACH ROW
    }

  // END FOR EACH TABLE
  }


  // UNMARK ALL BESTSECTIONTIMEX FIELDS
  for (u = 0; u < env.lines; u++) {
    for (p = 0; p < 5; p++) {
      evtlmarked = "td_" + u + "_bestsection" + p;
      if(document.getElementById(evtlmarked)) {
        document.getElementById(evtlmarked).className = '';
      }
    }
  }

  if(cur_times.bestsection0 != -1) {
    FinalBestSectionArray0 = ((new Array()).concat(BestSectionArray0));
    FinalBestSectionArray0.sort(numsort);
    BestValueInFinalBestSectionArray0 = FinalBestSectionArray0[0];
    for (t = 0; t < BestSectionArray0.length; t++) {
      if(BestSectionArray0[t] == BestValueInFinalBestSectionArray0) {
        target = "td_" + t + "_bestsection0";
        document.getElementById(target).className = 'btsoa0';
      }
    }
  }

  if(cur_times.bestsection1 != -1) {
    FinalBestSectionArray1 = ((new Array()).concat(BestSectionArray1));
    FinalBestSectionArray1.sort(numsort);
    BestValueInFinalBestSectionArray1 = FinalBestSectionArray1[0];
    for (t = 0; t < BestSectionArray1.length; t++) {
      if(BestSectionArray1[t] == BestValueInFinalBestSectionArray1) {
        target = "td_" + t + "_bestsection1";
        document.getElementById(target).className = 'btsoa1';
      }
    }
  }

  if(cur_times.bestsection2 != -1) {
    FinalBestSectionArray2 = ((new Array()).concat(BestSectionArray2));
    FinalBestSectionArray2.sort(numsort);
    BestValueInFinalBestSectionArray2 = FinalBestSectionArray2[0];
    for (t = 0; t < BestSectionArray2.length; t++) {
      if(BestSectionArray2[t] == BestValueInFinalBestSectionArray2) {
        target = "td_" + t + "_bestsection2";
        document.getElementById(target).className = 'btsoa2';
      }
    }
  }

  if(cur_times.bestsection3 != -1) {
    FinalBestSectionArray3 = ((new Array()).concat(BestSectionArray3));
    FinalBestSectionArray3.sort(numsort);
    BestValueInFinalBestSectionArray3 = FinalBestSectionArray3[0];
    for (t = 0; t < BestSectionArray3.length; t++) {
      if(BestSectionArray3[t] == BestValueInFinalBestSectionArray3) {
        target = "td_" + t + "_bestsection3";
        document.getElementById(target).className = 'btsoa3';
      }
    }
  }

  if(cur_times.bestsection4 != -1) {
    FinalBestSectionArray4 = ((new Array()).concat(BestSectionArray4));
    FinalBestSectionArray4.sort(numsort);
    BestValueInFinalBestSectionArray4 = FinalBestSectionArray4[0];
    for (t = 0; t < BestSectionArray4.length; t++) {
      if(BestSectionArray4[t] == BestValueInFinalBestSectionArray4) {
        target = "td_" + t + "_bestsection4";
        document.getElementById(target).className = 'btsoa4';
      }
    }
  }

  if(cur_row > 0) {
   tabelwidth();
  }
    
  return true;
}

function check_result_get_head() {
  var rc = '';
  var i = 0;
  var j = 0;
  var cur_key;
  var addon = 'content_';
  var content = '';
  var width_div = 100;
  var cur_section = '';

  for(var i = 0; i < env.to_parse_rows.length; i++) {

    if(env.style != 'mobile') {
      cur_section = com_ini.get_key('rows', '' + (i+1), '');
    } else {
      cur_section = com_ini.get_key('mobile', '' + (i+1), '');
    }

    if(cur_section === '') continue;
    if(env.to_parse_rows[i].length === 0) continue;

    rc += '<tr id="tr_' + i + '">';
    if(i > 0) rc += '<th class="th2" colspan="' + env.to_parse_rows[0].length + '">';

    for(j = 0; j < env.to_parse_rows[i].length; j++) {
      cur_key = addon + env.to_parse_rows[i][j];

      if(env.style != 'mobile') {
        content = lang_ini[start_lang].get_key('content', env.to_parse_rows[i][j], 'X');
      } else {
        content = lang_ini[start_lang].get_key('mobile', env.to_parse_rows[i][j], 'X');
      }

      if(i == 0) {
        rc += '<th class="th1" id="' + cur_key + '">' + content + '</th>';
        continue;
      }

      width_div = com_ini.get_key(cur_section + '_width', env.to_parse_rows[i][j], 'auto');
      rc += '<div id="' + cur_key + '" class="add_head_rows" style="float: left; width: ' + width_div + 'px;">' + content + '</div>';
    }

    if(i > 0) rc += '</th>';
    rc += '</tr>';
  }

  return rc;
}

function check_result_lines(len) {
  if(env.lines === len) return true;

  var head_table = document.getElementById('header_box');
  if(!head_table) return false;

  var to_write_head = check_result_get_head();
  to_write_head = '<tbody>' + to_write_head + '</tbody>';

  var complete_table = document.getElementById('results_box');
  if(!complete_table) return false;
		
  var j;
  var to_write_text = '<tbody>';
  env.lines = len;
  cache.target_value = [];
  cache.target_fld = [];
  var cur_row = 0;
  var cur_section = '';
  var width_div = 100;
  var cur_key = '';

  for(var i = 0; i < env.lines; i++) {
    for(cur_row = 0; cur_row < env.to_parse_rows.length; cur_row++) {

    if(env.style != 'mobile') {
      cur_section = com_ini.get_key('rows', '' + (cur_row+1), '');
    } else {
      cur_section = com_ini.get_key('mobile', '' + (cur_row+1), '');
    }

    if(cur_section === '') continue;
    // alert(cur_section);
    if(env.to_parse_rows[cur_row].length === 0) continue;

    if(env.style != 'mobile') {
      to_write_text += '<tr id="tr_' + (((i+1)*env.to_parse_rows.length)+cur_row) + '" class="" onclick="followmarker(' + i + ');">';
    } else {
      to_write_text += '<tr id="tr_' + (((i+1)*env.to_parse_rows.length)+cur_row) + '" class="" onclick="">';
    }

    if(cur_row > 0) {
      to_write_text += '<td colspan="' + env.to_parse_rows[0].length + '" class="td2">';
    }
		
    for(j in env.to_parse_rows[cur_row]) {
      txt = (env.to_parse_rows[cur_row][j] === 'marker' ? '<img id="img_' + i + '_' + env.to_parse_rows[cur_row][j] + '" src="' + com_ini.get_key('marker', '0', '') + '" />' : whitespacetonbsp('Y'));		    
      cur_key = 'td_' + i + '_' + env.to_parse_rows[cur_row][j];
		    
      if(cur_row == 0) {
    			
  to_write_text += '<td id="' + cur_key + '" class="td1">' + txt + '</td>';

    		  continue;
    		}
    		
    		width_div = com_ini.get_key(cur_section + '_width', env.to_parse_rows[cur_row][j], '100');
    		to_write_text += '<div id="' + cur_key + '" class="add_content_rows" style="width: ' + width_div + 'px;">' + txt + '</div>';
		  }

		  if(cur_row > 0) to_write_text += '</td>';
		  to_write_text += '</tr>';
		}
	}

	to_write_text += '</tbody>';

  complete_table.innerHTML = '<table id=\"results_table\" cellspacing=\"0\" cellpadding=\"0\">' + to_write_text + '</table>';
  head_table.innerHTML = '<table id=\"header_table\" cellspacing=\"0\" cellpadding=\"0\">' + to_write_head + '</table>';
       
  var obj_name = '';
	
  for(i = 0; i < env.lines; i++) {
    for(cur_row = 0; cur_row < env.to_parse_rows.length; cur_row++) {

      if(env.style != 'mobile') {
  	  cur_section = com_ini.get_key('rows', '' + (cur_row+1), '');
      } else {
  	  cur_section = com_ini.get_key('mobile', '' + (cur_row+1), '');
      }

      if(cur_section === '') {
        continue;
      }
  	
      // alert(cur_section);
  	
     if(env.to_parse_rows[cur_row].length === 0) {
       continue;
     }
				
		  for(j in env.to_parse_rows[cur_row]) {
  	  	obj_name = (env.to_parse_rows[cur_row][j] !== 'marker' ? 'td_' : 'img_') + i + '_' + env.to_parse_rows[cur_row][j];

	  	  target_obj = document.getElementById(obj_name);
		
		    if(!target_obj) {
          continue;		
        }
			
			  cache.target_fld[obj_name] = target_obj;
			  cache.target_value[obj_name] = 'Z';
		  }
		}		
	}
	
	//lang_ini[start_lang].write_sections('header');
	
	return true;
}

function cache_images(from, to) {
  var to_cache = com_ini.enum_keys(from);
  var to_load = '';

  for(var i in to_cache) {
    to_load = com_ini.get_key(from, to_cache[i], '');
    if(to_load === '') continue;

    cache[to][to_cache[i]] = new Image();
    cache[to][to_cache[i]].src = to_load;
  }

  return true;	
}

function read_to_parse_rows() {

  if(env.style != 'mobile') {
    var to_cache = com_ini.enum_keys('rows');
  } else {
    var to_cache = com_ini.enum_keys('mobile');
  }

	var to_cache_sections = null;
	
	var section = '';
	var next_row = -1;
	
	var value = '';
	var value2 = '';
	
	var col = 0;
	
	var is_first = true;
	
	var pos2field = [];
	var field2pos = [];
	
	var pre_key = '';
	var pos1 = -1;
	var pos2 = -1;
		
  for(var i in to_cache) {

    if(env.style != 'mobile') {
      section = com_ini.get_key('rows', to_cache[i], '');
    } else {
      section = com_ini.get_key('mobile', to_cache[i], '');
    }
		
		// alert(section);
		if(section === '') continue;
				
		next_row = env.to_parse_rows.length;
		
		env.to_parse_rows[next_row] = [];
		
		to_cache_sections = com_ini.enum_keys(section);
		
		col = 0;
		
		pre_key = '';
		
		for(var j in to_cache_sections) {
			value = com_ini.get_key(section, to_cache_sections[j], '0');
			
			switch(value) {
				case '0': continue;
				
				case '1': env.to_parse_rows[next_row][env.to_parse_rows[next_row].length] = to_cache_sections[j];
									break;
									
				case '2': env.to_parse_rows[next_row][env.to_parse_rows[next_row].length] = to_cache_sections[j];
				          env.to_show[to_cache_sections[j]] = 1;
				          break;

				default:  continue;
			}
			
			++col;
			
			pre_key = value;
		}
		
		is_first = false;		
	}
		
	//alert(env.to_parse_rows[0][0]);
	
	return true;
}


function show_colindex(lang) {
  var obj = document.getElementById('colIndex');
  if(!obj) return false;
  
  var j = 0;
  var cur_key = '';
  var cur_section = '';
  var cur_write_key = '';
  
  obj.length = 0;
  
  for(var i = 0; i < env.to_parse_rows.length; i++) {

    if(env.style != 'mobile') {
      cur_section = com_ini.get_key('rows', '' + (i+1), '');
    } else {
      cur_section = com_ini.get_key('mobile', '' + (i+1), '');
    }

    if(cur_section === '') continue;

    cur_write_key = 'introws_' + i;

    if(env.style != 'mobile') {
      obj.options[obj.length] = new Option(lang_ini[lang].get_key('rows', cur_section) + ':', cur_write_key, false, false);
    } else {
      obj.options[obj.length] = new Option(lang_ini[lang].get_key('mobile', cur_section) + ':', cur_write_key, false, false);
    }

    for(j = 0; j < env.to_parse_rows[i].length; j++) {
      cur_key = env.to_parse_rows[i][j];
      if(array_key_exists(cur_key, env.to_show)) continue;
      cur_write_key = cur_key;

      if(env.style != 'mobile') {
        obj.options[obj.length] = new Option(lang_ini[lang].get_key('content', cur_key), cur_write_key, false, false);
      } else {
        obj.options[obj.length] = new Option(lang_ini[lang].get_key('mobile', cur_key), cur_write_key, false, false);
      }
    }
  }
	
  return true;
}

function show_and_hide_Col(value, hide_it) {
  var table = document.getElementById('results_table');
  if(!table) return false;
  
  var to_set = (hide_it ? '' : 'none');
  var obj = null;

  if(value.indexOf('introws_') != 0) {
    obj = document.getElementById('content_' + value);
    obj.style.display = to_set;

    for(var i = 0; i < cache.lines; i++) {
      obj = document.getElementById('td_' + i + '_' + value);
      if(!obj) continue;
      obj.style.display = to_set;
    }

  } else {  	
    if(value == 'introws_0') return true;
    var parts = value.split('_');
    var rowIndex = 1*parts[1];
    var rows_int = env.to_parse_rows.length;

    for(var i = 0; i <= cache.lines; i++) {
      obj = document.getElementById('tr_' + ((i*rows_int)+rowIndex));
      if(!obj) continue;

      obj.style.display = to_set;
    }
  }
      
  return true;
}


function change_sponsor() {
  if(env.sponsor.cur_sponsor === -1) env.sponsor.obj = document.getElementById('commercials_box');
  if(!env.sponsor.obj || cache.sponsor.length == 0) return false;

  env.sponsor.cur_sponsor = (env.sponsor.cur_sponsor+1) % (cache.sponsor.length);
  env.sponsor.obj.innerHTML = "<div class='center'><img id='sponsor_picture' src='" + cache.sponsor[env.sponsor.cur_sponsor].src + "' /></div>";
  return true;
}


function change_lang(lang, is_start) {
  if(!is_bool(is_start)) is_start = false;
  start_lang = lang;

  if(is_start) {
    com_ini = new common_ini(req, 'data/common/config.txt');

    cache_images('flags', 'flags');
    cache_images('sponsor', 'sponsor');
    cache_images('marker', 'marker');

    read_to_parse_rows();

    if(env.style != 'mobile' && env.style != null) {
      document.images['header_picture'].src = com_ini.get_key('common', 'PathForLogo', '');
    }
  }

  if(!array_key_exists(lang, lang_ini)) lang_ini[lang] = new common_ini(req, 'data/' + lang + '/output.txt');
	
  lang_ini[lang].write_sections('header');

  if(env.style != 'mobile') {
    lang_ini[lang].write_sections('content');
  } else {
    lang_ini[lang].write_sections('mobile');
  }

  lang_ini[lang].write_sections('button', 'value');
  lang_ini[lang].write_sections('envi');

  show_colindex(lang);
	
  if(is_start) {

    cur_run.read_xml_file = window.setInterval('read_xml_file(req, "getxml.php")', 1500);

    if(env.style != 'mobile') {    
      cur_run.read_xml_annoucement_file = window.setInterval('get_announces(req)', 1000 * com_ini.get_key('common', 'SecondsToLoadAnnouncement', 1));
      cur_run.change_sponsor = window.setInterval('change_sponsor()', 1000 * com_ini.get_key('common', 'SecondsToShowSponsor', 1));
    }
  }

  var rc = read_xml_file(req, "getxml.php");
  return true;
}

/* *************************************************************************************************** */

function get_announces(req) {
  var announcements = read_xml_annoucement_file(req, "getxml.php?to_load=announcement", "announce");
  var announcements_results = announcements.getElementsByTagName('result');

  var racecontrol = read_xml_annoucement_file(req, "getxml.php?to_load=racecontrol", "racecontrol");
  var racecontrol_results = racecontrol.getElementsByTagName('rcmessage');

  var liveticker = read_xml_annoucement_file(req, "getxml.php?to_load=liveticker", "liveticker");
  var liveticker_results = liveticker.getElementsByTagName('ltmessage');

  fill_announces_array_with(announcements_results, "announce");
  fill_announces_array_with(racecontrol_results, "racecontrol");
  fill_announces_array_with(liveticker_results, "liveticker");

  // alert(announces_arr.length);

  announces_arr.sort(timesort);
  // announces_arr.reverse();
  // announces_arr.reverse();

  // Something to Check the Data...
  // str_out = '';
  // for (var i = 0; i < announces_arr.length; i++) {
    // str_out += 'announces_arr[' + i + '][0] = ' + announces_arr[i][0] + "\n";
    // str_out += 'announces_arr[' + i + '][1] = ' + announces_arr[i][1] + "\n";
    // str_out += 'announces_arr[' + i + '][2] = ' + announces_arr[i][2] + "\n";
    // str_out += '' + "\n";
  // }
  // alert(str_out);

  if(announces_arr.length > 0) {
    if(write_xml_annoucement_to_html()) {
      announces_arr = null;
      announces_arr = [];
    }
  } else {
    env.announcement.obj.innerHTML = '';
  }

  announces_cnt = 0;
}

function fill_announces_array_with(xmlitem, type, array_start) {

  for(var i = 0; i < xmlitem.length; i++) {

    obj = xmlitem[i];
    if(!obj) continue;

    value_time = obj.getAttributeNode('time').nodeValue;
    value_text = obj.getAttributeNode('text').nodeValue;

    switch(type) {
      case 'announce':
        value_ident = 'SN';
        break;
      case 'racecontrol':
        value_ident = 'RC';
        break;
      case 'liveticker':
        value_ident = 'LT';
        break;
    }

    value_time_splitted = value_time.split(" ");

    if(announces_arr[announces_cnt]) {

    } else {
      announces_tmp = new Array();
      // announces_tmp[0] = (value_time_splitted[1]);
      announces_tmp[0] = (value_time);
      announces_tmp[1] = (value_ident);
      announces_tmp[2] = (value_text);

      announces_arr[announces_arr.length] = announces_tmp;
    }

    announces_tmp = null;

    value_ident = null;
    value_time = null;
    value_text = null;

    announces_cnt++;
  }

  return true;
}






function read_xml_annoucement_file(req, from, type) {

  if(!env.announcement.obj) env.announcement.obj = document.getElementById('announcements_box'); 
  if(env.announcement.obj_acc === null) env.announcement.obj_acc = document.getElementById('popup_announcement');
  var xml_content = req.read(from, false);
  var xmlobject = req.getXmlObj(xml_content);
  if(is_null(xmlobject)) return false;

  var root = xmlobject.getElementsByTagName('resultspage')[0];

  switch(type) {
    case 'announce':
      var root = xmlobject.getElementsByTagName('resultspage')[0];
      break;
    case 'racecontrol':
      var root = xmlobject.getElementsByTagName('racecontrol')[0];
      break;
    case 'liveticker':
      var root = xmlobject.getElementsByTagName('liveticker')[0];
      break;
  }

  if(!root) return false;
  return root;
}

function write_xml_annoucement_to_html(message) {

  var obj = null;
  var obj_name = '';
  var j;
  var target_obj = null;
  var value_time = null;
  var value_text = null;

  if(!env.announcement.obj) {
    return false;
  }

  if(env.clear_announcement) {
    env.announcement.obj.innerHTML = '';
    env.clear_announcement = false;
  }

  if(announces_arr.length == 0) {
    env.announcement.obj_acc.style.display = 'none';
    // alert("announces_arr ist gleich 0 !");
    return true;
  } else {
    // alert("announces_arr ist NICHT gleich 0 !");
  }

  var is_change = false;

  for(var i = 0; i < announces_arr.length; i++) {

    // obj = announces_arr[i];
    // if(!obj) {
      // continue;
    // }
    // if(array_key_exists(value_time, env.announcement.notes)) {
      // if(!is_change) {
        // env.announcement.obj_acc.style.display = 'none';
        // displayitem('popup_loading', '5');
      // }
      // env.announcement.obj_acc.innerHTML = '';
      // return true;
    // }

    var is_begin = (env.announcement.obj.innerHTML.length === 0);
    value_time = announces_arr[i][0];

    if(document.getElementById(value_time)) {
      // alert("Element " + value_time + " Gibts scho !");
      continue;
    }

    value_ident = announces_arr[i][1];
    value_text = announces_arr[i][2];

    // env.announcement.notes[value_time] = value_text;

    if(is_begin) {
      env.announcement.obj.innerHTML += (env.announcement.obj.innerHTML.length > 0 ? '<br />' : '') + '<p class="' + value_ident + '" id="' + value_time + '"><b>' + value_time + ':</b> ' + value_text + '</p>';
    } else {
      env.announcement.obj.innerHTML = '<p class="' + value_ident + '" id="' + value_time + '"><b>' + value_time + ':</b> ' + value_text + '</p>' + env.announcement.obj.innerHTML;
    }

    // alert("Angehaengt: " + value_time);

    if(value_ident == 'SN' || value_ident == 'RC' ) {
      // alert("Verarbeite jetzt eine SN !");
      if(loaded === 1) displayitem('popup_announcement', 1*com_ini.get_key('common', 'SecondsToLoadAnnouncement', 1));
      env.announcement.obj_acc.innerHTML = '<div class="center"><h1>Info:</h1><br /><h1>' + value_time + ': ' + value_text + '<br /></div>';
      is_change = true;
    }
  }

  return true;
}
