
// do some browser detection
var clientPC = navigator.userAgent.toLowerCase(); // Get client info
var is_gecko = ((clientPC.indexOf('gecko')!=-1) && (clientPC.indexOf('spoofer')==-1)
                && (clientPC.indexOf('khtml') == -1) && (clientPC.indexOf('netscape/7.0')==-1));
var is_safari = ((clientPC.indexOf('AppleWebKit')!=-1) && (clientPC.indexOf('spoofer')==-1));
var is_khtml = (navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled ));
if (clientPC.indexOf('opera')!=-1) {
    var is_opera = true;
    var is_opera_preseven = (window.opera && !document.childNodes);
    var is_opera_seven = (window.opera && document.childNodes);
}

// this is for future use, to fold a bunch of fieldsets into a "tabbed" interface
function tabbedform(form) {
    if(!form || !document.createElement) return;
    if(form.nodeName.toLowerCase() == 'a') return; // Occasional IE problem
    form.className = form.className + 'jsforms';
    var sections = new Array();
    children = form.childNodes;
    var seci = 0;
    for(i=0;i<children.length;i++) {
        if(children[i].nodeName.toLowerCase().indexOf('fieldset') != -1) {
            children[i].id = 'formsection-' + seci;
            children[i].className = 'formsection';
            if(is_opera || is_khtml) children[i].className = 'formsection operaformsection';
            legends = children[i].getElementsByTagName('legend');
            sections[seci] = new Object();
            if(legends[0] && legends[0].firstChild.nodeValue)
                sections[seci].text = legends[0].firstChild.nodeValue;
            else
                sections[seci].text = '# ' + seci;
            sections[seci].secid = children[i].id;
            seci++;
            if(sections.length != 1) children[i].style.display = 'none';
            else var selectedid = children[i].id;
        }
    }
    var toc = document.createElement('ul');
    toc.id = 'formtoc';
    toc.selectedid = selectedid;
    for(i=0;i<sections.length;i++) {
        var li = document.createElement('li');
        if(i == 0) li.className = 'selected';
        var a =  document.createElement('a');
        a.href = '#' + sections[i].secid;
        a.onclick = uncoversection;
        a.appendChild(document.createTextNode(sections[i].text));
        a.secid = sections[i].secid;
        li.appendChild(a);
        toc.appendChild(li);
    }
    form.insertBefore(toc, children[0]);
    document.getElementById('formsubmit').id = 'formcontrol';
}

function uncoversection() {
    oldsecid = this.parentNode.parentNode.selectedid;
    newsec = document.getElementById(this.secid);
    if(oldsecid != this.secid) {
        ul = document.getElementById('preftoc');
        document.getElementById(oldsecid).style.display = 'none';
        newsec.style.display = 'block';
        ul.selectedid = this.secid;
        lis = ul.getElementsByTagName('li');
        for(i=0;i< lis.length;i++) {
            lis[i].className = '';
        }
        this.parentNode.className = 'selected';
    }
    return false;
}

var lastBackColor;
var lastColor;
var lastTextDecoration;

function RowHighlight(row)
{
	lastBackColor = row.style.backgroundColor;
	row.style.backgroundColor = RowHighlightBackColor;

	lastColor = row.style.color;
	row.style.color = RowHighlightColor;
}

function RowUnHighlight(row)
{
	row.style.backgroundColor = lastBackColor;
	row.style.color = lastColor;
}

// THE FOLLOWING VALIDATION CODE IS
// Copyright © 2001 by Apple Computer, Inc., All Rights Reserved.
//
// You may incorporate this Apple sample code into your own code
// without restriction. This Apple sample code has been provided "AS IS"
// and the responsibility for its operation is yours. You may redistribute
// this code, but you are not permitted to redistribute it as
// "Apple sample code" after having made changes.

function checkEmail (strng, desc)
{
	var error="";
	if(desc == null) {
		desc = 'the Email address';
	}

	if (strng.length == 0) {
		error = "Please enter " + desc + ".\n";
	} else {

		var emailFilter=/^.+@.+\..{2,3}$/;

		if (!(emailFilter.test(strng))) { 
			error = desc.substring(0, 1).toUpperCase() + desc.substring(1, 255) + " is not valid.\n";
		} else {
			// test for illegal characters
			var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/
			if (strng.match(illegalChars)) {
				error = desc.substring(0, 1).toUpperCase() + desc.substring(1, 255) + " contains invalid characters.\n";
			}
		}
	}
	return error;    
}


// phone number - strip out delimiters and check for 10 digits
function checkPhone(strng, desc)
{
	var error = "";
	if(desc == null) {
		desc = 'the phone number';
	}


	if (strng == "") {
		error = "Please enter " + desc + ".\n";
	} else {
		var stripped = strng.replace(/[\(\)\.\-\ ]/g, ''); //strip out acceptable non-numeric characters

		if (isNaN(parseInt(stripped))) {
			error = desc.substring(0, 1).toUpperCase() + desc.substring(1, 255) + " contains illegal characters.";
		}
		if (!(stripped.length == 10)) {
			error = desc.substring(0, 1).toUpperCase() + desc.substring(1, 255) + " is the wrong length. Make sure you included an area code.\n";
		} 
	}
	return error;
}


// password - between 6-8 chars, uppercase, lowercase, and numeral
function checkPassword(strng, desc)
{
	var error = "";
	if(desc == null) {
		desc = 'your password';
	}

	if (strng == "") {
		error = "Please enter " + desc + ".\n";
	}

	var illegalChars = /[\W_]/; // allow only letters and numbers

	if (illegalChars.test(strng)) {
//		error = desc.substring(0, 1).toUpperCase() + desc.substring(1, 255) + " contains illegal characters.\n";
	} else if (!((strng.search(/(a-z)+/)) && (strng.search(/(A-Z)+/)) && (strng.search(/(0-9)+/)))) {
//		error = desc.substring(0, 1).toUpperCase() + desc.substring(1, 255) + " must contain at least one uppercase letter, one lowercase letter, and one numeral.\n";
	}  
	return error;    
}    


// username - 4-10 chars, uc, lc, and underscore only.
function checkUsername(strng, desc)
{
	var error = "";
	if(desc == null) {
		desc = 'your username';
	}

	if (strng == "") {
		error = "Please enter " + desc + ".\n";
	}


	var illegalChars = /\W/; // allow letters, numbers, and underscores

	if ((strng.length < 4) || (strng.length > 10)) {
		error = "The username is the wrong length.\n";
	} else if(illegalChars.test(strng)) {
		error = "The username contains illegal characters.\n";
	} 
	return error;
}       


// non-empty textbox
function checkEmpty(strng, desc)
{
	var error = "";
	if(desc == null) {
		desc = 'text in the text box';
	}

	if (strng.length == 0) {
		error = "Please enter " + desc + ".\n"
	}
	return error;	  
}

// valid selector from dropdown list
function checkDropdown(choice, desc)
{
	var error = "";
	if(desc == null) {
		desc = 'an item in the drop-down list';
	}

	if (choice == 0) {
		error = "Please choose " + desc + ".\n";
	}    
	return error;
}

function checkRadio(radio, desc)
{
	var radio_choice = false;

	if(desc == null) {
		desc = 'radio button';
	}

	for (counter = 0; counter < radio.length; counter++) {
		if(radio[counter].checked) {
			radio_choice = true;
		}
	}

	if (!radio_choice) {
		return "Please select a " + desc + ".\n";
	}

	return "";
}

function checkCreditCard(strng, desc)
{
	if(strng.length == 0) {
		return "Please enter the credit card number.\n";
	}

	if(isValidCreditCard(strng)) {
		return "";
	} else {
		return "The credit card number is not valid.\n";
	}
}

function isValidCreditCard(number) {
	var total = 0;
	var flag = 0;
	for (var i=(number.length - 1);i>=0; i--) {
		if (flag == 1) {
			var digits = number.charAt(i) * 2;
			if (digits > 9) digits -= 9;
			total += digits;
//			var reminder = digits % 10;
//			var quotient = (digits - reminder) / 10;
//			total = total + parseInt(reminder);
//			total = total + parseInt(quotient);
			flag = 0;
		} else {
			total = total + parseInt(number.charAt(i));
			flag = 1;
		}
	}
	if ((total%10) == 0) {
		return true;
	} else {
		return false;
	}
}

function get_creditcard_type(number) {
	/* 
	//	Card Prefixes
	//
	//	Mastercard	51-55
	//	Visa		4
	//	AmEx		34,37
	//	Discover	6011
	*/

	var firstNumber = number.substring(0,1);
	var firstThreeNumbers = number.substring(0,3);

	if (firstNumber == 4) {
		return "VISA";
	} 

	var firstTwoNumbers = number.substring(0,2);
	if (firstTwoNumbers > 50 && firstTwoNumbers < 56) {
		return "MASTERCARD";
	}

	if (firstTwoNumbers == 34 || firstTwoNumbers == 37) {
		return "AMEX";
	}

	var firstFourNumbers = number.substring(0,4);
	if (firstFourNumbers == 6011) {
		return "DISCOVER";
	}
}

function textCounter(input,counter,max) {
	if (input.value.length > max) {
		input.value = input.value.substring(0, max);
	} else {
		counter.value = max - input.value.length;
	}
}

