function validate_frm() {
	var msgs = [], ctl = null;
	
	ctl = document.getElementById( 'mtg_pri' );
	if (/^\d{1,}(\.\d{2})?$/.test( ctl.value ) == false) {
		msgs.push( 'Mortgage principal is invalid or missing' );
	}
	
	ctl = document.getElementById( 'mtg_int' );
	if (/^\d{1,2}(\.\d{1,9})?$/.test( ctl.value ) == false) {
		msgs.push( 'Mortgage interest rate is invalid, too large or missing' );
	}
	
	ctl = document.getElementById( 'mtg_fpd' );
	if (/^\d{4}\-\d{2}\-\d{2}$/.test( ctl.value ) == false) {
		msgs.push( 'Mortgage first payment date is invalid or missing' );
	}
	
	ctl = document.getElementById( 'mtg_epp' );
	if (/^\d{1,}(\.\d{2})?$/.test( ctl.value ) == false) {
		msgs.push( 'Extra period payment amount is invalid' );
	}
	
	ctl = document.getElementById( 'mtg_eap' );
	if (/^\d{1,}(\.\d{2})?$/.test( ctl.value ) == false) {
		msgs.push( 'Extra annual payment amount is invalid' );
	}

	return msgs;
}

function gpc( element ) {
	var coords = { x:0, y:0 };
	while (element) {
		coords.x += element.offsetLeft;
		coords.y += element.offsetTop;
		element = element.offsetParent;
	}
	return coords;
}

function setup_frm() {
	var frm = document.getElementById( 'assm' );

	if (frm != null) {
		frm.onsubmit = function( evt ) {
			var msgs = validate_frm(), str = '';
			
			if (msgs.length != 0) {
				for (var i = 0; i < msgs.length; i++) {
					str += (i+1)+'. '+msgs[i]+'\n';
				}
				alert( str );
				return false;
			}
			
			return true;
		}
		var ctls = frm.getElementsByTagName( 'img' );
		for (var i = 0; i < ctls.length; i++) {
			ctls[i].onmouseover = function( evt ) {
				var obj = (window.event ? window.event.srcElement : evt.target);
				var hlp = document.getElementById( 'hlp_assm' );
				
				if (hlp.getAttribute( 'vli' )) {
					document.getElementById( hlp.getAttribute( 'vli' ) ).style.display = 'none';
				}
				
				var li = document.getElementById( 'hlp'+obj.id.substr( 3 ) );
				li.style.display = 'block';
				
				var p = gpc( obj );
				//alert( p.x+' '+p.y );
				hlp.style.left = (p.x-135)+'px';
				hlp.style.top = (p.y+23)+'px';
				
				hlp.setAttribute( 'vli', li.id );
				hlp.style.display = 'block';
			}
			ctls[i].onmouseout = function( evt ) {
				var hlp = document.getElementById( 'hlp_assm' );
				
				if (hlp.getAttribute( 'vli' )) {
					document.getElementById( hlp.getAttribute( 'vli' ) ).style.display = 'none';
					hlp.removeAttribute( 'vli' )
				}
				hlp.style.display = 'none';
			}
		}
	}
}

function pop_values() {
	var ctl = null, i = 0;
	
	ctl = document.getElementById( 'mtg_trm' );
	if (ctl != null && arguments.callee.mtg_trm) {
		for (i = 0; i < ctl.options.length; i++) {
			if (ctl.options[i].value == arguments.callee.mtg_trm) {
				ctl.selectedIndex = i;
				break;
			}
		}
	}
	ctl = document.getElementById( 'mtg_amz' );
	if (ctl != null && arguments.callee.mtg_amz) {
		for (i = 0; i < ctl.options.length; i++) {
			if (ctl.options[i].value == arguments.callee.mtg_amz) {
				ctl.selectedIndex = i;
				break;
			}
		}
	}
	ctl = document.getElementById( 'mtg_frq' );
	if (ctl != null && arguments.callee.mtg_frq) {
		for (i = 0; i < ctl.options.length; i++) {
			if (ctl.options[i].value == arguments.callee.mtg_frq) {
				ctl.selectedIndex = i;
				break;
			}
		}
	}

	ctl = document.getElementById( 'mtg_pri' );
	if (ctl != null && arguments.callee.mtg_pri) {
		ctl.value = arguments.callee.mtg_pri;
	}
	ctl = document.getElementById( 'mtg_int' );
	if (ctl != null && arguments.callee.mtg_int) {
		ctl.value = arguments.callee.mtg_int;
	}
	ctl = document.getElementById( 'mtg_fpd' );
	if (ctl != null && arguments.callee.mtg_fpd) {
		ctl.value = arguments.callee.mtg_fpd;
	}
	ctl = document.getElementById( 'mtg_epp' );
	if (ctl != null && arguments.callee.mtg_epp) {
		ctl.value = arguments.callee.mtg_epp;
	}
	ctl = document.getElementById( 'mtg_eap' );
	if (ctl != null && arguments.callee.mtg_eap) {
		ctl.value = arguments.callee.mtg_eap;
	}
}