function getFrequency() {
	var freqSelect = $('frequency');
	return freqSelect.options[freqSelect.selectedIndex].text
}

function handleFrequencyChange() {
  if(! $('take-as-needed-prompt')){
    return;
  }
	if (getFrequency() == 'As needed') {
		// Main dose section now handles 'as needed' dose, hide additional 'as needed' section
		hideAdditionalAsNeededSection();
	}
	else {
		$('take-as-needed-prompt').show();
		toggleAdditionalAsNeededDose();
	}
}

function selectAdditionalAsNeededDose() {
	showAdditionalAsNeededSection();
	$('take-as-needed').checked = true;
}

function showAdditionalAsNeededSection() {
	$('take-as-needed-prompt').show();
	showAdditionalAsNeededDose();
}

function hideAdditionalAsNeededSection() {
	$('take-as-needed-prompt').hide();
	hideAdditionalAsNeededDose();
}

function toggleAdditionalAsNeededDose() {
	if ($('take-as-needed').checked) {
		showAdditionalAsNeededDose();
	}
	else {
		hideAdditionalAsNeededDose();
	}
}

function showAdditionalAsNeededDose(dose) {
	$('as-needed-dose').update($('as-needed-dose-form'));
  updateAsNeeded();
}

function hideAdditionalAsNeededDose() {
	if (!$('as-needed-dose-form').descendantOf('as-needed-dose-template'))
	{
  	$('as-needed-dose-template').update($('as-needed-dose-form'));
  }
}

/*
 * 'Other' dosage handling
 */
function toggleDosageDisplay(e) {
 	otherIsDisplayed() ? showStandardDosage() : showOtherDosage();
  updateAsNeeded();
  e.stop(); // Hack because Prototype doesn't suppress link navigation via return false
}

function otherIsDisplayed() {
   return $('main-dosage-table').hasClassName('other');
}

function updateAsNeeded() {
  otherIsDisplayed() ? handleDosageOrUnitChangeOf($('dosage-unit')) : handleDosageOrUnitChangeOf($('dosage'));
}

function setUseOtherDosage(value){
  field = $$("input[name='treatment_dosage_history[dose_attributes][use_other_dosage]']").first();
  if(field){
    field.value = value;
  }
}

function showStandardDosage() {
	var standardElems = $$('#hidden-dosage-table .dosage-main');
	var otherElems = $$('#main-dosage-table .dosage-other');

	PLM.domSwap(standardElems, otherElems);

	standardElems = $$('#hidden-initial-dosage-table .dosage-main');

  if(otherElems.any()){
    otherElems = $$('#initial-dosage-table .dosage-other');
    PLM.domSwap(standardElems, otherElems);
  }

	// Change class of wrapper row to indicate that we're now in 'main' mode
	$('main-dosage-table').removeClassName('other').addClassName('main');
	$$('#initial-dosage-table').invoke('removeClassName', 'other').invoke('addClassName', 'main');
  setUseOtherDosage('standard');
}

function showOtherDosage() {
	var standardElems = $$('#main-dosage-table .dosage-main');
	var otherElems = $$('#hidden-dosage-table .dosage-other');
	
	PLM.domSwap(standardElems, otherElems);

	standardElems = $$('#initial-dosage-table .dosage-main');
  if(standardElems.any()){
    otherElems = $$('#hidden-initial-dosage-table .dosage-other');
    PLM.domSwap(standardElems, otherElems);
  }
	
	
	// Change class of wrapper row to indicate that we're now in 'main' mode
	$('main-dosage-table').removeClassName('main').addClassName('other');
	$$('#initial-dosage-table').invoke('removeClassName', 'main').invoke('addClassName', 'other');
  setUseOtherDosage('other');
}

function showOtherDosageOnly() {
	showOtherDosage();
	$$('#other-dosage-link').invoke('remove');
}

function handleDosageOrUnitChange(event) {
  if(event){
    handleDosageOrUnitChangeOf(event.element());
  }
}
function handleDosageOrUnitChangeOf(dosage_or_unit){
  // Change the text displaying selected dosage or strength
	$('as-needed-dosage-or-unit-name').update(Element.selected_option(dosage_or_unit));

	if (dosage_or_unit.id == 'dosage') {
		$('as-needed-quantity-or-strength-label').update('count');
    setUseOtherDosage('standard');
    // Preset quantity with that of regular dose if not already filled in
		var quantityField = $('as-needed-quantity-or-strength');
		if (quantityField.value.strip() == '') quantityField.value = $F('quantity');
	}
	else {
		$('as-needed-quantity-or-strength-label').update('strength');
    setUseOtherDosage('other');
    // Preset strength with that of regular dose if not already filled in
		var strengthField = $('as-needed-quantity-or-strength');
		if (strengthField.value.strip() == '') strengthField.value = $F('strength');
	}
}



PLM.init(function(){
  Event.addBehavior.reassignAfterAjax = true;
  Event.addBehavior({'input.lickable' : Lickable });
  $$('body').first().observe('click', Event.delegate({
    'input.procedure-schedule' : function(e){
       var form = e.element().up('form');
       var schedule = form.serialize(true)[e.element().name];

       if(schedule == 'schedule_past'){
         $$('#stop-dosage-prompts').invoke('show');
         $('still_active').value = 'no';
         hideAndUnselectOneTime( $('frequency') );
       }
       else {
         $$('#stop-dosage-prompts').invoke('hide');
         $('still_active').value = 'yes';
         hideAndUnselectOneTime( $('frequency') );
       }

       if(schedule == 'schedule_one_time'){
         var oneTimeFrequency = $('one_time_frequency');
         $('frequency').value = oneTimeFrequency.value;
         $('multiple-schedule-elements').hide();
         $('still_active').value = 'no';
       }
       else {
         $('multiple-schedule-elements').show();
       }

       $('start-question').select('span').invoke('hide');
       $$('#start-question span.' + schedule).invoke('show');
       $('frequency-question').select('span').invoke('hide');
       $$('#frequency-question span.' + schedule).invoke('show');
       $$('.dosage-form-elements').invoke('show');
    },
    'input.dose_change' : function(e){
       var form = e.element().up('form');
       var dose_changed = form.serialize(true)[e.element().name] == 'yes';
       var initialDoseContent = $$('#initial-dose-container');
       if(dose_changed){
         initialDoseContent.invoke('show');
       }
       else {
         initialDoseContent.invoke('hide');
         initialDoseContent.each(resetInputs);
       }
    },
    'input.still_active' : function(e){
       var form = e.element().up('form');
       var taking = form.serialize(true)[e.element().name] == 'yes';
       var stopSurveySelector = '#stop-dosage-prompts';
       var currentPromptsSelector = '.currently-taking';
       var stoppedPromptsSelector = '.stopped-taking';

       if(taking){
         $$(stopSurveySelector).invoke('hide');
         $$(currentPromptsSelector).invoke('show');
         $$(stoppedPromptsSelector).invoke('hide');
       } 
       else {
         $$(stopSurveySelector).invoke('show').each(resetInputs);
         $$(currentPromptsSelector).invoke('hide');
         $$(stoppedPromptsSelector).invoke('show');
       }
       $$('.dosage-form-elements').invoke('show');
    }    
  }));
  function resetInputs(container){
    container.select('select').each(resetSelect);
    container.select('input[type=text]').each(resetText);
    container.select('input[type=checkbox]').each(resetCheckbox);
    container.select('input[type=radio]').each(resetCheckbox);
  }
  function resetText(txt){
    txt.value = '';
  }
  function resetCheckbox(chk){
    chk.checked = false;
  }

  function resetSelect(sel){
    sel.selectedIndex = 0;
  }

  // use this to hide 'one time' options. This is used for procedures
  // since there is different display for one time treatments
  function hideAndUnselectOneTime(el){
    var oneTimeFrequency = $('one_time_frequency').value;
    var oneTimeElement = el.childElements().find(function(opt){ return opt.value == oneTimeFrequency});
    oneTimeElement.hide();
    if (el.value == oneTimeFrequency){
      var newSelectedOpt = el.childElements().find( function(opt){return opt.value != oneTimeFrequency});
      el.value = newSelectedOpt.value;
    };
  }

});
