function BirthDetails(){} 

BirthDetails.validate =function(obj){ 
	var bday=parseInt(obj.bday.value);
	var byear=parseInt(obj.byear.value);
	var bmonth=obj.bmonth.selectedIndex;
	var msg1="Please enter a valid birth date";
	if(!bday) return fail(msg1,obj.bday);
	var maxday=mdays[bmonth]+leapmonth(bmonth,byear);
	if(bday>maxday) return fail(mnames[bmonth]+" has only "+maxday+" days in "+byear,obj.bday); 
	if(isNaN(byear)) return fail(msg1,obj.byear);
	if(byear<100) {
		obj.byear.value=1900+byear;
		return fail("please use 4 digits for year",obj.byear); }
	if(!obj.bcity.value)return fail("please enter the city you were born in",obj.bcity);
	if(!obj.bcountry.value)return fail("please enter the country you were born in",obj.bcountry);
	var bhour=parseInt(obj.bhour.value);
	var bmin=parseInt(obj.bmin.value);
	var msg2="please enter the time of your birth\n"
		+"if you are not sure, guess the\n"
		+"nearest hour";
	if(isNaN(bhour) || bhour<0 || bhour >23) return fail(msg2,obj.bhour);
	if(isNaN(bmin) ||bmin<0 || bmin>59) return fail(msg2,obj.bmin); 
	return true;};


BirthDetails.addHandlers =function(){
	//BirthDetails.form=document.forms.details;
	if(!BirthDetails.form)return;
	var e=BirthDetails.form.elements;
	var add=BirthDetails.addHandler;
	add(e.bday,BirthDetails.bday);
	add(e.bhour,BirthDetails.bhour);
	e.bday.onkeydown=BirthDetails.digitsOnly;
	e.bhour.onkeydown=BirthDetails.digitsOnly;
	e.byear.onkeydown=BirthDetails.digitsOnly;
	e.bmin.onkeydown=BirthDetails.digitsOnly;
	e.byear.onchange=BirthDetails.byear;
	
	if(BirthDetails.nextOnloadHandler)BirthDetails.nextOnloadHandler();
	}; //EventDispatcher.addOnloadListener(BirthDetails.addHandlers);
if(window.onload)BirthDetails.nextOnloadHandler=window.onload;
window.onload=BirthDetails.addHandlers;

BirthDetails.addHandler =function(element,handler){ 
	//element.onKeyPress=handler;
	element.onkeyup=handler;
	//element.onChange=handler; 
	};
BirthDetails.byear=function(e){
	var d=new EventDispatcher(e);
	var t=d.target;
	var v=parseInt(d.value());
	if(v<100){
		alert("please use 4 digits for year")
		t.focus();
		return false;
		}
	}

BirthDetails.digitsOnly=function(e){
	var d=new EventDispatcher(e);
	var k=d.keyCode();
	if(k>57)return false;
	}
BirthDetails.bday =function(e){
	var d=new EventDispatcher(e);
	var k=d.keyCode();
	var v=d.value();
	if(k && v){
		var l=v.length;
		if( l >= 2 && BirthDetails.validDay(v)) BirthDetails.form.elements.bmonth.focus(); 
		else BirthDetails.form.elements.bday.focus();}};

BirthDetails.bhour =function(e){
	var d=new EventDispatcher(e);
	var k=d.keyCode()
	var v=d.value();
	if(k==16||k==9||k==13)return;
	if(k && v){
		var l=v.length;
		if(l >=2 && BirthDetails.validHour(v))
			BirthDetails.form.elements.bmin.focus();
			BirthDetails.pmNeeded();}};

// Days per month used for normal years.  Starts and ends with December.
var mdays = new Array( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
var mnames = new Array( 
	"January",
	"February",
	 "March",
	"April",
	"May",
	"June",
	"July",
	"August",
	"September",
	"October",
	"November",
	"December");

// Returns additional day if leap month
function leapmonth( month, year ) {
	if (month != 1) return 0;
	if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) return 1;
	return 0;
}

BirthDetails.validDay=function(day){
	var iday=parseInt(day);
	if(!iday  || iday > 31){
		alert("please enter a valid date (1-31)");
		return false; }
	return true; }
BirthDetails.pmNeeded=function (hour,pm){
	hour=BirthDetails.form.elements.bhour;
	pm=BirthDetails.form.elements.bpmcheck;
	if(hour.value > 12) pm.disabled=true;
	if(hour.value < 13) pm.disabled=false;}

BirthDetails.validHour =function (hour){
	var ihour=parseInt(hour);
	if(isNaN(ihour) || ihour<0 || ihour > 23){
		alert("valid hours are 0-23");
		return false; }
	return true; }

