window.onload = initiate;
var currentPage = "home 0";
var nowPlaying = "nothing";
var photoShowing = false;

var hintArry = ["- David Hines - Jazz Fusion Bassist &amp; Composer -",
								"- Listen to David&rsquo;s Albums -",
								"- Brief Biography -",
								"- Reviews, Past &amp; Present -",
								"- The Band Members -",
								"- Music, Friends and Family -",
								"- Contact David Hines -"];

 /********************/
/* INITIATE WEBSITE */
function initiate() {
	var request = createRequest();
	if (request == null) {
		alert("Unable to create request");
		return;
	}
	request.onreadystatechange = showPage;
	request.open("GET", "home.htm", true);
	request.send(null);
	
	var mainBtnsDiv = document.getElementById("mainButtons");
	addEventHandler(mainBtnsDiv, "click", mainBtnsClick);
	addEventHandler(mainBtnsDiv, "mouseover", mainBtnsOver);
	addEventHandler(mainBtnsDiv, "mouseout", mainBtnsOut);
	
	var hintDiv = document.getElementById("hintDiv");
	hintDiv.innerHTML = "<h3>David Hines - Jazz Fusion Bassist &amp; Composer</h3>";
	}

 /************************/
/* INITIATE PAGE SWITCH */
function initiatePage() {
	switch (currentPage) {
	     
		 /********/
		/* HOME */
		case "home 0":
			var homeDiv = document.getElementById("homeDiv").getElementsByTagName("form");
			for (var i=0; i<homeDiv.length; i++) {
				var f = homeDiv.item(i);
				addEventHandler(f, "mouseover", linkOver);
				addEventHandler(f, "mouseout", linkOut);
			}
		break;
		
		 /***************/
		/* DISCOGRAPHY */
		case "discography 1":
			// set all button roll overs and clicks 
			var discoDiv = document.getElementById("discoDiv").getElementsByTagName("a");
			for (var i=0; i<discoDiv.length; i++) {
				var a = discoDiv.item(i);
				addEventHandler(a, "mouseover", linkOver);
				addEventHandler(a, "mouseout", linkOut);
				addEventHandler(a, "click", playSong);
				//check if song is playing and highlight
				if (a.name == nowPlaying) {
					a.className = "selected";
				}
			}
			
			var discoDiv = document.getElementById("discoDiv").getElementsByTagName("form");
			for (var i=0; i<discoDiv.length; i++) {
				var f = discoDiv.item(i);
				addEventHandler(f, "mouseover", linkOver);
				addEventHandler(f, "mouseout", linkOut);
			}
		
		 /*************/
		/* BIOGRAPHY */
		case "biography 2":
		break;
		
		 /***********/
		/* REVIEWS */
		case "reviews 3":
		break;
		
		 /********/
		/* BAND */
		case "band 4":
		break;
		
		 /*********/
		/* LINKS */
		case "links 5":
			var linksDiv = document.getElementById("links");	
			addEventHandler(linksDiv, "mouseover", linkOver);
			addEventHandler(linksDiv, "mouseout", linkOut);
		break;
		
		 /***********/
		/* CONTACT */
		case "contact 6":
		  addEventHandler(document.getElementById("name"), "blur", fieldIsFilled);
		  addEventHandler(document.getElementById("name"), "blur", fieldIsLetters);		  
		  addEventHandler(document.getElementById("email"), "blur", emailIsProper);
		  addEventHandler(document.getElementById("email"), "blur", fieldIsFilled);
		  addEventHandler(document.getElementById("message"), "blur", fieldIsFilled);
		break;

		default:
		//do nothing
		break;	
	}		
}

 /**********************/
/* LINKS OVER AND OUT */
function linkOver(e) {
	var me = getActivatedObject(e);
	if (me.className != "selected") {
		me.className = "hover";
	}
}
function linkOut(e) {
	var me = getActivatedObject(e);
	if (me.className != "selected") {
		me.className = "";
	}
}

 /*********************/
/* MAIN BUTTON CLICK */
function mainBtnsClick(e) { 
	var me = getActivatedObject(e);
	var selectedPage = me.name;	
		
	var mainBtns = document.getElementById("mainButtons").getElementsByTagName("a");
	for (var i=0; i < mainBtns.length; i++) { 
		var currentBtn = mainBtns[i];
		if (currentBtn.name == selectedPage) {
			currentBtn.className = 'selected';
			currentBtn.blur();
			/* Set Global Current Page variable */
			currentPage = currentBtn.name;
		} else {
			currentBtn.className = '';
			currentBtn.blur();
		}
	}
	
	var selectedPage = selectedPage.split(" ");
	var request = createRequest();
		if (request == null) {
			alert("Unable to create request");
			return;
		}
		request.onreadystatechange = showPage;
		request.open("GET", selectedPage[0] + ".htm", true);
		request.send(null);
	}

function showPage(e) {
  if (request.readyState == 4) {
    if (request.status == 200) {
    	document.getElementById("content").innerHTML = request.responseText;
	  	initiatePage();   
		}
  }
}

 /*********************/
/* MAIN BUTTONS OVER */
function mainBtnsOver(e) {
	var me = getActivatedObject(e);
	var btn = me.name.split(" ");
	//var btnName = btn[0];
	var btnNum = btn[1];
		if(me.className != "selected") {
			me.className = "hover";
			var hintDiv = document.getElementById("hintDiv");
			hintDiv.innerHTML = "<h3>" + hintArry[btnNum] + "</h3>";		
		}
	}

 /********************/
/* MAIN BUTTONS OUT */
function mainBtnsOut(e) {
	var me = getActivatedObject(e);
	var curBtn = currentPage.split(" ");
	var curNum = curBtn[1];
		if (me.className != "selected") {
			me.className = "";
			var hintDiv = document.getElementById("hintDiv");
			hintDiv.innerHTML = "<h3>" + hintArry[curNum] + "</h3>";
		}
	}

 /*********************************/
/* MP3 PLAYER / DISCOGRAPHY PAGE */
function playSong(e) {
	
	//alert("inside play song");
	var me = getActivatedObject(e);
	var songSelected = me.name;
	nowPlaying = songSelected;
	
	//update links so selected gets a color change
	var songBtns = document.getElementById("discoDiv").getElementsByTagName("a");
	for (var i=0; i < songBtns.length; i++) { 
		var a = songBtns[i];
		if (a.name == songSelected && a.id == "songBtn") {
			a.className = "selected";
			a.blur();
		} else {
			a.className = "";
			a.blur();
		}
	}
	var request = createRequest();
	if (request == null) {
		alert("Unable to create request");
		return;
	}
	request.onreadystatechange = playSongCheck;
	request.open("GET", "audio/htm/" + songSelected + ".htm", true);
	request.send(null);	
}

function playSongCheck(e) {
  if (request.readyState == 4) {
    if (request.status == 200) {
      document.getElementById("player").innerHTML = request.responseText;	  
	  document.getElementById("nowPlaying").innerHTML = "Now Playing: " + nowPlaying.replace(/_/g, " ");
	}
  }
}

 /*****************/
/* PHOTO GALLERY */
function photoClick(e) {
	//alert("click!");
	if (photoShowing != true) {
		var me = getActivatedObject(e);
		var photoSrc = me.src;
		var lastSlash = photoSrc.lastIndexOf("/");
		var photoSrc = photoSrc.slice(lastSlash);
		var photoSrc = photoSrc.replace("jpg", "htm");
		var selPhoto = photoSrc;
		//alert(selPhoto);
		
		var request = createRequest();
		if (request == null) {
			alert("Unable to create request");
			return;
		}
		request.onreadystatechange = showPhoto;
		request.open("GET", "photos/htm" + selPhoto, true);
		request.send(null);
	}
	else {
		var request = createRequest();
		if (request == null) {
			alert("Unable to create request");
			return;
		}		
		request.onreadystatechange = showPage;
		request.open("GET", "photos.htm", true);
		request.send(null);
	}
}

function showPhoto(e) {
  if (request.readyState == 4) {
    if (request.status == 200) {
	  //alert("showPhoto!");
      document.getElementById("galleryDiv").innerHTML = request.responseText;
	  photoShowing = true;
	}
  }
}

 /***************************/
/* CONTACT FORM VALIDATION */
var warnings = {
  "name" : {
    "required": "*** Please enter in a name.",
    "letters" : "*** Only letters are allowed in your name.",
    "err"     : 0
  },
  "song" : {
    "required": "*** Please select a favorite song.",
    "err"     : 0
  },
  "email" : {
    "required": "*** Please enter in your e-mail address.",
    "format" : "*** Please enter your e-mail in the form 'name@domain.com'.",
    "err"     : 0
  },
  "message" : {
    "required": "*** Please type in a message.",
    "err"     : 0
  }
}

 /**************************/
/* CONTACT FORM UTILITIES */
function fieldIsFilled(e) {
  var me = getActivatedObject(e);
  if (me.value == "") {
    warn(me, "required"); 
  } else {
    unwarn(me, "required");
  }
}

function emailIsProper(e) {
  var me = getActivatedObject(e);
  if (!/^[\w\.-_\+]+@[\w-]+(\.\w{2,4})+$/.test(me.value)) {
    warn(me, "format");
  } else {
    unwarn(me, "format");
  }
}

function fieldIsLetters(e) {
  var me = getActivatedObject(e);
  var nonAlphaChars = /[^a-zA-Z]/;
  if (nonAlphaChars.test(me.value)) {
    warn(me, "letters");
  } else {
    unwarn(me, "letters");
  }
}

function fieldIsNumbers(e) {
  var me = getActivatedObject(e);
  var nonNumericChars = /[^0-9]/;
  if (nonNumericChars.test(me.value)) {
    warn(me, "numbers");
  } else {
    unwarn(me, "numbers");
  }
}

function checkAllFields(divID) {
  //select all fieldsets within "formWrap" div
  var fieldsets = document.getElementById(divID).getElementsByTagName("fieldset");
  // iterate through all fieldsets
  for(var i=0; i<=fieldsets.length; i++) {
	var curinput = fieldsets[i].getElementsByTagName("input");
	alert(curinput.value);	
  }
  return true;

  /*for(var i=0; i<=fields.length; i++){
	var curfield = fields[i];
	if(curfield.value == "" || curfield.value == null)
	  return false;
	  break;
  }
  //check for empty textareas
  var fields = document.getElementById(divID).getElementsByTagName("textarea");
  for(var i=0; i<=fields.length; i++){
	var curfield = fields[i];
	if(curfield.value == "" || curfield.value == null) 
	  return false;
	  break;
  }  
  return true;*/
}

 /****************/
/* WARN MESSAGE */
function warn(field, warningType) {
  //set parentNode var to parent of warned field "<fieldset>"
  var parentNode = field.parentNode;
  //set warning message
  var warning = eval('warnings.' + field.id + '.' + warningType);
  //if there are no <p> tags append one and display proper warning
  if (parentNode.getElementsByTagName('p').length == 0) {
    var p = document.createElement('p');
    field.parentNode.appendChild(p);
    var warningNode = document.createTextNode(warning);
    p.appendChild(warningNode);
  }
  //else simply input text into existing <p> tag
  else {
    var p = parentNode.getElementsByTagName('p')[0];
    p.childNodes[0].nodeValue = warning;
  }
  //disable the submit button
  var submitBtn = document.getElementById("submit");
  submitBtn.disabled = true;
  submitBtn.className = "disabled";
}

 /******************/
/* UNWARN MESSAGE */
function unwarn(field, warningType) {
  //set parentNode var to parent of unwarned field "<fieldset>"
  var parentNode = field.parentNode;
  // if <p> tags exist 
  if (parentNode.getElementsByTagName("p").length > 0) {
	// select <p> tags warning string
    var p = parentNode.getElementsByTagName("p")[0];
    var currentWarning = p.childNodes[0].nodeValue;
	var warning = eval('warnings.' + field.id + '.' + warningType);
	// if the current warning string is equal
	// to the the new warning then remove it
	if (currentWarning == warning) parentNode.removeChild(p);
  }
  // select all <fieldset> tags within the formWrap div
  var fieldsets = document.getElementById("formWrap").getElementsByTagName("fieldset");
  // iterate through <fieldset> tags
  for (var i=0; i<fieldsets.length; i++) {
    // set fieldWarnings var to number of <p> tags inside <fieldset>
	var fieldWarnings = fieldsets[i].getElementsByTagName("p").length;
	// if <p>warnings</p> exist disable submit and return
    if (fieldWarnings > 0) {
	  // disable submit button
	  var submitBtn = document.getElementById("submit");
	  submitBtn.disabled = true;
	  submitBtn.className = "disabled";
	  return;
    }
  }
  
  if(checkAllFields("formWrap")){
	//enable submit button
	var submitBtn = document.getElementById("submit");
	submitBtn.disabled = false;
	submitBtn.className = "";
	addEventHandler(submitBtn, "click", msgDave);
  }  
}

 /**************************/
/* CREATE MESSAGE REQUEST */
function msgDave() {
  msgRequest = createRequest();
  if (msgRequest == null) {
    alert("Unable to create request.");
  } else {
	var url = "contact.php";
    var requestData = "name=" +
      escape(document.getElementById("name").value) + "&email=" +
      escape(document.getElementById("email").value) + "&song=" +
      escape(document.getElementById("song").value) + "&message=" +
      escape(document.getElementById("message").value) + "&submit=" +
			escape(document.getElementById("submit").value);
			msgRequest.onreadystatechange = msgSent;
			msgRequest.open("POST", url, true);
			msgRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			msgRequest.send(requestData);
  }
}

 /**************************/
/* HANDLE SERVER RESPONSE */
function msgSent() {
  var submitBtn = document.getElementById("submit");
  submitBtn.value = "Sending...";
  submitBtn.disabled = true;
  submitBtn.className = "disabled";
  if (msgRequest.readyState == 4) {
    if (msgRequest.status == 200) {
		//alert(msgRequest.responseText);
		window.scroll(0,0);
	  if (msgRequest.responseText == "success") {
	    document.getElementById("content").innerHTML = "<h1>Thank you! Your message has been sent.</h1>";
	  } else {
		document.getElementById("content").innerHTML = "<h1>There was a problem sending your message. Please refresh your browser and try again.</h1>";
	  }
    }
  }
}
