/*
Title: all scripts for interaction effects, Icosystem Babyname application
Author: 
	Maggie Costello, Filament Group, maggie@filamentgroup.com
	Scott Jehl, Filament Group, scott@filamentgroup.com
Date: May 07
Notes: The following scripts are based on the Mootools library, mootools.v1.00.js (http://www.mootools.net/)
*/

var useFav = false;
var useBlo = false;

// Global variables for inserting markup or text:

var defaultInspirationMssg = '<li class="default">Click <img src="images/icon_star_intro.gif" style="vertical-align: bottom;" alt="" border="0">s to choose names you like below, or type your own choices. Then click \'Find Names\' to let Nymbler start finding names for you.</li>';

var defaultFavoriteMssg = '<li class="default">Click the <img src="images/icon_favorite_off.gif" alt="" border="0"> to keep names here that you love and might want to share.</li>';

var defaultBlockedMssg = '<li class="default">Click the <img src="images/icon_block_off.gif" alt="" border="0"> to keep names here that you don\'t want to see in your suggestions any more.</li>';

var nextInspText = '<a href="name_info.php?info1=nameplaceholder&gender1=genderplaceholder" class="infoLink" title="Name info"><h3>nameplaceholder</h3></a><input name="ins_genderplaceholder_nameplaceholder" id="liked_genderplaceholder_nameplaceholder" value="true" class="likeCheck" type="checkbox" checked="checked"><label class="likeLabel" for="liked_genderplaceholder_nameplaceholder" title="Keep in Inspirations">Keep in Inspirations</label><input name="fav_genderplaceholder_nameplaceholder" class="favCheck" id="liked_fav_genderplaceholder_nameplaceholder" value="true" type="checkbox"><label class="favLabel" for="liked_fav_genderplaceholder_nameplaceholder" title="Add to My Favorites">Add to My Favorites</label><a href="javascript://" class="removeLink" title="Remove">Remove</a>';

var nextFavText = '<a href="name_info.php?info1=nameplaceholder&gender1=genderplaceholder" class="infoLink" title="Name info"><h3>nameplaceholder</h3></a><a href="javascript://" class="removeLink" title="Remove">Remove</a><input name="ins_genderplaceholder_nameplaceholder" id="fav_ins_genderplaceholder_nameplaceholder" value="true" class="likeCheck" type="checkbox"><label class="favLikeLabel" for="fav_ins_genderplaceholder_nameplaceholder" title="Add to Inspirations">Add to Inspirations</label><input name="fav_genderplaceholder_nameplaceholder" class="favCheck" id="fav_genderplaceholder_Renee" value="true" type="checkbox" checked="checked"><label class="favLabel" for="fav_genderplaceholder_nameplaceholder" title="Keep in My Favorites">Keep in My Favorites</label>';

var nextBloText = '<a href="name_info.php?info1=nameplaceholder&gender1=genderplaceholder" class="infoLink" title="Name info"><h3>nameplaceholder</h3></a><a href="javascript://" class="removeLink" title="Remove">Remove</a><input name="blo_genderplaceholder_nameplaceholder" class="bloCheck" id="blo_genderplaceholder_nameplaceholder" value="true" type="checkbox" checked="checked"><label class="bloLabel" for="fav_genderplaceholder_nameplaceholder" title="Keep in My Blocked Names">Keep in My Blocked Names</label>';

var removeAllInsMssg = 'Remove all names from Inspirations?';
var removeAllFavsMssg = 'Remove all names from My Favorites?';
var removeAllBloMssg = 'Remove all names from My Blocked Names?';

var removeAllInsLnk = 'Clear Inspirations';
var removeAllFavsLink = 'Clear My Favorites';
var removeAllBloLink = 'Clear My Blocked Names';


var addNameLinkText = 'Add a Name';
var printLinkText = 'Print';

var emailMsg = '<p>Here are my favorite baby names from Nymbler at Early Learning:</p>';

var leavingPageText = "If you leave this page you will lose all Inspirations and Favorite names.";
var mssg_takingTooLong = '<p id="takeTooLong">Taking too long? Click "Find Names" again.</p>';

var selectBoyOrGirl = 'Please select the gender the name is intended for.';
var enterAName = 'Please enter the name you want to add.';

// doNotShowMaxPopup tracks whether or not the user is warned when they exceed 6 inspirations
// they are warned by default; if true, the warning popup doesn't appear
var doNotShowMaxPopup = false;

function beforeExit(){	
	if ($('babyNameForm'))
	{
		createCookie("nymbler-cookie", $('babyNameForm').toQueryString(), 365);
	}
	else
	{
		//
	}
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function duplicateInspiration(item){
	if (item) {
		var item = item;
		var thisId = getBaseId($E('input',item).id);		
		var inspBox = $('inspDropBox');
		var inspInputs = $ES('input',inspBox);
		var inspIds = new Array();
		var dupe;		
		inspInputs.each(function(input){
			var inputParent = input.parentNode;
			if ($E('input',inputParent) == input) {
				var n = getBaseId(input.id);
				inspIds.extend([n]);
			}			
		});		
		if (inspIds.test(thisId)){ dupe = true; }
		else { dupe = false; }
		return dupe;
	}
}

// IE cannot retrieve the list item's contents, so we must explicity pass in the <h3> content
// parameters are: list item (item), list items h3's inner html (optHeader)
function checkInspirations(item,optHeader){
	if (item){
		// if the name isn't already in inspirations, proceed
		if (!duplicateInspiration(item)){
		
			var dropBox = $('inspDropBox');
			var dropBoxCount = $ES('h3',dropBox).length;
			
			if (dropBoxCount > 5) {		
				if (doNotShowMaxPopup) {
					addToInspiration(item,optHeader);		
				}
				else{
					var myAjax = new Ajax('includes/maxNameWarning.inc', {method: 'get', onComplete:
						function (request){
							$('extrasDiv').setHTML(request);
							showPopupScreen();
							var okayBtn = $('maxOkay');
							var cancelBtn = $('maxCancel');
							okayBtn.onclick = function(){
								addToInspiration(item,optHeader);
								doNotShowMaxPopup = true;
								removePopup();
								return false;
							}
							cancelBtn.onclick = function(){
								removePopup();
								return false;
							}						
						}
						}).request();
				}
			}
			else {
				addToInspiration(item,optHeader);
			}
		}
		// if the name is in inspirations, close any open popups (like addName)
		else {
			if(!$('namePopup')) removePopup();
		}
	}	
}

function addToInspiration(item,optHeader){  // optHeader = optional parameter set for IE, which only passes the element and not its content
	if (item) {
		
		if ($('addName')) { removePopup(); }
		
		var item = item;
		var dropBox = $('inspDropBox');
		var dropBoxNames = $ES('li',dropBox);
		var firstName = dropBox.getFirst();
		var lastName = dropBox.getLast();		
		var dropBoxCount = $ES('h3',dropBox).length;
		
		var gender, genderValue;		
		if (item.hasClass('female')) {
			gender = 'female';
			genderValue = 'f';
		}
		else {
			gender = 'male';
			genderValue = 'm';
		}
		
		var fakeGender = 'genderplaceholder';
		var genderHolderText = new RegExp(fakeGender, 'g');
		var nextInspContent = nextInspText.replace(genderHolderText, genderValue);
		var nameValue;
		
		if (!optHeader) { nameValue = $E('h3',item).innerHTML; }
		else { nameValue = optHeader}
			
		var fakeName = 'nameplaceholder';
		var nameHolderText = new RegExp(fakeName, 'g');		
		nextInspContent = nextInspContent.replace(nameHolderText, nameValue);		
		
		if (!item.hasClass('likedOn')) {
			item.addClass('likedOn');
			
			var newLi = document.createElement('li');
			dropBox.insertBefore(newLi,firstName);
			
			newLi.innerHTML = nextInspContent;
			addNewClass(newLi,gender);
			
			var inspFx = new Fx.Style(newLi, 'width', {duration:500});
			inspFx.start(0,136).addEvent('onComplete',function(){
				$E('label.favLabel',newLi).removeClass('hideFirst');
				// TODO ??? $E('a.infoLink',newLi).removeClass('hideFirst');
			});
			
			if (lastName == $E('li.default',dropBox)) { lastName.remove(); }
			
			// if more than x exist, delete it
			if (dropBoxCount > 5) {
				lastName.remove();				
			}
					
			// if the 'remove all' link is not there, write it in
			if (!$('removeAllInsp')) {
				createRemoveAllInsp();
			}
			
			updateClasses();
			assignLabelEvents(dropBox);
			assignLinkEvents(dropBox);		
		}
	}
}

function addToFavorites(item) {
	if (item) {
		
		var item = item;
		var favsList = $('favoritesList');
		var firstFav = favsList.getFirst();
		var lastFav = favsList.getLast();
		
		var gender, genderValue;		
		if (item.hasClass('female')) {
			gender = 'female';
			genderValue = 'f';
		}
		else {
			gender = 'male';
			genderValue = 'm';
		}
		
		var fakeGender = 'genderplaceholder';
		var genderHolderText = new RegExp(fakeGender, 'g');
		var nextFavContent = nextFavText.replace(genderHolderText, genderValue);
		
		var nameValue = $E('h3',item).innerHTML;		
		var fakeName = 'nameplaceholder';
		var nameHolderText = new RegExp(fakeName, 'g');
		nextFavContent = nextFavContent.replace(nameHolderText, nameValue);
		
		if (!item.hasClass('favsOn')) {
			item.addClass('favsOn');
					
			var newLi = document.createElement('li');
			favsList.insertBefore(newLi,firstFav);
			
			newLi.innerHTML = nextFavContent;
			addNewClass(newLi,gender);
			
			if (lastFav == $E('li.default',favsList)) { lastFav.remove(); }		
		
			// if the 'remove all' link is not there, write it in
			if (!$('removeAllFavs')) {
				createRemoveAllFavs();				
			}			
			updateClasses();
			assignLabelEvents(favsList);
			assignLinkEvents(favsList);
		}
	}
}

function updateClasses() {
	var allInputs = $$('input');

	var favInputs = $ES('input','favoritesList');
	var favInputIds = new Array();

	var bloInputs = $ES('input','blockedList');
	var bloInputIds = new Array();

	var inspInputs = $ES('input','inspDropBox');
	var inspInputIds = new Array();

	// create an array of the favorites' base ids (g_name)
	favInputs.each(function(fav){
		var favParent = fav.parentNode;
		if ($E('input',favParent) == fav) {
			var f = fav.id;
			var newId = getBaseId(f);			
			favInputIds.extend([newId]);
		}
	});
	
	// create an array of the blocked' base ids (g_name)
	bloInputs.each(function(blo){
		var bloParent = blo.parentNode;
		if ($E('input',bloParent) == blo) {
			var f = blo.id;
			var newId = getBaseId(f);			
			bloInputIds.extend([newId]);
		}
	});
	
	// create an array of the inspirations' base ids (g_name)
	inspInputs.each(function(liked){		
		var likedParent = liked.parentNode;
		if ($E('input',likedParent) == liked) {
			var l = liked.id;
			var newId = getBaseId(l);			
			inspInputIds.extend([newId]);
		}		
	});
	
	allInputs.each(function(all){
		var allParent = all.parentNode;
		if ($E('input',allParent) == all) {			
			var newAllId = getBaseId(all.id);			
			allParent.removeClass('favsOn');
			allParent.removeClass('blosOn');
			allParent.removeClass('likedOn');		
			if (favInputIds.test(newAllId)){				
				if (!allParent.hasClass('favsOn')){					
					allParent.addClass('favsOn');
				}
			}
			if (bloInputIds.test(newAllId)){				
				if (!allParent.hasClass('blosOn')){					
					allParent.addClass('blosOn');
				}
			}			
			if (inspInputIds.test(newAllId)){				
				if (!allParent.hasClass('likedOn')){
					allParent.addClass('likedOn');					
				}
			}
		}		
	});
}

function clearAllInspirations() {	
	var allItems = $ES('li','inspDropBox');
	var removeAllLink = $('removeAllInsp');
	
	if (window.confirm(removeAllInsMssg)) {	
		if ( allItems.length > 0) {		
			writeDefaultInspiration();
			removeAllLink.remove();
		}				
		updateClasses();
	}
}

function clearAllBlocked() {	
	var allItems = $ES('li','blockedList');
	var removeAllLink = $('removeAllBlocked');
	
	if (window.confirm(removeAllBloMssg)) {	
		if ( allItems.length > 0) {		
			writeDefaultBlocked();
			removeAllLink.remove();
		}				
		updateClasses();
	}
}

function clearAllFavorites() {	
	var allItems = $ES('li','favoritesList');
	var removeAllLink = $('removeAllFavs');
	
	if (window.confirm(removeAllFavsMssg)) {	
		if ( allItems.length > 0) {		
			writeDefaultFavorite();
			removeAllLink.remove();
		}				
		updateClasses();
	}
}

function writeDefaultInspiration() {
	if ($('inspDropBox')){
		$('inspDropBox').innerHTML = defaultInspirationMssg;
	}
}

function writeDefaultBlocked() {
	if ($('blockedList')){
		$('blockedList').innerHTML = defaultBlockedMssg;
	}
}

function writeDefaultFavorite() {
	if ($('favoritesList')){
		$('favoritesList').innerHTML = defaultFavoriteMssg;
	}
}

function switchDefaultMessages(){
	if ($E('li.default', 'inspDropBox')) writeDefaultInspiration();
	if ($E('li.default', 'favoritesList')) writeDefaultFavorite();
	if ($E('li.default', 'blockedList')) writeDefaultBlocked();
}

function clearItem(lnk) {
	if (lnk) {
		var lnkLi = lnk.parentNode;
		var lnkUl = lnkLi.parentNode;
		var favs = $('favoritesList');
		var insp = $('inspDropBox');
		var blo = $('blockedList');
		var removeAllLink;
		
		if (!lnkLi.getPrevious() && !lnkLi.getNext()) {
			if (lnkUl == favs) {
				writeDefaultFavorite();
				removeAllLink = $('removeAllFavs');				
			}
			if (lnkUl == insp) {
				writeDefaultInspiration();
				removeAllLink = $('removeAllInsp');
			}
			if (lnkUl == blo) {
				writeDefaultBlocked();
				removeAllLink = $('removeAllBlocked');
			}
			removeAllLink.remove();
		}
		else {
			lnkLi.remove();
		}
		updateClasses();
	}
}

function createRemoveAllInsp() {
	var removeLink = new Element('a');
	removeLink.href = 'javascript://';
	removeLink.id = 'removeAllInsp';
	addNewClass(removeLink,'removeAllLink');
	$('primaryNames').appendChild(removeLink);
	removeLink.appendText(removeAllInsLnk);
	removeLink.onclick = function(){ clearAllInspirations(); return false;}
}

function createRemoveAllBlocked() {
	var removeLink = new Element('a');
	removeLink.href = 'javascript://';
	removeLink.id = 'removeAllBlocked';
	addNewClass(removeLink,'removeAllLink');
	if ($('blockedContainer'))
		$('blockedContainer').appendChild(removeLink);
	removeLink.appendText(removeAllBloLink);
	removeLink.onclick = function(){ clearAllBlocked(); return false;}
}

function createRemoveAllFavs() {
	var removeLink = new Element('a');
	removeLink.href = 'javascript://';
	removeLink.id = 'removeAllFavs';
	addNewClass(removeLink,'removeAllLink');
	if ($('favoritesContainer'))
		$('favoritesContainer').appendChild(removeLink);
	removeLink.appendText(removeAllFavsLink);				
	removeLink.onclick = function(){ clearAllFavorites(); return false;}
}

function createAddNameLink(){
	var addNameLink = new Element('a');
	addNameLink.id = 'addNameLink';
	addNameLink.href = 'javascript://';
	addNameLink.appendText(addNameLinkText);
	$('primaryNames').appendChild(addNameLink);
	addNameLink.onclick = function(){
		newAddNameBox();
		return false;
	}	
}

function createRemoveLinks(container){
	var c = $(container);
	var lis = $ES('li', c);
	for(i=0; i<lis.length; i++){
		if(lis[i].className == 'male' || lis[i].className == 'female'){
			var newA = new Element('a');
			newA.href="javascript://";
			newA.className = 'removeLink';
			newA.title = 'Remove';
			newA.appendText('Remove');
			if (c == $('favoritesList')) {
				var firstInput = $E('input',lis[i]);
				newA.injectBefore(firstInput);
			}
			else { lis[i].adopt(newA); }
		}
	}
}

function createPrintLink(){
	var addPrintLink = new Element('a');
	addPrintLink.id = 'printLink';
	addPrintLink.href = 'javascript://';
	addPrintLink.appendText(printLinkText);
	if ($('emailLink'))
		addPrintLink.injectBefore($('emailLink'));
	addPrintLink.setAttribute('title','Print My Favorites');
	addPrintLink.onclick = function(){
		$E('body').addClass('printFavorites');
		if (window.print()) { window.print(); }
		$E('body').removeClass('printFavorites');
		return false;
	}
}

//extras div to hold popups
function createExtrasDiv(){	
	var extrasDiv = new Element('div');
	extrasDiv.id = 'extrasDiv';
	$E('body').adopt(extrasDiv);
}

function setSuggestionInputs(){
	var allSuggestInputs = $ES('input','nameGrid');
	allSuggestInputs.each(function(si){		
		si.checked = false;
	});
}

//function to set up onsubmit events
function formEvents(){
	$('babyNameForm').onsubmit = function(){
		setSuggestionInputs();
		var formValues = this.toQueryString();
		sendData(formValues);
		var lis = $$('div#suggestions li');
		var fadeout = [];
		var timer = 0;
		for(i=0;i<lis.length;i++){
			timer += 5;
			if(i<lis.length-1){fadeout[i] = lis[i].effect('opacity', {transition: Fx.Transitions.sineOut});}
			else {fadeout[i] = lis[i].effect('opacity', {transition: Fx.Transitions.sineOut}); }
			fadeout[i].start.delay(timer, fadeout[i], 0);	
		}
		return false;
	}
}

function assignEmailValidation() {
	var senderEmail = $('sendFavsFrom');
	var recipEmail = $('sendFavsTo');
	var emailContainer = senderEmail.getParent();
	var errorDiv;
	
	senderEmail.onblur = function(){	
		// if an error message is showing, delete it
		if ($('senderEmailError')) {
			$('senderEmailError').remove();
		}
	
		if (senderEmail.value) {
			if (!checkmail(senderEmail.value)) {
				errorDiv = new Element('p');
				errorDiv.addClass('errorMssg');
				errorDiv.id = 'senderEmailError';
				errorDiv.appendText(senderEmail.value+' is not a valid email address.');
				emailContainer.insertBefore(errorDiv,senderEmail);
			}
		}
		else {
			errorDiv = new Element('p');
			errorDiv.addClass('errorMssg');
			errorDiv.id = 'senderEmailError';
			errorDiv.appendText('Please enter your email address.');
			emailContainer.insertBefore(errorDiv,senderEmail);
		}
		senderEmail.removeClass('focus');
	}
	
	recipEmail.onblur = function() {
		// if an error message is showing, delete it
		if ($('recipEmailError')) {
			$('recipEmailError').remove();
		}
				
		if (recipEmail.value == '') {
			errorDiv = new Element('p');
			errorDiv.addClass('errorMssg');
			errorDiv.id = 'recipEmailError';
			errorDiv.appendText('Please enter an email address.');
			emailContainer.insertBefore(errorDiv,recipEmail);
		}
		else {		
			var whitespace = ' ';
			var wsText = new RegExp(whitespace, 'g');
			var recipString = recipEmail.value.replace(wsText,'');
			var inputVals = recipString.split(',');
			var errorEmails = new Array();
			var errorsExist = false;
			inputVals.each(function(val){
				if (!checkmail(val)) {					
					errorEmails.extend([val]);
					errorsExist = true;
				}
			});
			if (errorsExist) {
				var newComma = ',';
				var ncText = new RegExp(newComma, 'g');
				var errorList = errorEmails.toString();
				var errString = errorList.replace(ncText,', ');			
				errorDiv = new Element('p');
				errorDiv.addClass('errorMssg');
				errorDiv.id = 'recipEmailError';
				errorDiv.appendText('The following email addresses are not valid: '+errString);
				emailContainer.insertBefore(errorDiv,recipEmail);
			}				
		}
		recipEmail.removeClass('focus');
	}
}

function assignPopupEvents(){
	assignLabelEvents('extrasDiv');	
	var closePopLink = $E('a.closePopLink', 'extrasDiv');
	closePopLink.onclick = function(){
		removePopup();
		return false;
	}
	
	// set hover states
	var submitNewName = $('newNameSubmit');
	submitNewName.onmouseover = function() {
		submitNewName.src = 'images/btn_popAddNameHover.gif';
	}
	submitNewName.onmouseout = function() {
		submitNewName.src = 'images/btn_popAddName.gif';
	}

	var submitNewEmail = $('newEmailSubmit');
	submitNewEmail.onmouseover = function() {
		submitNewEmail.src = 'images/btn_popSendEmailHover.gif';
	}
	submitNewEmail.onmouseout = function() {
		submitNewEmail.src = 'images/btn_popSendEmail.gif';
	}
	
	var submitNewNameEmail = $('newNameEmailSubmit');
	submitNewNameEmail.onmouseover = function() {
		submitNewNameEmail.src = 'images/btn_popSendEmailHover.gif';
	}
	submitNewNameEmail.onmouseout = function() {
		submitNewNameEmail.src = 'images/btn_popSendEmail.gif';
	}

	// assign focus and blur classes to text boxes
	var extrasDiv = $('extrasDiv');
	var childInputs = $ES('input', extrasDiv);
	var childTextAreas = $ES('textarea', extrasDiv);
	childInputs = childInputs.extend(childTextAreas);
	childInputs.each(function(ci){
		ci.onfocus = function() { ci.addClass('focus'); }
		ci.onblur = function() { ci.removeClass('focus'); }
	});
}

function assignEmailLink(){
	$('emailLink').onclick = function(){
		newEmailBox();
		return false;
	}
}

function assignSubmitNewNameLink() {
	$('submitAName').onclick = function(){
		showSubmitNewNamePopup(undefined);
		return false;
	}
}

function assignFeedbackLink(){
	$('contactUs').onclick = function(){
		newFeedbackBox();
		return false;
	}
}

function newFeedbackBox()
{
var myAjax = new Ajax('includes/static_contact.inc', {method: 'get', onComplete:
		function (request){	
			//receive favorites box request and toss into html
			var extrasDiv = $('extrasDiv');
			extrasDiv.setHTML(request);
			showPopupScreen();
			assignPopupEvents();
			assignEmailValidation();
			assignFeedbackSubmit();
			//$('messagePreview').setHTML(emailMsg);
		}
	}).request();
}

//email popup
function newEmailBox(){
	var favs = $('favoritesList');
	var favLis = $ES('li',favs);
	var firstFav = favs.getFirst();
	var lastFav = favs.getLast();
	if (!firstFav.hasClass('default')) {
		var favList = '';
		favLis.each(function(li){
			var thisName = $E('h3',li).innerHTML;
			var thisGender;
			if (li.hasClass('female')) { thisGender = 'female'; }
			else { thisGender = 'male'; }
			// write the favorites into the fav list
			if (li != lastFav) {
				favList += '<li>'+thisName +' ('+thisGender+'),</li>';
			}
			else { favList += '<li>'+thisName +' ('+thisGender+')</li>'; }					
		});

		
	var myAjax = new Ajax('includes/emailBox.inc', {method: 'get', onComplete:
		function (request){	
			//receive favorites box request and toss into html
			var extrasDiv = $('extrasDiv');
			extrasDiv.setHTML(request);
			showPopupScreen();
			assignPopupEvents();
			assignEmailValidation();
			assignEmailSubmit();
			if ($('sendFavsFrom')) { $('sendFavsFrom').focus(); }
			$('messagePreview').setHTML(emailMsg+'<ul>'+favList+'</ul>');
		}
	}).request();
	}
	else {
		alert("To send an email, first add a name to My Favorites list.");
	}
}

function assignFeedbackSubmit(){
	$('newEmailSubmit').onclick = function(){
		if($$('p.errorMssg').length == 0){
			sendFeedbackEmail();
		}
		else { return false; }
	}
	$('newEmailSubmit').onclick = function(){
		if($$('p.errorMssg').length == 0){
			sendFeedbackEmail();
		}
		else { return false; }
	}
	//disable enter for email fields
	$('sendFavsFrom').onkeypress = 
	//$('sendFavsTo').onkeypress = 
	function(event){
		evt = event || window.event;
		//if enter key is pressed
		if(evt.keyCode == 13){
				return false;
		}
	}

	//normal enter for msg body
	//$('sendFavsMssg').onkeypress = 

	//enable enter for send button
	$('newEmailSubmit').onkeypress = 
	function(event){
		evt = event || window.event;
		el = evt.srcElement || evt.target;
		//if enter key is pressed
		if(evt.keyCode == 13){
			if($$('p.errorMssg').length == 0){
				sendFavoritesEmail();
				return false;
			}
			else { return false; }
		}
	}
}

function assignEmailSubmit(){
	$('newEmailSubmit').onclick = function(){
		if($$('p.errorMssg').length == 0){
			sendFavoritesEmail();
		}
		else { return false; }
	}
	//disable enter for email fields
	$('sendFavsFrom').onkeypress = 
	$('sendFavsTo').onkeypress = 
	function(event){
		evt = event || window.event;
		//if enter key is pressed
		if(evt.keyCode == 13){
				return false;
		}
	}

	//normal enter for msg body
	//$('sendFavsMssg').onkeypress = 

	//enable enter for send button
	$('newEmailSubmit').onkeypress = 
	function(event){
		evt = event || window.event;
		el = evt.srcElement || evt.target;
		//if enter key is pressed
		if(evt.keyCode == 13){
			if($$('p.errorMssg').length == 0){
				sendFavoritesEmail();
				return false;
			}
			else { return false; }
		}
	}
}

function sendFeedbackEmail(){
	var fromVal = $('sendFavsFrom').value;
	var toVal = 'feedback-earlylearning@nymbler.com';
	var msgVal = $('sendFavsMssg').value;
	var subjectVal= 'Feedback from '+fromVal;
	var bodyVal = 'Feedback from '+fromVal;
	
	

	var postString = 'subject='+subjectVal+'&to='+toVal+'&from='+fromVal+'&msg='+msgVal+'&body='+bodyVal;
	
	$E('div.popupInner').setHTML('<div id="popupLoading"></div>');
	
	var myAjax = new Ajax('bridge/php_ping_email.php', {method: 'post', postBody: postString, onComplete:
		function (request){	
			$E('div.popupInner').setHTML(request);
		}}).request();
}

function sendFavoritesEmail(){
	var fromVal = $('sendFavsFrom').value;
	var toVal = $('sendFavsTo').value;
	var msgVal = $('sendFavsMssg').value;
	var subjectVal= 'My Favorite Baby Names from Nymbler at Early Learning!';
	var bodyVal = 'Here are my favorite baby names from Nymbler at Early Learning:';
	
	var optIn;
	if($('optIn').checked==true)
	{
	 	optIn = $('optIn').value;
	}
	
	else
	{
		optIn = 'optOut';
	}
	//gather favorites list	
	var favs = $('favoritesList');
	var favLis = $ES('li',favs);
	var firstFav = favs.getFirst();
	var favList = '';
	favLis.each(function(li){
		var thisName = $E('h3',li).innerHTML;
		var thisGender;
		if (li.hasClass('female')) { thisGender = 'female'; }
		else { thisGender = 'male'; }
		// write the favorites into the fav list
		if (li == firstFav) {
			favList += thisName +' ('+thisGender+')';
		}
		else { favList += ', '+thisName +' ('+thisGender+')'; }					
	});
	var postString = 'subject='+subjectVal+'&to='+toVal+'&from='+fromVal+'&favList='+favList+'&msg='+msgVal+'&body='+bodyVal+'&optIn=' +optIn;
	
	$E('div.popupInner').setHTML('<div id="popupLoading"></div>');
	
	var myAjax = new Ajax('bridge/php_ping_email.php', {method: 'post', postBody: postString, onComplete:
		function (request){	
			$E('div.popupInner').setHTML(request);
		}}).request();
}

function assignLabelEvents(container){
	if (container) {
		var labels = $ES('label',container);
		labels.each(function(label){
			// add to inspirations				
			if (label.hasClass('likeLabel') || label.hasClass('favLikeLabel')){
				label.onclick = function() {
					var labelLi = label.getParent();
					// IE cannot retrieve the list item's contents, so we must explicity pass in the <h3> content</h3>
					// parameters are: list item, list items h3's inner html
					checkInspirations(labelLi, $E('h3',labelLi).innerHTML);
				}				
				label.onmouseover = function() { label.addClass('likeHover'); }							
				label.onmouseout = function() { label.removeClass('likeHover'); }
			}
			// add to favorites
			if (label.hasClass('favLabel')) {
				if (useFav) {
					label.onclick = function() { addToFavorites(label.getParent()); }				
					label.onmouseover = function() { label.addClass('favHover'); }							
					label.onmouseout = function() { label.removeClass('favHover'); }
				}
				else
				{
					label.setStyle('display','none');
				}
			}
			// add to blocked names
			if (label.hasClass('bloLabel')) {
				if (useBlo) {
					label.onclick = function() { addToBlock(label.getParent()); }				
					label.onmouseover = function() { label.addClass('bloHover'); }							
					label.onmouseout = function() { label.removeClass('bloHover'); }
				}
				else
				{
					label.setStyle('display','none');
				}
			}
		});
	}
}

function addToBlock(item) {
	if (item) {
		
		var item = item;
		var bloList = $('blockedList');
		var firstBlo = bloList.getFirst();
		var lastBlo = bloList.getLast();
		
		var gender, genderValue;		
		if (item.hasClass('female')) {
			gender = 'female';
			genderValue = 'f';
		}
		else {
			gender = 'male';
			genderValue = 'm';
		}
		
		var fakeGender = 'genderplaceholder';
		var genderHolderText = new RegExp(fakeGender, 'g');
		var nextBloContent = nextBloText.replace(genderHolderText, genderValue);
		
		var nameValue = $E('h3',item).innerHTML;		
		var fakeName = 'nameplaceholder';
		var nameHolderText = new RegExp(fakeName, 'g');
		nextBloContent = nextBloContent.replace(nameHolderText, nameValue);
		
		if (!item.hasClass('blosOn')) {
			item.addClass('blosOn');
					
			var newLi = document.createElement('li');
			bloList.insertBefore(newLi, firstBlo);
			
			newLi.innerHTML = nextBloContent;
			addNewClass(newLi,gender);
			
			if (lastBlo == $E('li.default',bloList)) { lastBlo.remove(); }		
		
			// if the 'remove all' link is not there, write it in
			if (!$('removeAllBlocked')) {
				createRemoveAllBlocked();				
			}			
			updateClasses();
			assignLabelEvents(bloList);
			assignLinkEvents(bloList);
		}
	}
}

function assignLinkEvents(container){
	if (container) {
		var lnks = $ES('a',container);
		lnks.each(function(lnk){
			// name info links
			if (lnk.hasClass('infoLink')) {					
				lnk.onclick = function() {
					showNamePopUp(lnk);
					lnk.blur();
					return false;
				}
			}
			// remove links
			if (lnk.hasClass('removeLink')){
				lnk.onclick = function() { clearItem(lnk); return false;}
			}
		});
	}
}

function setFindButton() {
	var findBtn = $('btn_submit');
	if (findBtn) {
		var btnSrc = 'images/btn_go.gif';
		var hoverSrc = 'images/btn_go_over.gif';
		findBtn.onmouseover = function() { findBtn.src = hoverSrc; }
		findBtn.onmouseout = function() { findBtn.src = btnSrc; }
	}
}

function setSelectFocus(){
		var selects = $$('select');
	for(i=0; i<selects.length; i++){
		var thisSelect = selects[i];
		thisSelect.onfocus = function(){
			this.addClass('focus');
		}
		thisSelect.onblur = function(){
			this.removeClass('focus');
		}
	}
}

function setExtraFindLink() {
	var moreLink = $('btn_submit_bottom');
	if (moreLink) {
		var linkSrc = 'images/link_more_names.gif';
		var linkHover = 'images/link_more_names_hover.gif';
		moreLink.onmouseover = function() { moreLink.src = linkHover; }
		moreLink.onmouseout = function() { moreLink.src = linkSrc; }
	}
}

function assignStaticPageLinks() {
	var allStaticLinks = $$('a.staticPageLink');
	allStaticLinks.each(function(lnk){		
		lnk.onclick = function(){
			openStaticPopup(lnk);
			return false;
		}
	});
}

function openStaticPopup(lnk) {
	var linkSrc = lnk.href;
	var newLinkSrc;
	linkSrc = linkSrc.split('/');	
	linkSrc.each(function(ls){
		if (ls.indexOf('.php') != -1) {
			var fileExt = '.php';
			var newFileExt = '.inc';
			var oldFileExt = new RegExp(fileExt, 'g');
			newLinkSrc = 'includes/static_'+ls.replace(oldFileExt, newFileExt);
		}
	});	
	var myAjax = new Ajax(newLinkSrc, {method: 'get', onComplete:
		function (request){	
			//receive static popup box request and toss into html
			var extrasDiv = $('extrasDiv');
			extrasDiv.setHTML(request);
			positionPopup($ES('div.popupBox','extrasDiv'));
			assignStaticPageLinks();
			assignPopupEvents();
		}
	}).request();
}

function preloadImgs(){
	new Asset.images([
	'../images/ajax-loader_whitebg.gif',
	'../images/ajax-loader.gif',
	'../images/btn_go_over.gif',
	'../images/btn_popAddNameHover.gif',
	'../images/btn_popSendEmailHover.gif',
	'../images/icon_favorite_on.gif',
	'../images/icon_favorite_sm_on.gif',
	'../images/icon_info_on.gif',
	'../images/icon_info_sm_on.gif',
	'../images/icon_remove_on.gif',
	'../images/icon_remove_sm_on.gif',
	'../images/icon_star_hover.gif',
	'../images/icon_star_on.gif',
	'../images/icon_star_sm_on.gif',
	'../images/icon_block_on.gif',
	'../images/icon_block_off.gif',
	'../images/link_more_names_hover.gif', 
	'../images/popup_btm_250px.gif',
	'../images/popup_btm_450px.gif',
	'../images/popup_btm_480px.gif',
	'../images/popup_top_250px.gif',
	'../images/popup_top_450px.gif',
	'../images/popup_top_480px.gif',
	'../images/popup_close.gif'], {
	    onComplete: function(){
		//alert('all images loaded!');
	    }
	});
}

function assignFinderEvents() {
	// add body class for conditional styles
	var bodyTag = $E('body');
	if (!bodyTag.hasClass('hasJS')) { bodyTag.addClass('hasJS'); }	
	
	createExtrasDiv();
	assignStaticPageLinks();
	assignFeedbackLink();
	assignSubmitNewNameLink();
	
	if ($('nameGrid')) {
		// write JS-only elements and functionality to the page
		createPrintLink();
		createAddNameLink();
		switchDefaultMessages();
		setExtraFindLink();
		setFindButton();
		
		// write in the 'remove all' links
		if (!$E('li','inspDropBox').hasClass('default')) { createRemoveAllInsp(); }
		if (!$E('li','favoritesList').hasClass('default')) { createRemoveAllFavs(); }
		if (!$E('li','blockedList').hasClass('default')) { createRemoveAllBlocked(); }
		
		// initialize the name clouds
		cloud();
	
		// assign events
		formEvents();		
		assignEmailLink();
		createRemoveLinks('inspDropBox');
		if (useFav)
		{
			createRemoveLinks('favoritesList');		
		}
		if (useBlo)
		{
			createRemoveLinks('blockedList');		
		}
		assignLabelEvents('babyNameFinder');
		assignLinkEvents('babyNameFinder');		
		//assignNameEvents('nameGrid');
		//assignNameEvents('inspDropBox');
		//assignNameEvents('favoritesList');
		setSelectFocus();
		// update classes so that returned names show appropriate 'on' icons
		updateClasses();	
		
		// slide for fav / blocked
		
		//assignSlideEvents();
	}
}

function assignSlideEvents()
{
	var accordion = new Accordion('a.atStart', 'div.atStart', {
		opacity: false,
		onActive: function(toggler, element){
			toggler.setStyle('color', '#ff3300');
		},
	 
		onBackground: function(toggler, element){
			toggler.setStyle('color', '#222');
		}
	}, $('accordion'));	 
}

//addname popup
function newAddNameBox(){
	var myAjax = new Ajax('includes/addNameBox.inc', {method: 'get', onComplete:
		function (request){	
			//receive addname box request and toss into html
			var extrasDiv = $('extrasDiv');
			extrasDiv.setHTML(request);					
			showPopupScreen();
			assignPopupEvents();	
			var addNameBox = $('addName');
			var addNameInput = $('new_name');
			var addNameBtn = $('newNameSubmit');
			addNameInput.focus();
			//add name submit btn
			addNameBtn.onclick = function(){
				if (addNameInput.value != '') {
					sendReceiveNewName(addNameInput.value);
				}
			}	
			//enter key submit
			addNameInput.onkeypress = function(event){
				evt = event || window.event;
				el = evt.srcElement || evt.target;
				//if enter key is pressed
				if(evt.keyCode == 13){
					if (addNameInput.value != '') {
						sendReceiveNewName(addNameInput.value);
					}
					return false;
				}
			}
		}
	}).request();
}

//add name ajax send receive
function sendReceiveNewName(newName){
	var addNameBox = $('addName');
	var contentHold = $E('div.popupInner', addNameBox);
	contentHold.setHTML('<div id="popupLoading"></div>');
	var nameSend = 'add='+newName;
	var myAjax = new Ajax('bridge/php_ping_add_name.php', {method: 'post', postBody: nameSend, update: contentHold, onComplete:
		function (){
			assignPopupEvents();
			$('submitNewName').onclick = function(e) { showSubmitNewNamePopup(newName); return false;}
			var nameList = $E('ul.nameBlocks',addNameBox);	
			var nameItems = $ES('li',addNameBox);						
			if (nameItems.length == 1){
				var firstName = nameList.getFirst();
				// IE cannot retrieve the list item's contents, so we must explicity pass in the <h3> content</h3>
				// parameters are: list item, list items h3's inner html
				checkInspirations(firstName, $E('h3',firstName).innerHTML);
			}
		}
	}).request();
}

function showSubmitNewNamePopup(suggestedName) {
	var myAjax = new Ajax('includes/static_submit-new-name.inc', {method: 'get', onComplete:
		function (request){	
			//receive addname box request and toss into html
			var extrasDiv = $('extrasDiv');
			extrasDiv.setHTML(request);					
			showPopupScreen();
			assignPopupEvents();	
						
			if (suggestedName != undefined) {
				$('sendNewNameName').value = suggestedName;
			}
			
			//add name submit btn
			var newNameBtn = $('newNameEmailSubmit');
			newNameBtn.onclick = function() {
				var from = $('sendNewNameFrom').value.trim();
				var newName = $('sendNewNameName').value.trim();
				var origin = $('sendNewNameOrigin').value.trim();
				var comment = $('sendNewNameMssg').value;
				var boy = $('sendNewNameGenderBoy').checked;
				var girl = $('sendNewNameGenderGirl').checked;

				//validate fields
				if (newName == '') {
					alert(enterAName);
					return false;
				}
				
				if (boy == false && girl == false) {
					alert(selectBoyOrGirl);
					return false;
				}
				
				var postString = 'from='+from+'&newName='+newName+'&origin='+origin+'&comment='+comment+'&boy='+boy+'&girl='+girl;
				$E('div.popupInner').setHTML('<div id="popupLoading"></div>');
	
				var myAjax = new Ajax('bridge/php_submit_new_name.php', {method: 'post', postBody: postString, onComplete:
					function (request){	
						$E('div.popupInner').setHTML(request);
					}}).request();
			}	
		}
	}).request();
}

//info popup
function showNamePopUp(lnk){
	var lnk = lnk;
	var lnkLi = lnk.parentNode;
	var extrasDiv = $('extrasDiv');
	var thisH3 = $E('h3',lnkLi);
	var thisName = thisH3.firstChild.nodeValue;
	var gender;
	if (lnkLi.hasClass('male')) gender = 'm';
	else gender = 'f';
	var ping = 'info1='+thisName+'&gender1='+gender;
	
	var myAjax = new Ajax('includes/infoPopup.inc', {method: 'get', update: extrasDiv, onComplete:
	function(){
		assignPopupEvents();	
		var pop = $('namePopup');
		var contentHolder = $E('div.popupInner', pop);
		positionPopup(pop);
		var myAjax = new Ajax('bridge/php_ping_name_info.php', {method: 'post', postBody: ping, update: contentHolder, onComplete:
			function(){
				assignPopupEvents();
				assignLinkEvents('namePopup');
				updateClasses();
			}
			}).request();
	}
	}).request();
}

//remove any popup
function removePopup(){
	$('extrasDiv').setHTML('');
}

var loadingTimer;
function addReclickMsg(){
	if($('loading')){
		$('loading').setHTML(mssg_takingTooLong);
	}
}

//send the post data to the php bridge 
function sendData(formValues){
	loadingTimer = $clear(loadingTimer);
	if($('takeTooLong')) $('takeTooLong').remove(); /*remove take too long message upon clicking find names*/
	var newdiv = new Element('div');
	newdiv.id = 'loading';	
	$('babyNameForm').adopt(newdiv);
	$('instruction').setStyle('text-indent', '-9000px');
	
	var myAjax = new Ajax('bridge/php_send_receive.php', {method: 'post', postBody: formValues, onComplete: cloud}).request();
	loadingTimer = addReclickMsg.delay(8000); 
	refreshAds();
	
}

function refreshAds()
{
	// works for google and amazon
	var nI = document.getElementsByTagName('iframe').length;
    
    if ( nI > 0 ) {
       for(i=0;i<nI;i++) {
          var mG = document.getElementsByTagName('iframe')[i];
          if ( (mG.name == "google_ads_frame") || (mG.src.indexOf("amazon") != -1)) {
             var src = mG.src + "&rsnd=" + new Date().getTime();
             mG.src = src;
             break;
          }
       }
    } 
}

function cloud(request){
	if (request) {
		$('babyNameForm').innerHTML = request;
		assignFinderEvents();
	}
	
	var delayNameLis = 20;
	var delayParentLis = 0;
	var delayParentUlout = 250;
	
	var lis = $$('li.fadeHide');
	//shuffle the order of names
	shuffle(lis);
	//fade 1
	var timer1 = 0;
	var fadein1 = [];
	//fade 2
	var timer3 = 0;
	var fadeout1 = [];
	//starting increment for name blocks coming in
	
	for(i=0;i<lis.length;i++){
		lis[i].setOpacity(0);
		lis[i].removeClass('fadeHide');
		
		timer1 += delayNameLis;
		//fade in the big list items
		fadein1[i] = lis[i].effect('opacity', {duration: 0});
		fadein1[i].start.delay(timer1, fadein1[i], 1);
		
		//get the inner list items
		var parentLIs = $ES('li', lis[i]);
		var fadein2 = [];
		var timer2 = timer1;
		if(parentLIs.length>0){
			for(j=0;j<parentLIs.length; j++){
				timer2 += delayParentLis;
				parentLIs[j].setOpacity(0);
				fadein2[j] = parentLIs[j].effect('opacity', {transition: Fx.Transitions.sineOut});
				fadein2[j].start.delay(timer2, fadein2[j], 1);	
			}
		}

		timer3 += delayParentUlout;
		//fade out the parentlist ULS
		var parentUL = $E('ul', lis[i]);
		
		fadeout1[i] = parentUL.effect('opacity', {transition: Fx.Transitions.sineOut, onComplete: function(parentUL){parentUL.remove();}});
		fadeout1[i].start.delay(timer3, fadeout1[i], 0);
	}
}

function bindOnbeforeunload()
{
	window.onbeforeunload = beforeExit;
}

preloadImgs();
window.addEvent('domready', assignFinderEvents);
bindOnbeforeunload();
