var __interestSet = false;
function SetInterest(tag)
{
	if (!__interestSet)
	{
		try
		{
		    new Ajax.Request("/set_interest/" + tag);
		    
		    $(tag + "Sub").show();
		    $('btn' + tag).addClassName('sliding');
		    if (tag != "Parent") new Effect.Opacity($('btnParent'), {to:0, duration:0.5});
		    if (tag != "Educator") new Effect.Opacity($('btnEducator'), {to:0, duration:0.5});
		    if (tag != "Homeschooler") new Effect.Opacity($('btnHomeschooler'), {to:0, duration:0.5});
		    
		    if ($('home_first')) $('home_first').SetBurst(tag);
		    
		    new Effect.Move($('primary'), {x:-400, y:0, mode:'relative', duration:0.5, delay:0.5});
		    new Effect.Move($(tag + "Sub"), {x:-400, y:0, mode:'relative', duration:0.5, delay:0.5});
		    
		    if ($('pullQuoteParent') && $('pullQuote' + tag)) 
		    {
		        $('pullQuoteParent').hide();
		        $('pullQuote' + tag).show();
		    }
			__interestSet = true;
		}
		catch (e)
		{}
	}
}

function BackgroundReady(page)
{
    if (page == "first") $('firstTime').show();
    if (page == "trialer") $('storeForm').show();
}

function ShowImage(url)
{
    var ws = WindowSizes();
	
    var lightBox = $('divImageLightBox');
    lightBox.style.width = (ie6 ? ws.wDoc : ws.wWindow) + 'px';
    lightBox.style.height = (ie6 ? ws.hDoc : ws.hWindow) + 'px';
	
    var shadow = lightBox.select('.shadow')[0];
    shadow.style.width = (ie6 ? ws.wDoc : ws.wWindow) + 'px';
    shadow.style.height = (ie6 ? ws.hDoc : ws.hWindow) + 'px';
	
	if (ie6) 
	{
		var twirly = lightBox.select('.twirly')[0];
		twirly.style.top = (ws.yScroll + ws.hWindow / 2) + 'px';
	}
	
	if ($('divImageLightBoxImage').src.indexOf(url) == -1) 
	{
		$('divImageLightBoxContainer').hide();
		$('divImageLightBoxImage').src = url;
	}
	
    lightBox.show();
}

function PlaceImage(image)
{
    var ws = WindowSizes();
	
    var w = image.width || 803;
    var h = image.height || 524;
    var r = 1;
	
    // 40 = 20px margin on each side
    if (w > ws.wWindow - 40) r = w / (ws.wWindow - 40);
    if (h > ws.hWindow - 40) r = Math.max(r, h / (ws.hWindow - 40));
    
    if (r != 1)
    {
        w = Math.round(w / r);
        h = Math.round(h / r);
        image.style.width = w + 'px';
        image.style.height = h + 'px';
    }
    
	var container = $('divImageLightBoxContainer');
    container.style.left = ((ws.wWindow - w) / 2 + (ie6 ? ws.xScroll : 0)) + 'px';
    container.style.top = ((ws.hWindow - h) / 2 + (ie6 ? ws.yScroll : 0)) + 'px';
    container.show();
}

function WindowSizes()
{
	var scroll = document.viewport.getScrollOffsets();
    var ws = {xScroll: scroll[0],
	          yScroll: scroll[1],
			  wDoc: document.documentElement.scrollWidth,
			  hDoc: document.documentElement.scrollHeight,
			  wWindow: document.viewport.getWidth(),
			  hWindow: document.viewport.getHeight()};
    if (ws.hWindow > ws.hDoc) ws.hDoc = ws.hWindow;
	
	return ws;
}


// --- TOGGLE METHODS --- //
function LocationRedirect(which)
{
    var target;

    switch (which.toLowerCase())
    {
        case 'store':
		case 'freetrial':
		case 'producttour':
            target = '/store/start_trial/';
            break;
		
        case 'subscribe':
            target = '/store/subscribe/';
            break;

        case 'producttourform':
            target = '#bottom';
            break;
    }

    if (parseInt(target.length) > 0)
        window.location.replace(target);

    return;
}


function CopyToClipboard(data)
{
	window.clipboardData.setData("Text", data);
	
	return;
}

function PlayFlash(target)
{
	if (ie)
		target = window[target];
	else
		target = document.embeds[target]
	
	if (target)
		target.Play();
	
	return;
}

function MovieFinished(page)
{
	$('storeForm').show();
	SetFirstFocus();
}

function ToggleFooterMenu(caller)
{
    var menu = caller.getElementsByTagName('div')[0];
    var lnk = caller.getElementsByTagName('a')[0];
    
    if (menu)
    {
        if (menu.className.indexOf('show') == -1)
        {
            SwapCSSClassName(menu, 'hide', 'show');
            SwapCSSClassName(lnk, 'footer_menu_item_nobg', 'footer_menu_item_bg');
        }
        else
        {
            SwapCSSClassName(menu, 'show', 'hide');
            SwapCSSClassName(lnk, 'footer_menu_item_bg', 'footer_menu_item_nobg');
        }
    }
    
    return;
}


function ToggleAdditionalDetails(caller)
{
    var divAdditionalDetails = GetObject('divAdditionalDetails');
    
    if (divAdditionalDetails)
    {
        if (caller && caller.checked)
        {
            SwapCSSClassName(divAdditionalDetails, 'hide', 'show');
        }
        else
        {
            SwapCSSClassName(divAdditionalDetails, 'show', 'hide');
        }
    }
    
    return;
}


function ToggleContactMap(map, action)
{
	var divContactMap 		= GetObject('divContactMap');
	var imgContactMapStreet = GetObject('imgContactMapStreet');
	var imgContactMapDetail = GetObject('imgContactMapDetail');
	
	SwapCSSClassName(divContactMap, 'hide', 'show');
	
	switch (map.toLowerCase())
	{
		case 'street':
		    SwapCSSClassName(imgContactMapStreet, 'hide', 'show');
		    SwapCSSClassName(imgContactMapDetail, 'show', 'hide');
			break;
		
		case 'detail':
		    SwapCSSClassName(imgContactMapStreet, 'show', 'hide');
		    SwapCSSClassName(imgContactMapDetail, 'hide', 'show');
			break;
	    
	    default:
		    SwapCSSClassName(divContactMap, 'show', 'hide');
		    SwapCSSClassName(imgContactMapStreet, 'show', 'hide');
		    SwapCSSClassName(imgContactMapDetail, 'show', 'hide');
		    break;
	}
	
	return;
}


function ToggleLightBox(title, wx, hx, overflow)
{
	var divLightBox = GetObject('divLightBox');
	var divLoading = GetObject('divLoading');
	var h2AreaContentTitle = GetObject('h2AreaContentTitle');
	var divPrivacyContent = GetObject('divPrivacyContent');
	var divParentDashboardContent = GetObject('divParentDashboardContent');
    var divAcademicCertificateContent = GetObject('divAcademicCertificateContent');
	var divTeacherPreviewLessonContent = GetObject('divTeacherPreviewLessonContent');
	var divTeacherDashboardContent = GetObject('divTeacherDashboardContent');
    var divAreaContentContainer = GetObject('divAreaContentContainer');
  var divPricingInfoContent = GetObject('divPricingInfoContent')
  var divSnapBlocksLessonPreview = GetObject('divSnapBlocksLessonPreview')
  var divFrogRaceLevel2Preview = GetObject('divFrogRaceLevel2Preview')
	var height = 0;

	
	if (divLightBox)
	{
        if (divLightBox.className.indexOf('show') == -1)
		{
			SwapCSSClassName(divLightBox, 'hide', 'show');
			SwapCSSClassName(divLoading, 'hide', 'show');

			h2AreaContentTitle.innerHTML = title.trim();
			
            switch (title.toLowerCase())
            {
                case 'privacy':
                    SwapCSSClassName(divLoading, 'show', 'hide');
                    SwapCSSClassName(divPrivacyContent, 'hide', 'show');
					
                    divAreaContentContainer.style.left = ((document.body.clientWidth - 700) / 2).toString() + 'px';
                    divAreaContentContainer.style.width = '700px';
					divAreaContentContainer.style.border = '1px solid #EEEEEE';
					
					height = 200;
                    
                    break;

                case 'parent dashboard':
                    SwapCSSClassName(divLoading, 'show', 'hide');
                    SwapCSSClassName(divParentDashboardContent, 'hide', 'show');

                    divAreaContentContainer.style.left = ((document.body.clientWidth - 824) / 2).toString() + 'px';
                    divAreaContentContainer.style.width = '824px';

                    divParentDashboardContent.style.height = '420px';
                    divParentDashboardContent.style.overflow = 'scroll';
                    divParentDashboardContent.style.overflowX = 'hidden';
					
					height = 420;

                    break;

                case 'academic certificate':
                    SwapCSSClassName(divLoading, 'show', 'hide');
                    SwapCSSClassName(divAcademicCertificateContent, 'hide', 'show');

                    divAreaContentContainer.style.left = ((document.body.clientWidth - 500) / 2).toString() + 'px';
					divAreaContentContainer.style.width = '500px';
                    divAreaContentContainer.style.textAlign = 'center';

                    divAcademicCertificateContent.style.height = '520px';
					
					height = 520;

                    break;
				case 'lesson preview':
                    SwapCSSClassName(divLoading, 'show', 'hide');
                    SwapCSSClassName(divTeacherPreviewLessonContent, 'hide', 'show');

                    divAreaContentContainer.style.left = ((document.body.clientWidth - 700) / 2).toString() + 'px';
					divAreaContentContainer.style.width = '700px';
                    divAreaContentContainer.style.textAlign = 'center';

                    divTeacherPreviewLessonContent.style.height = '450px';
					
					height = 450;

                    break;
        case 'snap blocks lesson':
                  SwapCSSClassName(divLoading, 'show', 'hide');
                  SwapCSSClassName(divSnapBlocksLessonPreview, 'hide', 'show');

                  divAreaContentContainer.style.left = ((document.body.clientWidth - 700) / 2).toString() + 'px';
                  divAreaContentContainer.style.width = '820px';
                  divAreaContentContainer.style.textAlign = 'center';

                  divSnapBlocksLessonPreview.style.height = '450px';

                  height = 450;
                  break;
        case 'frog race level 2':
          SwapCSSClassName(divLoading, 'show', 'hide');
          SwapCSSClassName(divFrogRaceLevel2Preview, 'hide', 'show');

          divAreaContentContainer.style.left = ((document.body.clientWidth - 700) / 2).toString() + 'px';
          divAreaContentContainer.style.width = '820px';
          divAreaContentContainer.style.textAlign = 'center';

          divFrogRaceLevel2Preview.style.height = '450px';

          height = 450;
          break;
				case 'teacher dashboard':
                    SwapCSSClassName(divLoading, 'show', 'hide');
                    SwapCSSClassName(divTeacherDashboardContent, 'hide', 'show');

                    divAreaContentContainer.style.left = ((document.body.clientWidth - 700) / 2).toString() + 'px';
					divAreaContentContainer.style.width = '820px';
                    divAreaContentContainer.style.textAlign = 'center';

                    divTeacherDashboardContent.style.height = '770x';
					
					height = 770;

                    break;
              case 'pricing information':
                SwapCSSClassName(divLoading, 'show', 'hide');
                SwapCSSClassName(divPricingInfoContent, 'hide', 'show');
                break;
            }
			
			ResizeLightBox(height);
		}
		else
		{
			SwapCSSClassName(divLightBox, 'show', 'hide');
			SwapCSSClassName(divLoading, 'show', 'hide');

			SwapCSSClassName(divPrivacyContent, 'show', 'hide');
			SwapCSSClassName(divParentDashboardContent, 'show', 'hide');
			SwapCSSClassName(divAcademicCertificateContent, 'show', 'hide');
			SwapCSSClassName(divTeacherPreviewLessonContent, 'show', 'hide');
			SwapCSSClassName(divTeacherDashboardContent, 'show', 'hide');
		}
	}
	
	return;
}


// --- VALIDATION METHODS --- //
function ValidateEmailQuizResultsForm(frm)
{
	var arrIsValidated = new Array();
	var firstInValidField = null;
	
	if (frm.txtEmailAddress.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Email Address');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtEmailAddress;
	}
	else if (!IsValidEmailAddress(frm.txtEmailAddress.value.trim()))
	{
		arrIsValidated.push('Email Address ( Invalid )');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtEmailAddress;
	}
	
	if (firstInValidField != null)
		firstInValidField.focus();
	
	
	if (parseInt(arrIsValidated.length) > 0)
	{
		alert(ParseValidationMessage(arrIsValidated));
		return false;
	}
		
	return true;
}

function ValidateShareParentQuizForm(frm)
{
	var arrIsValidated = new Array();
	var firstInValidField = null;
	
	if (frm.txtFirstName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Your First Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtFirstName;
	}
	
	if (frm.txtLastName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Your Last Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtLastName;
	}
	
	if (frm.txtFriendEmailAddress.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Friend Email Address');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtFriendEmailAddress;
	}
	else if (!IsValidEmailAddress(frm.txtFriendEmailAddress.value.trim()))
	{
		arrIsValidated.push('Friend Email Address ( Invalid )');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtFriendEmailAddress;
	}
	
	if (firstInValidField != null)
		firstInValidField.focus();
	
	
	if (parseInt(arrIsValidated.length) > 0)
	{
		alert(ParseValidationMessage(arrIsValidated));
		return false;
	}
		
	return true;
}

function ValidateShareForm(frm)
{
    var errors = [];
    var errorFields = [];
	
	frm = $(frm);
	
    if (frm['first_name'].value.blank())
    {
        errors.push("Please enter your first name.");
        errorFields.push(frm['first_name']);
    }
    
    if (frm['last_name'].value.blank())
    {
        errors.push("Please enter your last name.");
        errorFields.push(frm['last_name']);
    }
    
	if (frm['title'] && frm['title'].type == "text") 
	{
		if (frm['title'].value.blank()) 
		{
			errors.push("Please enter a title for your video.");
			errorFields.push(frm['title']);
		}
	}
	
    if (!IsValidEmailAddress(frm['email'].value.strip()))
    {
        errors.push("Please enter a valid email address for your friend.");
        errorFields.push(frm['email']);
    }
    
    frm.getInputs().invoke('removeClassName', 'error');
    if (errors.length > 0)
    {
        errorFields.invoke('addClassName', 'error');
        alert(errors.join('\n\n'));
		errorFields[0].focus();
        return false;
    }
	
	return true;
}

function ValidateLearnMoreForm(frm)
{
	var arrIsValidated = new Array();
	var firstInValidField = null;
	
	if (frm.txtFirstName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('First Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtFirstName;
	}
	
	if (frm.txtLastName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Last Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtLastName;
	}
	
	if (frm.txtEmailAddress.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Email Address');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtEmailAddress;
	}
	else if (!IsValidEmailAddress(frm.txtEmailAddress.value.trim()))
	{
		arrIsValidated.push('Email Address ( Invalid )');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtEmailAddress;
	}
    
    
	if (firstInValidField != null)
		firstInValidField.focus();
	
	
	if (parseInt(arrIsValidated.length) > 0)
	{
		alert(ParseValidationMessage(arrIsValidated));
		return false;
	}
		
	return true;
}


function ValidateNewsletterSignupForm(frm)
{
	var arrIsValidated = new Array();
	var firstInValidField = null;
	
	if (frm.txtFirstName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('First Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtFirstName;
	}
	
	if (frm.txtLastName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Last Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtLastName;
	}
	
	if (frm.txtEmailAddress.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Email Address');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtEmailAddress;
	}
	else if (!IsValidEmailAddress(frm.txtEmailAddress.value.trim()))
	{
		arrIsValidated.push('Email Address ( Invalid )');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtEmailAddress;
	}
    
    
	if (firstInValidField != null)
		firstInValidField.focus();
	
	
	if (parseInt(arrIsValidated.length) > 0)
	{
		alert(ParseValidationMessage(arrIsValidated));
		return false;
	}
		
	return true;
}


function ValidateStopNewsletterForm(frm)
{
	var arrIsValidated = new Array();
	var firstInValidField = null;
	
	if (frm.txtFirstName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('First Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtFirstName;
	}
	
	if (frm.txtLastName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Last Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtLastName;
	}
	
	if (frm.txtEmailAddress.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Email Address');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtEmailAddress;
	}
	else if (!IsValidEmailAddress(frm.txtEmailAddress.value.trim()))
	{
		arrIsValidated.push('Email Address ( Invalid )');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtEmailAddress;
	}
	
	
	if (firstInValidField != null)
		firstInValidField.focus();
	
	if (parseInt(arrIsValidated.length) > 0)
	{
		alert(ParseValidationMessage(arrIsValidated));
		return false;
	}
		
	return true;
}

function ValidateTellAFriendForm(frm)
{
	var arrIsValidated = new Array();
	var firstInValidField = null;
	
	if (frm.txtFirstName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('First Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtFirstName;
	}
	
	if (frm.txtLastName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Last Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtLastName;
	}


	var allEmpty = true;
	
	for (var i = 0; i < 3; i++)
	{
		if (frm['txtFriendFirstName' + i].value.trim().IsEmpty() != -1 || frm['txtFriendLastName' + i].value.trim().IsEmpty() != -1 || frm['txtFriendEmailAddress' + i].value.trim().IsEmpty() != -1)
		{
			allEmpty = false;
			
			if (frm['txtFriendFirstName' + i].value.trim().IsEmpty() == -1)
			{
				arrIsValidated.push('Friend ' + i + ' First Name');
				
		        if (firstInValidField == null)
			        firstInValidField = frm['txtFriendFirstName' + i];
			}
	  
			if (frm['txtFriendLastName' + i].value.trim().IsEmpty() == -1)
			{
				arrIsValidated.push('Friend ' + i + ' Last Name');
				
		        if (firstInValidField == null)
			        firstInValidField = frm['txtFriendLastName' + i];
			}
	  
			if (frm['txtFriendEmailAddress' + i].value.trim().IsEmpty() == -1)
			{
				arrIsValidated.push('Friend ' + i + ' Email Address');

		        if (firstInValidField == null)
			        firstInValidField = frm['txtFriendEmailAddress' + i];
			}
	        else if (!IsValidEmailAddress(frm['txtFriendEmailAddress' + i].value.trim()))
	        {
		        arrIsValidated.push('Friend ' + i + ' Email Address ( Invalid )');
        		
		        if (firstInValidField == null)
			        firstInValidField = frm['txtFriendEmailAddress' + i];
	        }
		}
	}
	
	
	if (allEmpty)
	{
		arrIsValidated.push('Friend 1 First Name');
		arrIsValidated.push('Friend 1 Last Name');
		arrIsValidated.push('Friend 1 Email Address');
		
        if (firstInValidField == null)
            firstInValidField = frm['txtFriendFirstName1'];
	}
	
	if (firstInValidField != null)
		firstInValidField.focus();
	
	if (parseInt(arrIsValidated.length) > 0)
	{
		alert(ParseValidationMessage(arrIsValidated));
		return false;
	}
		
	return true;
}


function ValidateTellATeacherForm(frm)
{
	var arrIsValidated = new Array();
	var firstInValidField = null;
	
	if (frm.txtFirstName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('First Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtFirstName;
	}
	
	if (frm.txtEmailAddress.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Email address');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtFirstName;
	}
	
	if (frm.txtLastName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Last Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtLastName;
	}


	var allEmpty = true;
	
	for (var i = 0; i < 1; i++)
	{
		if (frm['txtFriendFirstName' + i].value.trim().IsEmpty() != -1 || frm['txtFriendLastName' + i].value.trim().IsEmpty() != -1 || frm['txtFriendEmailAddress' + i].value.trim().IsEmpty() != -1)
		{
			allEmpty = false;
			
			if (frm['txtFriendFirstName' + i].value.trim().IsEmpty() == -1)
			{
				arrIsValidated.push('Friend ' + i + ' First Name');
				
		        if (firstInValidField == null)
			        firstInValidField = frm['txtFriendFirstName' + i];
			}
	  
			if (frm['txtFriendLastName' + i].value.trim().IsEmpty() == -1)
			{
				arrIsValidated.push('Friend ' + i + ' Last Name');
				
		        if (firstInValidField == null)
			        firstInValidField = frm['txtFriendLastName' + i];
			}
	  
			if (frm['txtFriendEmailAddress' + i].value.trim().IsEmpty() == -1)
			{
				arrIsValidated.push('Friend ' + i + ' Email Address');

		        if (firstInValidField == null)
			        firstInValidField = frm['txtFriendEmailAddress' + i];
			}
	        else if (!IsValidEmailAddress(frm['txtFriendEmailAddress' + i].value.trim()))
	        {
		        arrIsValidated.push('Friend ' + i + ' Email Address ( Invalid )');
        		
		        if (firstInValidField == null)
			        firstInValidField = frm['txtFriendEmailAddress' + i];
	        }
		}
	}
	
	
	if (allEmpty)
	{
		arrIsValidated.push('Friend 1 First Name');
		arrIsValidated.push('Friend 1 Last Name');
		arrIsValidated.push('Friend 1 Email Address');
		
        if (firstInValidField == null)
            firstInValidField = frm['txtFriendFirstName1'];
	}
	
	if (firstInValidField != null)
		firstInValidField.focus();
	
	if (parseInt(arrIsValidated.length) > 0)
	{
		alert(ParseValidationMessage(arrIsValidated));
		return false;
	}
		
	return true;
}

function ValidateContactSupportForm(frm)
{
	var arrIsValidated = new Array();
	var firstInValidField = null;
	
	if (frm.txtFirstName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('First Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtFirstName;
	}
	
	if (frm.txtLastName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Last Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtLastName;
	}
	
	if (frm.txtEmailAddress.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Email Address');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtEmailAddress;
	}
	else if (!IsValidEmailAddress(frm.txtEmailAddress.value.trim()))
	{
		arrIsValidated.push('Email Address ( Invalid )');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtEmailAddress;
	}
	
	if (parseInt(frm.selIssue.selectedIndex) <= 0)
	{
		arrIsValidated.push('Please select your customer support issue');
	}
	
	if (frm.txtIssueDescription.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Please describe your customer support issue');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtIssueDescription;
	}
	
	
	if (firstInValidField != null)
		firstInValidField.focus();
	
	if (parseInt(arrIsValidated.length) > 0)
	{
		alert(ParseValidationMessage(arrIsValidated));
		return false;
	}
		
	return true;
}


function ValidateBuyOrRedeemGiftForm(frm)
{
    var arrIsValidated = new Array();
    var firstInValidField = null;
    
    if (frm.txtGiftCode.value.trim().IsEmpty() == -1)
    {
        arrIsValidated.push('Gift Code');
        
	    if (firstInValidField == null)
		    firstInValidField = frm.txtGiftCode;
    }
    
    
	if (firstInValidField != null)
		firstInValidField.focus();
	
	
	if (parseInt(arrIsValidated.length) > 0)
	{
		alert(ParseValidationMessage(arrIsValidated));
		return false;
	}
		
	return true;
}


function ValidateDownloadForm(frm)
{
    var arrIsValidated = new Array();
    var firstInvalidField = null;

    if (frm.txtFirstName.value.trim() == "")
    {
        arrIsValidated.push('First Name');
        
        if (firstInvalidField == null)
            firstInvalidField = frm.txtFirstName;
    }
    
    if (frm.txtEmailAddress.value.trim() == "")
    {
        arrIsValidated.push('Email Address');
        
        if (firstInvalidField == null)
            firstInvalidField = frm.txtEmailAddress;
    }
    else if (!IsValidEmailAddress(frm.txtEmailAddress.value.trim()))
    {
        arrIsValidated.push('Email Address ( Invalid )');
        
        if (firstInvalidField == null)
            firstInvalidField = frm.txtEmailAddress;
    }
    
    if (firstInvalidField != null)
        firstInvalidField.focus();
    
    if (arrIsValidated.length > 0)
    {
        alert(ParseValidationMessage(arrIsValidated));
        return false;
    }
    
    return true;
}


function ValidateContactForm(frm)
{
	var arrIsValidated = new Array();
	var firstInValidField = null;
	
	if (frm.txtFirstName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('First Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtFirstName;
	}
	
	if (frm.txtLastName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Last Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtLastName;
	}
	
	if (frm.txtEmailAddress.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Email Address');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtEmailAddress;
	}
	else if (!IsValidEmailAddress(frm.txtEmailAddress.value.trim()))
	{
		arrIsValidated.push('Email Address ( Invalid )');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtEmailAddress;
	}
	
	if (frm.txtInformationOn.value.trim().IsEmpty() == -1)
    {
		arrIsValidated.push('What would you like information on?');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtInformationOn;
    }
    
    
	if (firstInValidField != null)
		firstInValidField.focus();
	
	
	if (parseInt(arrIsValidated.length) > 0)
	{
		alert(ParseValidationMessage(arrIsValidated));
		return false;
	}
		
	return true;
}


function ValidateTeacherSubscriptionForm(frm)
{
	var arrIsValidated = new Array();
	var firstInValidField = null;
	
	if (frm.txtFirstName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('First Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtFirstName;
	}
	
	if (frm.txtLastName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Last Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtLastName;
	}
	
	if (frm.txtTitle.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('Title');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtTitle;
	}
	
	if (frm.txtSchoolEmailAddress.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('School Email Address');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtSchoolEmailAddress;
	}
	else if (!IsValidEmailAddress(frm.txtSchoolEmailAddress.value.trim()))
	{
		arrIsValidated.push('School Email Address ( Invalid )');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtSchoolEmailAddress;
	}
	
	if (frm.txtSchoolName.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('School Name');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtSchoolName;
	}
	
	if (frm.txtSchoolAddress1.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('School Address 1');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtSchoolAddress1;
	}
	
	if (frm.txtSchoolCity.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('School City');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtSchoolCity;
	}
	
	if (parseInt(frm.selSchoolStateProvince.options.selectedIndex) <= 0 && frm.selSchoolCountry.options[frm.selSchoolCountry.options.selectedIndex].value == "US")
	{
		arrIsValidated.push('School State/Province');

		if (firstInValidField == null)
			firstInValidField = frm.selSchoolStateProvince;
	}
	
	if (frm.txtSchoolPostalCode.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('School Zip/Postal Code');

		if (firstInValidField == null)
			firstInValidField = frm.txtSchoolPostalCode;
	}
	else if (frm.selSchoolCountry.options[frm.selSchoolCountry.options.selectedIndex].value == "US" && !IsValidUSZipPostalCode(frm.txtSchoolPostalCode.value.trim()))
	{
		arrIsValidated.push('School Zip/Postal Code ( Invalid US )');

		if (firstInValidField == null)
			firstInValidField = frm.txtSchoolPostalCode;
	}
	
	if (parseInt(frm.selSchoolCountry.options.selectedIndex) <= 0)
	{
		arrIsValidated.push('School Country');

		if (firstInValidField == null)
			firstInValidField = frm.selSchoolCountry;
	}

	if (frm.txtSchoolPhoneNumber.value.trim().IsEmpty() == -1)
	{
		arrIsValidated.push('School Phone Number');

		if (firstInValidField == null)
			firstInValidField = frm.txtSchoolPhoneNumber;
	}
	else if (frm.selSchoolCountry.options[frm.selSchoolCountry.options.selectedIndex].value == "US" && !IsValidUSPhoneNumber(frm.txtSchoolPhoneNumber.value.trim()))
	{
		arrIsValidated.push('School Phone Number ( Invalid US )');
		
		if (firstInValidField == null)
			firstInValidField = frm.txtSchoolPhoneNumber;
	}
	
	
	if (firstInValidField != null)
		firstInValidField.focus();
	
	
	if (parseInt(arrIsValidated.length) > 0)
	{
		alert(ParseValidationMessage(arrIsValidated));
		return false;
	}
		
	return true;
}


function ValidateProductTourForm(frm)
{
    var arrIsValidated = new Array();
    var firstInValidField = null;

    if (frm.txtEmailAddress.value.trim().IsEmpty() == -1) 
    {
        arrIsValidated.push('Email Address');

        if (firstInValidField == null)
            firstInValidField = frm.txtEmailAddress;
    }
    else if (!IsValidEmailAddress(frm.txtEmailAddress.value.trim())) 
    {
        arrIsValidated.push('Email Address ( Invalid )');

        if (firstInValidField == null)
            firstInValidField = frm.txtEmailAddress;
    }

    if (frm.txtPassword.value.trim().IsEmpty() == -1) 
    {
        arrIsValidated.push('Password');

        frm.txtConfirmPassword.value = '';

        if (firstInValidField == null)
            firstInValidField = frm.txtPassword;
    }
    else if (parseInt(frm.txtPassword.value.trim().length) < 4) 
    {
        arrIsValidated.push('Password ( Invalid - 4 characters minimum )');

        frm.txtConfirmPassword.value = '';

        if (firstInValidField == null)
            firstInValidField = frm.txtPassword;
    }
    else if (parseInt(frm.txtPassword.value.trim().length) > 10) 
    {
        arrIsValidated.push('Password ( Invalid - 10 characters maximum )');

        frm.txtConfirmPassword.value = '';

        if (firstInValidField == null)
            firstInValidField = frm.txtPassword;
    }
    else if (frm.txtPassword.value.trim().IsEmpty() != -1 && parseInt(frm.txtConfirmPassword.value.trim().length) <= 0) 
    {
        arrIsValidated.push('Confirm Your Password');

        if (firstInValidField == null)
            firstInValidField = frm.txtConfirmPassword;
    }
    else if (frm.txtPassword.value.trim() != frm.txtConfirmPassword.value.trim()) 
    {
        arrIsValidated.push('Passwords Do Not Match');

        if (firstInValidField == null)
            firstInValidField = frm.txtConfirmPassword;
    }
    
    
    if (firstInValidField != null)
        firstInValidField.focus();

    if (parseInt(arrIsValidated.length) > 0) 
    {
        alert(ParseValidationMessage(arrIsValidated));
        return false;
    }

    return true;
}

function ValidateTeacherToolForm(frm)
{
    var errors = [];
    var errorFields = [];
    var fields = [];
    
    if (frm['first_name']) 
    {
        fields.push(frm['first_name']);
        if (frm['first_name'].value == "") 
        {
            errors.push("Please enter your first name.");
            errorFields.push(frm['first_name']);
        }
    }
    
    if (frm['last_name']) 
    {
        fields.push(frm['last_name']);
        if (frm['last_name'].value == "") 
        {
            errors.push("Please enter your last name.");
            errorFields.push(frm['last_name']);
        }
    }
    
    fields.push(frm['email']);
    if (!IsValidEmailAddress(frm['email'].value))
    {
        errors.push("Please enter a valid email address.");
        errorFields.push(frm['email']);
    }
    
    fields.each(function(el) { $(el).removeClassName('error'); });
    if (errors.length > 0)
    {
        errorFields.each(function(el) { $(el).addClassName('error'); });
        alert(errors.join('\n\n'));
        return false;
    }
    
    return true;
}


function ToggleState(country)
{
	var state = GetObject('selSchoolStateProvince');
	
	state.disabled = (country.options[country.options.selectedIndex].value != "US") ? true : false;
		
	return;
}


function IsValidUSZipPostalCode(zipPostalCode)
{
	var regex_pattern = /^\d{5}([\-]\d{4})?$/;
	
	return (regex_pattern.test(zipPostalCode)) ? true : false;
}

function IsValidUSPhoneNumber(phoneNumber)
{
	var regex_pattern = /^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})( ?(x|ext) ?\d{1,5}){0,1}$/;
	
	return (regex_pattern.test(phoneNumber)) ? true : false;
}

function IsValidEmailAddress(emailAddress)
{
	var regex_pattern = /^\w+[\.\w_+\-]*@[\w_\-]+(\.[\w_\-]+)+$/;
	
	return (regex_pattern.test(emailAddress)) ? true : false;
}


function ParseValidationMessage(arrIsValidated)
{
	return "The following required fields are either missing or invalid:       \n\n" + arrIsValidated.join("\n").toString();
}
