// datepicker

function validateDateFormat(thisDate) {
var splitDate = thisDate.split('-');
var yyyy = splitDate[0] * 1;
var mm = splitDate[1] - 1;
var dd = splitDate[2] * 1;
var checkDate = new Date(yyyy,mm,dd);
return (checkDate.getFullYear() == yyyy && checkDate.getMonth() == mm && checkDate.getDate() == dd) ? true : false;
}

function checkDateFormat(element) {
var thisValue = element.attr("value");
var dateValue = (validateDateFormat(thisValue)) ? thisValue : 'yyyy-mm-dd';
element.attr("value",dateValue);
if (dateValue == 'yyyy-mm-dd') { // invalid date
element.addClass('input_default');
} else { // valid date
element.removeClass('input_default');
} // end valid date
}

function focusDatePicker(element) {
element.removeClass('input_default');
var thisValue = element.attr("value");
var setValue = (thisValue == 'yyyy-mm-dd') ? '' : thisValue;
element.attr("value",setValue);
}

function trueDateValue(thisValue) {
return (!validateDateFormat(thisValue) || thisValue == 'yyyy-mm-dd') ? '' : thisValue;
}

function setDatePicker(element) {
checkDateFormat(element);
var thisValue = trueDateValue(element.attr("value"));
var thisDate = element.datepicker("getDate");
var thisID = element.attr("id");
var minClass = 'min_'+ thisID;
var classes = element.attr("class").split(" ");
// parent
var parentID = false;
for (var i = 0; i < classes.length; i++) { // check for parent date
var thisClass = classes[i];
var splitClass = thisClass.split("_");
if (splitClass[0] == 'min') { // parent found
splitClass.shift(); // remove min
parentID = splitClass.join("_"); // id string
var parentValue = trueDateValue($('#'+ parentID).attr("value"));
if (parentValue && thisValue && parentValue > thisValue) { // set value
element.attr("value",parentValue);
} // end set value
break;
} // end parent found
} // end check for parent date
// child
$('.datepicker').each(function() { // each datepicker
if ($(this).hasClass(minClass)) { // min dependent
var childValue = trueDateValue($(this).attr("value"));
if (childValue && thisValue && childValue < thisValue) { // set value
$(this).attr("value",thisValue);
} // end set value
if (thisValue) { // set minDate
$(this).datepicker("option","minDate",thisDate);
} else { // remove minDate
$(this).datepicker("option","minDate",null);
} // end remove minDate
if (!childValue) { // default value
$(this).attr("value",'yyyy-mm-dd');
} // end default value
} // end min dependent
}); // end each datepicker
}

function initializeDatePickers() {
$('.datepicker').not('.ui-datepicker').datepicker({
showOn: 'button',
buttonImage: '/library/images/calendar.gif',
buttonImageOnly: true,
dateFormat: 'yy-mm-dd'
});
// change
$('.datepicker').change(function() {
setDatePicker($(this));
});
$('.datepicker').focus(function() {
focusDatePicker($(this))
});
$('.datepicker').blur(function() {
checkDateFormat($(this));
});
$('.datepicker').each(function() { // initialize
setDatePicker($(this));
}); // initialize
}

// toggle box

function toggleBox(input) {
var id = $(input).attr('id');
var container_id = id + '_container';
if ($('#'+ container_id).length) { //container exists
var box = ($(input).attr('type') == 'checkbox' || $(input).attr('type') == 'radio') ? true : false; // checkbox or radio
if ((box && $(input).attr('checked')) || (!box && $(input).val() == 'yes')) { // show
$('#'+ container_id).css('display','block');
} else { // hide
$('#'+ container_id).css('display','none');
} // end hide
} // end container exists
}

function initializeToggleBoxes() {
$('input.toggle').each(function() {
toggleBox($(this)); // initialize
$(this).click(function() {
toggleBox($(this));
$('body').scrollTop($(this).position().top);
});
});
}
