var detect = navigator.userAgent.toLowerCase();
var browser,version;
if (checkIt('konqueror')) browser = "Konqueror";
else if (checkIt('safari')) browser = "Safari"
else if (checkIt('omniweb')) browser = "OmniWeb"
else if (checkIt('opera')) browser = "Opera"
else if (checkIt('webtv')) browser = "WebTV";
else if (checkIt('icab')) browser = "iCab"
else if (checkIt('msie')) browser = "Internet Explorer"
else if (!checkIt('compatible')) {
	browser = "Netscape Navigator"
	version = detect.charAt(8);
}
else browser = "An unknown browser";
//alert(browser);

//if (!version) version = detect.charAt(place + thestring.length);

var http = null;
if (typeof XmlHttpRequest=="undefined") {
	try {
		http = new ActiveXObject("Msxml2.XMLHTTP");
	} catch(e) {
		try	{
			http = new ActiveXObject("Microsoft.XMLHTTP");
		} catch(oc)	{
				http=null;
		}
	}
}
if(!http && typeof XMLHttpRequest!='undefined') http = new XMLHttpRequest();
function isArray(o){
	return o instanceof Array||typeof o=='array';
}
function testIsValidObject(objToTest) {
	if (null == objToTest) {
		return false;
	}
	if ("undefined" == typeof(objToTest) ) {
		return false;
	}
	return true;
}
function newWindow(url,wid,ht) {
	var param = "directories=yes,scrollbars=yes,resizable=yes,status=yes,menubar=yes,location=yes,toolbar=yes";
	if (wid) { param = param + ",width=" + wid; } 
		else { param = param + ",width=500"; }
	if (ht) { param = param + ",height=" + ht ; } 
		else { param = param + ",height=500"; }
	smallWindow = window.open(url,'smallWin',param);
	smallWindow.focus();
}
function mapWindow(url,wid,ht) {
	var param = "directories=yes,scrollbars=yes,resizable=yes,status=yes,menubar=yes,location=yes,toolbar=yes";
	if (wid) { param = param + ",width=" + wid; } 
		else { param = param + ",width=500"; }
	if (ht) { param = param + ",height=" + ht ; } 
		else { param = param + ",height=500"; }
	var smallWindow = window.open(url,'COmapWin',param);
	smallWindow.focus();
}

function upper(phrase){
	 phrase=phrase.split(' ')
	 for (i=0;i<phrase.length;i++)
	   phrase[i]=phrase[i].replace(/^(.)/,phrase[i].charAt(0).toUpperCase())
	 return phrase.join(' ')
}
function trim(str) {
   return str.replace(/^\s*|\s*$/g,"");
}
function checkIt(string) { // browser type checking
	var place = detect.indexOf(string) + 1;
	var thestring = string;
	return place;
}
function pzChk(pz) { // postal code check
	pre = /^\s*[a-ceghj-npr-tvxy]\d[a-z](\s)?\d[a-z]\d\s*$/i; //Cdn postal code
	zre1 = /^\D*(\d{5})$/; // regular sip
	zre2 = /^\D*(\d{5})\D*(\d{4})\D*$/; // zip+4 version
	if (!pz || pz=='') return true;
	if (pre.test(pz) || zre1.test(pz) || zre2.test(pz)) return true;
	//if (pre.test(pz)) return true;
	else return false;
}

function chkMail_withValidateEmail(id,val) {
	if (val.length<1) return;
	if (val.length<1 && reqFlds[id]>1) {
		setProblem(id);	
		alert(errReq[id]);
		return;
	}
	if (!emChk(val)) {
		alert(errMsg[id]);
		setProblem(id);	
	} else if (http) { // right format for email address, but check connection to email address, just in case 
		var temp_url = "http://www.countingopinions.com/fback/validateEmail.php/?email=" + val;
		var temp_url = "validateEmail.php/?email=" + val;
    	http.open("GET", temp_url, true);
    	http.onreadystatechange = function() { // looking for a '1' (verified) or a '0' (not verified)
        	if (http.readyState == 4) {
            	var response = http.responseText;
            	if (response=='1') setCompleted(id);
            	else {
					alert(errVer[id]);
					setProblem(id);	
					return;
            	}
 				//alert('OK');
        	}
	    };
    	http.send(null);
	} else {
		 setCompleted(id);
	}
	return;
}

function chkMail(id,val) {
	if (val.length<1) return;
	if (val.length<1 && reqFlds[id]>1) {
		setProblem(id);	
		alert(errReq[id]);
		return;
	}
	
	if (!emChk(val)) {
		alert(errMsg[id]);
		setProblem(id);	
	} else {

	}
	return;
}

function emChk(e) {  // email address check
  	var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
  	var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/; // valid
    if (!e || e=='') return true;
  	if (!reg1.test(e) && reg2.test(e)) return true;
	else return false;
}
function chkPhone(id,val) { // NPA-NNX
	if (val.length<1) return;
	if (val.length<1 && reqFlds[id]>1) {
		setProblem(id);	
		alert(errReq[id]);
		return;
	}
	var digits = val.replace(/[^0-9]/ig, ''); 
	if (!phoneChk(val) || !digits || digits.length!=10) {
		alert(errMsg[id]);
		setProblem(id);	
	} else {
		/*
		var npa = digits.substring(0, 3);
 		var nxx = digits.substring(3, 6);
   		formfield.value = '(' + npa + ') ' +  nxx + '-' +  digits.substring(6, 10); 	
 		if (http) { 
     		var temp_url = "http://www.countingopinions.com/fback/validateNPANXX.php/?npa=" + npa + "&nxx=" + nxx;
    		http.open("GET", temp_url, true);
    		http.onreadystatechange = function() { // looking for a '1' (verified) or a '0' (not verified)
        		if (http.readyState == 4) {
            		var response = trim(http.responseText);
            		if (response=='1') setCompleted(id);
            		else {
 						alert(prompt_email_notverified);
            			setNotVerified(id);
            		}
         		}
	    	};
    		http.send(null);
			setCompleted(id);
 		} else {
			setCompleted(id);	
		}
		*/
	}
	return;
}
function phoneChk(phone) { // phone number check
 	var useareacode = 0;
 	if((phone.match(/^[ ]*[(]{0,1}[ ]*[0-9]{3,3}[ ]*[)]{0,1}[-]{0,1}[ ]*[0-9]{3,3}[ ]*[-]{0,1}[ ]*[0-9]{4,4}[ ]*$/) == null) && ((useareacode != 1) && (phone.match(/^[ ]*[0-9]{3,3}[ ]*[-]{0,1}[ ]*[0-9]{4,4}[ ]*$/) == null))) return false; 
 	return true; 
} 
function formCheck(submitbtn) { // check required values
	alerter= ""; // initialize alert string
	checkRequired('name');
	checkPostal('postal_code');
	checkRequired('ls_id');
	checkRequired('subject');
	checkRequired('story');
	
	if(document.forms[0].name.value == "") { 
		alerter+=prompt_name_warning+"\n";
		setProblem('name');
	} else setCompleted('name');
	
	if(document.forms[0].email.value == "") {
		alerter+=prompt_email_warning+"\n";
		setProblem('email');
	} else chkMail(document.forms[0].email.value);

	if(document.forms[0].phone.value == "") { 
		alerter+=prompt_phone_warning+"\n";
		setProblem('phone');
	} else chkPhone(document.forms[0].phone.value);

	if(document.forms[0].postal_code.value == "" || !pzChk(document.forms[0].postal_code.value)) { 
		alerter+=prompt_pc_warning+"\n";
		setProblem('postal_code');
	} else setCompleted('postal_code');
	if(document.forms[0].address.value == "" || document.forms[0].address.value.indexOf(' ')<0) { 
		alerter+=prompt_address_warning+"\n";
		setProblem('address');
	} else setCompleted('address');
	
	if(document.forms[0].ls_id.value == -1) { 
		alerter+="Please choose a Library System\n";
		setProblem('ls_id');
	} else setCompleted('ls_id');
	
	if(document.forms[0].subject.value == "") { 
		alerter+=prompt_subject_warning+"\n";
		setProblem('subject');
	} else setCompleted('subject');
	
	if(document.forms[0].story.value == "")	{ 
		alerter+=prompt_story_warning+"\n";
		setProblem('story');
	} else setCompleted('story');
	
	if(!document.forms[0].declaration.checked) { 
		alerter+=prompt_ack_warning+"\n";
		setProblem('declaration');
	} else setCompleted('declaration');
	
	if (alerter!="") {
		//alert(alerter); // if there is a problem, then display an alert
		return false;
	}
	//else checksubmit(submitbtn); // everything fine, so disable submit button so it cannot be re-submitted
	return true;
}
function checksubmit(submitbtn){
	submitbtn.form.submit()
	checksubmit=blocksubmit
	return false
}
function blocksubmit(){
	if (typeof formerrormsg!="undefined") alert(formerrormsg)
	return false
}
function getLabelForId(id) { 
 	var label, labels = document.getElementsByTagName('label'); 
 	for (var i = 0; (label = labels[i]); i++) { 
   		if (label.htmlFor == id) return label; 
 	} 
 	return false; 
} 
function checkRequired(id) { 
 	var formfield = document.getElementById(id); 
 	if (formfield.value.length == 0) setProblem(id); 
 	else setCompleted(id); 
} 
function checkPostal(id) { 
 	var formfield = document.getElementById(id); 
 	if (formfield.value.length == 0) setProblem(id); 
 	else {
 		if (!pzChk(formfield.value)) setProblem(id);
 		else setCompleted(id);
 	} 
} 
function checkAddress(id) { 
 	var formfield = document.getElementById(id); 
 	if (formfield.value.length == 0) setProblem(id); 
 	else {
 		if (formfield.value.indexOf(' ')<0) setProblem(id);
 		else {
 			setCompleted(id);
 			formfield.value = upper(formfield.value);
 		}
 	} 
} 
function checkChecked(id) { 
 	var formfield = document.getElementById(id); 
 	if (!formfield.checked) setProblem(id); 
 	else setCompleted(id); 
} 
function checkSelected(id) { 
 	var formfield = document.getElementById(id); 
 	if (formfield.options[formfield.selectedIndex].value==-1) setProblem(id); 
 	else if (formfield.options[formfield.selectedIndex].value>-1) setCompleted(id); 
} 
function setProblem(id) { 
 	var label = getLabelForId(id); 
 	label.className = 'problem'; 
} 
function setCompleted(id) { 
 	var label = getLabelForId(id); 
 	label.className = 'completed'; 
} 
function setNotVerified(id) { 
 	var label = getLabelForId(id); 
 	label.className = 'notverified'; 
}        		
function getLibrary(ls_id) { // initialize list of branch locations for nearest Library System
	document.getElementById('js').value=1;   // indicates that javascript is active
	if (http) document.getElementById('action').style.display='none';
	if (ls_id=='-2') {
		document.getElementById('other').style.display = ''; // 'table-row'
		if (document.getElementById('sp_name').value=="") {
			bother="display:none";
			document.getElementById('bother').style.display = 'none';
		}
	} else document.getElementById('other').style.display = 'none';
	if (document.getElementById('sp_id') && document.getElementById('sp_id').value=='-2') document.getElementById('bother').style.display = ''; // 'table-row'
	else document.getElementById('bother').style.display = 'none';
	var field = document.forms[0];
	for (i = 0; i < field.length; i++) {
		if ((field.elements[i].tagName != "FIELDSET") && ((field.elements[i].type == "text") || (field.elements[i].type == "textarea") || (field.elements[i].type.toString().charAt(0) == "s"))) {
			document.forms[0].elements[i].focus();
			break;
         }
    }
}
function getBranch(ls_id) { // fetch updated list of branch locations for selected Library System
	var botherDisp = bother.split(":");
	if (botherDisp[1]=='none') document.getElementById('bother').style.display = 'none';
	else document.getElementById('bother').style.display = ''; // 'table-row'
 	if (http) { 
		var temp_url = "http://www.countingopinions.com/getBranch.php?ls_id=" + ls_id + "&loc=" + loc;
    	http.open("GET", temp_url, true);
    	http.onreadystatechange = function() {
        	if (http.readyState == 4) {
           	 html = http.responseText;
           	 document.getElementById("div_branch").innerHTML = html;;
        	}
    	};
    	http.send(null);
    }
}
function changeLibrary() {  // update branch list on change of selected Library Sytem
	document.forms[0].libreset.value=1; // switch for indicating a manual change to library setting
	ls_id = document.forms[0].ls_id.options[document.forms[0].ls_id.selectedIndex].value;
	if (ls_id<-1) { // 'other' is chosen for Library
		document.getElementById('other').style.display = ''; // 'table-row'
		if (document.getElementById('sp_name').value=="") bother="display:none";
	} else document.getElementById('other').style.display = 'none';
	getBranch(ls_id);
}
function changeBranch() {  // check branch setting to see if other needs to be displayed
	sp_id = document.forms[0].sp_id.options[document.forms[0].sp_id.selectedIndex].value;
	if (sp_id<-1) document.getElementById('bother').style.display = ''; // 'table-row'
	else if (document.getElementById('sp_name').value=="") document.getElementById('bother').style.display = 'none';
}
function updLatLong(v) { // update Lat/Long on change of Street, City or Postal Code
	//alert(document.forms[0].postal_code.value);
	var postal_code = document.forms[0].postal_code.value;
	if (v=='postal_code' && postal_code != '') {
		postal_code = postal_code.toUpperCase();
		postal_code = postal_code.replace(" ","");
		postal_code = postal_code.substring(0,3) + " " + postal_code.substring(3,postal_code.length);
		document.forms[0].postal_code.value = postal_code;
	    //document.forms[0].postal_code.focus();
        //document.forms[0].postal_code.select();
	}
	var city = document.forms[0].city.value;
	if (v=='city' && city != '') {
        document.forms[0].city.value=upper(city);
	    //document.forms[0].city.focus();
        //document.forms[0].city.select();
	}
	if (http) {
    	var label = getLabelForId(v);
		var temp_url = "http://www.countingopinions.com/fback/getNewLatLong.php?reset=" + document.forms[0].libreset.value + "&loc=" + loc;
		var address = document.forms[0].address.value;
		if (address != '') temp_url += "&address=" + address;
		if (city != '') temp_url += "&city=" + city;
		if (postal_code != '') temp_url += "&postal_code=" + postal_code;
    	http.open("GET", temp_url, true);
    	http.onreadystatechange = function() {
        	if (http.readyState == 4) {
            	var response = http.responseText.split("|");
            	var lngth = response.length;
            	//alert(lngth);
          		if (response[0]!='0 ' && (lngth<5 || (v=='postal_code' && postal_code!=''))) document.getElementById("div_library").innerHTML = response[0];
         		if (response[1]!=' 0 ' && (lngth<5 || (v=='postal_code' && postal_code!=''))) document.getElementById("div_branch").innerHTML = response[1];
           		if (response[2]!=' 0 ') document.forms[0].longitude.value = trim(response[2]);
         		if (response[3]!=' 0') document.forms[0].latitude.value = trim(response[3]);
         		var prmpt = "Select OK to change the City to: ";
         		if (loc=='fr') prmpt = "Choisir OK pour changer la ville en: ";
         		for (i=4;i<lngth;i++) {
         			if (v=='city') {
         				var x = prmpt + trim(response[i]);
         				var dc = confirm(x);
         				if (dc) {
         					document.forms[0].city.value = trim(response[i]);
         					i++; // get lat
         					if (postal_code=='' || !pzChk(postal_code)) document.forms[0].latitude.value = trim(response[i]);
         					i++; // get long			
         					if (postal_code=='' || !pzChk(postal_code)) document.forms[0].longitude.value = trim(response[i]);
							label.className = 'completed';	
         					//updLatLong('city');
         					break;
         				} else { // skip the lat/long
         					i++;
         					i++;
         				}
         			} else {
          				document.forms[0].city.value = trim(response[i]);
         				i++; // get lat
         				document.forms[0].latitude.value = trim(response[i]);
         				i++; // get long			
         				document.forms[0].longitude.value = trim(response[i]);
        				break;
         			}
         		}
         		if (lngth>4) {
         			if (v=='city') label.className = 'notverified';
         			else label.className = 'completed';
         	    	document.forms[0].city.focus();
         			document.forms[0].city.select();         		
         		}
        	}
    	};
		http.setRequestHeader('Content-Length', '0');
    	http.send(null);
    } 
}
function wrdcnt(s,c) { // update count of words in story and warn when limit exceeded
	var fullStr = s.value + " ";
	var word_count = 0;
	var initial_whitespace_rExp = /^[^A-Za-z0-9]+/gi;
	var left_trimmedStr = fullStr.replace(initial_whitespace_rExp, "");
	var non_alphanumerics_rExp = rExp = /[^A-Za-z0-9]+/gi;
	var cleanedStr = left_trimmedStr.replace(non_alphanumerics_rExp, " ");
	var splitString = cleanedStr.split(" ");
	var word_count = splitString.length -1;
	if (fullStr.length <2) {
		word_count = 0;
		setProblem('story');
	} else setCompleted('story');
	c.value = word_count;
	if (word_count > 500) {
		alert(prompt_wc_warning);
		setProblem('wc');
	} else if (word_count > 0) setCompleted('wc');
}

