var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

function ae$(a) {return document.getElementById(a);}

function Address_Analyze() {
	// Set Address fields as not required.
	ae$("Address1").requiredField="no";
	ae$("City").requiredField="no";
	ae$("State").requiredField="no";
	ae$("Zip").requiredField="no";
	
	// If one of the address fields is entered, then...
	if (ae$("Address1").value!="" || ae$("Address2").value!="" || ae$("City").value!="" || ae$("State").value!="" || ae$("Zip").value!="") {
		// Set Address fields as required.
		ae$("Address1").requiredField="yes";
		ae$("City").requiredField="yes";
		ae$("State").requiredField="yes";
		ae$("Zip").requiredField="yes";
	}
}

function Amazon() {
	window.open("http://www.amazon.com/Locked-Up-Success-Achievement-Classroom/dp/1451552424/ref=sr_1_1?ie=UTF8&s=books&qid=1271616709&sr=8-1");
}

function charCounter(fldField, fldCounter, iLimit) {
	// If limit exceeded, then...
	if (fldField.value.length>iLimit) {
		// Trim field to character limit.
		fldField.value=fldField.value.substr(0, iLimit);

		// If still over the limit (i.e., the last character is a return), then...
		fldField.value=fldField.value.substr(0, iLimit-1);

		// Set counter description.
		fldCounter.value='[0]';
	}
	else {
		// Set counter description.
		fldCounter.value='[' + (iLimit-fldField.value.length) + ']';
	}
}

function charValid(event, fldField, iLimit) {
	// If invalid character, then...
	if ((event.keyCode==13 && fldField.value.length>=iLimit-1) ||
	    (event.keyCode!=13 && fldField.value.length==iLimit && !Key_Function(event))) {
		return false;
	}
	else {
		return true;
	}
}

function CreateSpace() {
	window.open("https://www.createspace.com/3440371");
}

function CSS_Link(s_href) {
	// Create CSS node.
	var nodeCSS=document.createElement("link");
	nodeCSS.type="text/css";
	nodeCSS.rel="stylesheet";
	nodeCSS.media="all";

	// IE8 hacks related to layout.
	nodeCSS.href=s_href;
	document.getElementsByTagName("head")[0].appendChild(nodeCSS);
}

function Email_Valid(fldTextBox) {
	// Variable Declaration.
	var sError="";
	
	if (Email_noAtSign(fldTextBox.value)) {
        sError="Email address does not contain an '@' character";
	}
    else if (Email_multipleAtSigns(fldTextBox.value)) {
        sError="Email address can only contain one '@' character";
	}
    else if (Email_nothingBeforeAt(fldTextBox.value)) {
        sError="Email address must contain at least one character before the '@' character";
	}
    else if (Email_containsBrackets(fldTextBox.value)) {
        sError="Email address cannot contain brackets ('[' or ']')";
	}
    else if (Email_containsQuotes(fldTextBox.value)) {
        sError="Email address cannot contain single or double quotation marks";
	}
    else if (Email_noValidPeriod(fldTextBox.value)) {
		sError="Email address must contain a period ('.') character";
	}
    else if (Email_noValidSuffix(fldTextBox.value)) {
        sError="Email address must contain a valid character suffix after the last period ('.')";
	}

	// If invalid email address, then...
	if (sError!="") {
		// Inform user.
		alert("Please enter a valid 'Email' address before continuing.   \n\n" + 
			  sError + ".   \n\n" + "Value entered:  " + fldTextBox.value);
		
		// Invalid email.
		return false;
	}
    else {
		// Trim whitespace and remove spaces.
		fldTextBox.value=TrimWhitespace(fldTextBox.value);
		fldTextBox.value=ReplaceAll(fldTextBox.value, " ", "");

		// Set to lowercase.
		fldTextBox.value=fldTextBox.value.toLowerCase(); 

		// Valid email.
		return true;
	}
}

function Email_containsBrackets(sEmailAddress) {
    // If email address contains brackets, then...
    if (sEmailAddress.indexOf('[', 0)>-1 || sEmailAddress.indexOf(']', 0)>-1 ) {
        return true;
    } 
	else {
        return false;
    }
}

function Email_containsQuotes(sEmailAddress) {
    // If email address contains brackets, then...
    if (sEmailAddress.indexOf('"', 0)>-1 || sEmailAddress.indexOf("'", 0)>-1 ) {
        return true;
    } 
	else {
        return false;
    }
}

function Email_multipleAtSigns(sEmailAddress) {
	// Variable Declaration.
	var iCount=0;
	var iIndex=0;
	var bReturn=false;
	
	// Find the first '@' character.
	iIndex=sEmailAddress.indexOf('@', 0);

    // If an '@' character found, then...
    if (iIndex>-1) {
		// If another '@' character is found, then set return flag to true.
		if (sEmailAddress.indexOf('@', iIndex+1)>-1) bReturn=true;
    } 

	// Return value.
    return bReturn;
}

function Email_noAtSign(sEmailAddress) {
    // CHECK THAT THERE IS AN '@' CHARACTER IN THE STRING
    if (sEmailAddress.indexOf('@', 0)==-1) {
        return true;
    } 
	else {
        return false;
    }
}

function Email_nothingBeforeAt(sEmailAddress) {
    // CHECK THERE IS AT LEAST ONE CHARACTER BEFORE THE '@' CHARACTER
    if (sEmailAddress.indexOf('@', 0)<1) {
        return true;
    } 
	else {
        return false;
    }
}

function Email_noValidPeriod (sEmailAddress) {

    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN WE ARE NOT INTERESTED
    if (sEmailAddress.indexOf('@', 0)>1 && sEmailAddress.charAt(sEmailAddress.length-1)==']') {
        return false;
	}

    // CHECK THAT THERE IS AT LEAST ONE PERIOD IN THE STRING
    if (sEmailAddress.indexOf('.', 0)==-1) {
        return true;
	}
	else {
        return false;
    }
}

function Email_noValidSuffix (sEmailAddress) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN WE ARE NOT INTERESTED
    if (sEmailAddress.indexOf('@', 0)>1 && sEmailAddress.charAt(sEmailAddress.length-1)==']') {
        return false;
	}

    // CHECK THAT THERE IS A TWO OR THREE CHARACTER SUFFIX AFTER THE LAST PERIOD
    var len=sEmailAddress.length;
    var pos=sEmailAddress.lastIndexOf('.', len-1)+1;
    if ((len-pos)<2) {
        return true;
    } 
	else {
        return false;
    }
}

function EmailWebmaster() {
	// Variable Declaration.
	var sEmail="chrisdelinski$($!";
	var sDomain="yahoo.com";
	
	sEmail=sEmail.replace("$($!", "&#64");
  	sEmail=sEmail+sDomain;
	
	document.write('<a href="mailto:' + sEmail + '">' + "Email Webmaster" + '</a>');
}

function fm_Email_onBlur() {
	// If email entered, then...
	if (ae$("Email").value!="") {
		// If invalid email address, then...
		if (!Email_Valid(ae$("Email"))) {
			// Set focus and highlight.
			setTimeout("ae$('Email').focus(); ae$('Email').select();", 1);
		}
	}
}

function FullMoonDesignGroup() {
	window.open("http://www.fullmoondesigngroup.com");
}

function IE_Version() {
	if (document.body.style.scrollbar3dLightColor!=undefined) {
		if (document.body.style.opacity!=undefined) {
			return 9;
		}
		else {
			if (document.body.style.msBlockProgression!=undefined) {
				return 8;
			}
			else {
				if (document.body.style.msInterpolationMode!=undefined) {
					return 7;
				}
				else {
					if (document.body.style.textOverflow!=undefined) {
						return 6;
					}
					else {
						return 5;
					}
				}
			}
		}
	}
}

function IntegerField_onKeyDown(ctrlField, event) {
	// Variable Declaration.
	bReturn=false;

	// If user is not hitting 'Shift+X' (cut) or 'Shift+C' (copy) or 'Shift+P' (paste) or 'Delete'.
	if (event.keyCode!=86 && event.keyCode!=67 && event.keyCode!=88) {
		// If user hit a number or a function key, then set flag.
		if (Key_Number(event) || Key_Function(event)) bReturn=true;
	}
	else {
		bReturn=true; 
	}

	return bReturn;
}

function isDefined(object, variable) {
	return (typeof(eval(object)[variable])=="undefined")? false: true;
}

function Key_Function(event) {
	// Variable Declaration.
	bReturn=false;

	// If a function key was clicked, then...
	if ((event.keyCode==8) || 
		(event.keyCode==9) || 
		(event.keyCode==13) || 
		(event.keyCode==16) || 
		(event.keyCode==17) || 
		(event.keyCode==18) || 
		(event.keyCode==19) || 
		(event.keyCode==20) || 
		(event.keyCode==27) || 
		(event.keyCode==33) || 
		(event.keyCode==34) || 
		(event.keyCode==35) || 
		(event.keyCode==36) || 
		(event.keyCode==37) || 
		(event.keyCode==38) || 
		(event.keyCode==39) || 
		(event.keyCode==40) || 
		(event.keyCode==44) || 
		(event.keyCode==45) || 
		(event.keyCode==46) || 
		(event.keyCode==91) || 
		(event.keyCode==93) || 
		(event.keyCode==113) || 
		(event.keyCode==114) || 
		(event.keyCode==144) || 
		(event.keyCode==145)) bReturn=true;

	return bReturn;
}

function Key_Number(event) {
	// Variable Declaration.
	bReturn=false;

	// If user clicked a number between 0-9, then set flag.
	if ((event.keyCode > 47 && event.keyCode < 58) || (event.keyCode > 95 && event.keyCode < 106)) bReturn=true;
		
	return bReturn;
}

function Kindle() {
	window.open("http://www.amazon.com/Locked-Success-Achievement-Classroom-ebook/dp/B003G2ZDOM/ref=kinw_dp_ke?ie=UTF8&m=AG56TWVU5XWC2&qid=1271616709&sr=8-1");
}

function LighthousePlace() {
	window.open("http://www.premiumoutlets.com/outlets/outlet.asp?id=18");
}
function MarquetteMall() {
	window.open("http://www.marquettemall.com/");
}

function MissingRequiredFields(form) {
	// Variable Declaration.
	var bMissingField=false;
	var bReturn=false;
	
	// For each form element...
	for (j=0; j<form.elements.length; j++) { 
		// If element has an id attribute, then...
		if (form.elements[j].getAttribute("id")!=null) {
			// Reset flag.
			bMissingField=false;

			// If field is required, then...
			if (form.elements[j].getAttribute("requiredField")=="yes" && form.elements[j].getAttribute("type")!="hidden" ) {
				// If dropdown field, then...
				if (form.elements[j].type=="select-one") {
					// If value is zero or blank, then set missing flag.
					bMissingField=(form.elements[j].value==0 || form.elements[j].value=="");
				}
				else {
					// If value is blank, then set missing flag.
					bMissingField=(form.elements[j].value=="");
				}				
				
				// If missing field, then set return value to true.
				if (bMissingField) bReturn=true;

				// Set input label to identify whether field is missing or not.
				Input_Invalid(form.elements[j], bMissingField);
			}
		}						
	}

	// If returning true, then inform the user.
	if (bReturn) alert("Please enter all fields marked with an asterisk (*).   " );

	// Return boolean.
	return bReturn;
}


function NumeralsOnly(sString) {
	// Return numeric characters only.
	return sString.replace(/[^\d]/g, "");
}

function PhoneField_Format(ctrlField) {		
	// Variable Declaration.
	var sPhone=ctrlField.value;
	var sMessage="Invalid phone number.";
	
	if (ctrlField.readOnly==0) {
		// If Phone not complete, then...
		if (sPhone.length > 0) {
			// Remove non-digits from field value.
			sPhone=NumeralsOnly(sPhone);
			
			// If Phone is 10 digits, then...
			if (sPhone.length==10) {
				// Set to ###-###-#### format.					
				ctrlField.value='(' + sPhone.substr(0, 3) + ') ' + sPhone.substr(3, 3) + '-' + sPhone.substr(6, 4);
				
				// Reset value so 'OnChange' event is triggered on next update.
				setTimeout("ResetValue_KeepValue('" + ctrlField.id + "');", 1);
			}
			else {
				// Inform user.
				alert(sMessage+"   \n\n" +
					  "Please enter a 10-digit number in any format you choose.   ");
					  
				// Select field text so a correction can be made.
				setTimeout("ae$('"+ctrlField.id+"').focus(); ae$('"+ctrlField.id+"').select();", 1);
			}
		}
	}
}

function ReplaceAll(sText, sFind, sReplace) {
	// Do until text is not found...
	while (sText.indexOf(sFind)!=-1) {
		// Replace text.
        sText=sText.replace(sFind, sReplace);
    }

	// Return text.
    return sText;
}

function resetParameters() {
	// Reset fields.
	Parameters_Reset(document.fm_Home);

	// Reset character counter.
	charCounter(ae$("Comments"), ae$("Counter"), 500);

	// Set Address fields as not required.
	ae$("Address1").requiredField="no";
	ae$("City").requiredField="no";
	ae$("State").requiredField="no";
	ae$("Zip").requiredField="no";

	ae$("FirstName").focus();
}

function Parameters_Reset(form) {
	// For each form element...
	for (var j=0; j<form.elements.length; j++) {
		// If not hidden and not readonly, then...
		if (form.elements[j].type!="hidden" && form.elements[j].getAttribute("readonly")!=true) {
			// Depending element type...
			switch (form.elements[j].type) {
				case "checkbox": // Uncheck checkbox.
					form.elements[j].checked=false;
					break;

				case "radio": // Select if zero value.
					form.elements[j].checked=(form.elements[j].value==0);
					break;

				case "select-one": // Select the first option listed and set background color.
					form.elements[j].options[0].selected=true;
					break;				

				case "select-multiple": // De-select.
					for (var k=0; k<form.elements[j].options.length; k++) form.elements[j].options[k].selected=false;
					break;				

				case "text": case "textarea": // Clear value and set background color.
					form.elements[j].value="";
					break;

			}
		}

		// If not a checkbox or radio button, then...
		if (form.elements[j].type!="checkbox" && form.elements[j].type!="radio") {
			// Set indicator to show field as valid.
			Input_Invalid(form.elements[j], false);
		}
	}
}

function Input_Invalid(fldInput, bInvalid) {
	// Variable Declaration.
	var arrElementTypes=new Array("label", "legend");
	
	// For each element type...	
	for (b=0; b<arrElementTypes.length; b++) {
		// Create an array of all specified elements.
		var arrElements=document.getElementsByTagName(arrElementTypes[b]);
	
		// For each element...	
		for (p=0; p<arrElements.length; p++) {
			// If this is the label for the field, then...
			if (arrElements[p].htmlFor==fldInput.id) {
				// If invalid field, then...
				if (bInvalid) {
					if (arrElements[p].innerHTML.substr(0,1)!="*") {
						arrElements[p].innerHTML="* "+arrElements[p].innerHTML;
					}
					
					// Set label to indicate invalid field.
					arrElements[p].style.color="red";
				} 
				else {
					// If label is a legend, then...
					if (arrElementTypes[b]=="legend") {
						// Set back to default legend color.
						arrElements[p].style.color="#067AB4";
					}
					else {
						if (arrElements[p].innerHTML.substr(0,1)=="*") {
							arrElements[p].innerHTML=arrElements[p].innerHTML.replace("* ", "");
						}
						// Set back to default label color.
						arrElements[p].style.color="#7D7D7D";
					}
				}
				break;
			}
		}
	}
}

function ResetValue_KeepValue(id) {
	// Set control.
	var ctrField=document.getElementById(id);
	
	// Set control value to empty string.
	ctrField.value=ctrField.value;
}

function section(sSection) {
	ae$("contentSynopsis").style.display="none";
	ae$("contentAuthor").style.display="none";
	ae$("contentContact").style.display="none";
	ae$("contentBuy").style.display="none";
	ae$("contentTarget").style.display="none";

	ae$("menuSynopsis").style.color="26A9CA";
	ae$("menuAuthor").style.color="26A9CA";
	ae$("menuTarget").style.color="26A9CA";
	ae$("menuBuy").style.color="26A9CA";
	ae$("menuContact").style.color="26A9CA";
		
	ae$("menuSynopsis").className="";
	ae$("menuAuthor").className="";	
	ae$("menuTarget").className="";
	ae$("menuBuy").className="";	
	ae$("menuContact").className="";
	
	ae$("content"+sSection).style.display="block";
	ae$("menu"+sSection).className="currentlySelected";	
	ae$("menu"+sSection).style.color="E59E0D";	
}

function SelectMenuItem() {
	// Default to Synopsis menu item.
	menu_onClick(ae$(ae$("SelectedMenu").value));
}

function SubmitForm() {
	// If not missing required fields, then...
	if (!MissingRequiredFields(document.fm_Home)) {
		// If one of the contact fields is not filled in, then...
		if (ae$("PhoneDay").value=="" && ae$("PhoneEvening").value=="" && ae$("Email").value=="") {
			// Inform user.
			alert("Please enter one of the following fields so the    \nauthor can contact you if necessary.   \n\n"+
				  "     * Daytime Phone\n"+
				  "     * Evening Phone\n"+
				  "     * Email Address");
			
			// Set focus.
			setTimeout("ae$('PhoneDay').focus();", 1);
		}
		else {
			// Reset button.
			ae$("btn_Submit").src="btn_Submit.png";
			
			// Inform user.
			alert("The 'Author Contact' form has been successfully submitted.   \n\n"+"Thank you for contacting me!");
				  
			// Submit form.	
			document.fm_Home.submit();
		}
	}
}

function TrimWhitespace(myString) {
	var temp="";
	var oneChar="";
	var whitespaceOn=false;

	for (var charCounter=0; charCounter<myString.length; charCounter++)	{
		if (myString.charCodeAt(charCounter) > 32) {
			if (whitespaceOn) {
				temp=temp+" "+myString.charAt(charCounter);
			}
			else {
				temp=temp+myString.charAt(charCounter);
			}
			whitespaceOn=false;
		}
		else {
			if (temp!="") whitespaceOn=true;
		}
	}
	
	return temp;
}

function WebmasterEmail() {
	// Variable Declaration.
	var sEmail="chrisdelinski$($!";
	var sDomain="yahoo.com";
	
	sEmail=sEmail.replace("$($!", "&#64");
  	sEmail=sEmail+sDomain;

	return sEmail;
}
