// window.onload = prepareLinks;
window.onload = function() {
	changeSelect();
}

function toggle(ref,kind) {
	if (!document.getElementById) return false;
	if (!ref) return false;
	if (!kind) kind = "ul";
	var id = ref.getAttribute("id").replace("a_",kind+"_");
	var block = document.getElementById(id);
	if (block){
		if (block.className == 'hidden'){
			block.className = "shown";
			var title = ref.getAttribute("title");
			if (title)
				ref.setAttribute("title",title.replace("show","hide").replace("afficher","cacher"));
			ref.firstChild.nodeValue = "\u00ab";
		}else{
			block.className = "hidden";
			var title = ref.getAttribute("title");
			if (title)
				ref.setAttribute("title",title.replace("hide","show").replace("cacher","afficher"));
			ref.firstChild.nodeValue = "\u00bb";
		}
	}
}

function changeSelect() {
	if (!document.getElementById || !document.getElementsByTagName) return false;
	var lform = document.getElementsByTagName('form')[0];
	var listid = lform.getAttribute("id").replace("listform","loclist");
	var target = document.getElementById(lform.table.value+"-memberslist") ;
	document.getElementById(listid).onchange = function() {
		var locnr = this.options[this.selectedIndex].value;
		if (locnr==-1) {
			var url = "/m-newloc.php?lang="+lform.lang.value;
		} else {
			var url = "/m-list.php?table="+lform.table.value+"&loc="+locnr+"&lang="+lform.lang.value;
		}
		return !grabFile(url,target,"select");
	}
	document.getElementById(listid+"-show").style.visibility = "hidden" ;
	if (target.getElementsByTagName("ul")) {
		prepareLinks(target);
	}
}

function prepareLinks(scope) {
	if (!document.getElementById || !document.getElementsByTagName) return false;
	if (!scope.getElementsByTagName("a")) return false;
	var links = scope.getElementsByTagName("a");
	for (var i=0; i<links.length; i++) {
		var id = links[i].getAttribute("id");
		if (links[i] && ((links[i].className =="details") || (links[i].className =="edit"))) {
			var subdiv = document.getElementById(id.replace("a_details_","div_details_"));
			if (subdiv.getElementsByTagName("ul").length) {
				prepareToggle(subdiv);
				if (subdiv.getElementsByTagName("form").length) prepareForm(subdiv);
			} else links[i].onclick = function() {
				var query = this.getAttribute("href").split("?")[1];
				var url = "/m-"+this.className+".php?"+query;
				var target = this.parentNode.getElementsByTagName("div")[0];
				return !grabFile(url,target,"list");
			}
		}
	}
}

function prepareToggle(scope) {
	if (!document.getElementById || !document.getElementsByTagName) return false;
	if (!scope.getAttribute("id")) return false;
	var id = scope.getAttribute("id").replace("div_","a_");
	var link = document.getElementById(id);
	if (link) {
		var title = link.getAttribute("title").replace("show","hide").replace("afficher","cacher");
		link.setAttribute("title",title);
		link.setAttribute("title",title);
		link.firstChild.nodeValue = "\u00ab";
		link.onclick = function() {
			toggle(this,"div") ;
			return false;
		}
	}
}

function prepareForm(scope) {
	if (!document.getElementById) return false;
	if (!scope.getElementsByTagName("form")) return false;
	if (!scope.getElementsByTagName("form").length) return false;
	var mform = scope.getElementsByTagName("form")[0];
	var id = mform.getAttribute("id");
	var savebutton = document.getElementById(id.replace("member_","m_update_"));
	var delbutton = document.getElementById(id.replace("member_","m_delete_"));
	if (delbutton && savebutton) {
		savebutton.disabled = true;
		delbutton.onclick = function() {
			var confmsg = 'Are you sure you want to delete this member?';
			if (document.getElementById('lang').value == 'fr')
				confmsg = 'Etes-vous certain de vouloir supprimer ce membre?';
			if (!confirm(confmsg)) return false;
			savebutton.value = 0;
		}
		savebutton.onclick = function() {
			delbutton.value = 0;
		}
		for (var i=0; i<mform.elements.length;i++) {
			if (mform.elements[i].type != "submit") 
				mform.elements[i].onclick = function() {
					if (savebutton.disabled) savebutton.disabled = false;
				} 
		}
	}
	mform.onsubmit = function() {
		var data = "";
		for (var i=0; i<this.elements.length; i++) {
			data+= this.elements[i].name;
			data+= "=";
			data+= escape(this.elements[i].value);
			data+= "&";
		}
		return !sendData(data,scope,this.action);
	}
	return true;
}

function sendData(data,target,url) {
	var request = getHTTPObject();
	if (request) {
		displayLoading(target);
		var type = "form";
		if (url.indexOf("m-newloc.php") >= 0) {
			type = "loc";
			}
		request.onreadystatechange = function() {
			parseResponse(request,target,type);
		}
		request.open( "POST", url, true );
		request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		request.send(data);
		return true;
	} else {
		return false;
	}
}

function grabFile(file,target,type) {
  var request = getHTTPObject();
  if (request) {
    if (type=="select" || type=="list") displayLoading(target);
    request.onreadystatechange = function() {
      parseResponse(request,target,type);
    };
    request.open("GET", file, true);
    request.send(null);
    return true;
  } else {
    return false;
  }
}

function parseForm(scope) {
	if (!document.getElementById || !document.getElementsByTagName || !document.createTextNode) return false;
	if (scope.getElementsByTagName("form")){
		var mform = scope.getElementsByTagName("form")[0];
		if (mform) {
			var id = mform.getAttribute("id");
			var idnr = id.split("-")[1];
			var name = document.getElementById(id.replace("member_","m_name_")).value;
			var memberli = mform.parentNode.parentNode;
			if (memberli.getAttribute("id").split("-")[1] == "0") {
				var newli = memberli.cloneNode(true);
				var newdiv = newli.getElementsByTagName("div")[0];
				newdiv.setAttribute("id",newli.getAttribute("id").replace("li_members_","div_details_"));
				empty(newdiv);
				memberli.setAttribute("id",id.replace("member_","li_members_"));
				var memberdiv = memberli.getElementsByTagName("div")[0];
				memberdiv.setAttribute("id",memberdiv.getAttribute("id").replace("0",idnr));
				var memberlink = memberli.getElementsByTagName("a")[0];
				memberlink.setAttribute("id",memberlink.getAttribute("id").replace("0",idnr));
				memberlink.setAttribute("href",memberlink.getAttribute("href").replace("new=1","m="+idnr));
				memberli.parentNode.appendChild(newli);
				var newlink = newli.getElementsByTagName("a")[0];
				newlink.setAttribute("title",newlink.getAttribute("title").replace("hide","show").replace("cacher","afficher"));
				newlink.firstChild.nodeValue = "\u00bb";
				newlink.onclick = function() {
					toggle(this,"div") ;
					return false;
				}
			}
			var mtitle = memberli.getElementsByTagName("strong")[0];
			empty(mtitle);
			mtitle.appendChild(document.createTextNode(name));
		}
	}
}

function parseResponse(request,target,type) {
	if (request.readyState == 4) {
		if (request.status == 200 || request.status == 304) {
			empty(target);
			target.innerHTML = request.responseText;
			fadeUp(target,255,255,153);
			switch(type) {
				case "select":
					prepareLinks(target);
					break;
				case "list":
					prepareForm(target);
					prepareToggle(target);
					break;
				case "form":
					parseForm(target);
					prepareForm(target);
					break;
			}
		}
	}
}

function getHTTPObject() {
  var xhr = false;
  if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    try {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
        xhr = false;
      }
    }
  }
  return xhr;
}

function displayLoading(element) {
	empty(element);
	var image = document.createElement("img");
	image.setAttribute("src","/pix/loading.gif");
	image.setAttribute("alt","Loading...");
	element.appendChild(image);
}

function fadeUp(element,red,green,blue) {
  if (element.fade) {
    clearTimeout(element.fade);
  }
  element.style.backgroundColor = "rgb("+red+","+green+","+blue+")";
  if (red == 255 && green == 255 && blue == 255) {
    return;
  }
  var newred = red + Math.ceil((255 - red)/10);
  var newgreen = green + Math.ceil((255 - green)/10);
  var newblue = blue + Math.ceil((255 - blue)/10);
  var repeat = function() {
    fadeUp(element,newred,newgreen,newblue)
  };
  element.fade = setTimeout(repeat,50);
}

function empty(target) {
	while (target.hasChildNodes()) {
		target.removeChild(target.lastChild);
	}
}