// Utilities

function GetXmlHttpObject () {
  var xmlHttp = null;
  try {
    // Firefox, Opera 8.0+, Safari
    xmlHttp = new XMLHttpRequest ();
  } catch (e) {
    // Internet Explorer
    try {
      xmlHttp = new ActiveXObject ("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlHttp = new ActiveXObject ("Microsoft.XMLHTTP");
      } catch (e) {
	// Ajax not supported
	return null;
      }
    }
  }
  return xmlHttp;
}

function get_xml_doc (text) {
  if (window.DOMParser) {
    parser = new DOMParser ();
    xmlDoc = parser.parseFromString (text, "text/xml");
  }
  else { // Internet Explorer
    xmlDoc = new ActiveXObject ("Microsoft.XMLDOM");
    xmlDoc.async = "false";
    xmlDoc.loadXML (text);
  }
  return xmlDoc;
}

function get_element_value (form_element) {
  var is_array = false;
  if (form_element.length != null) {
    is_array = true;
    var type = form_element[0].type;
  }
  if ((typeof (type) == 'undefined') || (type == 0)) {
    var type = form_element.type;
  }
  
  switch (type) {

  case 'undefined': return;
    
  case 'checkbox' :
  case 'radio': 
    if (form_element.checked == true) {
      return form_element.value;
    } else {
      return;
    }
    
  default: 
    return form_element.value;
  }
}

function build_query (form) {
  var query = "";
  for (var i = 0; i < form.elements.length; i++) {
    var key = form.elements[i].name;
    var value = get_element_value (form.elements[i]);
    if (key && value) {
      query += key + "=" + value + "&" ;
    }
  }
  return query;
}

function setDayOfWeek (weekDaySelect, day, month, year) {
  var d       = new Date(year, month - 1, day); // 2nd arg. should be in [0;11]
  var weekday = d.getDay();                     // in [0;6]
  weekDaySelect.selectedIndex = weekday;
}

function setFocus (field1, field2) {
  var uname = document.forms[0].set_username;
  var pword = document.forms[0].set_password;
  if (field1.value == "") {
    field1.focus();
  } else {
    fields2.focus();
  }
}

function w (url, name, width, height) {
   var settings = "toolbar=no,location=yes,directories=no," +
   "status=yes,menubar=yes,scrollbars=yes," +
   "resizable=yes,width=" + width + ",height=" + height;
   window.open (url, name, settings);
}

// Cinemascope functions

function update_districts (button, form) {
  if (button.value == "Tous") {
    button.value = "Aucun";
    for (var i = 0; i < form.elements.length; i++) {
      if(form.elements [i].name == 'districts[]') {
	form.elements [i].checked = true;
      }
    }
  } else {
    button.value = "Tous";
    for (var i = 0; i < form.elements.length; i++) {
      if(form.elements [i].name == 'districts[]') {
	form.elements [i].checked = false;
      }
    }
  }
}

function redirect_cinemascope () {
  window.location = "http://www.audran.org/cinemascope/";
}

// Accounts functions

function update_budget_item (operation_id, budget_item_id, num_line) {

  document.getElementById ("img_" + operation_id).src = "/images/wait.gif";
  document.getElementById ("img_" + operation_id).alt = "Veuillez patienter...";

  var xmlHttp = GetXmlHttpObject ();
  if (xmlHttp == null) {
    alert ("Impossible de mettre à jour. Le navigateur semble ne pas supporter AJAX.");
    return;
  }

  xmlHttp.onreadystatechange = function () {
    if (xmlHttp.readyState == 4) {
      if (xmlHttp.status == 200 && xmlHttp.responseText === "0") {
	document.getElementById ("img_" + operation_id).src = "/images/ok.png";
	document.getElementById ("img_" + operation_id).alt = "Mise à jour réussie";
	if (document.getElementById ("select_budget_item_" + operation_id).selectedIndex == 0) {
	   document.getElementById ("tr_" + num_line).className = "incomplete";
	} else {
	   document.getElementById ("tr_" + num_line).className = (num_line % 2 == 0 ? "even" : "odd");
	}
      } else {
	alert (xmlHttp.responseText);
	document.getElementById ("img_" + operation_id).src = "/images/nok.png";
	document.getElementById ("img_" + operation_id).alt = "Impossible de mettre à jour";
	var select_budget_item = document.getElementById ("select_budget_item_" + operation_id);
	for (var i = 0; i < select_budget_item.length; i++) {
	  if (select_budget_item.options[i].defaultSelected) {
	    select_budget_item.selectedIndex = i;
	    break;
	  }
	}
      }
    }
  }
  
  var url = "ws_update_budget_item.php?operation_id=" + operation_id + "&budget_item_id=" + (budget_item_id == 0 ? "NULL" : budget_item_id);
  
  xmlHttp.open ("GET", url, true);
  xmlHttp.send (null);
  
}

function update_budget_item_name (budget_item_id, budget_item_name) {
  var new_name = prompt ("Entrez un nouveau libellé :", budget_item_name);
  if (new_name == null) {
    return;
  } else {
    document.getElementById ("input_update_budget_item_name_id").value   = budget_item_id;
    document.getElementById ("input_update_budget_item_name_name").value = new_name;
    document.getElementById ("form_update_budget_item_name").submit();
  }
}

function develop_budget_item_operations (budget_item_id, year) {
  var table = document.getElementById ("table_budget_items");
  var tr    = document.getElementById ("tr_" + budget_item_id);

  var xmlHttp = GetXmlHttpObject ();
  if (xmlHttp == null) {
    alert ("Impossible de mettre à jour. Le navigateur semble ne pas supporter AJAX.");
    return;
  }

  xmlHttp.onreadystatechange = function () {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
      var lines = xmlHttp.responseText.split ("\n");
      if (budget_item_id === undefined) {
	tr.cells[0].innerHTML = "<a href=\"javascript:undevelop_budget_item_operations(undefined," + (lines.length - 1) + ")\">-</a>";
      } else {
	tr.cells[0].innerHTML = "<a href=\"javascript:undevelop_budget_item_operations(" + budget_item_id + "," + (lines.length - 1) + ")\">-</a>";
      }
      for (var i = 0; i < lines.length - 1; i++) {
	var fields = lines [i].split ("\t");
	var new_row = table.insertRow (tr.rowIndex + i + 1);
	new_row.insertCell (0).innerHTML = "|";
	new_row.insertCell (1).innerHTML = fields [0] + " [" + fields [1] + "] : " + fields [3];
	new_row.insertCell (2).innerHTML = fields [2];
	new_row.cells[0].className = "center";
	new_row.cells[2].className = "right";
      }
    }
  }

  var url = "ws_get_operations.php?";
  
  if (!(budget_item_id === undefined)) {
    url = url + "budget_item_id=" + budget_item_id;
  }
  if (!(year === undefined)) {
    url = url + ";year=" + year;
  }

  xmlHttp.open ("GET", url, true);
  xmlHttp.send (null);
}

function undevelop_budget_item_operations (budget_item_id, num_lines) {
  var table = document.getElementById ("table_budget_items");
  var tr    = document.getElementById ("tr_" + budget_item_id);

  tr.cells[0].innerHTML = "<a href=\"javascript:develop_budget_item_operations(" + budget_item_id + ")\">+</a>";
  for (var i = 0; i < num_lines; i++) {
    table.deleteRow (tr.rowIndex + 1);
  }
}

function hide_completed_tr (hide, table, first_tr) {
  if (typeof first_tr == 'undefined' ) first_tr = 1;
  var tr_list = table.getElementsByTagName ("tr");
  for (var i = first_tr; i < tr_list.length ; i++) {
    if (tr_list [i].className != "incomplete") {
      hide ? tr_list [i].style.display = "none" : tr_list [i].style.display = ""; 
    }
  }
}

function update_accounts_operations () {
  
  document.getElementById ("p_response").innerHTML = "";
  document.getElementById ("button_auto_update").style.display = "none";
  document.getElementById ("image_updating").style.display = "";

  var xmlHttp = GetXmlHttpObject ();
  if (xmlHttp == null) {
    alert ("Impossible de mettre à jour. Le navigateur semble ne pas supporter AJAX.");
    return;
  }
  
  var calls = 0;

  xmlHttp.onreadystatechange = function() {
    var response_lines = xmlHttp.responseText.split ("\r\n");
    var num_lines = response_lines.length;
    var response_xml = get_xml_doc (xmlHttp.responseText);

    if (xmlHttp.readyState == 4) {
      document.getElementById ("image_updating").style.display = "none";
      document.getElementById ("button_auto_update").style.display = "";

      var num_updates = 0;
      var table_rows = response_xml.getElementsByTagName ("result")[0].childNodes[0].nodeValue.split ("|");
      var parity = new Array ("even", "odd");
      var html_table = 	"<table class=\"centered\"><tr><th>Compte</th><th>Nombre d'opérations mises à jour</th></tr>";
      for (var i = 0; i < table_rows.length; i++) {
	var cell = table_rows [i].split (":");
	if (parseInt (cell [1]) > 0) {
	    html_table += "<tr class=\"" + parity [i % 2] + "\"><td>" + cell [0] + "</td><td class=\"center\">" + cell [1] + "</td></tr>";
	    num_updates += parseInt (cell [1]);
	}
      }
      html_table += "</table>";

      if (num_updates > 0) {
	document.getElementById ("p_response").innerHTML = html_table;
	document.getElementById ("p_link_rules").style.display = "";
      } else {
	document.getElementById ("p_response").innerHTML = "Aucune nouvelle opération";
      }

    } else {
      
      if (num_lines > 1) {
	var last_line = response_lines [num_lines - 2];
	if (last_line.search (/<status>[^<]+<\/status>/) >= 0) {
	  document.getElementById ("p_response").innerHTML = last_line.replace (/<[^>]+>/g, "");
	}
      }
    }

  }
  
  var url = "ws_update_accounts_operations.php";
  xmlHttp.open ("GET", url, true);
  xmlHttp.send (null);

  return;
}

function draw_accounts_chart (form) {
  var query = build_query (form);
  var url = "ws_draw_accounts_chart.php?" + query;

  document.getElementById ("link").href = "analysis_budget_item.php?" + query;
  document.getElementById ("p_link").style.display = "";
 
  document.getElementById ("img_chart").src = "/images/loading.gif";
  document.getElementById ("img_chart").style.display = "";

  var img_chart = new Image ();
  img_chart.onload = function () {
    document.getElementById ("img_chart").src = url;
  }
  img_chart.src = url;
  
  return;
}

function draw_budget_items_chart (form) {
  var query = build_query (form);
  var url = "ws_draw_budget_items_chart.php?" + query;

  document.getElementById ("link").href = "analysis_budget_item.php?" + query;
  document.getElementById ("p_link").style.display = "";
 
  document.getElementById ("img_chart").src = "/images/loading.gif";
  document.getElementById ("img_chart").style.display = "";

  var img_chart = new Image ();
  img_chart.onload = function () {
    document.getElementById ("img_chart").src = url;
  }
  img_chart.src = url;
  
  return;
}

function check (prefix, the_checkbox, to_be_checked) {

    the_checkbox.checked = to_be_checked;
    
    document.getElementById ('span_' + prefix + '_' + the_checkbox.value).className = 
	(to_be_checked == true ? "" : "disabled");
	
    var elements = document.getElementsByName (prefix + '_' + the_checkbox.value);
    for (var i = 0; i < elements.length; i++) {
	elements [i].disabled = !to_be_checked;
    }
    
    return;
}

function check_all (name, prefix, to_be_checked) {
    var elts = document.getElementsByName (name);
    for (var i = 0; i < elts.length; i++) {
	check (prefix, elts [i], to_be_checked);
    }
    return;
}

