// General purpose scripts. Browser sniffing, etc.

//<Script Language="JavaScript">

/*****************************************
	Open link in new window. Gets focused, positioned, and re-used.
	Pass in URL, Name, width, height
	NOTE: The generic popup is spec'd at 400x550 px. 
		- Pass in 440x550 to allow for scrollbar and page margin.)
		- For product info popup, pass in 485x550 .
*****************************************/
function OpenNewWindow(openURL,WindowName,width,height) 
{
    var newwindow = window.open(openURL,WindowName,'toolbar=no,location=no,status=no,menubar=no,resizable=yes,width='+width+',height='+height+',scrollbars=yes,top=30,left=30');
    newwindow.focus();
}

function OpenProgramGuide(openURL,WindowName,width,height) 
{
    var newwindow = window.open(openURL,WindowName,'toolbar=yes,location=no,status=no,menubar=yes,resizable=yes,width='+width+',height='+height+',scrollbars=yes,top=30,left=30');
    newwindow.focus();
}

// NOTE: Remove the else branch after localization is implemented. It simply prevents showing a broken page.
function validateZIP(zfield) 
{
		var zvalue = zfield.value;
		var zerocount = 0;
		if (zvalue.length!=5) {
			alert("Please enter a 5-digit ZIP Code.");
			zfield.focus();
			return false;
		}
		for (var i=0; i < zvalue.length; i++) {
			temp = "" + zvalue.substring(i, i+1);
			if (temp == "0") zerocount++;
			if (zerocount == 5) {
				alert("Please enter a valid 5-digit ZIP Code.");
				zfield.select();
				return false;
			}
		}
		var valid = "0123456789"
		var ok = "yes";
		var temp;
		for (var i=0; i < zvalue.length; i++) {
			temp = "" + zvalue.substring(i, i+1);
			if (valid.indexOf(temp) == "-1") ok = "no";
		}
		if (ok == "no") {
			alert("Please enter a valid 5-digit ZIP Code.");
			zfield.focus();
			return false;
		}
	
		return true;
}

// Morph of validateZIP to include the distance field on the Payment Center page.
function validatePC(zfield,dfield) 
{
		var zvalue = zfield.value;
		var dvalue = dfield.value;
		var valid = "0123456789"; // numeric entries only
		var temp, temp2;
		
		// Begin with zip validation
		var zerocount = 0;
		
		// zip code field is not empty and length == 5 characters 
		if (zvalue.length!=5) {
			alert("Please enter a 5-digit ZIP Code.");
			zfield.focus();
			return false;
		}
		
		// zip code is all numeric values
		for (var i=0; i < zvalue.length; i++) {
			temp = "" + zvalue.substring(i, i+1);
			if (valid.indexOf(temp) == "-1")
			{
				alert("Please enter a valid 5-digit ZIP Code.");
				zfield.select();
				return false;
			}
		}
		
		// zip code is not all zeros
		for (var i=0; i < zvalue.length; i++) {
			temp = "" + zvalue.substring(i, i+1);
			if (temp == "0") zerocount++;
			if (zerocount == 5) {
				alert("Please enter a valid 5-digit ZIP Code.");
				zfield.select();
				return false;
			}
		}
		
		// Begin distance validation
		var DistOK = true;
		var reject = "dist1";
		
		// Distance field is empty
		if (dvalue == "")
		{
			DistOK = false;
			reject = "dist1";
		}
		
		// Distance contains alpha characters
		for (var i=0; i < dvalue.length; i++) {
			temp2 = "" + dvalue.substring(i, i+1);
			if (valid.indexOf(temp2) == "-1") 
			{
				DistOK = false;
				reject = "dist1";
			}
		}
		
		// Distance field is larger than 50
		if ((dvalue > 50) || (dvalue == 0))
		{
			DistOK = false;
			reject = "dist2";
		}
		
		// Choose an error message
		if (!DistOK) {		
			if (reject == "dist1")
			{
				alert("Please enter a valid distance.");
				dfield.focus();
				return false;
			}
			else
			{
				alert("Please enter a distance between 0 and 50 miles.");
				dfield.focus();
				return false;
			}
		}	
		return true;
}


// Pass in two required fields: email and last name.
function validateMoveForm(oEmailFld, oLastnameFld) 
{
	var sEmail = oEmailFld.value;
	var sLastname = oLastnameFld.value;
	var bFocus = false;
	var sMessage = "Please enter:\n";
	
	if (sEmail == "")
	{
		sMessage += "- Your e-mail address\n";
		if (bFocus == false)
		{	
			bFocus = true;
			oEmailFld.focus();
		}
	}
	else
	{	
		// Validate email
	}
	
	if (sLastname == "")
	{
		sMessage += "- Your last name\n";
		if (bFocus == false)
		{	
			bFocus = true;
			oLastnameFld.focus();
		}
	}
	if (bFocus == true)
	{
		alert(sMessage);
		return false;
	}
	
	// Remove this branch when ready
	else
	{
		window.navigate('/FutureFunctionality.html');
		return false;	
	}
}


// Require a term in search box. 
// Pass in the field name.
function validateFaqSearch(sField) 
{
	var sTerm = sField.value;
  	if (sField.value == "") {
    	alert("Please enter at least one word to search for.");
    	sField.focus();
    	return false;
  	}
  	
  	// Implement search and remove this branch.
	else
	{
		window.navigate('/FutureFunctionality.html');
		return false;
	}
  
  	return true;
}

// Validate state and region on Customer Service localization
function validateRegion(oStateFld, oRegionFld) 
{
	var bFocus = false;
	if (oStateFld.value == -1)
	{
		if (bFocus == false)
		{
			alert('Please select your state.');
			bFocus = true;
			oStateFld.focus();
			return false;
		}
	}
	if (oRegionFld.value == -1)
	{
		if (bFocus == false)
		{
			alert('Please select your region.');
			bFocus = true;
			oRegionFld.focus();
			return false;
		}
	}
	
	return;
}


// Validate payment center ZIP and search radius in Payment Center search box. Not currently implemented.
function ValidatePaymentCenter(oZip, oRadius) 
{
	//alert("Searching for your nearest payment center...");	
}


/*****************************************
	Set size of text box depending on NN/IE to maintain layout.
	Pass field name, size for NN and larger size for IE.
*****************************************/
function SetBoxSize(oName, iSmall, iLarge) 
{		
	if (document.all)					// IE
		oName.size = iLarge;
	else if (document.getElementById)	// Netscape 6+
		oName.size = iSmall;
	else if (document.layers)			// Netscape <6
		oName.size = iSmall;
	else
		oName.size = iSmall;			// Default
}


/********************************************
	Browser sniff
		Returns:			For:
		--------			-------------
		Msie				IE before 5.5
		Msie55Up			IE 5.5 and later
		Netscape			NN before 7
		Netscape702Up		NN 7.02 and 8
		Netscape7To702		NN 7.0, 7.01 (because of Flash bug fixed in 7.02)
		Firefox				Mozilla Firefox
		Safari				Safari. Moved above Gecko since Safari's string contains "like Gecko".
		Gecko				Other gecko browsers besides the above NN, Firefox
		na					None of the above
*********************************************/	
function GetBrowser()
{
	var sAgent =navigator.userAgent.toLowerCase();
	var sBrowser;

	if (sAgent.indexOf('msie') != -1)
	{
		sBrowser = "Msie";
		if (sAgent.indexOf('msie 6') != -1 || sAgent.indexOf('msie 5.5') != -1 || sAgent.indexOf('msie 7') != -1)
			sBrowser = "Msie55Up";
	}
	else if (sAgent.indexOf('netscape') != -1)
	{
		sBrowser = "Netscape";
		if(sAgent.indexOf('netscape/7') != -1 || sAgent.indexOf('netscape/8') != -1)
		{
			sBrowser = "Netscape702Up";
			// Tag versions below 7.02 bcz of Flash bug
			if(sAgent.indexOf('netscape/7.0') != -1 && (sAgent.indexOf('netscape/7.02') == -1))
			{
				sBrowser = "Netscape7To702";
				//debug alert("This is 7 but not 7.02: " + sBrowser);
			}
		}
	}
	else if (sAgent.indexOf('firefox') != -1)
	{
		sBrowser = "Firefox";
	}
	else if (sAgent.indexOf('safari') != -1)	// Look for Safari before Gecko bcz Safari includes "like Gecko" in its string.
	{
		sBrowser = "Safari";
	}
	else if (sAgent.indexOf('gecko') != -1)
	{
		sBrowser = "Gecko";
	}
	else
		sBrowser = "na";		// Other. Not IE, Netscape, Firefox, Gecko, Safari.
	return sBrowser;
}


/*****************************************************
	Float the legend on CLU page when window is scrolled.
	Call specific code depending on browser.
*****************************************************/
function SetFloatingDiv()
{
	var sBrowser = GetBrowser();
	
	if (sBrowser == "Msie" || sBrowser == "Msie55Up")					// IE
	{
		document.body.onscroll = Float;
		return;
	}
	else if((sBrowser == "Netscape702Up") || (sBrowser == "Netscape7To702"))	// Netscape 7.0 or above
	{
		// debug	alert("Browser: Netscape 7x");		
		FloatNetscape();
		return;
	}
	else if(sBrowser == "Firefox")			// Firefox
	{
		// debug	alert("Browser: Firefox");
		FloatFirefox();		
		return;
	}
	else if(sBrowser == "Safari")			// Look for Safari before Gecko bcz Safari includes "like Gecko" in its string.
	{
		// NOTE Calling the Firefox function for now
		// FloatFirefox();
		
		FloatSafari();
		
		return;
	}
	else if(sBrowser == "Gecko")			// catch non-NN, non-FF Geckos
	{
		// NOTE Calling the Firefox function for now
		FloatFirefox();		
		return;
	}
	else
		return;
}

/*****************************************************
	Float the legend on CLU page when window is scrolled.
	IE version
*****************************************************/
function Float()
{
	var Floater = document.all["FloatingDiv"];
	var iScreen = document.body.clientHeight;
	// Allow for height of legend column. iLegendCount is number of legends in Quick Filter column. It is counted on xsl page.
	var iLegendHeight = 60 + (iLegendCount * 22);
	
	var StartY = 0;	
	var ChromeY = 375;
	
	var CushTop = 80;	// Top cushion 
	var CushBot = 150;	// Bottom cushion 
	
	var NetWindow = iScreen - CushBot;

	// Amount that window has scrolled
	var ScrolledY = document.body.scrollTop;
	
	// New position. 
	var New = CushTop + ScrolledY - ChromeY;

	/* Debug
	alert("Legend ht\t" + iLegendHeight +"\nNet Window\t" + NetWindow + 
		"\nNew spot\t\t" + New);	
	*/
	
	if (NetWindow > iLegendHeight)
	{	
		if (ScrolledY > ChromeY)
		{	
			Floater.style.posTop = New;	
		}
		else
			Floater.style.posTop = StartY;	
	}
	else
	{
		Floater.style.posTop = StartY;
	}
}


function FloatFirefox()
{	
	var Floater = document.getElementById("FloatingDiv");
	var iScreen = window.innerHeight;
	//var CushBot = 45;
	var CushBot = 95;
	var StartY = 0;
	
	var NetWindow = iScreen - CushBot;
	
	// Allow for height of legend column. iLegendCount is number of legends. It is counted on xsl page.
	var iLegendHeight = 60 + (iLegendCount * 22);
	
	/* Debug 
	alert("\nNetscreen\t" + NetWindow + 
		"\nLegend ht\t" + iLegendHeight)
	*/	
	
	// Handle scroll by testing position at timed interval. 
	// Don't use unless screen can show all legends at font size +2.
	
	if (NetWindow > iLegendHeight)
	{	
		setInterval("CheckSize()",50);
	}
	else
	{
		Floater.style.position = "relative";
		Floater.style.top = 0 + "px";
	}
}

function FloatNetscape()
{
	var iScreen = window.innerHeight;
	var CushBot = 80;
	// Allow for height of legend column. iLegendCount is number of legends. It is counted on xsl page.
	var iLegendHeight = 60 + (iLegendCount * 22);
	
	var NetWindow = iScreen - CushBot;
	
	/* Debug 
	alert("\nNetscreen " + NetWindow + 
		"\nLeg " + iLegendHeight)
	*/
	
	// Handle scroll by testing position at timed interval. 
	// Don't use unless screen can show all legends at font size +2.
	if (NetWindow > iLegendHeight)
		setInterval("CheckSize()",50);
	else
	{
		Floater.style.position = "relative";
		Floater.style.top = 0 + "px";
	}	
}

function FloatSafari()
{	
	var Floater = document.getElementById("FloatingDiv");
	
	var iScreen = window.innerHeight;
	//var CushBot = 45;
	var CushBot = 95;
	var StartY = 0;
		
	var NetWindow = iScreen - CushBot;
	
	// Allow for height of legend column. iLegendCount is number of legends. It is counted on xsl page.
	var iLegendHeight = 60 + (iLegendCount * 22);
	
	/* Debug 
	alert("\nNetscreen\t" + NetWindow + 
		"\nLegend ht\t" + iLegendHeight)
	*/	
	
	// Handle scroll by testing position at timed interval. 
	// Don't use unless screen can show all legends at font size +2.
	if (NetWindow > iLegendHeight)
	{	
		// debug		alert ("yup\t" + GetBrowser());
		setInterval("CheckSize()",50);
	}
	else
	{
		/* Do not scroll or set position. It jumps left if this code is used.
			Floater.style.position = "relative";
			Floater.style.top = 0 + "px";
		*/
		Floater.style.position = "absolute";
		Floater.style.top = 0 + "px";
	}
}

/***************************************************
	Handle resize (non-IE) for CLU floating legend
	Called from FloatFirefox and FloatNetscape
****************************************************/
function CheckSize()
{	
	/***	NOTE: Don't use alerts here bcz this is called every x mSeconds! ****/
	
	var sBrowser = GetBrowser();
	
	var StartY = 0;
	var ChromeY = 280;
			
	// iLegendCount is number of legends in Quick Filter column. Counted in xsl page.
	var iLegendHeight = 60 + (iLegendCount * 22);
	
	if (sBrowser != "Msie" && sBrowser != "Msie55Up")
	{
		var Floater = document.getElementById("FloatingDiv");
		
		Floater.style.position = "absolute";

		var ScrolledAmount = document.body.scrollTop;
		var iScreen = window.innerHeight;		
		
		var New = ScrolledAmount - ChromeY;	
				
		if (ScrolledAmount < ChromeY)
		{
			Floater.style.top = 0 + "px";
		}
		else
		{
			Floater.style.top = New + "px";
		}
	}
}

function clearZipValue()
{
	return;
}
