// Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
    if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
    } else if(window.ActiveXObject) {
        return new ActiveXObject("Microsoft.XMLHTTP");
    }/* else {
        alert("Your Browser Sucks!\nIt's about time to upgrade don't you think?");
    }*/
}

// Our XmlHttpRequest object to query for "suggestions"
var searchReq = getXmlHttpRequestObject();

// Called from keyup on the search textbox.
// Starts the AJAX request.
function searchSuggest() {
    if (searchReq.readyState == 4 || searchReq.readyState == 0) {
        // get current value of "search textbox" and query for "suggestions"
		var str = document.getElementById('txtSearch').value;
        searchReq.open("GET", 'search.php?q=' + str, true);
        searchReq.onreadystatechange = handleSearchSuggest; 
        searchReq.send(null);
    }        
}

// Called when the AJAX response for "suggestions" is returned.
function handleSearchSuggest() {
    if (searchReq.readyState == 4) {
        // display (blank) "suggestions <div>" (if not already)
		var ss = document.getElementById('search_suggest')
		if(ss.style.display=="none")
			ss.style.display="block";
        ss.innerHTML = '';
		
		// get "suggestions" returned (if any)
        var str = searchReq.responseText.split("\n");
		if(str!="-")
		{
			// fill "suggestions <div>", line-by-line, for every "suggestions" returned
			for(i=0; i < str.length - 1; i++) {
	            // Build our element string.  This is cleaner using the DOM, but
	            // IE doesn't support dynamically added attributes.
	            var suggest = '<div onmouseover="javascript:suggestOver(this);" ';
	            suggest += 'onmouseout="javascript:suggestOut(this);" ';
				suggest += 'onclick="javascript:setSearch(this.innerHTML);" ';
				suggest += 'class="suggest_link">' + str[i] + '</div>';
	            ss.innerHTML += suggest;
	        }
		}
		else
		{
			var ss = document.getElementById('search_suggest')
			if(ss.style.display=="block")
				ss.style.display="none";
		}
    }
}

// Mouse over function
function suggestOver(div_value) {
    div_value.className = 'suggest_link_over';
}
 
// Mouse out function
function suggestOut(div_value) {
    div_value.className = 'suggest_link';
}

// Click function
function setSearch(value) {
	// get "clicked" result's value
	// pass this value through unhtmlentities() cause we seem to have a problem with "ampersands" ("&" vs. "&amp;")
	document.getElementById('txtSearch').value = unhtmlentities(value);
    
	// clear "suggestions <div>" of it's content once a result has been clicked
	document.getElementById('search_suggest').innerHTML = '';
	
	// hide "suggestions <div>" also; otherwise stays there empty
	var ss = document.getElementById('search_suggest')
	if(ss.style.display=="block")
		ss.style.display="none";
	
	// get "clicked" member's details to prefill rest of form
	getMemberDetails();
}

// Blur function
function clearSuggest() {
	// bad :( cause the blur function is called before the click (on results) function and somehow overides it in IE
	var ss = document.getElementById('search_suggest')
	if(ss.style.display=="block")
		ss.style.display="none";
}


/***********************
*** Custom Functions ***
***********************/

// Called when the AJAX response for "member details" is returned.
function prefillForm() {
	if (searchReq.readyState == 4) {
        var str = searchReq.responseText.split("\n");
		if(str!="-") {
			for(i=0; i < str.length - 1; i++) {
				/* name */
				var target = "mem_name=";
				var target_len = target.length;
				var mem_name = str[i].search(target);
				if(mem_name>0) {
					var name_len = str[i].length;
					var name_value = str[i].substr(target_len+1);
					
					// prefill "form name"
					var fn = document.getElementById('nom');
					fn.value=name_value;
				}
				
				/* email */
				var target = "mem_email=";
				var target_len = target.length;
				var mem_email = str[i].search(target);
				if(mem_email>0) {
					var email_len = str[i].length;
					var email_value = str[i].substr(target_len+1);
					
					// prefill "form email"
					var fe = document.getElementById('courriel');
					fe.value=email_value;
				}
				
				/* tel */
				var target = "mem_tel=";
				var target_len = target.length;
				var mem_tel = str[i].search(target);
				if(mem_tel>0) {
					/*
						Standard Format: (123) 123-1234 [...extra infos]
						Need to break it to fit form's fields.
						Extract "areaCode" from the "rest".
						Split the "rest" into "first 3-digits" & "last 4-digits"
						Nevermind the "extension" and/or "extra infos"
					*/
					// get "tel" value of this member
					var tel_len = str[i].length;
					var tel_value = str[i].substr(target_len+1);
					
					// Extract "areaCode" from the "rest".
					var value_pieces = tel_value.split(" ");
					var areaCode = value_pieces[0].substring(1,4);
					
					// prefill "form areaCode"
					var fac = document.getElementById('tel_reg');
					fac.value=areaCode;
					
					// Split the "rest" into "first 3-digits" & "last 4-digits"
					var value_rest = value_pieces[1].split("-");
					
					// prefill "form tel_prefix"
					var ftp = document.getElementById('tel_prefix');
					ftp.value=value_rest[0];
					
					// prefill "form email"
					var fts = document.getElementById('tel_suffix');
					fts.value=value_rest[1];
				}
				
				
				// Etant donne que c'est la meme fonction pour les events et l'inscription
				// J'ai ajoute un try/catch pour ne faire planter les events pour adress, city, zip et url
				var target = "mem_address=";
				var target_len = target.length;
				var mem_adress = str[i].search(target);
				if(mem_adress>0) {
					// prefill 
					var adress_len = str[i].length;
					var adress_value = str[i].substr(target_len+1);
					
					try{
						var fts = document.getElementById('adress');
						fts.value=adress_value;
					}catch(e){
					}
				}
				
				var target = "mem_city=";
				var target_len = target.length;
				var mem_city = str[i].search(target);
				if(mem_city>0) {
					// prefill 
					var city_len = str[i].length;
					var city_value = str[i].substr(target_len+1);
					
					try{
						var fts = document.getElementById('city');
						fts.value=city_value;
					}catch(e){
					}
				}
				
				var target = "mem_zip=";
				var target_len = target.length;
				var mem_zip = str[i].search(target);
				if(mem_zip>0) {
					// prefill 
					var zip_len = str[i].length;
					var zip_value = str[i].substr(target_len+1);
					
					try{
						var fts = document.getElementById('zip');
						fts.value=zip_value;
					}catch(e){
					}
				}
				
				var target = "mem_url=";
				var target_len = target.length;
				var mem_url = str[i].search(target);
				if(mem_url>0) {
					// prefill 
					var url_len = str[i].length;
					var url_value = str[i].substr(target_len+1);
					
					try{
						var fts = document.getElementById('url');
						fts.value=url_value;
					}catch(e){
					}
				}
				
	        }
		}
    }
}

function getMemberDetails() {
	if (searchReq.readyState == 4 || searchReq.readyState == 0) {
		// use escape() to convert "HTML entities"
        var str = escape(document.getElementById('txtSearch').value);
		
        // pass "d=1" to indicate we want "details"
		searchReq.open("GET", 'search.php?d=1&q=' + str, true);
        searchReq.onreadystatechange = prefillForm; 
        searchReq.send(null);
    }
}

function unhtmlentities(str) {
	str=str.replace("&amp;", "&");
	return str;
}