function stripSpaces(obj) {
	var str = obj;
	var newstr = "";
	
    for (var i = 0; i < str.length; i++) {
		if (str.charAt(i) == " ") {}
		else {
	   		newstr = newstr + str.charAt(i);
		}
    }
	return newstr;
}
function GetAddr(sAddr, sDom) {
	document.location.href = "mailto: " + sAddr + "@" + sDom;
}
function OpenFile(sFile) {
	sFile = escape(sFile);
	BlurbWindow = window.open(sFile,'BlurbWindow','toolbar=no,status=yes,scrollbars=yes,width=500,height=500,resizable');
	BlurbWindow.focus();
}
function WindowOpen(strPage, iW, iH, sTarget) {
	if(!sTarget) sTarget = 'DisplayWindow';
	NewWindow = window.open(strPage,sTarget,'toolbar=no,status=yes,scrollbars=yes,width=' + iW + ',height=' + iH + ',resizable=yes');
	NewWindow.focus();
}
function CalOpen(strPage) {
	CalWindow = window.open(strPage,'CalWindow','toolbar=no,status=yes,scrollbars=yes,width=300,height=180,resizable=yes');
	CalWindow.focus();
}
function isEmail(str) {
	// allow explicit 'none' as a email address. 
	if(str =='none') return true;
	
  // are regular expressions supported?
  var supported = 0;
  if (window.RegExp) {
    var tempStr = "a";
    var tempReg = new RegExp(tempStr);
    if (tempReg.test(tempStr)) supported = 1;
  }
  if (!supported) 
    return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
  var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
  var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{1,4})(\\]?)$");
  return (!r1.test(str) && r2.test(str));
}

function SubRollOverRow(oTd) {oTd.bgColor="FFFF99";}
function SubRollOutRow(oTr, c) {oTr.bgColor=c;}
	
function CheckNumber() {
	iCode = window.event.keyCode;
	if (isNaN(String.fromCharCode(iCode)) && String.fromCharCode(iCode) != ".") {
		event.keyCode = 0;
	}
}

function CheckNum(e) {
	var key;
	var keychar;
	var reg;
	
	if(window.event) {
		key = window.event.keyCode; 
	}
	else if(e.which) {
		key = e.which; 
	}
	else {
		return true;
	}
	iCode = String.fromCharCode(key);
	if (isNaN(iCode) && iCode != ".") {
		// Allow the backspace (delete) key.
        if ( key == 8 )
	  		return true;
		else
			return false;
	}
	else {
		return true;
	}
}

function CheckPhoneNumber() {
	iCode = window.event.keyCode;
	if (isNaN(String.fromCharCode(iCode)) && String.fromCharCode(iCode) != " " && String.fromCharCode(iCode) != "+") {
		event.keyCode = 0;
	}
}
function Clear(obj, txt) {
	if (obj.value == txt) {
		obj.value = "";
	}
}


		function displayChars(obj, iNum) {
			iLen = obj.value.length;
			iLeft = iNum - iLen;
			sStr = new String(obj.value)
			if (iLeft <= 0) {
				obj.value = sStr.slice(0, iNum);
			}
		}

browserName = navigator.appName;
browserVer = parseInt(navigator.appVersion);
if (browserName == "Netscape" && browserVer >=3) version = "yes";
else if (browserName == "Microsoft Internet Explorer" && browserVer >=4) version = "yes"
else version ="no";

function img_act(imgName, imgURL) {
	if (version == "yes") {
		imgOn = eval(imgName + imgURL + ".src");
		document[imgName].src = imgOn;
	}
}

//=============================================================================
// Image Preloader
function ImagePreloader(images,callback)
{
	// store the callback
	this.callback = callback;

	// initialize internal state.
	this.nLoaded = 0;
	this.nProcessed = 0;
	this.aImages = new Array;

	// record the number of images.
	this.nImages = images.length;

	// for each image, call preload()
	for ( var i = 0; i < images.length; i++ ) 
		this.preload(images[i]);
}
ImagePreloader.prototype.preload = function(image)
{
	// create new Image object and add to array
	var oImage = new Image;
	this.aImages.push(oImage);
	
	// set up event handlers for the Image object
	oImage.onload = ImagePreloader.prototype.onload;
	oImage.onerror = ImagePreloader.prototype.onerror;
	oImage.onabort = ImagePreloader.prototype.onabort;
	
	// assign pointer back to this.
	oImage.oImagePreloader = this;
	oImage.bLoaded = false;
	oImage.source = image;
	
	// assign the .src property of the Image object
	oImage.src = image;
}
ImagePreloader.prototype.onComplete = function()
{
	this.nProcessed++;
	if ( this.nProcessed == this.nImages )
		this.callback(this.aImages);
}
ImagePreloader.prototype.onload = function()
{
	this.bLoaded = true;
	this.oImagePreloader.nLoaded++;
	this.oImagePreloader.onComplete();
}
ImagePreloader.prototype.onerror = function()
{
	this.bError = true;
	this.oImagePreloader.onComplete();
}
ImagePreloader.prototype.onabort = function()
{
	this.bAbort = true;
	this.oImagePreloader.onComplete();
}

function strip(obj, sChars) {
	var str = obj.value;
	var newstr = "";
	
    for (var i = 0; i < str.length; i++) {
       if (sChars.indexOf(str.charAt(i)) == -1) {}
	   else {
	   	newstr = newstr + str.charAt(i);
	   }
    }
	obj.value = newstr;
}

// Credit card checks below
function CheckPaymentForm(sFrm) {
	bReturn = true;
	sM = "";
	iSel = eval("document." + sFrm + ".CardType").selectedIndex;
	iCard = eval("document." + sFrm + ".CardNumber").value;
	sType = eval("document." + sFrm + ".CardType")[iSel].text;
	sMth = eval("document." + sFrm + ".Expiry")[0].value;
	sYr = eval("document." + sFrm + ".Expiry")[1].value
	if (eval("document." + sFrm + ".CardName").value =='') {
		bReturn = false;
		sM = sM + "You must enter a name for your credit card.\n";
	}
	if (!isValidCardNo(iCard, sType)) {
		bReturn = false;
		sM = sM + "Please enter a valid credit card number.\n";
	}
	if( expired(sMth, sYr) ) {							// check if entered date is already expired.
		sM = sM + "Sorry! The expiration date you have entered would make this card invalid.";
		bReturn = false;
	}
	if (!bReturn) {
		alert(sM);
	}
	return bReturn;
}
		
function mod10( cardNumber ) { // LUHN Formula for validation of credit card numbers.
	var ar = new Array( cardNumber.length );
	var i = 0,sum = 0;

	for( i = 0; i < cardNumber.length; ++i ) {
		ar[i] = parseInt(cardNumber.charAt(i));
    }
	for( i = ar.length -2; i >= 0; i-=2 ) { // you have to start from the right, and work back.
		ar[i] *= 2;							 // every second digit starting with the right most (check digit)
		if( ar[i] > 9 ) ar[i]-=9;			 // will be doubled, and summed with the skipped digits.
	}										 // if the double digit is > 9, ADD those individual digits together 

	for( i = 0; i < ar.length; ++i ) {
		sum += ar[i];						 // if the sum is divisible by 10 mod10 succeeds
	}
	return (((sum%10)==0)?true:false);	 	
}


function expired( month, year ) {
	var now = new Date();							// this function is designed to be Y2K compliant.
	var expiresIn = new Date("20" + year,month,0,0,0);		// create an expired on date object with valid thru expiration date
	expiresIn.setMonth(expiresIn.getMonth()+1);		// adjust the month, to first day, hour, minute & second of expired month
	if( now.getTime() < expiresIn.getTime() ) return false;
	return true;									// then we get the miliseconds, and do a long integer comparison
}


function isValidCardNo(cardNumber,cardType) {
	if( cardNumber.length == 0 ) {						//most of these checks are self explanitory
    	return false;				
	}
	var length = cardNumber.length;			//perform card specific length and prefix tests
	switch( cardType ) {
		case 'AMEX':
			if( length != 15 ) {
				return false;
			}
			var prefix = parseInt( cardNumber.substring(0,2));
			if( prefix != 34 && prefix != 37 ) {
				return false;
			}
			break;
		case 'Diners':
			if( length != 16 ) {
				return false;
			}
			var prefix = parseInt( cardNumber.substring(0,4));
			if( prefix != 6011 ) {
				return false;
			}
			break;
		case 'Mastercard':
  			if( length != 16 ) {
  				return false;
  			}
  			var prefix = parseInt( cardNumber.substring(0,2));
			if( prefix < 51 || prefix > 55) {
      			return false;
      		}
      		break;
      	case 'visa':
			if( length != 16 && length != 13 ) {
          		return false;
          	}
          	var prefix = parseInt( cardNumber.substring(0,1));
			if( prefix != 4 ) {
				return false;
			}
		break;
	}
	if( !mod10( cardNumber ) ) { 		// run the check digit algorithm
		return false;
	}
	return true; // at this point card has not been proven to be invalid
}

//=============================================================================
// Disabler
var bver="no";
bName = navigator.appName;
bVer = parseInt(navigator.appVersion);
if      (bName == "Netscape" && bVer >= 3) bver = "n3";
else if (bName == "Netscape" && bVer <= 2) bver = "no";
else if (bName == "Microsoft Internet Explorer" && bVer <= 3) bver = "no";
else if (bName == "Microsoft Internet Explorer" && bVer >= 4) bver = "e4";

var b = navigator.appName
if (b=="Netscape") b = "ns"
else if (b=="Microsoft Internet Explorer") b = "ie"
if(navigator.userAgent.indexOf("Firefox",0) >= 0) {
	b2 = "ff";
}
if (b == 'ns' && b2!= "ff") {
	var netscapeItems;
	var o;
	var arrElementsStatus = new Array();
	var arrElementsNames = new Array();
	var arrListBoxValue = new Array();

	netscapeItems = new details();

	this.document.captureEvents(Event.MOUSEDOWN);
	this.document.captureEvents(Event.FOCUS);
	this.document.onMouseDown=checkEvent;
	this.document.onFocus=checkEvent;
}
function disableEl(obj) {
	if (b == 'ns') {
		if (b2 == 'ff') {
			obj.disabled = true;
		}
		else {
			disableNS(obj);
		}
	}
	else if (b == "ie") {
		obj.disabled = 1;
	}
}
function enableEl(obj) {
	if (b == 'ns') {
		if (b2 == 'ff') {
			obj.disabled = false;
		}
		else {
			enableNS(obj);
		}
	}
	else if (b == "ie") {
		obj.disabled = 0;
	}
}
function disableNS(objName){
	if (objName[0] != null  && objName[0].type == 'radio') {
			arrElementsStatus[objName[0].name] = 'readonly';
	}
	else {
		if (objName.type == "select-multiple") {
			arrListBoxValue[objName.name] = objName.selectedIndex;
		}
		this.arrElementsStatus[objName.name] = 'readonly';
	}
}
function enableNS(objName){
	if (objName[0] != null && objName[0].type == 'radio') {
			arrElementsStatus[objName[0].name] = 'editable';
	}
	else {
		this.arrElementsStatus[objName.name] = 'editable';
	}
}

function details() {
	//Get Array Size
	
	for(i = 0; i<document.forms.length; i++) {
		nArraySize += document.forms[i].elements.length;
	}
	this.arrElementsNames = new Array(nArraySize);
	var k=0;
	//Go through each element : assign name &  readonly value to associative array
	for(i = 0; i<document.forms.length; i++) {
		for (j =0; j<document.forms[i].elements.length; j++) {
			if (document.forms[i].elements[j].type == "select-multiple") {
				arrListBoxValue[document.forms[i].elements[j].name] = document.forms[i].elements[j].selectedIndex;
			}
			arrElementsStatus[document.forms[i].elements[j].name] = 'editable';
			arrElementsNames[k++] = document.forms[i].elements[j].name;
		}
	}
}

function checkEvent(e) {
	if (e.target !="") {
		if (b == 'ns') {
			if (e.target.name) {
				if (arrElementsStatus[e.target.name] == 'readonly') {
					if (e.target.type == "select-multiple") {
						if (arrListBoxValue[e.target.name] != -1) {
							e.target[arrListBoxValue[e.target.name]].selected = true;
						}
						else {
							e.target.selectedIndex = -1;
						}
					}
					e.target.blur();
					return false;
				}
				else {
					return true;
				}
			}
		}
		else {
			return true;
		}
	}
}
	
function padleft(val, ch, num) {
    var re = new RegExp(".{" + num + "}$");
    var pad = "";

    do  {
        pad += ch;
    }while(pad.length < num)

    return re.exec(pad + val);
}
function padright(val, ch, num){
    var re = new RegExp("^.{" + num + "}");
    var pad = "";

    do {
        pad += ch;
    } while (pad.length < num)

    return re.exec(val + pad);
}

function moveOnMax(evt){
	if(evt.keyCode >= 48 && evt.keyCode <= 90) {
		if(evt.target.value.length >= evt.target.maxLength){
			$(evt.target).next(":input").focus();
		}

	}


}

