var Dom = YAHOO.util.Dom, Event = YAHOO.util.Event, Conn = YAHOO.util.Connect;
var cal1;
var renderRemoveWeekends = function(wd,cell) {
    cell.innerHTML = 'X';
    return YAHOO.widget.Calendar.STOP_RENDER;
};
var reWhitespace = /^\s+$/;
var isEmpty = function(s) {	return ((s == null) || (s.length == 0)) };
var isWhitespace = function(s) { return ( isEmpty(s) || reWhitespace.test(s) ) };
var requiredFields = [
    { name: 'firstname', pretty: 'First Name', id: 'txtFirstname' },
    { name: 'lastname',  pretty: 'Last Name',  id: 'txtLastname' },
    { name: 'phone',     pretty: 'Phone',      id: 'txtPhone' },
    { name: 'datereq',   pretty: 'Date Requested', id: 'txtDateReq' },
    { name: 'timereq',   pretty: 'Time Requested', id: 'cbxTime' }
];
var loadTimeSelect = function(wd) {
    var opts = [];
    if (wd==1) {
        opts = [
            '2:00 pm','2:30 pm','3:00 pm','3:30 pm','4:00 pm','4:30 pm','5:00 pm','5:30 pm','6:00 pm'
        ];
    } else
    if (wd==2) {
        opts = [
            '9:00 am','9:30 am','10:00 am','10:30 am','11:00 am','11:30 am','12:00 pm','12:30 pm',
            '1:00 pm','1:30 pm','2:00 pm','2:30 pm','3:00 pm','3:30 pm','4:00 pm','4:30 pm','5:00 pm',
            '5:30 pm','6:00 pm'
        ];
    } else
    if (wd==3) {
        opts = [
            '9:00 am','9:30 am','10:00 am','10:30 am','11:00 am','11:30 am','12:00 pm','12:30 pm',
            '1:00 pm','1:30 pm','2:00 pm','2:30 pm','3:00 pm','3:30 pm','4:00 pm','4:30 pm','5:00 pm',
            '5:30 pm','6:00 pm'
        ];
    } else
    if (wd==4) {
        opts = [
            '7:00 am','7:30 am','8:00 am','8:30 am','9:00 am','9:30 am','10:00 am','10:30 am',
            '11:00 am','11:30 am','12:00 pm','12:30 pm','1:00 pm','1:30 pm','2:00 pm','2:30 pm','3:00 pm',
            '3:30 pm','4:00 pm'
        ];
    } else
    if (wd==5) {
        opts = [
            '9:00 am','9:30 am','10:00 am','10:30 am','11:00 am','11:30 am','12:00 pm','12:30 pm',
            '1:00 pm','1:30 pm','2:00 pm','2:30 pm','3:00 pm','3:30 pm','4:00 pm','4:30 pm','5:00 pm',
            '5:30 pm','6:00 pm'
        ];
    }
    var timeSel = Dom.get('cbxTime');
    while (timeSel.options.length > 1) {
        timeSel.remove(timeSel.options.length-1);
    }
    for (var i=0,len=opts.length;i<len;i++ ) {
        timeSel.options[timeSel.options.length] = new Option( opts[i] );
    }
};
var handleDateSelect = function(t,a,o) {
    var dates = a[0];
    var date = new Date(a[0][0][0],a[0][0][1]-1,a[0][0][2]);
    var reqDate = Dom.get('txtDateReq');
    var el = Dom.get('cbxDoctor');
    var doctor = el.selectedIndex;
    
//    if ((doctor==1 || doctor==0) && (date.getDay()==4 || date.getDay()==5)) {
//        var answer = confirm('Only Dr. Coe sees patients on '+ date.dayNames[date.getDay()]+'. Is this Okay?');
//        if (answer) {
//            el.selectedIndex = 2;                
//            reqDate.value = date.format('EE, MMM d, yyyy');
//            cal1.hide();
//            loadTimeSelect(date.getDay())
//        }
//        else { cal1.reset(); }
//    } else 
//    if ((doctor==2 || doctor==0) && (date.getDay()==1 || date.getDay()==2 || date.getDay()==3)) {
//        var answer = confirm('Only Dr. Windhorst sees patients on '+ date.dayNames[date.getDay()]+'. Is this Okay?');
//        if (answer) {
//            el.selectedIndex = 1;                
//            reqDate.value = date.format('EE, MMM d, yyyy');
//            cal1.hide();
//            loadTimeSelect(date.getDay());
//        }
//        else { cal1.reset(); }
//    } else {
        reqDate.value = date.format('EE, MMM d, yyyy');
        cal1.hide();
        loadTimeSelect(date.getDay());
//    }
}
var loadBDYearSelect = function() {
    var y=Dom.get('cbxBDYear'), m=Dom.get('cbxBDMonth'), d=Dom.get('cbxBDDay');
    var age = Dom.get('txtBDAge');
    y.selectedIndex=0; m.selectedIndex=0; d.selectedIndex=0;
    age.value='';
    var thisyear = (new Date()).getFullYear();
    for (var i=0;i<100;i++) { y.options[y.options.length] = new Option( thisyear-i ); }
    for (var i=12;i<24;i++) { m.options[m.options.length] = new Option( Date.monthNames[i] ); }
};
var loadBDDaySelect = function() {
    var y=Dom.get('cbxBDYear'), m=Dom.get('cbxBDMonth'), d=Dom.get('cbxBDDay');
    var year = y.options[y.selectedIndex].value;
    var month = m.selectedIndex -1;
    var days = Date.daysInMonth[month];
    if ( Date.isLeapYear(year) && month == 1 ) { days++; }
    while (d.options.length > 1) { d.remove(d.options.length-1); }
    d.selectedIndex=0;
    for (var i=1;i<=days;i++) { d.options[d.options.length] = new Option( i ); }
};
var calculateAge = function() {
    var y=Dom.get('cbxBDYear'), m=Dom.get('cbxBDMonth'), d=Dom.get('cbxBDDay'), age=Dom.get('txtBDAge');
    if (
        !(y.disabled || m.disabled || d.disabled) &&
        !( (y.selectedIndex==0) || (m.selectedIndex==0) || (d.selectdIndex==0) )
    ) {
        var today = new Date();
        var yr = today.getFullYear()
        var birthdate = new Date();
        birthdate.setYear( yr - (y.selectedIndex-1) );
        birthdate.setMonth( m.selectedIndex-1 );
        birthdate.setDate( d.selectedIndex-1 );
        var diff = today.getTime()-birthdate.getTime();
        age.value = Math.floor(diff/(1000*60*60*24*365));
        Dom.get('ageRow').style.display = (YAHOO.env.ua.ie > 2) ? 'block' : 'table-row';
    }
    else {
        age.value = '';
        Dom.get('ageRow').style.display = 'none';
    }
};
var isValidEmailAddress = function(str) {
    var apos = str.indexOf('@');
    var dotpos = str.lastIndexOf('.');
    return !( apos<1||dotpos-apos<2 );
}
var validateEmailAddress = function() {
    if ( isValidEmailAddress(this.value)  || this.value == '' ) {
        Dom.removeClass(this,'error');
        Dom.get('errEmail').innerHTML='';
    }
    else {
        Dom.addClass(this,'error');
        Dom.get('errEmail').innerHTML='Invalid';
    }
};
var sendTheRequest = function() {
    Conn.asyncRequest('POST','scr/request_appt.php',handleResponse,Conn.setForm('reqform'))
};
var handleResponse = {
    success: function(o) {
        Dom.setStyle(['errorMessage','failureMessage'],'display','none');
        if ( o.responseText.indexOf('SUCCESS') > -1 ) {
            Dom.setStyle('successMessage','display','block');
            Dom.get('reqform').reset();
        }
        else {
            Dom.setStyle('failureMessage','display','block');
        }
    },
    failure: function(o) {
        Dom.setStyle('errorMessage','display','none');
        Dom.setStyle('failureMessage','display','block');
    }
};
Event.onDOMReady( function(){
    
    MM_preloadImages(
        'buttons/eyes_f2.jpg',
        'buttons/exams_f2.jpg',
        'buttons/development_f2.jpg',
        'buttons/clinic_f2.jpg',
        'buttons/doctors_f2.jpg',
        'buttons/appointment_f2.jpg'
    );
    
    cal1 = new YAHOO.widget.Calendar('apptDate',{ close: true });
    cal1.addWeekdayRenderer(1,renderRemoveWeekends);
    cal1.addWeekdayRenderer(7,renderRemoveWeekends);
    cal1.selectEvent.subscribe(handleDateSelect,cal1,true);
    cal1.render();
    
    loadBDYearSelect();
    
    Event.addListener('btnPopCal','click', cal1.show, cal1, true);
    Event.addListener('cbxDoctor','change',function(){
       Dom.get('txtDateReq').value = '';
        var timeSel = Dom.get('cbxTime');
        while (timeSel.options.length > 1) {
            timeSel.remove(timeSel.options.length-1);
        }
    });
    Event.addListener('cbxBDYear','change',function() {
        if ( this.selectedIndex > 0 ) { Dom.get('cbxBDMonth').disabled = false; }
        calculateAge();
    });
    Event.addListener('cbxBDMonth','change',function() {
        if ( this.selectedIndex > 0 ) { Dom.get('cbxBDDay').disabled = false; }
        loadBDDaySelect();
        calculateAge();
    });
    Event.addListener('cbxBDDay','change',function() {
        calculateAge();
    });
    Event.addListener('txtEmail','blur',validateEmailAddress);
    Event.addListener('btnSubmit','click',function() {
        var Form = Dom.get('reqform');
        var errorCount = 0;
        for ( i=0;i<requiredFields.length;i++ ) {
            var rec = requiredFields[i];
			if ( 
				Form[rec.name].type == 'text' && isWhitespace( Form[rec.name].value )
			) {
				errorCount++;
				Dom.addClass(rec.id,'error');
			} else
			if ( 
				Form[rec.name].type == 'select-one' && Form[rec.name].selectedIndex == 0
			) {
				errorCount++;
				Dom.addClass(rec.id,'error');
			} else {
				Dom.removeClass(rec.id,'error');
			}
        }
        if ( errorCount < 1 ) {
            sendTheRequest();
        } else {
            Dom.setStyle('errorMessage','display','block');
        }
    });
    
    Event.addListener('btnReset','click',function() {
        Dom.get('reqform').reset();
        Dom.setStyle(['errorMessage','successMessage','failureMessage','ageRow'],'display','none');
        for ( i=0;i<requiredFields.length;i++ ) {
            Dom.removeClass(requiredFields[i].id,'error');
        }
    });
});

