String.prototype.trim = function()
{
	return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
};

String.prototype.propercase = function()
{
	return this.substr(0,1).toUpperCase() + this.substr(1);
};

function SetTitle(param)
{
	var std_txt = " \u2014 WillsToTrust \u2014 Your Source for Easy Creation of Wills, Trusts and Estate Plans";
	if (param == undefined)
	{
		var collection = document.getElementsByTagName('h1');
		if (collection.length > 0)
			document.title = collection[0].innerHTML.replace('&amp;','&').replace('.','') + std_txt;
		else
			document.title = std_txt;
	}
	else
		document.title = param + std_txt;
}

function ShowSubmenu(obj,show)
{
	if (document.body.id == 'trusts' || document.body.id == 'powerofattorney' || document.body.id == 'wills')
 		SetElementVisible('submenu',true);
	else
		SetElementVisible('submenu', show);
}

function Highlight(elementID)
{
	var menu_items = ['nav-wills','nav-poa','nav-trusts'];
	var item;
	for (m=0; m < menu_items.length; m++)
		document.getElementById(menu_items[m]).className = '';
	document.getElementById(elementID).className = 'current';
}

function FindParentTableRow(obj)
{
	if (obj.tagName == 'TR')
		return obj;
	else
		return FindParentTableRow(obj.parentNode);
}

function DeleteRow(obj)
{
	var tr = obj.parentNode.parentNode;
	tr.parentNode.removeChild(tr);
}

function Cancel(page)
{
	//var new_action = '/logic/' + page;
	//document.forms[0].action = new_action;
	document.forms[0].action = page;
}

function RmClass(element, class_to_remove)
{
	var classnamelist = element.className.split(' ');
	var newclassname = '';
	for (var j=0; j < classnamelist.length; j++)
	{
		if (classnamelist[j] != class_to_remove)
			newclassname += ' ' + classnamelist[j];
	}
	element.className = newclassname.trim();
}

function SetTab(tablist,tab)
{
	var a, div;
	for (var j=0; j < tablist.length; j++)
	{
		div = document.getElementById(tablist[j]);
		RmClass(div, 'active-tab-body');
		a = document.getElementById('anchor_'+tablist[j]);
		RmClass(a, 'active-tab');
	}
	div = document.getElementById(tab);
	div.className += ' active-tab-body';
	a = document.getElementById('anchor_'+tab);
	a.className = ' active-tab';
}

function ShowPopup(fieldlist)
{
	var msg = 'Please enter a value for the following fields:';
	for (var j=0; j < fieldlist.length; j++)
		msg += '\n\t' + fieldlist[j];
	alert(msg);
}

function SetElementVisible(elementID, visible)
{
	var element = document.getElementById(elementID);

	switch (BrowserDetect.browser)
	{
		case 'Firefox':
			element.style.visibility = visible ? 'visible' : 'hidden';
			break;
		case 'MSIE':
		case 'Explorer':
			element.style.visibility = visible ? 'visible' : 'hidden';
			document.all[elementID].style.visibility = visible ? 'visible' : 'hidden';
			break;
		case 'Netscape':
			element.style.visibility = visible ? 'visible' : 'hidden';
			//element.style.display = visible ? 'block' : 'none';
			document.layers[elementID].visibility = visible ? 'show' : 'hide';
			break;
		case 'Safari':
			//var setting = visible ? 'block' : 'none';
			//element.setAttribute('style', 'display:' + setting);
			var setting = visible ? 'visible' : 'hidden';
			element.setAttribute('style', 'visibility:' + setting);
			break;
	}
}

function Edit(elementID)
{
	var element = document.getElementById(elementID);
	var width = element.style.width;
	element.readOnly = false;
	element.style.backgroundColor = '#fefefe';
	element.style.color = '#990033';
	element.setAttribute('style','color: #990033; background-color: #fefefe; width: ' + width + ';');
}

function CheckRequiredFields()
{
	var field;
	var missingfields = new Array();

	//collect missing fields
	for (fieldname in requiredfields)
	{
		collection = document.getElementsByName(fieldname);
		field = collection[0];
		switch (field.type)
		{
			case 'text':
				field.value = field.value.trim();
				if (field.value == '')
					missingfields[missingfields.length] = fieldname;
				break;
			case 'select-one':
				if (field.options[field.selectedIndex].text == '')
					missingfields[missingfields.length] = fieldname;
				break;
			case 'radio':
				var is_checked = false;
				for (var j=0; j < collection.length; j++)
				{
					if (collection[j].checked)
						is_checked = true;
				}
				if (!is_checked)
					missingfields[missingfields.length] = fieldname;
				break;
		}
	}

	//show message if at least one field is missing
	if (missingfields.length == 0) return true;
	var showfieldlist = new Array();
	var fldcnt = 0;
	for (var j=0; j < missingfields.length; j++)
	{
		showfieldlist[fldcnt] = requiredfields[missingfields[j]];
		fldcnt += 1;
	}
	ShowPopup(showfieldlist);
	return false;
}

function isSkipRow(tr, notselectedoption)
{
	ddlb_list = tr.getElementsByTagName('select');
	for (d=0; d < ddlb_list.length; d++)
	{
		if (ddlb_list[d].options[ddlb_list[d].selectedIndex].text == notselectedoption)
		{
			parts = ddlb_list[d].id.split('.');
			if (parts[2] == 'seq')
				return true;
		}
	}
	return false;
}

function CheckRequiredFieldsInTable(table_id, start_row, bTotalRow, requiredfields, defaultoption, notselectedoption)
{
	var table = document.getElementById(table_id);
	var rows = table.getElementsByTagName('tr');
	var tr, td, cols, element, parts, rows_to_check, rows_actually_checked, rows_skipped;

	if (bTotalRow)
		rows_to_check = rows.length - 1;
	else
		rows_to_check = rows.length;

	//check rows
	rows_actually_checked = 0;
	rows_skipped = 0;
	for (r=start_row; r < rows_to_check; r++)
	{
		tr = table.rows[r];
		//2009.10.16 bw
		//ignore entire row if there's a choice field and its value is "not selected"
		if (isSkipRow(tr, notselectedoption))
		{
			rows_skipped += 1;
		}
		else
		{
			rows_actually_checked += 1;
			cols = tr.getElementsByTagName('td');
			for (c=0; c < cols.length; c++)
			{
				// find element containing data entered by user
				if (cols[c].childNodes.length > 0)
				{
					if (cols[c].firstChild.id === undefined)
						element = cols[c].firstChild.nextSibling;
					else
						element = cols[c].firstChild;

					parts = element.name.split('.');
					// check whether required field
					for (field in requiredfields)
					{
						if (field == parts[2])
						{
							switch (element.tagName)
							{
								case 'SELECT':
									switch (element.options[element.selectedIndex].text)
									{
										case '':
										case defaultoption:
											alert('Please provide a value for missing ' + requiredfields[field] +  '.');
											return false;
											break;
										case notselectedoption:
											break;
									}
									break;
								case 'INPUT':
									if (element.value.trim() == '')
									{
										alert('Please provide a value for missing ' + requiredfields[field] +  '.');
										return false;
									}
									break;
							}
						}
					}
				}
			}
		}
	}

	//did the user submit at list one row?
	//2009.11.11 bw
	//per issue 206: modify conditions for warning user to make at least one choice
	var total = start_row + rows_skipped + rows_actually_checked;

	if (rows_to_check != total)
	{
		alert("Please provide at least one choice.");
		return false;
	}

	// ok
	return true;
}

function AddPerson(table, primaryfield, relationships, choices, category, defaultoption)
{
	var table = document.getElementById(table);
	var rows = table.getElementsByTagName('tr');
	rowcnt += 1;
	var tr;
	if (category == 'B')
		tr = table.insertRow(rows.length - 1);
	else
		tr = table.insertRow(rows.length);
	tr.id = 'tr_' + rowcnt;
	var tr_classes = ['data-row alt','data-row'];
	tr.className = tr_classes[rowcnt % 2];

	//entity type
	var e = document.createElement('input');
	e.setAttribute('type','hidden');
	e.setAttribute('id',primaryfield + '.' + rowcnt + '.entity_type');
	e.setAttribute('name',primaryfield + '.' + rowcnt + '.entity_type');
	e.value = 'P';
	tr.appendChild(e);

	//first name
	var td = tr.insertCell(0);
	var fn = document.createElement('input');
	fn.setAttribute('type','text');
	fn.setAttribute('id',primaryfield + '.' + rowcnt + '.first_name');
	fn.setAttribute('name',primaryfield + '.' + rowcnt + '.first_name');
	td.className = 'td-01';
	td.appendChild(fn);

	//middle name
	td = tr.insertCell(1);
	var mn = document.createElement('input');
	mn.setAttribute('type','text');
	mn.setAttribute('id',primaryfield + '.' + rowcnt + '.middle_name');
	mn.setAttribute('name',primaryfield + '.' + rowcnt + '.middle_name');
	mn.setAttribute('maxlength','1');
	td.className = 'td-02';
	td.appendChild(mn);

	//last name
	td = tr.insertCell(2);
	var ln = document.createElement('input');
	ln.setAttribute('type','text');
	ln.setAttribute('id',primaryfield + '.' + rowcnt + '.last_name');
	ln.setAttribute('name',primaryfield + '.' + rowcnt + '.last_name');
	td.className = 'td-03';
	td.appendChild(ln);

	//relationships
	td = tr.insertCell(3);
	var parts;
	var sep = ',';
	var rel_ddlb = document.createElement('select');
	rel_ddlb.options[0] = new Option(defaultoption,'');
	for (j=0; j < relationships.length; j++)
	{
		parts = relationships[j].split(sep);
		rel_ddlb.options[j+1] = new Option(parts[1],parts[0]);
	}
	rel_ddlb.setAttribute('id',primaryfield + '.' + rowcnt + '.rel');
	rel_ddlb.setAttribute('name',primaryfield + '.' + rowcnt + '.rel');
	td.className = 'td-04';
	td.appendChild(rel_ddlb);

	//percentage
	if (category == 'B')
	{
		td = tr.insertCell(4);
		td.align = 'center';
		sel = document.createElement('select');
		sel.setAttribute('id',primaryfield + '.' + rowcnt + '.pct');
		sel.setAttribute('name',primaryfield + '.' + rowcnt + '.pct');
		sel.onchange = function(){ChangePercentage(this)}
		for (j = 0; j <= 100; j++)
			sel.options[j] = new Option(j,j);
		sel.className = 'td-05';
		td.appendChild(sel);
	}
	//choices
	else
	{
		td = tr.insertCell(4);
		var sel = document.createElement('select');
		sel.setAttribute('id',primaryfield + '.' + rowcnt + '.seq');
		sel.setAttribute('name',primaryfield + '.' + rowcnt + '.seq');
		sel.options[0] = new Option(defaultoption,'');
		sel.options[1] = new Option('Not Selected','');
		var j = 2;
		for (choice in choices)
		{
			sel.options[j] = new Option(choices[choice],choice);
			j += 1;
		}
		td.className = 'td-05';
		td.appendChild(sel);
	}

/*
	//button to remove row
	var td = tr.insertCell(5);
	var image = document.createElement('img');
	image.setAttribute("src", "/images/button-remove.gif");
	image.setAttribute("border", "0");
	image.setAttribute("style", "cursor: pointer; cursor: hand;");
	image.setAttribute("onclick", "Remove(this);");
	td.className = 'td-06';
	td.appendChild(image);
*/

	//set focus on the name textbox
	fn.focus();
}

function AddOrganization(table, primaryfield, choices, category, org_id, org_type, defaultoption)
{
	var table = document.getElementById(table);
	var rows = table.getElementsByTagName('tr');
	rowcnt += 1;
	var tr;
	if (category == 'B')
		tr = table.insertRow(rows.length - 1);
	else
		tr = table.insertRow(rows.length);
	tr.id = 'tr_' + rowcnt;
	var tr_classes = ['data-row alt','data-row'];
	tr.className = tr_classes[rowcnt % 2];

	//entity type
	var e = document.createElement('input');
	e.setAttribute('type','hidden');
	e.setAttribute('id',primaryfield + '.' + rowcnt + '.entity_type');
	e.setAttribute('name',primaryfield + '.' + rowcnt + '.entity_type');
	e.value = 'G';
	tr.appendChild(e);

	//name of organization
	var td = tr.insertCell(0);
	var org = document.createElement('input');
	org.setAttribute('type','text');
	org.setAttribute('id',primaryfield + '.' + rowcnt + '.org');
	org.setAttribute('name',primaryfield + '.' + rowcnt + '.org');
	td.className = 'td-org';
	td.setAttribute('colSpan', '3');
	td.appendChild(org);

	//relationship
	td = tr.insertCell(1);
	var rel = document.createElement('input');
	rel.setAttribute('type','hidden');
	rel.setAttribute('id',primaryfield + '.' + rowcnt + '.rel');
	rel.setAttribute('name',primaryfield + '.' + rowcnt + '.rel');
	rel.setAttribute('value', org_id);
	td.className = 'td-04';
	td.innerHTML = org_type;
	td.appendChild(rel);

	//percentage
	if (category == 'B')
	{
		td = tr.insertCell(2);
		td.className = 'td-05';
		sel = document.createElement('select');
		sel.setAttribute('id',primaryfield + '.' + rowcnt + '.pct');
		sel.setAttribute('name',primaryfield + '.' + rowcnt + '.pct');
 		sel.onchange = function(){ChangePercentage(this)}
		for (j = 0; j <= 100; j++)
			sel.options[j] = new Option(j,j);
		td.appendChild(sel);
	}
	//choices
	else
	{
		td = tr.insertCell(2);
		var sel = document.createElement('select');
		td.className = 'td-05';
		sel.setAttribute('id',primaryfield + '.' + rowcnt + '.seq');
		sel.setAttribute('name',primaryfield + '.' + rowcnt + '.seq');
		sel.options[0] = new Option(defaultoption,'');
		sel.options[1] = new Option('Not Selected','');
		var j = 2;
		for (choice in choices)
		{
			sel.options[j] = new Option(choices[choice],choice);
			j += 1;
		}
		td.appendChild(sel);
	}

/*
	//button to remove row
	var td = tr.insertCell(3);
	var image = document.createElement('img');
	image.setAttribute("src", "/images/button-remove.gif");
	image.setAttribute("border", "0");
	image.setAttribute("style", "cursor: pointer; cursor: hand;");
	image.setAttribute("onclick", "Remove(this);");
	td.className = 'td-06';
	td.appendChild(image);
*/

	//set focus on the name textbox
	org.focus();
}

