function frmTargetSubmit(objForm, vAction, vTarget)
{
	objForm.action = vAction;
	if(vTarget != undefined) { objForm.target = vTarget; }
	objForm.submit();
}

function showHideObject(objId, state)
{
	var objObject;
	
	if (objId == undefined || objId == "") {
		return false;
	}
	
	objObject = document.getElementById(objId);
	
	if (objObject == undefined || objObject == null) {
		return false;
	}

	if (state == undefined) {
		state = (objObject.style['display'] == "none" ? "" : "none");
	}
	
	objObject.style.display = state;
}

function DisplayMode(formId, mode, id)
{
	var i
	var objEditLink
	var objFormElement
	var objFormElementType
	
	if (formId == undefined) {
		objForm = document.forms[0];
	} else {
		objForm = document.getElementById(formId);
	}

	if (objForm != undefined)
	{
		objForm.btnSubmitForm.style.display = (mode == "edit" ? "inline" : "none");
		objForm.btnCancel.style.display = (mode == "edit" ? "inline" : "none");
		objForm.lnkEdit.style.display = (mode == "edit" ? "none" : "inline");
		
		for (i=0; i<(objForm.elements.length); i++)
		{
			objFormElement = objForm.elements[i];
			objFormElementType = objFormElement.name.substr(0,3);

			if (objFormElementType == "txt" || objFormElementType == "lst")
			{
				
				if (id != "" && id != undefined)
				{
					newObjId = objFormElement.id + id;
					objFormElement = document.getElementById(newObjId);
					objFormElementType = objFormElement.name.substr(0,3);
				}
				
				if (objFormElementType == "lst")
				{
					objFormElement.disabled= (mode == "edit" ? false : true);
				} else {
					objFormElement.readOnly= (mode == "edit" ? false : true);
				}
				
				var strClass = objFormElement.className;
				objFormElement.className = (mode == "edit" ? strClass.replace("disabled", "enabled") : strClass.replace("enabled", "disabled"));
			}
		}
	}
}


function resetFieldClass(objectid)
{
	if (document.getElementById(objectid)) {
		var objElement = document.getElementById(objectid);
		var elementMsg = document.getElementById(objectid + "Msg");
		var regExp = new RegExp("-err$",["g"]);
		objElement.className=objElement.className.replace(regExp,"");
		elementMsg.className="";
	} else {
		return false;
	}
}


function ValidateForm(formid)
{
	if (document.getElementById(formid))
	{
		var objForm = document.getElementById(formid);
	}
	else
	{
		var objForm = document.forms[0];
	}
	
	if (objForm == null || objForm == undefined)
	{
		alert("Sorry - the form cannot be validated. Please check the values you have entered carefully.");
		return true;
	}

	var strValidation = "";
	var blnPassed = true;
	
	for (i=objForm.elements.length-1; i >= 0; i--)
	{
		var objElement = objForm.elements[i];
		strValidation = objElement.getAttribute("cValidation");

		if (strValidation != null)
		{
			var elementMsg = document.getElementById(objElement.id + "Msg");
			var arrValidations = strValidation.split(",");
			var regExp = new RegExp("-err$",["g"]);
			objElement.className=objElement.className.replace(regExp,"");
			if (elementMsg.className != "ok") { elementMsg.innerHTML = ""; }
			
			switch (objElement.tagName)
			{
				case "SELECT" :
				if (objElement.selectedIndex == 0 && objElement.options[0].value == "X")
				{
					elementMsg.innerHTML = objElement.title + " is required";
					objElement.className=objElement.className.concat("-err");
					objElement.focus();
					blnPassed = false;
				}
				break;
				
				default :
				for (n=0; n < arrValidations.length; n++)
				{
//alert("checking form: " + objForm.id + ", element: " + objElement.id + ", validation: " + arrValidations[n].charAt(0));

					switch (arrValidations[n].charAt(0))
					{
						// Mandatory Field Validation
						case "M" :

							switch (objElement.type)
							{
							case "checkbox" :
								if (objElement.checked == "")
								{
									objElement.className=objElement.className.concat("-err");
									elementMsg.className="warning";
									elementMsg.innerHTML = objElement.title + " must be selected";
									objElement.focus();
									blnPassed = false;
								}
							break;
							
							case "radio" :
								var arrRadioGroup=document.getElementsByName(objElement.name);
								var blnChecked = false;
	
								for (x=0; x < arrRadioGroup.length; x++)
								{
									if (arrRadioGroup[x].checked)
									{
										blnChecked = true;
									}
								}
								
								if (!blnChecked)
								{
									elementMsg.innerHTML = "one of the " + objElement.title + "s is required";
									objElement.className=objElement.className.concat("-err");
									objElement.focus();
									blnPassed = false;
								}
							break;
	
							default :
								if (objElement.value == "")
								{
									objElement.className=objElement.className.concat("-err");
									elementMsg.className="";
									elementMsg.innerHTML = objElement.title + " must be provided";
									objElement.focus();
									blnPassed = false;
								}
							break;
						}
						break;
						
						// Integer Validation
						case "I" :

						if (objElement.value != "" && (objElement.value != parseInt(objElement.value)))
						{
							elementMsg.className="";
							elementMsg.innerHTML = objElement.title + " must be a whole number";
							objElement.className=objElement.className.concat("-err");
							objElement.focus();
							blnPassed = false;
						}
						break;

						// Positive Number Validation
						case "P" :

						if (objElement.value != "" && (objElement.value != parseFloat(objElement.value) || objElement.value <= 0))
						{
							elementMsg.className="";
							elementMsg.innerHTML = objElement.title + " must be a positive number";
							objElement.className=objElement.className.concat("-err");
							objElement.focus();
							blnPassed = false;
						}
						break;

						// Length Validation
						case "L" :
						if (objElement.value != "")
						{
							var strOperator = arrValidations[n].substr(1, 2);
							var intValidLength = arrValidations[n].substr(3, arrValidations[n].length-3);
							var intLength = objElement.value.length;
							var strExpr = intLength + " " + strOperator + " " + intValidLength;
							
							if (! eval(strExpr))
							{
								elementMsg.className="";
								elementMsg.innerHTML = objElement.title + " must be " + strOperator + " " + intValidLength + " characters long";
								objElement.className=objElement.className.concat("-err");
								objElement.focus();
								blnPassed = false;
							}
							
						}
						break;

						// Date Validation as DD/MM/YYYY
						case "D" :
						{
							var blnValid = true;

							if (objElement.value != "")
							{
								if (objElement.value.length == 10)
								{
									var arrDate = objElement.value.split("/");
									
									if (arrDate.length == 3)
									{
										var intDay = arrDate[0];
										var intMonth = arrDate[1];
										var intYear = arrDate[2];
										
										if (ValidNumber(intDay) && ValidNumber(intMonth) && ValidNumber(intYear))
										{
											intDay = parseInt(intDay, 10);
											intMonth = parseInt(intMonth, 10);
											intYear = parseInt(intYear, 10);
										
											if (intDay < 1)
											{
												blnValid = false;
											}
											
											if (intYear < 1753)
											{
												blnValid = false;
											}
																						
											if (intMonth < 1 || intMonth > 12)
											{
												blnValid = false;
											}
																						
											if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intDay > 31))
											{
												blnValid = false;
											}
	
											if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intDay > 30))
											{
												blnValid = false;
											}

											if (intMonth == 2)
											{
												if (IsLeapYear(intYear) == true)
												{
													if (intDay > 29)
													{
														blnValid = false;
													}
												}
												else
												{
													if (intDay > 28)
													{
														blnValid = false;
													}
												}
											} //end month = 2
											
										} //end if valid numbers
										else
										{
											blnValid = false;
										}	
	
									} // end if arr len
									else
									{
										blnValid = false;
									}
																		
								}
								else
								{
									blnValid = false;
								} //end if len

								if (!blnValid)
								{
									elementMsg.className="";
									elementMsg.innerHTML = objElement.title + " requires a valid date";
									objElement.className=objElement.className.concat("-err");
									objElement.focus();
									blnPassed = false;						
								}

							} //end if value
							
						}
						break; // end Date
					} //end switch

				} //end for on default
				break;
				
			} //end switch
			
		} //end if

	} //next element

	return blnPassed;
}


function ValidNumber(num)
{

	if (num == parseInt(num, 10))
	{
		return true;
	}
	
	return false;
}


function IsLeapYear(year)
{
	if (year % 100 == 0)
	{
		if (year % 400 == 0) return true;
	}
	else
	{
		if ((year % 4) == 0) return true;
	}
	
	return false;
}

function selectionBullet(objectId, show, setObjectId, setValue)
{
	html = (show == 1 ? '&bull;' : '&nbsp;');

	if (document.getElementById(setObjectId).value != setValue) {
		document.getElementById(objectId).innerHTML=html;
	}
}

function setSelectionBullet(setTextObjectId, setText, setObjectId, setValue)
{
	if (document.getElementById(setTextObjectId).value != setText) { unsetSelectionBullet(setTextObjectId, setObjectId); }
	document.getElementById(setTextObjectId).value = setText;
	document.getElementById(setObjectId).value = setValue;
	selectionBullet(setText, 1, setObjectId, setValue);
}

function unsetSelectionBullet(setTextObjectId, setObjectId)
{
	textSet = document.getElementById(setTextObjectId).value;
	
	if (textSet != "") {
		selectionBullet(textSet, 0, setObjectId, 0);
	}
}

function updateSpiderChart()
{
	var chartDimension = 200;
	var bitter = document.getElementById('bitter').value;
	var winey = document.getElementById('winey').value;
	var burnt = document.getElementById('burnt').value;
	var sweet = document.getElementById('sweet').value;
	var citrus = document.getElementById('citrus').value;
	var hoppy = document.getElementById('hoppy').value;
	var body = document.getElementById('body').value;
	var abv = document.getElementById('abv').innerHTML+'%%';
	var colour = document.getElementById('colour').value;
	var flashVars = "labels=bitter,winey,burnt,sweet,citrus,hoppy&data=" + bitter+","+winey+","+burnt+","+sweet+","+citrus+","+hoppy+"&scalepoints=5&scalepointvalue=1&bgcolour=0xFFFFFF&overlaycolour=0x"+colour+"&overlayalpha=80&tintcolour0x000000=&tintalpha=0&body="+body+"&abv="+abv;
	var html =	"<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0' width='"+chartDimension+"' height='"+chartDimension+"' align='middle' title='review footprint'>\n"+
							"<param name='movie' value='spiderChart.swf' />\n"+
							"<param name='quality' value='high' />\n"+
							"<param name='FlashVars' value='" + flashVars + "' />\n"+
							"<embed src='spiderChart.swf' FlashVars='"+flashVars+"' width='"+chartDimension+"' height='"+chartDimension+"' align='middle' quality='high' pluginspage='https://www.macromedia.com/go/getflashplayer' type='application/x-shockwave-flash'></embed>\n"+
							"</object>\n"
	var spiderChart = document.getElementById('spiderChart');
	spiderChart.innerHTML = html;
}

function setObjValue(objectId, value)
{
		if(document.getElementById(objectId)) {
			document.getElementById(objectId).value = value;
			return true;
		} else {
			return false;
		}
}

function setFormObjValue(formId, objectId, value)
{
		if(document.getElementById(formId)) {
			objForm = document.getElementById(formId);
			objForm[objectId].value = value;
			return true;
		} else {
			return false;
		}
}

function getObjValue(objectId)
{
		if(document.getElementById(objectId)) {
			var objElement = document.getElementById(objectId);
			
			switch (objElement.tagName)
			{
				case "SELECT" :
					return objElement.options[objElement.selectedIndex].value;
				break;
				
				default :
					return objElement.value;
				break;
			}

		} else {
			return false;
		}
}

function parseAddress(addressText) {
	var arrAddress = [];
	arrAddress = addressText.split(",");
	
	if (arrAddress.length > 0) {
		return arrAddress;
	} else {
		return false;
	}
}

function switchBeerBrewerySearch(toggle)
{
	if (toggle == "beer") {
		var beerState = 'inline';
		var breweryState = 'none';
		var searchLinkEnabled = 'brewery';
	} else {
		var beerState = 'none';
		var breweryState = 'inline';
		var searchLinkEnabled = 'beer';
	}

	showHideObject('brewery_name', breweryState);
	showHideObject('beer_name', beerState);
	showHideObject('beerlist', breweryState);
	showHideObject('brewery_display_name', beerState);
	showHideObject('addBrewery', breweryState);
	document.getElementById('findBeer').className=(searchLinkEnabled=='beer' ? 'reviewDataEntryButton' : 'reviewDataEntryButtonDisabled');
	document.getElementById('findBeer').innerHTML=(searchLinkEnabled=='beer' ? 'Find the Beer' : 'Finding the Beer...');
	document.getElementById('findBrewery').className=(searchLinkEnabled=='beer' ? 'reviewDataEntryButtonDisabled' : 'reviewDataEntryButton');
	document.getElementById('findBrewery').innerHTML=(searchLinkEnabled=='beer' ? 'Finding the Brewery...' : 'Find the Brewery');
}

function ResizeTextArea(txtBox) 
{ 
	nCols = txtBox.cols; 
	sVal = txtBox.value; 
	nVal = sVal.length; 
	nRowCnt = 1; 
	
	for (i=0;i<nVal;i++) 
	{ if (sVal.charAt(i).charCodeAt(0) == 13) { nRowCnt +=1; } } 
	
	if (nRowCnt < (nVal / nCols)) { nRowCnt = 1 + (nVal / nCols); } 
	txtBox.rows = nRowCnt; 
} 


function setFocus(objectId)
{
		if(document.getElementById(objectId)) {
			document.getElementById(objectId).focus();
			return true;
		} else {
			return false;
		}
}

function processUsernameCheck(sourceObjId, targetObjId, exists)
{
	var sourceObject = document.getElementById(sourceObjId);
	var targetObject = document.getElementById(targetObjId);
	var existingValue = sourceObject.value;
	
	if (exists) {
		sourceObject.value = "";
		targetObject.className = "warning";
		targetObject.innerHTML = "the username "+'"'+existingValue+'"'+" is already taken";
		sourceObject.focus();
	} else {
		targetObject.className = "ok";
		targetObject.innerHTML = "this username is available";
	}
}

function setCheckboxArray(checkboxarrayname, ischecked)
{
	checkboxArray = document.getElementsByName(checkboxarrayname);
	count = checkboxArray.length;
	
	for ( var i=0 ; i < count ; i++ ) {
		checkboxArray[i].checked=ischecked;
	}
}

function setColourSelected(selectListId, targetObjectId)
{
	var sourceObject = document.getElementById(selectListId);
	var targetObject = document.getElementById(targetObjectId);
	var colour = sourceObject.options[sourceObject.selectedIndex].innerHTML;
	
	targetObject.className = "bg" + initCap(colour);
}

function initCap(word) {
	return String(word.substring(0,1)).toUpperCase() + String(word.substring(1)).toLowerCase();
}

function createRow(tableId, cells) {
	var targetTable = document.getElementById(tableId);
	var newCell;
    var newRow = targetTable.insertRow(-1);
	
    for (var i = 0; i < cells; i++) {
        newCell = newRow.insertCell(i);
        newCell.innerHTML = '&nbsp;';
    }
}