// <!--
// BEGIN Script

// this script must be used for onclicks to make sure the onsubmit() is called
function callSubmit(form) {
	var testForm = combineFormFields(form);
	if (testForm) form.submit();
}

// used for the advanced search, onsubmit it disables any queries that have not been selected
function disableQueries(form) {
	var filtered = false;
	// iterate the form
	for (var i=0; i < form.elements.length; i++) {
		var element = form.elements[i];
		// if at least one is checked we know that the idea is to filter
		if (element.type == 'checkbox' && element.checked) filtered = true;
	}
	if (filtered) {
		for (var i=0; i < form.elements.length; i++) {
			var element = form.elements[i];
			if (element.type == 'checkbox') element.onclick();
		}
	}
}

// adds month/year together for NEMS queries
function controlForm(form) {
	var myMonth=form.elements['month'].value;
	if (form.elements['SYear'].value.toString().toLowerCase() == 'all') {
		var myYear=1960;
	} else {
		var myYear=form.elements['SYear'].value;
	}
	var datefrom=myMonth+ "/01/" + myYear;
	//alert (datefrom);
	if (document.getElementById("datefrom")) {
		document.getElementById("datefrom").value=datefrom;
	} else {
		var txt = document.createElement("input");
		txt.setAttribute("type", "hidden");
		txt.setAttribute("name", "datefrom");
		txt.setAttribute("id", "datefrom");
		txt.setAttribute("value", datefrom);
		form.appendChild(txt);
	}
	var type;
	if (document.getElementById("events").checked) type=1;
	if (document.getElementById("news").checked) type=2;
	if (document.getElementById("typesearch")) {
		document.getElementById("typesearch").value=type;
	} else {
		var txt2 = document.createElement("input");
		txt2.setAttribute("type", "hidden");
		txt2.setAttribute("name", "maintype");
		txt2.setAttribute("id", "typesearch");
		txt2.setAttribute("value", type);
		form.appendChild(txt2);
	}
	callSubmit(form);
}

function controlForm2(form) {
	var myMonth=form.elements['month'].value;
	if (form.elements['SYear'].value.toString().toLowerCase() == 'all') {
		var myYear=1960;
	} else {
		var myYear=form.elements['SYear'].value;
	}
	var datefrom=myMonth+ "/01/" + myYear;
	if (document.getElementById("datefrom")) {
		document.getElementById("datefrom").value=datefrom;
	} else {
		var txt = document.createElement("input");
		txt.setAttribute("type", "hidden");
		txt.setAttribute("name", "datefrom");
		txt.setAttribute("id", "datefrom");
		txt.setAttribute("value", datefrom);
		form.appendChild(txt);
	}
	callSubmit(form);
}

function checkContent(form) {
	var flag="n";
	for (var i=0; i < form.elements.length; i++) {
		element = form.elements[i];
		//alert(element.name);
		// first check if the element is required but no value was given
		//alert(element.title + '&' + element.name);
		/*if (element.title == 'required' && element.value.length == 0)	{
			alert('Required field ' + element.name + ' is missing.');
		}*/
		if (element.title == 'required' && element.value.length != 0) {
			flag="y"
		}
	}
	if (document.getElementById('jurisdictioncountry').disabled=='false' && document.getElementById('jurisdictioncountry').value=='')
		flag="n";
	if (document.getElementById('jurisdictionrfmo').disabled=='false' && document.getElementById('jurisdictionrfmo').value=='')
		flag="n";
	if (document.getElementById('fishingarea').disabled=='false' && document.getElementById('fishingarea').value=='')
		flag="n";
	if (document.getElementById('fishingarearfmo').disabled=='false' && document.getElementById('fishingarearfmo').value=='')
		flag="n";
	if (document.getElementById('test5').value!='' && flag=="y") {
		var contentSpecies=document.getElementById('test5').value;
		var kv5 = document.createElement("input");
		kv5.type = "hidden";
		kv5.name = "kv[5]";
		kv5.setAttribute('id',"kv[5]");
		kv5.value=contentSpecies + ' ||All_aquatic_species';
		document.forms['form2'].appendChild(kv5);
	}
	if (flag == "n") {
		alert ("Please give at least one value");
		return false ;
	} 
	return true;
}

// the main function that puts the queries together
function combineFormFields(form) {
	var nvPair='';
	//make sure there is at least one field
	var isValue = false;
	//Holds each query as we build it
	var currQuery = new Array();
	// the query we are on
	var queryNum = -1;
	// the server system
	var server = '';
	//whether to quote params (isis only)
	var isisQuote = '';
	// initialize the first query
	currQuery[0] = null;
	// a human readable parameter set sent forward to the response
	form.elements['humanQuery'].value = '';
	var humanRead = form.elements['humanQuery'];
	// an array that holds name/value pairs as each value is processed so we can reprocess them for later queries
	var queryParams = new Array();
	// iterate the form
	for (var i=0; i < form.elements.length; i++) {
		var element = form.elements[i];
		//alert(element.name);
		// first check if the element is required but no value was given
		if (element.title == 'required' && element.value.length == 0) {
			alert('Required field ' + element.name + ' is missing.');
			return false;
		}
		// if name is query we are at start of a new query set
		if (element.name == 'query') {
			// zero out the previous query if set to disabled
			if (currQuery[queryNum] != null) {
				if (currQuery[queryNum].disabled) currQuery[queryNum].value='';
			}
			// if ISIS we want to remove trailing *"
			if (server == 'isis') {
				//currQuery[queryNum].value = currQuery[queryNum].value.substring(0,currQuery[queryNum].value.length - 2);
				currQuery[queryNum].value += "E-N\"*\"A-N\"";
				//reset isisQuote
				isisQuote = '';
			}
			// increment the query number
			queryNum++;
			// set query to query input element
			currQuery[queryNum] = element;
			// reset its value
			currQuery[queryNum].value = '';
			//add the host name if FIGIS
			if (form.elements[i + 1].value.indexOf('/fi/') == 0) currQuery[queryNum].value = 'http://' + location.host;
			// set the value to the hidden server input element
			currQuery[queryNum].value += form.elements[i + 1].value;
			//reset the serverType
			server = element.alt;
			//special set up for ISIS systems like FAOLEX
			if (server == 'isis') {
				currQuery[queryNum].value += '&query=\"';
				// add a quote around parameters if isis
				isisQuote = '$\"*\"';
			}
		} else {
			// it's not a query element so add parameters on to the query 
			// as long as it's not a submit button, and is not the server value, and is not the xsl value, and is not disabled, and has a value if it's the first query, and if a radio button it is checked, then add it to the string
			if (currQuery[queryNum]!=null && element.type != 'submit' && element.type != 'image' && element.type != 'file' && element.type != 'button' && element.type != 'password' && element.type != 'reset' && element.name != 'server' && element.name != 'humanQuery' && element.name != 'q' && element.name != 'scope' && element.name != 'loadMenu' && element.name != 'xsl' && (queryNum > 0 || element.value.length > 0) && !((element.type=='radio' || element.type=='checkbox') && ! element.checked) && !element.disabled) {
				// set isValue to true to indicate there is at least one value
				isValue = true;
				
				// be sure to escape any spaces and pluses
				// the name/value pair
				nvPair = element.name + '=' + encodeURIComponent(element.value);
				// build an array of params we are adding to be used in other iterations of other queries
				if (element.value.length > 0) {
					queryParams[queryParams.length] = nvPair;
				} else {
					// if a second or greater query and has no value, we need to iterate the previous params to find the name/value pair we want
					// set the name value, which may be equal to the "alt" value of the current element, since we may have differently named parameters that use the same actual value, as "title" in EIMS and "inTitle" in NEMS
					if (element.alt.length > 0) {
						nvPair = element.alt + "=";
					} else {
						nvPair = element.name + "=";
					}
					// iterate the form looking for a match on "<name>="
					for (var j=0; j < queryParams.length; j++) {
						if (queryParams[j].indexOf(nvPair) != -1) {
							nvPair = element.name + queryParams[j].substring(queryParams[j].indexOf('='));
						}
					}
				}
				// multiply title search params, one for every word if ISIS
				if (server == 'isis' && /EW=[a-zA-Z0-9]+%20.+/.test(nvPair)) {
					// split the words
					var ew = nvPair.split("%20");
					//treat first token differently
					nvPair = ew[0] + isisQuote;
					// iterate the rest to split them up
					for (var j=1; j < ew.length - 1; j++) nvPair += 'EW=' + ew[j] + isisQuote;
					// treat last token differently
					nvPair += 'EW=' + ew[ew.length-1];
				}
				// add an ampersand if necessary
				if (currQuery[queryNum].value.lastIndexOf('?') != currQuery[queryNum].value.length - 1 && server != 'isis') {
					currQuery[queryNum].value += '&';
				}
				// add the name/value pair
				currQuery[queryNum].value += nvPair + isisQuote;
				//create human readable version if hasn't already been added
				if (humanRead.value.toString().indexOf(nvPair) == -1) {
					// write the param name
					humanRead.value += '&' + element.name + '=';
					// write the param value -- for selections we have to get the text value
					if (element.options) {
						humanRead.value += element.options[element.selectedIndex].text
					} else {
						humanRead.value += element.value;
					}
				}
				//alert(currQuery[queryNum].value);
			}
		}
	}
	// now that we're all done we need to fix any remaining items that normally get cleaned up before iterating the next query in the query set

	// zero out the previous query if set to disabled
	if (currQuery[queryNum] != null) {
		if (currQuery[queryNum].disabled) currQuery[queryNum].value='';
	}
	// if ISIS we want to remove trailing *
	if (server == 'isis') {
		//currQuery[queryNum].value = currQuery[queryNum].value.substring(0,currQuery[queryNum].value.length - 2);
		currQuery[queryNum].value += "E-N\"*\"A-N\"";
	}

	var daVal = currQuery[queryNum].value;
	// if NEMS and there is a date specified we want to restrict the range
	if (daVal.indexOf('datefrom') != -1 && daVal.indexOf('dateto') == -1) {
		if (daVal.indexOf('SYear=ALL') != -1) {
			currQuery[queryNum].value = daVal.replace(/(.+datefrom=)Al(.+)/,'$101$2');
		} else {
			var strstrt = daVal.indexOf('datefrom=');
			var df = daVal.substring(strstrt,strstrt + 23);
			//get the year
			var year = parseFloat(df.substring(19));
			// if month is all means they didn't select month so we get the whole year
			if (df.indexOf('Al%2F01') != -1) {
				// fix the "al" value, should be 01
				currQuery[queryNum].value = currQuery[queryNum].value.replace(/(datefrom=)Al/,'$101');
				currQuery[queryNum].value += ("&dateto=01%2F01%2F" + (year+1));
			} else {
				// get the month
				var month = df.substring(9,11);
				// calculate last day of month
				var lastDay = days_in_month (year, (parseFloat(month)-1));
				currQuery[queryNum].value += ("&dateto=" + month + "%2F" + lastDay + "%2F" + year);
			}
		}
	}
	//alert(currQuery[queryNum].value);
	if (! isValue || currQuery[queryNum].value.indexOf('...') != -1) {
		alert('There are no query values being sent!');
		return false;
	}
	return true;
}

// get the number of days in any month
function days_in_month (year, month) { return 32 - (new Date(year, month, 32)).getDate() }

// this function hides whatever is inside the element having the id given as a value for the layout parameter and disables the query element having the id given as a value for the query parameter
function hideQuery(layout, query) {
	document.getElementById(layout).style.display='none';
	document.getElementById(query).disabled=true;
}

function showQuery(layout, query) {
	document.getElementById(layout).style.display='';
	document.getElementById(query).disabled=false;
}

// this function switches the search to a Google search
function selectSearch(form,rad) {
	if (document.getElementById(rad).checked) {
		// we make sure to fix the fields otherwise with back button can get wrong on subsequent search
		form.action = '/fi/website/MultiQueryAction.do';
		form.method='post';
		callSubmit(form);
	} else {
		// google search
		//new_window('','google',tl,lo,di,st,mn,sc,rs,wd,hi);
		form.action = '/fi/website/FIGoogle.do';
		form.q.value = form.title.value;
		form.method='get';
		//form.target='google';
		form.submit();
	}
}

// this function disables the other filters when there are multiple filters that could be selected
function disableOthers(form,sel) {
	for (var i = 0; i < form.length; i++) {
		var currElem = form.elements[i];
		if (currElem.name == "filterBy" && currElem != sel) currElem.disabled = true;
	}
}

//END Script
// -->

