var mutils = new MiscUtils();
var futils = new Form('registerForm');
//EventUtil.addEventHandler(window, 'load', onWindowLoad);

history.navigationMode = 'compatible';
$(document).ready(onWindowLoad);

/////////////////////// FUNCTIONS: BEGIN ////////////////////////////////
//--------------------------------------------------------------
function onWindowLoad() {

  $("#submit_form").bind("click", submitForm);
		
		// set event handlers for abstract fields
  var removeAbstractButtons = mutils.getElementsByClassName('removeAbstractButton');
  for (var i=0; i < removeAbstractButtons.length; i++) {
//    EventUtil.addEventHandler(removeAbstractButtons[i], 'click', removeAbstract);
				$(removeAbstractButtons[i]).bind('click', removeAbstract);
  }
//  EventUtil.addEventHandler(document.getElementById('addAbstractButton'), 'click', addAbstract);
		$("#addAbstractButton").bind('click', addAbstract);
//  EventUtil.addEventHandler(document.getElementById("submit_form"), 'click', submitForm);
  $("#submit_form").bind('click', submitForm);

  // if in edit mode, then show abstracts
  if (document.getElementById("action") && document.getElementById("action").value == 'edit') {
    var abstract_title = mutils.getElementsByName('abstract_title_hidden');
    for (var i=0; i < abstract_title.length; i++) {     
      addAbstract();
    }
    fillInAbstracts();
  }
	
}


//--------------------------------------------------------------
function submitForm() {
  if ( validate() ) {
    document.registerForm.submit();
  }
}

//--------------------------------------------------------------
function validate() {  // simple validation

  var futils = new Form('registerForm');

  // make sure the required fields are set
  if (document.getElementById('fname').value == '' || document.getElementById('lname').value == '') {
    alert('You must enter in your Name');
    return false;
  }
  if (document.getElementById('email').value == '') {
    alert('You must enter in your Email Address');
    return false;
  }
  if (document.getElementById('organization').value == '') {
    alert('You must enter in your Organization');
    return false;
  }
  if (document.getElementById('street_address').value == '') {
    alert('You must enter in your Street Address');
    return false;
  }
  if (document.getElementById('city').value == '') {
    alert('You must enter in your City');
    return false;
  }
  if (document.getElementById('state').value == '') {
    alert('You must enter in your State/Province');
    return false;
  }
  if (document.getElementById('country').value == '') {
    alert('You must enter in your Country');
    return false;
  }
		
		if ( $("#form").val() == '50thonly' ) return true;
		
		if ( $("#breakout_choice1").val() == '' ) {
			 alert('You must select your First choice for Breakout Session Topic');
				return false;				
		}
		
		if ( $("#breakout_choice2").val() == '' ) {
			 alert('You must select your Second choice for Breakout Session Topic');
				return false;				
		}
		
		if ( $("#breakout_choice2").val() == '' ) {
			 alert('You must select your Second choice for Breakout Session Topic');
				return false;
		}
		
  if (futils.getCheckedRadioButtonValue('ssec_tour') == '') {
    alert('You must specify whether you wish to attend the SSEC Tour');
    return false;			
		}
		
  if (futils.getCheckedRadioButtonValue('anniversary') == '') {
    alert('You must specify whether you wish to attend the 50th Anniversary Symposium');
    return false;
  }
	
  if (futils.getCheckedRadioButtonValue('banquet_attending') == '') {
    alert('You must answer if you are attending the Banquet');
    return false;
  }	
		
		if (futils.getCheckedRadioButtonValue('banquet_guest') == '') {
    alert('You must answer if you are bringing a guest to the Banquet');
    return false;
  }	
	
  if (futils.getCheckedRadioButtonValue('mcidas_v') == '') {
    alert('You must answer if you are attending McIDAS-V information session');
    return false;
  }	
	
  return true;
}

//--------------------------------------------------------------
function zeroPadded(n) {
	if (n <= 9) {
    return '0' + String(n);
	} else {
		return n;
	}
}

//--------------------------------------------------------------
function openWindow(url){
  window.open(url, 'newWindow','width=800,height=450,location=no,menubar=no,resizable=yes,scrollbars=yes,toolbar=no');
}


//--------------------------------------------------------------
function addAbstract() {
//  if (arguments[0] != undefined)  var abstractIndex = arguments[0];  

  var allAbstracts = mutils.getElementsByClassName('abstractContainer', true);
  var template = allAbstracts[0];

   // add abstract
   if (allAbstracts.length == 1 && allAbstracts[0].style.display == 'none') { // unhide only remaining abstract
     var newAbstract = allAbstracts[0];
     newAbstract.style.display = 'block';
     enableAbstract(newAbstract);
   } else { // otherwise, clone a new one
     var newAbstract = template.cloneNode(true);
     newAbstract.style.display="block";
     enableAbstract(newAbstract);
     document.getElementById('allAbstracts').insertBefore(newAbstract, document.getElementById('addAbstractButtonContainer'));
   }

   // reset event handlers
   var removeAbstractButtons = mutils.getElementsByClassName('removeAbstractButton');
   for (var i=0; i < removeAbstractButtons.length; i++) {
//     EventUtil.removeEventHandler(removeAbstractButtons[i], 'click', removeAbstract);
					$(removeAbstractButtons[i]).unbind('click', removeAbstract);
//     EventUtil.addEventHandler(removeAbstractButtons[i], 'click', removeAbstract);
					$(removeAbstractButtons[i]).bind('click', removeAbstract);
   }

   clearAbstract(newAbstract);
}

//--------------------------------------------------------------
function getEnabledElementsByName(n) {
  var allElems = mutils.getElementsByName(n);
  var elems = new Array();
  for (var i=0; i < allElems.length; i++) {
			
// IE returns a boolean for getAttribute('disabled')
//    if (allElems[i].getAttribute('disabled') != 'disabled')  elems.push(allElems[i]); 

    if ( !$(allElems[i]).attr('disabled') )  elems.push(allElems[i]);				
				
  }
  return elems;
}

//--------------------------------------------------------------
function fillInAbstracts() {

//  var abstract_title_fields = mutils.getElementsByName('abstract_title[]');
  var abstract_title_fields = getEnabledElementsByName('abstract_title[]');
  var abstract_title_values = mutils.getElementsByName('abstract_title_hidden');
  var poster_category_fields = getEnabledElementsByName('poster_category[]');
  var poster_category_values = mutils.getElementsByName('poster_category_hidden');
  var abstract_authors_fields = getEnabledElementsByName('abstract_authors[]');
  var abstract_authors_values = mutils.getElementsByName('abstract_authors_hidden');
  var abstract_presenter_fields = getEnabledElementsByName('abstract_presenter[]');
  var abstract_presenter_values = mutils.getElementsByName('abstract_presenter_hidden');
  var abstract_text_fields = getEnabledElementsByName('abstract_text[]');
  var abstract_text_values = mutils.getElementsByName('abstract_text_hidden');
		
  if (abstract_title_fields.length != abstract_title_values.length)  {
    alert('ERROR: problem with auto-filling in abstract title field - contact webmaster');
    return;
  }

  for (var i=0; i < abstract_title_fields.length; i++) {
    abstract_title_fields[i].value = abstract_title_values[i].value;
    abstract_authors_fields[i].value = abstract_authors_values[i].value;
    abstract_presenter_fields[i].value = abstract_presenter_values[i].value;
    abstract_text_fields[i].value = abstract_text_values[i].value;

    for (var j=0; j < poster_category_fields[i].options.length; j++) {
      if (poster_category_fields[i].options[j].value == poster_category_values[i].value) {
        poster_category_fields[i].selectedIndex = j;
        break;
      }
    }
  }

}

//--------------------------------------------------------------
function removeAbstract(e) {
  // figure out which abstract to remove 
//  var oEvent = EventUtil.getEvent();
//  var abstractContainer = mutils.getParentByTagName(oEvent.target, 'div', 'abstractContainer');
  var abstractContainer = mutils.getParentByTagName(e.target, 'div', 'abstractContainer');		

  // clear input from abstract
  clearAbstract(abstractContainer);
  disableAbstract(abstractContainer);

  // remove the designated abstract
  var allAbstracts = mutils.getElementsByClassName('abstractContainer', true);
  if (allAbstracts.length > 1) {
     abstractContainer.parentNode.removeChild(abstractContainer);
  } else {  // if only one abstract left, hide it rather than remove it - at least one needs to stay around to act as a template when adding new abstracts
    abstractContainer.style.display = "none";
  }
}

//--------------------------------------------------------------
function enableAbstract(abstractContainer) {
  // disable input elements
  var inputElements = abstractContainer.getElementsByTagName('input');
  var e;
  for (var i=0; i < inputElements.length; i++) {
    e = inputElements[i];
    if (e.getAttribute('type').toLowerCase() == 'text' || inputElements[i].getAttribute('type').toLowerCase() == 'radio') {
      e.removeAttribute('disabled');
    }
  }  

  // disable select elements
  var selectElements = abstractContainer.getElementsByTagName('select');
  var e;
  for (var i=0; i < selectElements.length; i++) {
    e = selectElements[i];
    e.removeAttribute('disabled');
  }  

  // disable textarea
  var textarea = abstractContainer.getElementsByTagName('textarea');
  for (var i=0; i < textarea.length; i++) {
    textarea[i].removeAttribute('disabled');
  }
}

//--------------------------------------------------------------
function disableAbstract(abstractContainer) {

  // disable input elements
  var inputElements = abstractContainer.getElementsByTagName('input');
  var e;
  for (var i=0; i < inputElements.length; i++) {
    e = inputElements[i];
    if (e.getAttribute('type').toLowerCase() == 'text' || inputElements[i].getAttribute('type').toLowerCase() == 'radio') {
      e.setAttribute('disabled', 'disabled');
    }
  }  

  // disable select elements
  var selectElements = abstractContainer.getElementsByTagName('select');
  var e;
  for (var i=0; i < selectElements.length; i++) {
    e = selectElements[i];
    e.setAttribute('disabled', 'disabled');
  }  

  // disable textarea
  var textarea = abstractContainer.getElementsByTagName('textarea');
  for (var i=0; i < textarea.length; i++) {
    textarea[i].setAttribute('disabled', 'disabled');
  }
}

//--------------------------------------------------------------
function clearAbstract(abstractContainer) {

  // clear input elements
  var inputElements = abstractContainer.getElementsByTagName('input');
  var e;
  for (var i=0; i < inputElements.length; i++) {
    e = inputElements[i];
    if (e.getAttribute('type').toLowerCase() == 'text') {
      e.value = '';
    } else if (inputElements[i].getAttribute('type').toLowerCase() == 'radio') {
      e.checked = false;
    }
  }  

  // clear select elements
  var selectElements = abstractContainer.getElementsByTagName('select');
  var e;
  for (var i=0; i < selectElements.length; i++) {
    e = selectElements[i];
    e.selectedIndex = 0;
  }  

  // clear textarea
  var textarea = abstractContainer.getElementsByTagName('textarea');
  for (var i=0; i < textarea.length; i++) {
    textarea[i].value = '';
  }
}



