/*
 * omnitrainingsignup.js
 * Web Team
 * April, 2008
 */
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

function formobject(id,friendlyname){
  this.id = id;
  this.friendlyname = friendlyname;
}

function testSubmit(theform) {
  var errmsg = "";
  var objid = "";
  var objtype = "";
  var required = new Array(); // Value of the "id" attribute for the required items, and user-friendly name for the form field
  var errbuffer = new Array();
  var typevalue = "";
  var bannername = "";
  var bannernotchosen = false;
  var primaryemail = "";
  var confirmemail = "";
  var primarydatestring = "";
  var confirmdatestring = "";
  
  // Check required items
  required[0] = new formobject("name", "Your name") ;
  required[1] = new formobject("jobtitle", "Job title") ;
  required[2] = new formobject("department", "Department") ;
  required[3] = new formobject("phone", "Contact phone") ;
  required[4] = new formobject("date1st", "Preferred training date");
  required[5] = new formobject("date2nd", "Second choice date") ;
  // required[6] = new formobject("new_exists", "Choice between New Web Site or Existing Web Site") ;
  
  for (var iobj in required) {
    if (!objhasvalue(required[iobj].id)){
      errbuffer.push(required[iobj].friendlyname);
    }
  }
  
  if(errbuffer.length > 1){
    // More than one required field is missing
    errmsg += "The following values are missing: ";
    for (var ireq in errbuffer) {
      if (ireq == 0) {
        errmsg += errbuffer[ireq] ;
      }else if (ireq < errbuffer.length - 1) {
        errmsg += ", " + errbuffer[ireq] ;
      }else{
        errmsg += " and " + errbuffer[ireq] + ". " ;
      }
    }
  }else if (errbuffer.length == 1){
    // Only one required field is missing
    errmsg += "The value for " + errbuffer[0] + " is missing. ";
  }
  
  errbuffer.length = 0;
  
  // Check conditional realtionships between form elements
  //
  // Email address & Confirmation email address both present and match?
  primaryemail = document.getElementById("email").value;
  confirmemail = document.getElementById("confirmemail").value;
  
  primaryemail.replace(/^\s+|\s+$/g,"");
  confirmemail.replace(/^\s+|\s+$/g,"");
  
  primaryemail.toLowerCase();
  confirmemail.toLowerCase();
  
  if ((primaryemail == "")||(primaryemail == "@deanza.edu")) {
    errmsg += "Please enter your email address. ";
  }else if(primaryemail.search(/deanza.edu$/) < 0){
    // Check if email is of the form "*.deanza.edu"
    errmsg += 'Please use an email address that ends with "deanza.edu". ';
  }
  if((confirmemail == "")||(confirmemail == "@deanza.edu")) {
    errmsg += "Please confirm your email address. ";
  }
  
  if ((primaryemail != "")&&(confirmemail != "")&&(primaryemail != confirmemail)){
    // Both primary and confirm emails have values - but do they match?
    errmsg += "The two email addresses you entered do not match. ";
  }
  
  // Dates should not be the same
  primarydatestring = getselectedvalue("date1st");
  confirmdatestring = getselectedvalue("date2nd");
  
  primarydatestring.replace(/^\s+|\s+$/g,"");
  confirmdatestring.replace(/^\s+|\s+$/g,"");
  
  primarydatestring.toLowerCase();
  confirmdatestring.toLowerCase();
  
  if ((primarydatestring != "")&&(confirmdatestring != "")&&(primarydatestring == confirmdatestring)) {
    errmsg += "The two dates you chose are the same, please choose different dates. ";
  }
  
  // alert("Starting revised code section.");
  // Type & Banner
  typearray = document.getElementsByName("type[]");
  //alert("typearray.length == " + typearray.length);
  for (var j = 0; j < typearray.length; j++){
    if (typearray[j].checked) {
      typevalue = typearray[j].value ;
      // alert("typevalue == " + typevalue);
      bannername = "banner" + typevalue ;
      
      if (getselectedvalue(bannername) == ""){
        errbuffer.push(document.getElementById("labeltype" + typevalue).firstChild.nodeValue) ;
      }
      
      // New Web Site, or an existing Web site ?
  
      if(!objhasvalue("new_exists_" + typevalue)){
        // None of the choices were selected
        errmsg += "Please indicate whether the " + document.getElementById("labeltype" + typevalue).firstChild.nodeValue + " Web site will be new or already exists. ";
      }else if (getradiovalue("new_exists_" + typevalue) == "existing"){
        if (document.getElementById("existingurl" + typevalue).value == ""){
          errmsg += "Please enter the URL of the existing " + document.getElementById("labeltype" + typevalue).firstChild.nodeValue + "Web site. ";
        }
        // alert("theform.accountholder.type == " + theform.accountholder.type);
        if (!objhasvalue("accountholder" + typevalue)){
          errmsg += "Please indicate if you are the current account holder of the existing " + document.getElementById("labeltype" + typevalue).firstChild.nodeValue + " Web site. ";
        }
      }else if ((getradiovalue("new_exists_" + typevalue) == "new")&&(typevalue == "other")){
        if (document.getElementById("details").value == ""){
          errmsg += "For a new Web site, please describe and name the site in Additional Details. ";
        }
      }
    }
  }
  
  
  if(errbuffer.length > 1){
    // More than one banner choice is missing
    errmsg += "Please choose a banner for your websites: ";
    for (var iban in errbuffer) {
      if (iban == 0) {
        errmsg += errbuffer[iban] ;
      }else if (iban < errbuffer.length - 1) {
        errmsg += ", " + errbuffer[iban] ;
      }else{
        errmsg += " and " + errbuffer[iban] + ". " ;
      }
    }
  }else if (errbuffer.length == 1){
    // Only one required field is missing
    errmsg += "Please choose a banner for your " + errbuffer[0] + " website. ";
  }
  
  errbuffer.length = 0;
  
  if (typevalue == ""){
      // No site type selected
      errmsg += "Please select the type of website to be created. ";
  }
  
  typevalue = "";
  //alert("Submittal processing complete.");
  // Report errors, or submit form
  if (errmsg == "") {
    // Comment the next two lines, uncomment "return true;" for live use
    // alert("errmsg is a null string");
    // return false;
    return true;
  }else{
    alert(errmsg);
    return false;
  }
}

function objhasvalue(objid) {
    theobj = document.getElementById(objid) ;
    // alert("theobj.id == " + theobj.id + ", theobj.type == " + theobj.type + ". ")
    switch (theobj.type){
      case "text": 
        if(theobj.value == "") {
          return false;
        }else{
          return true;
        }
      break;
      
      case "checkbox": case "radio":
        // Assume single check for now
        // alert("objid == " + objid + ", theobj.type == "+ theobj.type + ", theobj.name == " + theobj.name);
        var objsbyname = document.getElementsByName(theobj.name);
        // alert("theobj.name == " + theobj.name + "objsbyname.length == " + objsbyname.length);
        for (var i = 0; i < objsbyname.length; i++) {
          if ((objsbyname[i].checked == true)&&(objsbyname[i].value != "")){
            // alert("i == " + i + ", objsbyname[i].value == " + objsbyname[i].value);
            return true;
          }
        }
        
        // If no valid box checked, return false
        return false;
      break;
      
      case "select-one": case "select-multiple":
        for(var j = 0; j < theobj.length; j++){
          if ((theobj.options[j].selected)&&(theobj.options[j].value != "")){
            return true;
          }
        }
        // If no valid option selected, return false
        return false;

      break;
      
      default:
        return false;
      break;
    }
}

function getselectedvalue(selectobjid) {
  // Returns value of selected option
  // Assumes multiple select is not enabled
  var selectobj = document.getElementById(selectobjid);
  for (var j = 0; j < selectobj.length; j++) {
    if (selectobj[j].selected == true){
      return selectobj[j].value;
    }
  }
  // Otherwise, return empty string
  return "";
}


function getradiovalue(radioobjname) {
  // Returns value of checked radio
  // Note use of radio name versus id
  var radioobjsname = document.getElementsByName(radioobjname);
  for (var j = 0; j < radioobjsname.length; j++) {
    if (radioobjsname[j].checked == true){
      // alert("radioobjname == " + radioobjname + ", radioobjsname[j].value == " + radioobjsname[j].value);
      return radioobjsname[j].value;
    }
  }
  // Otherwise, return empty string
  return "";
}

function getElementsByClass(searchClass,node,tag) {
	// Created by Dustin Diaz, August 12th, 2005
	// http://www.dustindiaz.com/getelementsbyclass/
	// Copied for use here on April 10, 2008
	
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	// var pattern = new RegExp("(^|\\\\s)"+searchClass+"(\\\\s|$)");
	var pattern = new RegExp("\\b"+searchClass);
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function getContainerByClass(searchClass,node) {
	// Starting from "node", travel up the DOM tree to find a parent with a CSS style class 
	// that matches "searchClass". Return the parent node, or null if unsuccessful.
	if ((node == null)||(searchClass == null)) return null;
	
	var pattern = new RegExp("\\b"+searchClass);
	
	if(node == document) {
		return null;
	}else if (pattern.test(node.parentNode.className)) {
		return node.parentNode ;
	}else{
		return getContainerByClass(searchClass,node.parentNode) ;
	}
}

function toggleDisplay(checkboxobj) {
	var siteselblockobj = getContainerByClass("siteselblock", checkboxobj);
	if (siteselblockobj != null) {
		var sitetype = siteselblockobj.id.slice(5);
	}
	
	if ((checkboxobj.checked)&&(siteselblockobj != null)) {
		// Show banner select box and checkboxes
		document.getElementById("banner" + sitetype).style.display = neObject.store_display_settings["banner" + sitetype];
		document.getElementById("checkboxes" + sitetype).style.display = neObject.store_display_settings["checkboxes" + sitetype];
		if (getradiovalue("new_exists_" + sitetype) != "") {
			var radioobjsname = document.getElementsByName("new_exists_" + sitetype);
			for (var j = 0; j < radioobjsname.length; j++) {
				if ((radioobjsname[j].checked == true)&&(radioobjsname[j].value == "existing")){
					toggleNewExists(radioobjsname[j]);
				}
			}
		}
	}else{
		// Hide banner select box and checkboxes and secondrow and thirdrow
		document.getElementById("banner" + sitetype).style.display = "none" ;
		document.getElementById("checkboxes" + sitetype).style.display = "none" ;
		document.getElementById("secondrow" + sitetype).style.display = "none" ;
		document.getElementById("thirdrow" + sitetype).style.display = "none" ;
		siteselblockobj.style.height = "auto";
		if(sitetype == "other"){
			document.getElementById("othernewnote").style.display = "none" ;
		}
	}
}

function toggleNewExists(newexistscheckboxobj){
	// newexistscheckboxobj.value is either "new" (display "none") or 
	// "existing" (display second and third rows)
	var sitetype = newexistscheckboxobj.id.slice(11);
	switch (newexistscheckboxobj.value) {
		case "existing":
		// Show second and third rows
			if(sitetype == "other"){
				document.getElementById("othernewnote").style.display = "none" ;
			}
			document.getElementById("block" + sitetype).style.height =  neObject.store_heights["block" + sitetype];
			document.getElementById("secondrow" + sitetype).style.display = neObject.store_display_settings["secondrow" + sitetype] ;
			document.getElementById("thirdrow" + sitetype).style.display = neObject.store_display_settings["thirdrow" + sitetype] ;
		break;
		
		case "new":
		// Hide second and third rows
			document.getElementById("secondrow" + sitetype).style.display = "none" ;
			document.getElementById("thirdrow" + sitetype).style.display = "none" ;
			if(sitetype == "other"){
				document.getElementById("othernewnote").style.display = neObject.store_display_settings["othernewnote"] ;
			}
			document.getElementById("block" + sitetype).style.height = "auto";
		break;
		
		default:
		
		break;
	}
}

function toggleAccountHolder(accountholderradioobj){
	// accountholderradioobj.value is either "Yes" (display "none" for note) or 
	// "No" (display "auto" for note)
	var sitetype = accountholderradioobj.id.slice(13);
	var othershowing = false ;
	// alert("accountholderradioobj.value == " + accountholderradioobj.value);
	switch (accountholderradioobj.value) {
		case "No":
			// display "auto" for note
			if (document.getElementById("accountholderpara").style.display == "none") {
				document.getElementById("accountholderpara").style.display = neObject.store_display_settings["accountholderpara"];
			}
			neObject.showing_accountholdernote[sitetype] = true ;
			//alert("No : neObject.showing_accountholdernote[" + sitetype + "] = true");
		break;
		
		case "Yes":
			// display "none" for note
			// BUT - do not erase if any other site selection needs to show the note
			for (var ahs in neObject.showing_accountholdernote) {
				//alert("Yes: ahs == " + ahs);
				if ((ahs != sitetype)&&(neObject.showing_accountholdernote[ahs])) {
					othershowing = true;
					break;
				}
			}
			//alert("Yes: othershowing == " + (othershowing?"true":"false"));
			if (!othershowing) {
				document.getElementById("accountholderpara").style.display = "none";
			}
			neObject.showing_accountholdernote[sitetype] = false ;
		break;
		
		default:
		
		break;
	}
}

function newExistsObjects() {
	this.store_display_settings = new Array();
	this.site_select_blocks = new Array();
	this.banner_selects = new Array();
	this.ne_checkboxes_array = new Array();
	this.second_rows = new Array();
	this.third_rows = new Array();
	this.store_heights = new Array();
	this.showing_accountholdernote = new Array();
}

function initOUSignup(){
	// Used to initialize the page.
	
	var checkedsites = new Array();
	
	// Hide dependent form fields
	// Find all fields with CSS class "new_exists_child"
	//var new_exists_children = getElementsByClass("new_exists_child",document.getElementById("training"),null);
	//var store_display_settings = [];

	neObject.site_select_blocks = getElementsByClass("siteselblock",document.getElementById("training"),null);
	
	neObject.banner_selects = getElementsByClass("bannersel",document.getElementById("training"),null);
	neObject.ne_checkboxes_array = getElementsByClass("new_exists_checkboxes",document.getElementById("training"),null);
	neObject.second_rows = getElementsByClass("secondrow",document.getElementById("training"),null);
	neObject.third_rows = getElementsByClass("thirdrow",document.getElementById("training"),null);
	// alert("new_exists_children.length == " + new_exists_children.length);
	// tempstring += "i == " + i + ", new_exists_children[i].id == " + new_exists_children[i].id + ", new_exists_children[i].className == " + new_exists_children[i].className + ". ";

	neObject.store_display_settings["othernewnote"] = document.getElementById("othernewnote").style.display ;
	document.getElementById("othernewnote").style.display = "none";

	for (var i = 0; i < neObject.second_rows.length; i++) {
		neObject.store_display_settings[neObject.second_rows[i].id] = neObject.second_rows[i].style.display;
		neObject.second_rows[i].style.display = "none";
	}

	for (var j = 0; j < neObject.third_rows.length; j++) {
		neObject.store_display_settings[neObject.third_rows[j].id] = neObject.third_rows[j].style.display;
		neObject.third_rows[j].style.display = "none";
	}

	for (var m = 0; m < neObject.banner_selects.length; m++) {
		neObject.store_display_settings[neObject.banner_selects[m].id] = neObject.banner_selects[m].style.display;
		neObject.banner_selects[m].style.display = "none";
	}

	for (var k = 0; k < neObject.ne_checkboxes_array.length; k++) {
		neObject.store_display_settings[neObject.ne_checkboxes_array[k].id] = neObject.ne_checkboxes_array[k].style.display;
		neObject.ne_checkboxes_array[k].style.display = "none";
	}

	// alert(tempstring);
	for (var l = 0; l < neObject.site_select_blocks.length; l++) {
		neObject.store_heights[neObject.site_select_blocks[l].id] = neObject.site_select_blocks[l].style.height ;
		neObject.site_select_blocks[l].style.height = "auto";
		if (objhasvalue(neObject.site_select_blocks[l].id)) {
			checkedsites.push(neObject.site_select_blocks[l].id) ;
		}
	}
	neObject.store_display_settings["accountholderpara"] = document.getElementById("accountholderpara").style.display ;
	document.getElementById("accountholderpara").style.display = "none" ;

}
