// 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=yes,status=no,menubar=yes,resizable=yes,scrollbars=yes,width='+width+',height='+height+',scrollbars=yes,top=30,left=30');1
    newwindow.focus();
}
// Called from 'Business Customers' link in footer
function OpenBusinessWindow (openURL, WindowName, width, height)
{
    var newwindow = window.open(openURL,WindowName,'toolbar=yes,location=yes,status=yes,menubar=yes,resizable=yes,scrollbars=yes,width='+width+',height='+height+' ');
    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;
}

function ValidateEmail(efield, required)
{
	if (required == false && efield.value == "") {
		return "";
	}
	
	var evalue = efield.value;

	var error = "Invalid E-mail Address.\n";
	var at = "@";
	var dot = ".";
	var lat = evalue.indexOf(at);
	var lstr = evalue.length;
	var ldot = evalue.indexOf(dot);

	if (lat == -1 || lat == 0 || lat == lstr){
		return error;
	}

	if (ldot == -1 || ldot == 0 || ldot == lstr){
		return error;
	}

	if (evalue.indexOf(at, (lat + 1)) != -1){
		return error;
	}

	if (evalue.substring(lat - 1, lat) == dot || evalue.substring(lat + 1, lat + 2) == dot || evalue.substring(lstr - 1, lstr) == dot || evalue.substring(lstr - 2, lstr - 1) == dot){
		return error;
	}

	if (evalue.indexOf(dot, (lat + 2)) == -1){
		return error;
	}

	if (evalue.indexOf(" ") != -1){
		return error;
	}
	
	return "";
}

function ValidatePhone(pfield, required)
{
	if (required == false && pfield.value == "") {
		return "";
	}
	
	var pvalue = pfield.value;
	rePhoneNumber = new RegExp(/^\([1-9]\d{2}\)\s?\d{3}\-\d{4}$/);

	if (!pvalue.match(rePhoneNumber)) {
		return "Please enter Phone Number in the format: (555) 555-1234\n";
	}
	
	return "";
}

function ValidateZIPCode(zfield, required)
{
	if (required == false && zfield.value == "") {
		return "";
	}
	
	var zvalue = zfield.value;
	var zerocount = 0;
	if (zvalue.length!=5) {
		return "Please enter a 5-digit ZIP Code.\n";
	}
	for (var i=0; i < zvalue.length; i++) {
		temp = "" + zvalue.substring(i, i+1);
		if (temp == "0") zerocount++;
		if (zerocount == 5) {
			return "Please enter a valid 5-digit ZIP Code.\n";
		}
	}
	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") {
		return "Please enter a valid 5-digit ZIP Code.\n";
	}

	return "";
}

function FormRequired(field)
{
	if (field.type=="checkbox" || field.type=="radio") {
		if (!field.checked){
			return field.name + " is a required field.\n";
		}
	} else if (field[0] && (field[0].type=="checkbox" || field[0].type=="radio")) {
		var check = false;
		var name = field[0].name;
		for (var i=0; i<field.length; i++) {
			if (field[i].checked) {
				check = true;
			}
		}
		if (!check) {
			var msg;
			if (field.type=="checkbox"){
				msg = "Please choose at least one option from ";
			}
			else {
				msg = "Please choose an option from ";
			}
			return msg + name + "\n";
		}
	} else if (field.type=="select-one" || field.type=="select-multiple") {
		if (field.options[field.selectedIndex].value=="")
			return field.name + " is a required field.\n";
	} else {
		if (field.length == 0 || field.value == "") {
			return field.name+" is a required field.\n";
		}
	}
	return "";
}

// 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 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;
}

function clearZipValue()
{
	return;
}

function addOnLoadFunction(func)
{
	var oldOnLoad = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldOnLoad();
			func();
		}
	}
}

/*	
	Set styles for editable competency bar on 2.20 local home pages.
	Gets the style from the SPAN tag (written inside the editable Div) and applies it to the containing TD.
	To use this code, number the comp bar items 0-2.
*/
function setCompbarStyles()
{
	var ClassA, ClassB, ClassC;
	
	// Editable DIV regions 
	var divA = document.getElementById('DFCMSave0');
	var divB = document.getElementById('DFCMSave1');
	var divC = document.getElementById('DFCMSave2');
	
	// SPAN tags written by DFAF
	var arrSpanA = divA.getElementsByTagName('span');
	var spanA = arrSpanA[0];
	var arrSpanB = divB.getElementsByTagName('span');
	var spanB = arrSpanB[0];
	var arrSpanC = divC.getElementsByTagName('span');
	var spanC = arrSpanC[0];
			
	// TDs wrapping the editable DIVs
	var tdA = document.getElementById('td1');
	var tdB = document.getElementById('td2');
	var tdC = document.getElementById('td3');
	
	// If text has been edited, get the style from the SPAN tag. Otherwise, make it default.
	if (spanA) ClassA = spanA.className;
	else ClassA = "cable_div";
	
	if (spanB) ClassB = spanB.className;
	else ClassB = "online_div";	
	
	if (spanC) ClassC = spanC.className;		
	else ClassC = "phone_div";	
	
	// Assign classes to TDs
	tdA.className = ClassA;
	tdB.className = ClassB;
	tdC.className = ClassC;
	
	// Separators between headings.
	var SpacerA = document.getElementById('SpacerCellA');
	var SpacerB = document.getElementById('SpacerCellB');
	var SpacerC = document.getElementById('SpacerCellC');
	var SpacerD = document.getElementById('SpacerCellD');
		
	// Assign classes to separators
	SpacerA.className = setSpacerClass(ClassA, ClassB);
	SpacerB.className = setSpacerClass(ClassB, ClassA);	
	SpacerC.className = setSpacerClass(ClassB, ClassC);
	SpacerD.className = setSpacerClass(ClassC, ClassB);
}

// Set styles for separators between comp bar headings. Plus symbol for adjacent products, otherwise spacer with color (for "custom").
function setSpacerClass(A, B)
{
	var sClass = "";
	if (A == "custom_div" && B == "custom_div")
	{
		return "custom_div_spacer";
	}
	else if (A == "custom_div" || B == "custom_div")
	{
		sClass = A + "_spacer";
		return sClass;	
	}
	else
	{	
		sClass = A + "_plus";
		return sClass;
	}
}

