// 2008.01.26 KJD: Document created for form validation testing and functions

//TODO: replace below session vars with real session ID
var sessionID = ""; // 2008.04.03 TLW: removed wildcard test sessionID

//Billing Info popin info
var billingInfo = {poboxElem : null,addressElem : null};

// 2008.03.28 KJD: Added for slight timeout
var functioncalled	= 0;
var reservationID	= "";

// 2008.03.31 KJD: Set error show
var erroropen 		= 0;

// 2008.01.28 KJD: ALL FUNCTIONS false=success, #=error

// 2008.01.26 KJD: Check for valid name field
function notValidName( thisname )
{
	// 2008.02.04 KJD: Check if valid text
	if( notValidText( thisname ) ){ return 30010; }

	// 2008.02.04 KJD: Do not exceed 32 chars
	if( thisname.length > 32 )
	{ 
		return 30011;
	}
	
	// return 30010;
	return false;
}

// 2008.01.26 KJD: Check for valid phone
function notValidPhone( areacode, prefix, suffix )
{
	// 2008.02.04 KJD: Check for alpha, symbols, space
	// var invalidChars = /[a-zA-Z\-\(\.\)\ ]/gi;
	
	var ValidChars = /[0-9]/gi;

	// 2008.02.04 KJD: Remove all invalid characters
	var fullNumber	= "" + areacode;
	if( prefix )
	{
		fullNumber += "" + prefix; 
	}
	
	if( suffix )
	{
		fullNumber += "" + suffix;
	}
	
	// 2008.02.04 KJD: Get only the numbers
	fullNumber		= OnlyDigits( fullNumber );
	
	// 2008.02.04 KJD: Check the length
	if( notValidLength( fullNumber, 10, 11 ) )
	{
		return 30021;
	}

	// return 30020;
	return false;
}

// 2008.01.26 KJD: Check for valid email
function notValidEmail( thisString )
{
	// 2008.02.04 KJD: Check for alpha, symbols, space
	var ValidChars = /[a-zA-Z0-9\-\@\.\_]/gi;

	// 2008.02.04 KJD: Check for email format
	var filter	= /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;

	if( !( filter.test( thisString ) ) ){	return 30031;	}
	
	
	// 2008.02.04 KJD: Remove the valid characters from the string
	thisString = thisString.replace( ValidChars, '' );
	
	// 2008.02.04 KJD: Is a string remaining?
	if( thisString )	{		return 30030;	}
	
	// return 30030;
	return false;
}

// 2008.01.26 KJD: Check for password
function notValidPassword( thispassword )
{
	// 2008.02.04 KJD: Accept all characters, check for valid password length
	if( notValidLength( thispassword, 4, 10 ) )
	{
		return 30041;
	}

	// return 30040;
	return false;
}

// 2008.01.26 KJD: Check password match
function notPasswordMatch( password1, password2, field1, field2 )
{
	if( !( password1 		) )	{ FormError( field1, 30420 );return 30420; }

	// 2008.02.04 KJD: Check for valid password
	if( notValidPassword( password1 ) )	{	FormError( field1, 30421 );return 30421;}

	if( !( password2 		) )	{ FormError( field2, 30430 );return 30430; }

	// 2008.02.04 KJD: Check for valid password
	if( notValidPassword( password2 ) )	{	FormError( field2, 30421 );return 30421;}
	
	if( password1 != password2 ){ FormError( field1, 30050 ); FormError( field2, 30050 );return 30050;	}

	return false;
}


// 06/16/09 Shanthi: Check SecurityAnswer match
function notSecurityAnswerMatch( secanswer1, secanswer2, field1, field2 )
{
	if( !( secanswer1 		) )	{ FormError( field1, 30733 );return 30733; }
	if( !( secanswer2 		) )	{ FormError( field2, 30735 );return 30735; }
	if( secanswer1 != secanswer2 ){ FormError( field1, 30734 ); FormError( field2, 30734 );return 30734;	}

	return false;
}

// 2008.01.26 KJD: Check for Address type
function notValidAddress( )
{
	// return 30060;
	return false;
}

// 2008.05.09 KJD: Check if valid street number
function notValidStreetNumber( thisString )
{
	// 2008.05.09 KJD: Check for alpha, symbols, space
	var ValidChars = /[0-9\/\ \-\.]/gi;
	
	// 2008.05.09 KJD: Remove the valid characters from the string
	thisString = thisString.replace( ValidChars, '' );

	if( thisString ){	return 30662;	}
	
	return false;
}

// 2008.01.26 KJD: If there's an error
// 2008.03.22 KJD: Updated to include error message
// 2008.04.21 KJD: Added returncode
function DisplayError( errorcode, thiscode, thismessage, returncode )
{
	// 2008.03.31 KJD: If there's a problem, don't loop
	if( !( erroropen ) )
	{
		erroropen = 1;
		setTimeout( "erroropen=0;", 1000 );
		DisplayErrorPopin( errorcode, '', '', thiscode, thismessage );
	}

	// 2008.04.21 KJD: Added return code for passthru
	if( returncode )
	{	
		return returncode;
	}
	return false;	
}

// 2008.01.28 KJD: Is alpha chars
function notAlphaChars( thisString )
{
	// return 30070;
	return false;
}

// 2008.01.28 KJD: Is only digits
function notDigits( thisString )
{
	// 2008.02.06 KJD: Check for only digits in string
	var ValidChars	= /[0-9]/gi;

	// 2008.02.04 KJD: Remove the valid characters from the string
	thisString = thisString.replace( ValidChars, '' );	

	if( thisString )	{		return 30080;	}
	
	// return 30080;
	return false;
}

// 2008.01.28 KJD: Is valid text
function notValidText( thisString )
{
	// 2008.02.04 KJD: Check for alpha, symbols, space
	var ValidChars = /[a-zA-Z0-9\ \-\'\@\#\&\(\)\+\.\_]/gi;
	
	// 2008.02.04 KJD: Remove the valid characters from the string
	thisString = thisString.replace( ValidChars, '' );
	
	// 2008.02.04 KJD: Is a string remaining?
	if( thisString )	{		return 30090;	}

	// return 30090;
	return false;
}

// 2008.01.28 KJD: Is valid HEX
function notValidHEX( thisString )
{
	// 2008.02.04 KJD: check for valid hex chars
	var ValidChars = /[A-F0-9]/gi;

	// 2008.02.04 KJD: To upper case
	thisString = thisString.toUpperCase();
	
	// 2008.02.04 KJD: Remove all valid characters
	thisString = thisString.replace( ValidChars, '' );
	
	// 2008.02.04 KJD: If string remains
	if( thisString )	{		return 30100;	}
		
	// return 30100;
	return false;
}

// 2008.01.28 KJD: Is valid Scout ID
function notValidScoutID( thisString )
{
	var ValidChars = /[A-Z0-9]/gi;
	thisString = thisString.toUpperCase();
	thisString = thisString.replace( ValidChars, '' );
	
	if( thisString )	{		return 30100;	}
		
	return false;
}

// 2008.01.28 KJD: only digits
function OnlyDigits( thisString )
{
	var digits = /[^0-9]/gi;

	thisString += "";
	
	// 2008.02.04 KJD: Only return the digits
	if( thisString )
	{
		thisString = thisString.replace( digits, '' );
	}

	return thisString;
}

// 2008.01.28 KJD: only alpha numeric
function OnlyAlpha( thisString )
{
	return thisString;
}

// 2008.01.28 KJD: Only HEX
function OnlyHex( thisString )
{
	return thisString;
}

// 2008.01.31 KJD: Check for valid foldername
function notValidFoldername( thisfolder )
{
	// 2008.02.04 KJD: Check for valid characters
	if( notValidText( thisfolder ) )
	{
		return 30161;
	}

	// return 30161;
	return false;
}

// 2008.01.28 KJD: Is valid length
function notValidLength( thisString, minLength, maxLength )
{
	// 2008.01.28 KJD: Make sure it's a string
	if( typeof thisString != 'string' )
	{
		return 30110;
	}

	// 2008.01.31 KJD: Check if only minLength, or minLength = maxLength
	if( minLength && !( maxLength ) )
	{
		if( thisString.length != minLength )
		{
			return 30121;
		}
	}
	else
	{
		if( thisString.length < minLength )
		{
			return 30120;
		}

		if( thisString.length > maxLength )
		{
			return 30130;
		}
	}
	
	return false;
}

// 2008.01.31 KJD: Is valid Caller ID
function notValidCallerID( thisString, fieldname )
{
	FormError( fieldname, 'reset' );
	
	// 2008.02.04 KJD: Check for length max=15
	if( notValidLength( thisString, 1, 15 ) ){	FormError( fieldname, 30472 );	return 30472;	}
	
	// 2008.02.04 KJD: Check for valid characters
	// 2008.03.28 KJD: Check for valid CallerID charactsers instead
	// if( notValidText( thisString ) )		{	FormError( fieldname, 30473 );	return 30473;	}
	
	// 2008.30.28 KJD: Format for special characters
	var validCID	= ValidCallerID( thisString );
	if( thisString != validCID ){ FormError( fieldname, 30474 );	return 30474; }
	
	return false;
}

// 2008.03.28 KJD: Return valid CallerID Characters
function ValidCallerID( thisString )
{
	var characters	= /[^a-zA-Z0-9\&\,\.\-\' ]/gi;
	
	thisString		= thisString.replace( characters, '' );

	return thisString;
}


// 2008.01.31 KJD: Check for valid city name
function notValidCity( thisString )
{
	// 2008.03.18 KJD: Check for length max=32
	if( notValidLength( thisString, 1, 32 ) )	{	return 30312;	}
	
	// 2008.03.18 KJD: Check for valid characters
	if( notValidText( thisString ) )			{	return 30313;	}

	return false;
}

// 2008.01.31 KJD: Check for valid Zip
function notValidZip( thisZip, zipfour )
{
	// 2008.02.04 KJD: Check for only digits
	var thisString = OnlyDigits( thisZip );
	
	// 2008.02.04 KJD: Check length
	if( notValidLength( thisString, 5 ) )
	{
		return 30222;
	}
	
	// 2008.04.02 KJD: Also check for zipfour
	if( typeof zipfour != 'undefined' )
	{
		zipfour = "" + zipfour;
	
		if( zipfour != "" )
		{
			var thisString = OnlyDigits( zipfour );
			if( notValidLength( thisString, 4 ) )
			{
				return 30223;
			}
		}
	}
	

	return false;
}

// 2008.01.31 KJD: Check for Valid Credit Card Number
function notValidCreditCard( ccnumber )
{
	// 2008.02.04 KJD: Get only numbers
	var thisNumber = OnlyDigits( ccnumber );

	// 2008.02.04 KJD: Check length
	if( notValidLength( thisNumber, 15, 16 ) )
	{
		return 30245;
	}
	
	
	return false;
}

// 2008.02.07 KJD: Check for duplicate ScoutID
function ScoutIDNotAvailable( thisID )
{
	// TODO: Check for duplicate ID
	// return 30383;

	return false;
}

// 2007.01.31 KJD :Check for Valid CVV
function notValidCVV( thisCVV )
{
	// 2008.02.04 KJD: Get only numbers
	var thisNumber = OnlyDigits( thisCVV );

	// 2008.02.04 KJD: Check length
	if( notValidLength( thisNumber, 3, 4 ) )
	{
		return 30246;
	}
	
	return false;
}

// 2008.01.31 KJD: Strip leading and trailing spaces
function StripString( thisString )
{
	// 2008.02.20 KJD: Remove pre and trailing spaces
	if( thisString )
	{
		thisString = thisString.replace(/^\s+|\s+$/g,"");
	}

	return thisString;
}

// 2008.01.31 KJD: Format the phone number for display
function phone_format( thisNumber )
{
	var thisString = "" + thisNumber;

	if( thisString )
	{
		// 2008.02.26 KJD: Check if E164 (starts with 1)
		if( thisString.length == 11 )
		{
			thisString = thisString.substring( 1, thisString.length );
		}
		
		thisString = "(" + thisString.substr( 0 ,3 ) + ") " + thisString.substr( 3 ,3 ) + "-"  + thisString.substr( 6 ,4 );
	}

	return thisString;
}

// 2008.01.31 KJD: Display a form error
function FormError( elementID, errorNumber )
{
	var thisString = "&nbsp;";

	// 2008.01.31 KJD: set the error text
	if( errorNumber > 0 )
	{
		thisString = ErrorText( errorNumber );
	}
	
	if( document.getElementById( elementID ) )
	{
		document.getElementById( elementID ).innerHTML = thisString;
	}

	return false;
}

// 2008.01.31 KJD: Get the error message text from the number
function ErrorText( errorNumber )
{
	var thisString = ErrorArray[ errorNumber ];

	return thisString;
}

// 2008.03.22 KJD: only use 10 digits
function TenDigit( thisString )
{
	thisString += "";

	if( thisString.length >= 11 )
	{
		thisString = thisString.substr( 1, thisString.length );
	}
	
	return thisString;
}

// 2008.04.14 KJD: Return the count of numbers for a device
function NumbersforDevice( deviceID )
{
	var numbercount = 0;

	if( deviceObject[ deviceID ] )
	{
		for( var i in deviceObject[ deviceID ][ 'DID'] )
		{
			numbercount++;
		}
	}
	
	return numbercount;
}

// 2008.04.28 KJD: Added for when a page needs to be refreshed
function doreload()
{
	// 2008.06.19 KJD: Check for safari 2.x
	var useURL	= 0;
	
	var BrowserInfo 	= navigator.userAgent.split( ' ' );
	BrowserName			= BrowserInfo[ BrowserInfo.length - 1 ].replace( '/', ' ');	

	if( BrowserName.indexOf( 'Safari' ) != -1 )
	{
		// 2008.06.19 KJD: Is Safari, check version
		var thisBrowser	= BrowserName.split( " " );
		if( thisBrowser[ 1 ] < 500 )	{	useURL	= 1;	}
	}

	// 2008.06.19 KJD: Check if reloading via URL or JS
	if( useURL )
	{
		location.href	= "/lounge/reload.php";
	}
	else
	{
		window.location.reload( false );
	}
	
	
	// 2008.06.19 KJD: This will not work in Safari 2.x browsers
	//	Testing shows that Safari 2.x reports window.location.reload as "[function]", 
	//	which would make the browser never go to the reload.php
	/*
	//  2008.05.12  TLW: move to eliminate browser sampling
	if(window.location.reload) {
		window.location.reload( false );  // 2008.05.09 TLW
	} else {
		// 2008.04.29 KJD: Updated due to Safari 2.x issues with reloading a page
		location.href	= "/lounge/reload.php";
		// window.location.reload( false );
	}
	*/
	
/*** 2008.05.12  TLW:  less desirable way of doing the same thing. less desirable because must
			update browser sampling every time a new one has different
			requirements. left here for contingency purposes.
  *****************
	var browserSniff = navigator['userAgent'];
	
	/ / 2008.05.09 TLW:  special handling for Macs only
	if( browserSniff.match(/Macintosh/) != null ) {
		/ / 2008.04.29 KJD: Updated due to Safari 2.x issues with reloading a page
		location.href	= "/lounge/reload.php";
		/ / window.location.reload( false );
	}	
	window.location.reload( false );  // 2008.05.09 TLW
 *** 2008.05.12  TLW:  less desirable way of doing the same thing. less desirable because must ***/

}


/* ****************************************************************************
//////////////////////////////////////////////// POPIN BUTTONS ////////////////
**************************************************************************** */

// 2008.01.30 KJD: Add Folder - Save
function AddFolderSave( popinID )
{
	var thisFolderName = StripString( document.getElementById( 'addfolder_name' ).value );

	var errors = new Array();
	
	FormError( 'error_addfolder_name', 'reset' );
	if( !( thisFolderName ) )
	{
		errors[ errors.length ] = 30160;
		FormError( 'error_addfolder_name', errors[ errors.length - 1 ] );
		return false;
	}
	else
	{
		// 2008.01.31 KJD: Check for valid folder
		if( notValidFoldername( thisFolderName ) )
		{
			errors[ errors.length ] = notValidFoldername( thisFolderName );
			FormError( 'error_addfolder_name', errors[ errors.length - 1 ] );
			return false;
		}
	}
	
	// 2008.01.31 KJD: Success Continue
	if( !( errors.length ) )
	{
		// 2008.02.14 KJD: post the request to the controller
		var thisPost 		= new Object();
		thisPost			= {
			"transition"	: "addfolder",
			// "sessionID"		: sessionID,
			"foldername"	: thisFolderName
		}
		
		var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
		
		// 2008.02.14 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.02.14 KJD: Error returned
			errors[ errors.length ] = 30162;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
			return false;
		}
		
		// 2008.02.14 KJD: hide popin
		popin_hide( popinID );
	}
	
	return false;
}


// 2008.01.30 KJD: Add Funds - Save
function AddFundsSave( popinID )
{
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "AddFundsSave( '" + popinID + "' )" ) ) ){ return false;}

	var radioItems 		= document.forms['form_addfunds'].elements['thisamount'];
	var thisSelected 	= 0;
	
	FormError( 'error_addfunds_amount', 'reset' );
	
	var errors = new Array();
	
	for( var i = 0; i < radioItems.length; i++ )
	{
		if( radioItems[ i ].checked )
		{
			thisSelected = radioItems[ i ].value;
		}
	}
	
	if( !( thisSelected ) )
	{
		errors[ errors.length ] = 30150;
		FormError( 'error_addfunds_amount', errors[ errors.length - 1 ] );
		return false;
	}

	// 2008.02.14 KJD: Success, continue
	if( !( errors.length ) )
	{
		// 2008.02.14 KJD: post the request to the controller
		var thisPost 		= new Object();
		thisPost			= {
			"transition"			: "AddFunds",
			"amount"				: thisSelected
		}
		
		// 2008.03.25 KJD: TODO: Use postback for time-being
		// var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
		var myResponse		= JSON.parse( PostFile( postBackLocation, thisPost ) );
		
		// 2008.02.14 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.02.14 KJD: Error returned
			errors[ errors.length ] = 30151;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
			return false;
		}		
		
		popin_hide( popinID );
		
		// 2008.03.27 KJD: Show message that funds were added
		popin_open( 'message',	'AddFunds_thankyou' );
	}
	
	return false;
}


// 2008.01.30 KJD: Billing Info - Save
function BillingInfoSave( popinID, otheroptions )
{
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "BillingInfoSave( '" + popinID + "', '" + otheroptions + "' )" ) ) ){ return false;}

	var firstname		= StripString( document.getElementById( 'billing_firstname'		).value );
	var lastname		= StripString( document.getElementById( 'billing_lastname'		).value );
	var phone			= StripString( document.getElementById( 'billing_phone'			).value );
	
	var poboxyes		= document.getElementById( 'bill_type_poboxYes'	).checked;
	var poboxno			= document.getElementById( 'bill_type_poboxNo'	).checked;
	
	//03/02/2008 : Shanthi  - PO box input field is enabled only when POBox radio buttion is checked
	if (document.getElementById( 'bill_type_poboxYes').checked) {
		var poboxnumber		= StripString( document.getElementById( 'billing_pobox'	).value );
	}
	
	//03/02/2008 : Shanthi - streetaddress is enabled only when POBox is not checked
	if (document.getElementById( 'bill_type_poboxNo'	).checked) {
		var streetnumber	= StripString( document.getElementById( 'billing_streetnumber'	).value );
		var streetname		= StripString( document.getElementById( 'billing_streetname'	).value );
		var streettype		= StripString( document.getElementById( 'billing_streettype'	).value );
	}
	
	var city			= StripString( document.getElementById( 'billing_city'			).value );
	var state			= StripString( document.getElementById( 'billing_state'			).value );
	var zip				= StripString( document.getElementById( 'billing_zip'			).value );
	var zip4			= StripString( document.getElementById( 'billing_zip4'			).value );

	var cctype			= StripString( document.getElementById( 'billing_cctype'		).value );
	var ccnumber		= StripString( document.getElementById( 'billing_ccnumber'		).value );
	var month			= StripString( document.getElementById( 'billing_month'			).value );
	var year			= StripString( document.getElementById( 'billing_year'			).value );
	var cvv				= StripString( document.getElementById( 'billing_cvv'			).value );	
	
	
	var shipping_isPOBox	= false;
	var billing_isPOBox		= false;
	
	
	// 2008.01.30 KJD: Combine the errors
	var errors		= new Array();
	
	// 2008.01.31 KJD: Clear the form errors
	FormError( 'error_billing_firstname', 	'reset' );
	FormError( 'error_billing_lastname', 	'reset' );
	FormError( 'error_billing_phone', 		'reset' );
	
	FormError( 'error_billing_addresstype', 'reset' );
	FormError( 'error_billing_pobox',		'reset' );
	
	FormError( 'billing_streetnumber_status',	'reset' );
	FormError( 'billing_streetname_status', 	'reset' );
	FormError( 'billing_streettype_status', 	'reset' );
		
	FormError( 'error_billing_city', 		'reset' );
	FormError( 'error_billing_state', 		'reset' );
	FormError( 'error_billing_zip', 		'reset' );
	
	FormError( 'error_billing_cctype', 		'reset' );
	FormError( 'error_billing_ccnumber', 	'reset' );
	FormError( 'error_billing_date', 		'reset' );
	FormError( 'error_billing_cvv', 		'reset' );
	
	// 2008.01.31 KJD: Validate firstname
	if( !( firstname		) )			{ errors[ errors.length ] = 30170; FormError( 'error_billing_firstname', errors[ errors.length - 1 ] );	}
	else if( notValidName( firstname ) ){ errors[ errors.length ] = 30171; FormError( 'error_billing_firstname', errors[ errors.length - 1 ] );	}
	
	// 2008.01.31 KJD: Check lastname
	if( !( lastname 		) )			{ errors[ errors.length ] = 30180; FormError( 'error_billing_lastname', errors[ errors.length - 1 ] );	}
	else if( notValidName( lastname ) )	{ errors[ errors.length ] = 30181; FormError( 'error_billing_lastname', errors[ errors.length - 1 ] );	}
	
	// 2008.03.25 KJD: Phone not required
	// 2008.01.31 KJD: Check phone
	/*
	if( !( phone 		) )				{ errors[ errors.length ] = 30190; FormError( 'error_billing_phone', errors[ errors.length - 1 ] );	}
	else if( notValidPhone( phone ) )	{ errors[ errors.length ] = 30191; FormError( 'error_billing_phone', errors[ errors.length - 1 ] );	}
	*/
	
	// 2008.03.20 KJD: Make phone only digits
	phone = OnlyDigits( phone );
	
	// 2008.02.20 KJD: Check Address type
	FormError( 'error_billing_addresstype', 		'reset' );
	if( !( poboxyes  ) && !( poboxno  ) )
	{
		errors[ errors.length ] = 30640; FormError( 'error_billing_addresstype', errors[ errors.length - 1 ] );
	}
	else
	{
		// 2008.02.20 KJD: If PO BOX
		if( poboxyes )
		{
			if( !( poboxnumber		) )				{ errors[ errors.length ] = 30650; FormError( 'error_billing_pobox', errors[ errors.length - 1 ] );	}
			else if( notDigits( poboxnumber ) )		{ errors[ errors.length ] = 30651; FormError( 'error_billing_pobox', errors[ errors.length - 1 ] );	}
			
			billing_isPOBox		= true;
		}
		else
		{
			if( !( streetnumber		) )				{ errors[ errors.length ] = 30660; FormError( 'billing_streetnumber_status', errors[ errors.length - 1 ] );	}
			else if( notValidStreetNumber( streetnumber ) )	{ errors[ errors.length ] = notValidStreetNumber( streetnumber ); FormError( 'billing_streetnumber_status', errors[ errors.length - 1 ] );	}

			if( !( streetname		) )				{ errors[ errors.length ] = 30670; FormError( 'billing_streetname_status', errors[ errors.length - 1 ] );	}
			else if( notValidName( streetname ))	{ errors[ errors.length ] = 30671; FormError( 'billing_streetname_status', errors[ errors.length - 1 ] );	}

			if( !( streettype		) )				{ errors[ errors.length ] = 30680; FormError( 'billing_streettype_status', errors[ errors.length - 1 ] );	}
		}
	}
	
	// 2008.01.31 KJD: Check city
	if( !( city 		) )				{ errors[ errors.length ] = 30200; FormError( 'error_billing_city', errors[ errors.length - 1 ] );	}
	else if( notValidCity( city ) )		{ errors[ errors.length ] = 30201; FormError( 'error_billing_city', errors[ errors.length - 1 ] );	}

	// 2008.01.31 KJD: Check state
	if( !( state 		) )				{ errors[ errors.length ] = 30210; FormError( 'error_billing_state', errors[ errors.length - 1 ] ); }
	
	// 2008.01.31 KJD: Check Zip
	if( !( zip 		) )					{ errors[ errors.length ] = 30220; FormError( 'error_billing_zip', errors[ errors.length - 1 ] );	}
	else if( notValidZip( zip ) )		{ errors[ errors.length ] = 30221; FormError( 'error_billing_zip', errors[ errors.length - 1 ] );	}

	// 2008.02.20 KJD: Check CC type
	if( !( cctype 		) )				{ errors[ errors.length ] = 30230; FormError( 'error_billing_cctype', errors[ errors.length - 1 ] );	}
	
	// 2008.01.31 KJD: Check Credit Card
	if( !( ccnumber 		) )			{ errors[ errors.length ] = 30240; FormError( 'error_billing_ccnumber', errors[ errors.length - 1 ] );	}
	else if( notValidCreditCard( ccnumber ) )
	{ 
		errors[ errors.length ] = notValidCreditCard( ccnumber ); 
		FormError( 'error_billing_ccnumber', errors[ errors.length - 1 ] );	
	}

	// 2008.03.26 KJD: Get only CC Digits
	ccnumber	= OnlyDigits( ccnumber );
	
	
	// 2008.01.31 KJD: Check Zip
	if( !( month 		) )				{ errors[ errors.length ] = 30241; FormError( 'error_billing_date', errors[ errors.length - 1 ] ); }
	if( !( year 		) )				{ errors[ errors.length ] = 30242; FormError( 'error_billing_date', errors[ errors.length - 1 ] ); }

	// 2008.01.31 KJD: Check CVV
	if( !( cvv 		) )					{ errors[ errors.length ] = 30243; FormError( 'error_billing_cvv', errors[ errors.length - 1 ] );	}
	else if( notValidCVV( cvv ) )		{ errors[ errors.length ] = 30244; FormError( 'error_billing_cvv', errors[ errors.length - 1 ] );	}
	
	// 2008.03.05 KJD: Get the values from the other form elements
	// 2008.03.13 KJD: Added some sanity checking
	var streetdirprefix	= "";
	var streetdirsuffix	= "";
	var secondaryunit	= "";
	var secondarynumber	= "";

	if( document.getElementById( 'billing_streetdirprefix' 	) ) {	streetdirprefix		= StripString( document.getElementById( 'billing_streetdirprefix' 	).value );	}
	if( document.getElementById( 'billing_streetdirsuffix' 	) ) {	streetdirsuffix		= StripString( document.getElementById( 'billing_streetdirsuffix' 	).value );	}
	if( document.getElementById( 'billing_secondaryunit' 	) ) {	secondaryunit		= StripString( document.getElementById( 'billing_secondaryunit' 	).value );	}
	if( document.getElementById( 'billing_secondarynumber' 	) ) {	secondarynumber		= StripString( document.getElementById( 'billing_secondarynumber' 	).value );	}
	
	// 2008.04.02 KJD: Check if shipping bo pox
	if( CustomerInfo[ 'shippingaddress' ][ 'addresstype' ] == "pobox" )
	{
		shipping_isPOBox = true;
	}
	
	
	// 2008.01.31 KJD: Success Continue
	if( !( errors.length ) )
	{
		// 2008.02.14 KJD: post the request to the controller
		// 2008.03.20 KJD: Updated required items
		var thisPost 		= new Object();

		// 2008.03.25 KJD: Updated to include all customer info
		thisPost			= {
			"transition"					: "SetCustomer",

			"service_SPN"					: CustomerInfo[ 'customer_SPN' ],

			"service_firstname"				: CustomerInfo[ 'serviceaddress' ][ 'firstname' ],
			"service_lastname"				: CustomerInfo[ 'serviceaddress' ][ 'lastname' ],
			"service_phonenumber"			: CustomerInfo[ 'serviceaddress' ][ 'phone' ],
			"service_streetnumber"			: CustomerInfo[ 'serviceaddress' ][ 'streetnumber' ],
			"service_predir"				: CustomerInfo[ 'serviceaddress' ][ 'predir' ],
			"service_streetname"			: CustomerInfo[ 'serviceaddress' ][ 'streetname' ],
			"service_streettype"			: CustomerInfo[ 'serviceaddress' ][ 'streettype' ],
			"service_postdir"				: CustomerInfo[ 'serviceaddress' ][ 'postdir' ],
			"service_unitnumber"			: CustomerInfo[ 'serviceaddress' ][ 'unitnumber' ],
			"service_unit"					: CustomerInfo[ 'serviceaddress' ][ 'unittype' ],
			"service_city"					: CustomerInfo[ 'serviceaddress' ][ 'city' ],
			"service_state"					: CustomerInfo[ 'serviceaddress' ][ 'state' ],
			"service_zip4"					: CustomerInfo[ 'serviceaddress' ][ 'zip4' ],
			"service_zip"					: CustomerInfo[ 'serviceaddress' ][ 'zip' ],

			"billing_firstname"				: firstname,
			"billing_lastname"				: lastname,
			"billing_phonenumber"			: phone,
			"billing_streetnumber"			: streetnumber,
			"billing_predir"				: streetdirprefix,
			"billing_streetname"			: streetname,
			"billing_streettype"			: streettype,
			"billing_postdir"				: streetdirsuffix,
			"billing_unitnumber"			: secondarynumber,
			"billing_unit"					: secondaryunit,
			"billing_city"					: city,
			"billing_state"					: state,
			"billing_zip4"					: zip4,
			"billing_zip"					: zip,

			'billing_POBOX' 				: poboxnumber,
			
			// 2008.03.25 KJD: TODO: Check for POBox, currently hard-coded to no
			"billing_isPOBOX"				: billing_isPOBox,
			"shipping_isPOBOX"				: shipping_isPOBox,
			
			"shipping_firstname"			: CustomerInfo[ 'shippingaddress' ][ 'firstname' ],
			"shipping_lastname"				: CustomerInfo[ 'shippingaddress' ][ 'lastname' ],
			"shipping_phonenumber"			: CustomerInfo[ 'shippingaddress' ][ 'phone' ],
			"shipping_streetnumber"			: CustomerInfo[ 'shippingaddress' ][ 'streetnumber' ],
			"shipping_predir"				: CustomerInfo[ 'shippingaddress' ][ 'predir' ],
			"shipping_streetname"			: CustomerInfo[ 'shippingaddress' ][ 'streetname' ],
			"shipping_streettype"			: CustomerInfo[ 'shippingaddress' ][ 'streettype' ],
			"shipping_postdir"				: CustomerInfo[ 'shippingaddress' ][ 'postdir' ],
			"shipping_unitnumber"			: CustomerInfo[ 'shippingaddress' ][ 'unitnumber' ],
			"shipping_unit"					: CustomerInfo[ 'shippingaddress' ][ 'unittype' ],
			"shipping_city"					: CustomerInfo[ 'shippingaddress' ][ 'city' ],
			"shipping_state"				: CustomerInfo[ 'shippingaddress' ][ 'state' ],
			"shipping_zip4"					: CustomerInfo[ 'shippingaddress' ][ 'zip4' ],
			"shipping_zip"					: CustomerInfo[ 'shippingaddress' ][ 'zip' ],
			
			"creditcard_type"				: cctype,
			"creditcard_number"				: ccnumber,
			"creditcard_cvv"				: cvv,
			"creditcard_expmonth"			: month,
			"creditcard_expyear"			: year,
			"creditcard_first"				: CustomerInfo[ 'billinginfo' ][ 'firstname' ],
			"creditcard_last"				: CustomerInfo[ 'billinginfo' ][ 'lastname' ],
			"creditcard_paymentID"			: CustomerInfo[ 'billinginfo' ][ 'cardID' ]
		}
		
		// 2008.03.10 KJD: Using postBack for time being
		var myResponse		= JSON.parse( PostFile( postBackLocation, thisPost ) );
		
		// 2008.02.14 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.02.14 KJD: Error returned
			errors[ errors.length ] = 30247;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );

			return errors[ errors.length - 1 ];
		}		
		
		popin_hide( popinID );
		
		// 2008.03.31 KJD: Check if on Account Services page
		if( typeof chargeList != 'undefined' )
		{
			// 2008.03.31 KJD: open the add funds popin
			popin_open(		'popin', 'popin_AddFunds' );
			PopinPopulate(	'addfunds' );
		}
		else
		{
			// 2008.07.10 KJD: Check if we're going to refresh
			if( ( typeof otheroptions != 'undefined' ) && ( otheroptions != 'undefined' ) )
			{
				eval( otheroptions );
			}
			else
			{
				// 2008.03.21 KJD: Refresh the page
				doreload();
			}
		}
	}
	
	return false;
}

// 2008.06.02 KJD: Save the shipping info
function ShippingInfoSave( popinID, otheroptions )
{
	// 2008.06.02 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "ShippingInfoSave( '" + popinID + "', '" + otheroptions + "' )" ) ) ){ return false;}	

	// 2008.06.02 KJD: Set and clean the variables
	var firstname		= StripString( document.getElementById( 'shipping_firstname'	).value );
	var lastname		= StripString( document.getElementById( 'shipping_lastname'		).value );

	var streetnumber	= StripString( document.getElementById( 'shipping_streetnumber'	).value );
	var streetname		= StripString( document.getElementById( 'shipping_streetname'	).value );
	var streettype		= StripString( document.getElementById( 'shipping_streettype'	).value );
	
	var city			= StripString( document.getElementById( 'shipping_city'			).value );
	var state			= StripString( document.getElementById( 'shipping_state'		).value );
	var zip				= StripString( document.getElementById( 'shipping_zip'			).value );
	var zip4			= StripString( document.getElementById( 'shipping_zip4'			).value );
	
	
	// 2008.06.02 KJD: Combine the errors
	var errors		= new Array();
	
	// 2008.06.02 KJD: Clear the form errors
	FormError( 'error_shipping_firstname',	 	'reset' );
	FormError( 'error_shipping_lastname', 		'reset' );
	
	FormError( 'shipping_streetnumber_status',	'reset' );
	FormError( 'shipping_streetname_status', 	'reset' );
	FormError( 'shipping_streettype_status', 	'reset' );
		
	FormError( 'error_shipping_city', 			'reset' );
	FormError( 'error_shipping_state', 			'reset' );
	FormError( 'error_shipping_zip', 			'reset' );
	
	// 2008.06.02 KJD: Errors below use the same codes as billing

	// 2008.01.31 KJD: Validate firstname
	if( !( firstname		) )			{ errors[ errors.length ] = 30170; FormError( 'error_shipping_firstname', errors[ errors.length - 1 ] );	}
	else if( notValidName( firstname ) ){ errors[ errors.length ] = 30171; FormError( 'error_shipping_firstname', errors[ errors.length - 1 ] );	}
	
	// 2008.01.31 KJD: Check lastname
	if( !( lastname 		) )			{ errors[ errors.length ] = 30180; FormError( 'error_shipping_lastname', errors[ errors.length - 1 ] );	}
	else if( notValidName( lastname ) )	{ errors[ errors.length ] = 30181; FormError( 'error_shipping_lastname', errors[ errors.length - 1 ] );	}
	
	if( !( streetnumber		) )				{ errors[ errors.length ] = 30660; FormError( 'shipping_streetnumber_status', errors[ errors.length - 1 ] );	}
	else if( notValidStreetNumber( streetnumber ) )	{ errors[ errors.length ] = notValidStreetNumber( streetnumber ); FormError( 'shipping_streetnumber_status', errors[ errors.length - 1 ] );	}

	if( !( streetname		) )				{ errors[ errors.length ] = 30670; FormError( 'shipping_streetname_status', errors[ errors.length - 1 ] );	}
	else if( notValidName( streetname ))	{ errors[ errors.length ] = 30671; FormError( 'shipping_streetname_status', errors[ errors.length - 1 ] );	}

	if( !( streettype		) )				{ errors[ errors.length ] = 30680; FormError( 'shipping_streettype_status', errors[ errors.length - 1 ] );	}
	
	
	// 2008.01.31 KJD: Check city
	if( !( city 		) )				{ errors[ errors.length ] = 30200; FormError( 'error_shipping_city', errors[ errors.length - 1 ] );	}
	else if( notValidCity( city ) )		{ errors[ errors.length ] = 30201; FormError( 'error_shipping_city', errors[ errors.length - 1 ] );	}

	// 2008.01.31 KJD: Check state
	if( !( state 		) )				{ errors[ errors.length ] = 30210; FormError( 'error_shipping_state', errors[ errors.length - 1 ] ); }
	
	// 2008.01.31 KJD: Check Zip
	if( !( zip 		) )					{ errors[ errors.length ] = 30220; FormError( 'error_shipping_zip', errors[ errors.length - 1 ] );	}
	else if( notValidZip( zip ) )		{ errors[ errors.length ] = 30221; FormError( 'error_shipping_zip', errors[ errors.length - 1 ] );	}
	
	// 2008.06.02 KJD: Check street properties
	var streetdirprefix		= "";
	var streetdirsuffix		= "";
	var secondaryunit		= "";
	var secondarynumber		= "";

	if( document.getElementById( 'shipping_streetdirprefix' 	) ) {	streetdirprefix		= StripString( document.getElementById( 'shipping_streetdirprefix' 	).value );	}
	if( document.getElementById( 'shipping_streetdirsuffix' 	) ) {	streetdirsuffix		= StripString( document.getElementById( 'shipping_streetdirsuffix' 	).value );	}
	if( document.getElementById( 'shipping_secondaryunit' 		) ) {	secondaryunit		= StripString( document.getElementById( 'shipping_secondaryunit' 	).value );	}
	if( document.getElementById( 'shipping_secondarynumber' 	) ) {	secondarynumber		= StripString( document.getElementById( 'shipping_secondarynumber' 	).value );	}

	// 2008.06.02 KJD: Check if shipping bo pox
	var billing_isPOBox = false;
	if( CustomerInfo[ 'billingaddress' ][ 'addresstype' ] == "pobox" )
	{
		billing_isPOBox = true;
	}
	
	
	
	// 2008.06.02 KJD: Save the Shipping address
	if( !( errors.length ) )
	{
		// 2008.06.02 KJD: Post the request
		var thisPost 		= new Object();

		// 2008.03.25 KJD: Updated to include all customer info
		thisPost			= {
			"transition"					: "SetCustomer",
			
			"shipping_firstname"			: firstname,
			"shipping_lastname"				: lastname,
			"shipping_streetnumber"			: streetnumber,
			"shipping_predir"				: streetdirprefix,
			"shipping_streetname"			: streetname,
			"shipping_streettype"			: streettype,
			"shipping_postdir"				: streetdirsuffix,
			"shipping_unitnumber"			: secondarynumber,
			"shipping_unit"					: secondaryunit,
			"shipping_city"					: city,
			"shipping_state"				: state,
			"shipping_zip4"					: zip4,
			"shipping_zip"					: zip,
			
			"shipping_POBOX" 				: "",
			"shipping_isPOBOX"				: false,
			
			"service_SPN"					: CustomerInfo[ 'customer_SPN' ],

			"service_firstname"				: CustomerInfo[ 'serviceaddress' ][ 'firstname' ],
			"service_lastname"				: CustomerInfo[ 'serviceaddress' ][ 'lastname' ],
			"service_phonenumber"			: CustomerInfo[ 'serviceaddress' ][ 'phone' ],
			"service_streetnumber"			: CustomerInfo[ 'serviceaddress' ][ 'streetnumber' ],
			"service_predir"				: CustomerInfo[ 'serviceaddress' ][ 'predir' ],
			"service_streetname"			: CustomerInfo[ 'serviceaddress' ][ 'streetname' ],
			"service_streettype"			: CustomerInfo[ 'serviceaddress' ][ 'streettype' ],
			"service_postdir"				: CustomerInfo[ 'serviceaddress' ][ 'postdir' ],
			"service_unitnumber"			: CustomerInfo[ 'serviceaddress' ][ 'unitnumber' ],
			"service_unit"					: CustomerInfo[ 'serviceaddress' ][ 'unittype' ],
			"service_city"					: CustomerInfo[ 'serviceaddress' ][ 'city' ],
			"service_state"					: CustomerInfo[ 'serviceaddress' ][ 'state' ],
			"service_zip4"					: CustomerInfo[ 'serviceaddress' ][ 'zip4' ],
			"service_zip"					: CustomerInfo[ 'serviceaddress' ][ 'zip' ],

			"billing_firstname"				: CustomerInfo[ 'billingaddress' ][ 'firstname' ],
			"billing_lastname"				: CustomerInfo[ 'billingaddress' ][ 'lastname' ],
			"billing_phonenumber"			: CustomerInfo[ 'billingaddress' ][ 'phone' ],
			"billing_streetnumber"			: CustomerInfo[ 'billingaddress' ][ 'streetnumber' ],
			"billing_predir"				: CustomerInfo[ 'billingaddress' ][ 'predir' ],
			"billing_streetname"			: CustomerInfo[ 'billingaddress' ][ 'streetname' ],
			"billing_streettype"			: CustomerInfo[ 'billingaddress' ][ 'streettype' ],
			"billing_postdir"				: CustomerInfo[ 'billingaddress' ][ 'postdir' ],
			"billing_unitnumber"			: CustomerInfo[ 'billingaddress' ][ 'unitnumber' ],
			"billing_unit"					: CustomerInfo[ 'billingaddress' ][ 'unittype' ],
			"billing_city"					: CustomerInfo[ 'billingaddress' ][ 'city' ],
			"billing_state"					: CustomerInfo[ 'billingaddress' ][ 'state' ],
			"billing_zip4"					: CustomerInfo[ 'billingaddress' ][ 'zip4' ],
			"billing_zip"					: CustomerInfo[ 'billingaddress' ][ 'zip' ],

			// 2008.04.01 KJD: Do po box numbers
			'billing_POBOX' 				: CustomerInfo[ 'billingaddress' ][ 'poboxnumber' ],
			"billing_isPOBOX"				: billing_isPOBox
			
		};

		// 2008.06.02 KJD: Using postBack for time being
		var myResponse		= JSON.parse( PostFile( postBackLocation, thisPost ) );
		
		// 2008.06.02 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.06.02 KJD: Error returned
			errors[ errors.length ] = 30740;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );

			return errors[ errors.length - 1 ];
		}		
		
		// 2008.07.10 KJD: If we are going to do something else
		if( ( typeof otheroptions != 'undefined' ) && ( otheroptions != 'undefined' ) )
		{
			eval( otheroptions );
		}
		
		popin_hide( popinID );
	}

	return false;
}


// 2008.01.30 KJD: Save login info
function EditLoginSave( popinID )
{
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "EditLoginSave( '" + popinID + "' )" ) ) ){ return false;}

	var email		= StripString( document.getElementById( 'login_emailaddress').value );
	var password	= StripString( document.getElementById( 'login_password'	).value );
	var password2	= StripString( document.getElementById( 'login_password2'	).value );

	// 2008.01.30 KJD: Combine the errors
	var errors		= new Array();
	
	// 2008.01.31 KJD: Check email address
	FormError( 'error_login_emailaddress', 	'reset' );
	if( !( email			) )			{ errors[ errors.length ] = 30250; FormError( 'error_login_emailaddress', errors[ errors.length - 1 ] );	}
	else if( notValidEmail( email ) )	{ errors[ errors.length ] = 30251; FormError( 'error_login_emailaddress', errors[ errors.length - 1 ] );	}

	// 2008.01.31 KJD: Check password
	FormError( 'error_login_password', 	'reset' );
	FormError( 'error_login_password2', 'reset' );
	if( notPasswordMatch( password, password2 ) )
	{
		errors[ errors.length ] = notPasswordMatch( password, password2, 'error_login_password', 'error_login_password2' );
	}
	
	// 2008.01.31 KJD: Success Continue
	if( !( errors.length ) )
	{
		// 2008.03.18 KJD: Simple check for shared
		// if( !( devicelocation) ){ devicelocation = "Shared"; }
	
	
		// 2008.02.14 KJD: post the request to the controller
		var thisPost 		= new Object();
		thisPost			= {
			"transition"	: "UpdateLoginInfo",
			// 2008.02.29 KJD: Added other requirements
			"email"			: email,
			"password"		: password
		}
		
		// 2008.03.10 KJD: Using postBack for time being
		// TODO: use MVC controller
		// var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
		var myResponse		= JSON.parse( PostFile( postBackLocation, thisPost ) );
		
		// 2008.02.14 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.02.14 KJD: Error returned
			errors[ errors.length ] = 30252;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
		
			popin_hide( popinID );		
			
			return false;
		}		
		
		popin_hide( popinID );
		
		// 2008.03.10 KJD: Show confirmation popin
		popin_open( 'message',	'LoginUpdated' );
	}
	
	return false;
}


// 2008.01.30 KJD: Save Service Address
function ServiceAddressSave( popinID )
{
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "ServiceAddressSave( '" + popinID + "' )" ) ) ){ return false;}

	var firstname	= StripString( document.getElementById( 'service_firstname'	).value );
	var lastname	= StripString( document.getElementById( 'service_lastname'	).value );
	var phone		= OnlyDigits( StripString( document.getElementById( 'service_phone'		).value ) );

	// 2008.02.21 KJD: Add street info
	var streetnumber	= StripString( document.getElementById( 'service_streetnumber'	).value );
	var streetname		= StripString( document.getElementById( 'service_streetname'	).value );
	var streettype		= StripString( document.getElementById( 'service_streettype'	).value );

	// 2008.03.14 KJD: Get other service attributes
	var preDir			= StripString( document.getElementById( 'service_streetdirprefix'	).value );
	var postDir			= StripString( document.getElementById( 'service_streetdirsuffix'	).value );
	var secondaryNum	= StripString( document.getElementById( 'service_secondarynumber'	).value );
	var secondaryUnit	= StripString( document.getElementById( 'service_secondaryunit'		).value );

	var city		= StripString( document.getElementById( 'service_city'		).value );
	var state		= StripString( document.getElementById( 'service_state'		).value );
	var zip			= StripString( document.getElementById( 'service_zip'		).value );
	var zip4		= StripString( document.getElementById( 'service_zip4'		).value );
	
	// 2008.03.18 KJD: Added for service SPN
	var SPN			= "";
	
	// 2008.01.30 KJD: Combine the errors
	var errors		= new Array();
	
	// 2008.04.03 KJD: Declare PO Boxes
	var billing_isPOBox		= false;
	var shipping_isPOBox	= false;
	
	
	// 2008.01.31 KJD: Clear the form errors
	FormError( 'error_service_firstname', 		'reset' );
	FormError( 'error_service_lastname', 		'reset' );
	FormError( 'error_service_phone', 			'reset' );

	FormError( 'service_streetnumber_status', 	'reset' );
	FormError( 'service_streetname_status', 	'reset' );
	FormError( 'service_streettype_status', 	'reset' );

	FormError( 'error_service_city', 			'reset' );
	FormError( 'error_service_state', 			'reset' );
	FormError( 'error_service_zip', 			'reset' );
	
	
	// 2008.04.01 KJD: Check for PO Box
	if( CustomerInfo[ 'billingaddress' ][ 'addresstype' ] == "pobox" )
	{
		billing_isPOBox		= true;
	}

	if( CustomerInfo[ 'shippingaddress' ][ 'addresstype' ] == "pobox" )
	{
		shipping_isPOBox	= true;
	}
	
	

	// 2008.01.31 KJD: Validate firstname
	if( !( firstname		) )			{ errors[ errors.length ] = 30280; FormError( 'error_service_firstname', errors[ errors.length - 1 ] );	}
	else if( notValidName( firstname ) ){ errors[ errors.length ] = 30281; FormError( 'error_service_firstname', errors[ errors.length - 1 ] );	}
	
	// 2008.01.31 KJD: Check lastname
	if( !( lastname 		) )			{ errors[ errors.length ] = 30290; FormError( 'error_service_lastname', errors[ errors.length - 1 ] );	}
	else if( notValidName( lastname ) )	{ errors[ errors.length ] = 30291; FormError( 'error_service_lastname', errors[ errors.length - 1 ] );	}
	
	// 2008.01.31 KJD: Check phone
	// 2008.03.25 KJD: Phone is not required field
	/*
	if( !( phone 		) )				{ errors[ errors.length ] = 30300; FormError( 'error_service_phone', errors[ errors.length - 1 ] );	}
	else if( notValidPhone( phone ) )	{ errors[ errors.length ] = 30301; FormError( 'error_service_phone', errors[ errors.length - 1 ] );	}
	*/
	
	// 2008.02.21 KJD: Check street info
	if( !( streetnumber		) )				{ errors[ errors.length ] = 30660; FormError( 'service_streetnumber_status', errors[ errors.length - 1 ] );	}
	else if( notValidStreetNumber( streetnumber ) )	{ errors[ errors.length ] = notValidStreetNumber( streetnumber ); FormError( 'service_streetnumber_status', errors[ errors.length - 1 ] );	}
	
	if( !( streetname		) )				{ errors[ errors.length ] = 30670; FormError( 'service_streetname_status', errors[ errors.length - 1 ] );	}
	else if( notValidName( streetname ))	{ errors[ errors.length ] = 30671; FormError( 'service_streetname_status', errors[ errors.length - 1 ] );	}

	if( !( streettype		) )				{ errors[ errors.length ] = 30680; FormError( 'service_streettype_status', errors[ errors.length - 1 ] );	}
	
	
	// 2008.01.31 KJD: Check city
	if( !( city 		) )				{ errors[ errors.length ] = 30310; FormError( 'error_service_city', errors[ errors.length - 1 ] );	}
	else if( notValidCity( city ) )		{ errors[ errors.length ] = 30311; FormError( 'error_service_city', errors[ errors.length - 1 ] );	}

	// 2008.01.31 KJD: Check state
	if( !( state 		) )				{ errors[ errors.length ] = 30320; FormError( 'error_service_state', errors[ errors.length - 1 ] ); }
	
	// 2008.01.31 KJD: Check Zip
	if( !( zip 		) )					{ errors[ errors.length ] = 30330; FormError( 'error_service_zip', errors[ errors.length - 1 ] );	}
	else if( notValidZip( zip ) )		{ errors[ errors.length ] = 30331; FormError( 'error_service_zip', errors[ errors.length - 1 ] );	}


	try
	{
		SPN			= StripString( CustomerInfo[ 'customer_SPN' ] );
	}
	catch( e )
	{
		// 2008.03.18 KJD: Display error
		errors[ errors.length ] = 30341;
		DisplayError( errors[ errors.length - 1 ] );
	}
	
	// 2008.01.31 KJD: Success Continue
	if( !( errors.length ) )
	{
		// 2008.02.14 KJD: post the request to the controller
		var thisPost 		= new Object();
		
		
		// 2008.03.25 KJD: Updated to include all customer info
		thisPost			= {
			"transition"					: "SetCustomer",

			"service_SPN"					: SPN,

			"service_firstname"				: firstname,
			"service_lastname"				: lastname,
			"service_phonenumber"			: phone,
			
			"service_streetnumber"			: streetnumber,
			"service_preDirection"			: preDir,
			"service_streetname"			: streetname,
			"service_streettype"			: streettype,
			"service_postDirection"			: postDir,
			"service_secondaryNum"			: secondaryNum,
			"service_secondaryUnit"			: secondaryUnit,
			"service_city"					: city,
			"service_state"					: state,
			"service_zip4"					: zip4,
			"service_zip"					: zip,

			"billing_firstname"				: CustomerInfo[ 'billingaddress' ][ 'firstname' ],
			"billing_lastname"				: CustomerInfo[ 'billingaddress' ][ 'lastname' ],
			"billing_phonenumber"			: CustomerInfo[ 'billingaddress' ][ 'phone' ],
			"billing_streetnumber"			: CustomerInfo[ 'billingaddress' ][ 'streetnumber' ],
			"billing_predir"				: CustomerInfo[ 'billingaddress' ][ 'predir' ],
			"billing_streetname"			: CustomerInfo[ 'billingaddress' ][ 'streetname' ],
			"billing_streettype"			: CustomerInfo[ 'billingaddress' ][ 'streettype' ],
			"billing_postdir"				: CustomerInfo[ 'billingaddress' ][ 'postdir' ],
			"billing_unitnumber"			: CustomerInfo[ 'billingaddress' ][ 'unitnumber' ],
			"billing_unit"					: CustomerInfo[ 'billingaddress' ][ 'unittype' ],
			"billing_city"					: CustomerInfo[ 'billingaddress' ][ 'city' ],
			"billing_state"					: CustomerInfo[ 'billingaddress' ][ 'state' ],
			"billing_zip4"					: CustomerInfo[ 'billingaddress' ][ 'zip4' ],
			"billing_zip"					: CustomerInfo[ 'billingaddress' ][ 'zip' ],

			// 2008.04.01 KJD: Do po box numbers
			'billing_POBOX' 				: CustomerInfo[ 'billingaddress' ][ 'poboxnumber' ],
			"billing_isPOBOX"				: billing_isPOBox,

			'shipping_POBOX' 				: CustomerInfo[ 'shippingaddress' ][ 'poboxnumber' ],
			"shipping_isPOBOX"				: shipping_isPOBox,
			
			"shipping_firstname"			: CustomerInfo[ 'shippingaddress' ][ 'firstname' ],
			"shipping_lastname"				: CustomerInfo[ 'shippingaddress' ][ 'lastname' ],
			"shipping_phonenumber"			: CustomerInfo[ 'shippingaddress' ][ 'phone' ],
			"shipping_streetnumber"			: CustomerInfo[ 'shippingaddress' ][ 'streetnumber' ],
			"shipping_predir"				: CustomerInfo[ 'shippingaddress' ][ 'predir' ],
			"shipping_streetname"			: CustomerInfo[ 'shippingaddress' ][ 'streetname' ],
			"shipping_streettype"			: CustomerInfo[ 'shippingaddress' ][ 'streettype' ],
			"shipping_postdir"				: CustomerInfo[ 'shippingaddress' ][ 'postdir' ],
			"shipping_unitnumber"			: CustomerInfo[ 'shippingaddress' ][ 'unitnumber' ],
			"shipping_unit"					: CustomerInfo[ 'shippingaddress' ][ 'unittype' ],
			"shipping_city"					: CustomerInfo[ 'shippingaddress' ][ 'city' ],
			"shipping_state"				: CustomerInfo[ 'shippingaddress' ][ 'state' ],
			"shipping_zip4"					: CustomerInfo[ 'shippingaddress' ][ 'zip4' ],
			"shipping_zip"					: CustomerInfo[ 'shippingaddress' ][ 'zip' ],
			
			"creditcard_type"				: CustomerInfo[ 'billinginfo' ][ 'cardtype' ],
			"creditcard_number"				: CustomerInfo[ 'billinginfo' ][ 'carddigits' ],
			"creditcard_cvv"				: CustomerInfo[ 'billinginfo' ][ 'cardcvv' ],
			"creditcard_expmonth"			: CustomerInfo[ 'billinginfo' ][ 'cardmonth' ],
			"creditcard_expyear"			: CustomerInfo[ 'billinginfo' ][ 'cardyear' ],
			"creditcard_first"				: CustomerInfo[ 'billinginfo' ][ 'firstname' ],
			"creditcard_last"				: CustomerInfo[ 'billinginfo' ][ 'lastname' ],
			"creditcard_paymentID"			: CustomerInfo[ 'billinginfo' ][ 'cardID' ]
		}

		
		
		// 2008.03.10 KJD: Using postBack for time being
		// TODO: use MVC controller
		// var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
		var myResponse		= JSON.parse( PostFile( postBackLocation, thisPost ) );
		
		// 2008.02.14 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.02.14 KJD: Error returned
			errors[ errors.length ] = 30340;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
			
			popin_hide( popinID );
			
			return errors[ errors.length - 1 ];
		}		
		
		popin_hide( popinID );
		
		doreload();
	}
	
	return false;
}

// 2008.01.30 KJD: For Add/Edit Device show/hide ScoutID

//Shanthi: 03/24/08 -  Fixes bug #3270 , change display property
function adddevice_selected( thisitem )
{
	// alert( thisitem.value );
	if( thisitem == 'scout' )
	// 2008.03.17 TLW: MOST PLACES SCOUT FIRST LETTER SHOULD BE CAPPED, BUT NOT HERE: if( thisitem == 'Scout' )
	{
		//Shanthi: 03/24/08- Change the display property
		document.getElementById( 'adddevice_scoutID' ).style.visibility = 'visible';
	}
	else
	{
		//Shanthi: 03/24/08- Change the display property
		document.getElementById( 'adddevice_scoutID' ).style.visibility = 'hidden';
	}

	return false;
}

// 2008.01.30 KJD: For Add/Edit Device show/hide ScoutID
//04/09/08 Bug#3270 part 2 fixed 
function editdevice_selected( thisitem )
{
	// alert( thisitem.value );
	if( thisitem == 'Scout' )
	{
		document.getElementById( 'editdevice_scoutID' ).style.visibility = 'visible';
	}
	else
	{
		document.getElementById( 'editdevice_scoutID' ).style.visibility = 'hidden';
	}

	return false;
}

function isGoodScoutSerial(scoutID){
	//bad Scout range is US0906SQ005A-US0921SQ018B
	
	var scoutPrefix=scoutID.substring(0,4);
		
	
	if(scoutPrefix=="US09"){
		var weekInt=parseInt(scoutID.substring(4,6), 10);
		if(weekInt >= 6 && weekInt <= 21){
			return false;
		}
	}
	
	return true;
}

// 2008.01.30 KJD: Add Device Save
function AddDeviceSave( popinID )
{
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "AddDeviceSave( '" + popinID + "' )" ) ) ){ return false;}

	var devicelocation	= StripString( document.getElementById( 'adddevice_devicelocation'	).value );
	var ishub			= document.getElementById( 'adddevice_hub'				);
	var isscout			= document.getElementById( 'adddevice_scout'			);
	
	var scoutID			= StripString( document.getElementById( 'input_adddevice_scoutID'		).value );
	var firstname		= StripString( document.getElementById( 'adddevice_firstname'	).value );
	var lastname		= StripString( document.getElementById( 'adddevice_lastname'	).value );
	var email			= StripString( document.getElementById( 'adddevice_email'		).value );
	var password		= StripString( document.getElementById( 'adddevice_password'	).value );
	var password2		= StripString( document.getElementById( 'adddevice_password2'	).value );

	/*
	var sendloginyes	= document.getElementById( 'adddevice_sendloginyes'	);
	var sendloginno		= document.getElementById( 'adddevice_sendloginno'	);
	*/
	
	var devicetype		= "Hub";
	var sendlogin		= "yes";
	
	// 2008.01.30 KJD: Combine the errors
	var errors		= new Array();

	// 2008.01.31 KJD: Added basic error checking for sanity
	FormError( 'error_adddevice_devicelocation', 'reset' );
	if( !( devicelocation	) )
	{
		errors[ errors.length ] = 30350;
		FormError( 'error_adddevice_devicelocation', errors[ errors.length - 1 ] );
	}
	else
	{
		if( notValidText( devicelocation ) )
		{
			errors[ errors.length ] = 30351;
			FormError( 'error_adddevice_devicelocation', errors[ errors.length - 1 ] );
		}
	}

	// 2008.01.31 KJD: Check device type
	FormError( 'error_adddevice_devicetype', 	'reset' );
	FormError( 'error_adddevice_scoutID', 		'reset' );
	if( ishub.checked )
	{
		devicetype = "Hub";
	}
	else if( isscout.checked )
	{
		devicetype = "Scout";
		scoutID=scoutID.toUpperCase();
		// 2008.01.31 KJD: Check for ScoutID
			 if( !( scoutID			) )			{	errors[ errors.length ] = 30380;	FormError( 'error_adddevice_scoutID', errors[ errors.length - 1 ] );	}
		else if( notValidLength( scoutID, 12 ) )	{	errors[ errors.length ] = 30384;	FormError( 'error_adddevice_scoutID', errors[ errors.length - 1 ] );	}
		else if( notValidScoutID( scoutID ) )		{	errors[ errors.length ] = 30382; FormError( 'error_adddevice_scoutID', errors[ errors.length - 1 ] );	}
		else if( ScoutIDNotAvailable( scoutID )){	errors[ errors.length ] = 30383;	FormError( 'error_adddevice_scoutID', errors[ errors.length - 1 ] );	}


	}
	else
	{
		errors[ errors.length ] = 30371;
		FormError( 'error_adddevice_devicetype', errors[ errors.length - 1 ] );
	}
	
	// 2008.01.31 KJD: Check firstname
	FormError( 'error_adddevice_firstname', 	'reset' );
	if( !( firstname		) )			{ errors[ errors.length ] = 30390; FormError( 'error_adddevice_firstname', errors[ errors.length - 1 ] );	}
	else if( notValidName( firstname ) ){ errors[ errors.length ] = 30391; FormError( 'error_adddevice_firstname', errors[ errors.length - 1 ] );	}
	
	// 2008.01.31 KJD: Check lastname
	FormError( 'error_adddevice_lastname', 	'reset' );
	if( !( lastname 		) )			{ errors[ errors.length ] = 30400; FormError( 'error_adddevice_lastname', errors[ errors.length - 1 ] );	}
	else if( notValidName( lastname ) )	{ errors[ errors.length ] = 30401; FormError( 'error_adddevice_lastname', errors[ errors.length - 1 ] );	}
	
	// 2008.01.31 KJD: Check email address
	FormError( 'error_adddevice_email', 	'reset' );
	if( !( email			) )			{ errors[ errors.length ] = 30410; FormError( 'error_adddevice_email', errors[ errors.length - 1 ] );	}
	else if( notValidEmail( email ) )	{ errors[ errors.length ] = 30411; FormError( 'error_adddevice_email', errors[ errors.length - 1 ] );	}
	
	// 2008.01.31 KJD: Check password
	FormError( 'error_adddevice_password', 	'reset' );
	FormError( 'error_adddevice_password2', 'reset' );
	if( notPasswordMatch( password, password2 ) )
	{
		errors[ errors.length ] = notPasswordMatch( password, password2, 'error_adddevice_password', 'error_adddevice_password2' );
	}

	// 2008.01.31 KJD: Check if send password
	// 2008.03.12 KJD: Disabled temporary
	/*
	FormError( 'error_adddevice_sendlogin', 'reset' );
	if( sendloginyes.checked )
	{
		sendlogin = "yes";
	}
	else if( sendloginno.checked )
	{
		sendlogin = "no";
	}
	else
	{
		errors[ errors.length ] = 30431;
		FormError( 'error_adddevice_sendlogin', errors[ errors.length - 1 ] );
	}
	*/

	// 2008.01.31 KJD: Success Continue
	if( !( errors.length ) )
	{
		// 2008.02.14 KJD: post the request to the controller
		var thisPost 		= new Object();
		// 2008.04.03 TLW: removed some items from client-level distribution
		thisPost			= {
			"transition"	: "adddevice",
			"location"		: devicelocation,
			// 2008.03.17 TLW: "devicelocation": devicelocation,
			"devicetype"	: devicetype,
			"scoutID"		: scoutID,  //assuming serial is 12 chars, just take the last 5...
			"firstname"		: firstname,
			"lastname"		: lastname,
			"email"			: email,
			"password"		: password
			}
		
		var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
		
		// 2008.02.14 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.02.14 KJD: Error returned
			errors[ errors.length ] = 30433;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
			return errors[ errors.length - 1 ];
		}		
		
//		if( !isGoodScoutSerial(scoutID)) {
			//custom popin
//		}else{
//			popin_open( 'message',	'SettingsUpdated' );
//		}
		
		popin_open( 'message',	'SettingsUpdated' );

		// 2008.04.28 KJD: Update OK button to reload the page
		var thisbutton = document.getElementById( 'button_popin_SettingsUpdated_OK' );
		thisbutton.onclick = doreload;
	}

	return false;
}


function editdeviceSave( popinID )
{
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "editdeviceSave( '" + popinID + "' )" ) ) ){ return false;}

	var devicelocation	= StripString( document.getElementById( 'editdevice_devicelocation'	).value );
	var ishub			= document.getElementById( 'editdevice_hub'				);
	var isscout			= document.getElementById( 'editdevice_scout'			);
	
	var scoutID			= StripString( document.getElementById( 'input_editdevice_scoutID'		).value );
	var firstname		= StripString( document.getElementById( 'editdevice_firstname'	).value );
	var lastname		= StripString( document.getElementById( 'editdevice_lastname'	).value );
	var email			= StripString( document.getElementById( 'editdevice_email'		).value );
	var password		= StripString( document.getElementById( 'editdevice_password'	).value );
	var password2		= StripString( document.getElementById( 'editdevice_password2'	).value );

	/*
	var sendloginyes	= document.getElementById( 'editdevice_sendloginyes'	);
	var sendloginno		= document.getElementById( 'editdevice_sendloginno'	);
	*/
	
	var devicetype		= "Hub";
	var sendlogin		= "yes";
	
	// 2008.01.30 KJD: Combine the errors
	var errors		= new Array();

	// 2008.01.31 KJD: Added basic error checking for sanity
	FormError( 'error_editdevice_devicelocation', 'reset' );
	if( !( devicelocation	) )
	{
		errors[ errors.length ] = 30350;
		FormError( 'error_editdevice_devicelocation', errors[ errors.length - 1 ] );
	}
	else
	{
		if( notValidText( devicelocation ) )
		{
			errors[ errors.length ] = 30351;
			FormError( 'error_editdevice_devicelocation', errors[ errors.length - 1 ] );
		}
	}

	// 2008.01.31 KJD: Check device type
	FormError( 'error_editdevice_devicetype', 	'reset' );
	FormError( 'error_editdevice_scoutID', 		'reset' );
	if( ishub.checked )
	{
		devicetype = "Hub";
	}
	else if( isscout.checked )
	{
		devicetype = "Scout";

		// 2008.01.31 KJD: Check for ScoutID
			 if( !( scoutID			) )			{	errors[ errors.length ] = 30380;	FormError( 'error_editdevice_scoutID', errors[ errors.length - 1 ] );	}
		else if( notValidLength( scoutID, 5 ) )	{	errors[ errors.length ] = 30381;	FormError( 'error_editdevice_scoutID', errors[ errors.length - 1 ] );	}
		else if( notValidScoutID( scoutID ) )		{	errors[ errors.length ] = 30382;	FormError( 'error_editdevice_scoutID', errors[ errors.length - 1 ] );	}
		else if( ScoutIDNotAvailable( scoutID )){	errors[ errors.length ] = 30383;	FormError( 'error_editdevice_scoutID', errors[ errors.length - 1 ] );	}
	}
	else
	{
		errors[ errors.length ] = 30371;
		FormError( 'error_editdevice_devicetype', errors[ errors.length - 1 ] );
	}
	
	// 2008.01.31 KJD: Check firstname
	FormError( 'error_editdevice_firstname', 	'reset' );
	if( !( firstname		) )			{ errors[ errors.length ] = 30390; FormError( 'error_editdevice_firstname', errors[ errors.length - 1 ] );	}
	else if( notValidName( firstname ) ){ errors[ errors.length ] = 30391; FormError( 'error_editdevice_firstname', errors[ errors.length - 1 ] );	}
	
	// 2008.01.31 KJD: Check lastname
	FormError( 'error_editdevice_lastname', 	'reset' );
	if( !( lastname 		) )			{ errors[ errors.length ] = 30400; FormError( 'error_editdevice_lastname', errors[ errors.length - 1 ] );	}
	else if( notValidName( lastname ) )	{ errors[ errors.length ] = 30401; FormError( 'error_editdevice_lastname', errors[ errors.length - 1 ] );	}
	
	// 2008.01.31 KJD: Check email address
	FormError( 'error_editdevice_email', 	'reset' );
	if( !( email			) )			{ errors[ errors.length ] = 30410; FormError( 'error_editdevice_email', errors[ errors.length - 1 ] );	}
	else if( notValidEmail( email ) )	{ errors[ errors.length ] = 30411; FormError( 'error_editdevice_email', errors[ errors.length - 1 ] );	}
	
	// 2008.01.31 KJD: Check password
	FormError( 'error_editdevice_password', 	'reset' );
	FormError( 'error_editdevice_password2', 	'reset' );
	if( notPasswordMatch( password, password2 ) )
	{
		errors[ errors.length ] = notPasswordMatch( password, password2, 'error_editdevice_password', 'error_editdevice_password2' );
	}

	// 2008.01.31 KJD: Check if send password
	// 2008.03.12 KJD: Removed - temporary
	/*
	FormError( 'error_editdevice_sendlogin', 'reset' );
	if( sendloginyes.checked )
	{
		sendlogin = "yes";
	}
	else if( sendloginno.checked )
	{
		sendlogin = "no";
	}
	else
	{
		errors[ errors.length ] = 30431;
		FormError( 'error_editdevice_sendlogin', errors[ errors.length - 1 ] );
	}
	*/

	// 2008.01.31 KJD: Success Continue
	if( !( errors.length ) )
	{

		// 2008.02.14 KJD: post the request to the controller
		var thisPost 		= new Object();
		// 2008.04.03 TLW: removed some items from client-level distribution
		thisPost			= {
			"transition"	: "editdevice",
			"location"		: devicelocation,
			// 2008.03.11 TLW: "devicelocation": devicelocation,
			"devicetype"	: devicetype,
			"scoutID"		: scoutID,
			"firstname"		: firstname,
			"lastname"		: lastname,
			"email"			: email,
			"password"		: password,
			"sendlogin"		: sendlogin,
			// 2008.04.03 TLW: currentdevice is index into device array on server side
			"currentdevice"	: CurrentDevice 
		}
		
		var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
		
		// 2008.02.14 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.02.14 KJD: Error returned
			errors[ errors.length ] = 30434;

			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
			return errors[ errors.length - 1 ];
		}		
		
		// popin_hide( popinID );
		
		// 2008.03.21 TLW: Device Add successful, refresh page
		// setTimeout( "doreload();", 1000 );
		
		// 2008.05.13 KJD: Show settings updated message
		popin_open( 'message',	'SettingsUpdated' );
		
		// 2008.05.13 KJD: Update OK button to reload the page
		var thisbutton = document.getElementById( 'button_popin_SettingsUpdated_OK' );
		thisbutton.onclick = doreload;
		
	}

	return false;
}


// 2008.01.30 KJD: Delete the Device
function DeleteDevice( popinID )
{
	// 2008.02.04 KJD: Show delete device message
	popin_open( 'message',	'DeleteDevice' );

	return false;
}

// 2008.02.04 KJD: Delete device confirm
function DeleteDevice_Confirm( popinID )
{
	/*** 2008.04.21 TLW: ***
	var devicelocation = "test";
	var ringpattern		= StripString( document.getElementById( 'editnumber_ringpattern'	).value );
	**** 2008.04.21 TLW: ***/

	// 2008.02.14 KJD: post the request to the controller
	var thisPost 		= new Object();
	thisPost			= {
		"transition"	: "deletedevice",
		"currentdevice"	: CurrentDevice
	}
	/*** 2008.04.21 TLW: ***
	thisPost			= {
		"transition"	: "deletedevice",
		"sessionID"		: sessionID,
		"devicelocation": devicelocation
	}
	**** 2008.04.21 TLW: ***/
	
	var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
	
	// 2008.02.14 KJD: Check response error
	if( myResponse[ 'responsecode' ] )
	{
		// 2008.02.14 KJD: Error returned
		var errors = new Array();
		errors[ errors.length ] = 30530;
		DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
		return errors[ errors.length - 1 ];
	}		
	
	// 2008.04.21 TLW:  popin_hide( popinID );
	// 2008.04.21 TLW:  popin_hide( "popin_popin_ViewDevice" );
		
	// 2008.04.21 TLW:  Device Add successful, refresh page
	setTimeout( "doreload();", 1000 );
	
	return false;
}


// 2008.01.30 KJD: Edit the Device
function EditDevice( popinID )
{
	popin_hide( popinID );
	
	popin_open( 'popin', 'popin_EditDevice' );

	// 2008.02.21 KJD: Populate
	PopinPopulate( 'editdevice' );
	
	return false;
}

// 2008.04.14 KJD: Move the DID confirmed
function MoveDID( popinID )
{
	return EditNumberSaveExecute( popinID ); // if no DID move,take this path
}

// 2008.01.30 KJD: Edit number save for Master account
function EditNumberSave( popinID )
{
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "EditNumberSave( '" + popinID + "' )" ) ) ){ return false;}


	var ringpattern		= StripString( document.getElementById( 'editnumber_ringpattern'	).value );
	
	// 2008.03.22 KJD: disabled, hard-code for time-being
	// var device		= StripString( document.getElementById( 'editnumber_deviceselected'	).value );
	// 2008.04.14 KJD: Get current device PK
	var device			= deviceObject[ CurrentDevice ][ 'devicePK' ];

	// 2008.04.14 KJD: Get Selected Device PK
	var selectedDevice	= StripString( document.getElementById( 'editnumber_deviceselected'	).value );

	// 2008.01.30 KJD: Combine the errors
	var errors		= new Array();

	FormError( 'error_editnumber_ringpattern', 		'reset' );
	FormError( 'error_editnumber_devicelocation', 	'reset' );
	
	if( !( ringpattern	) ){ errors[ errors.length ] = 30440; FormError( 'error_editnumber_ringpattern', errors[ errors.length - 1 ] );	}
	if( !( device		) ){ errors[ errors.length ] = 30450; FormError( 'error_editnumber_devicelocation', errors[ errors.length - 1 ] );	}
	
	// 2008.04.14 KJD: Check if trying to move VM DID

	if( selectedDevice != deviceObject[ CurrentDevice ][ 'devicePK' ] )
	{
		if( NumbersforDevice( CurrentDevice ) == 1 )	
		{
			// 2008.04.14 KJD: Is the VM DID, show popin
			popin_open( 'message',	'MoveVMdid' );
			
			// 2008.04.14 KJD: Added error to stop everything
			// 2008.05.01 KJD: No need to show error, just save it for now, so that we return false
			errors[ errors.length ] = 30453; 
			// FormError( 'error_editnumber_devicelocation', errors[ errors.length - 1 ] );
		}
	}
	
	if( errors.length )
	{
		return false;
	}
	return EditNumberSaveExecute( popinID ); // if no DID move,take this path
}

function EditNumberSaveExecute( popinID )
{
	// 2008.03.28 KJD: Added for wait window display
	// 2008.04.14 TLW:  if( !( WaitWindow( 'open', functioncalled, "EditNumberSave( '" + popinID + "' )" ) ) ){ return false;}


	var ringpattern	= StripString( document.getElementById( 'editnumber_ringpattern'	).value );
	
	// 2008.03.22 KJD: disabled, hard-code for time-being
	// var device		= StripString( document.getElementById( 'editnumber_deviceselected'	).value );
	// 2008.04.14 KJD: Get current device PK
	var device			= deviceObject[ CurrentDevice ][ 'devicePK' ];

	// 2008.04.14 KJD: Get Selected Device PK
	var selectedDevice	= StripString( document.getElementById( 'editnumber_deviceselected'	).value );

	// 2008.01.30 KJD: Combine the errors
	var errors		= new Array();

	FormError( 'error_editnumber_ringpattern', 		'reset' );
	FormError( 'error_editnumber_devicelocation', 	'reset' );
	
	if( !( ringpattern	) ){ errors[ errors.length ] = 30440; FormError( 'error_editnumber_ringpattern', errors[ errors.length - 1 ] );	}
	if( !( device		) ){ errors[ errors.length ] = 30450; FormError( 'error_editnumber_devicelocation', errors[ errors.length - 1 ] );	}
	
	// 2008.04.14 KJD: Check if trying to move VM DID
	
	// 2008.01.31 KJD: Success Continue
	if( !( errors.length ) )
	{
		var devObjLength = 0;
		for( var i in deviceObject )
		{
			if(deviceObject[devObjLength]['devicePK'] == selectedDevice) {
				deviceToMoveTo = devObjLength;
			} // end if
			devObjLength++;
		}
		/**** 2008.04.15 KJD/TLW: causes invalid default device indication ****
		var devObjLength = deviceObject[ 'devicecount' ];
		for( i = 0 ; i < devObjLength ; i++) {
			if(deviceObject[i]['devicePK'] == selectedDevice) {
				deviceToMoveTo = i;

			} / / end if
		} / / end for
		***** 2008.04.15 KJD/TLW: causes invalid default device indication ****/
		
		// 2008.02.14 KJD: post the request to the controller
		// 2008.03.22 KJD: Added additional requirements
		var thisPost 		= new Object();
		thisPost			= {
			"transition"		: "DID_update",
			// 2008.04.08 TLW:  "sessionID"  : userObject[ 'sessionID' ],
			// 2008.04.08 TLW:  "PK"  : userObject[ 'PK' ],
			// 2008.04.08 TLW:  "CustomerPK"  : userObject[ 'CustomerPK' ],
			// 2008.04.08 TLW:  "devicePK"  : deviceObject[ CurrentDevice ][ 'devicePK' ],
			// 2008.04.08 TLW:  "didPK"  : deviceObject[ CurrentDevice ][ 'DID' ][ CurrentNumber ][ 'PK' ],
			
			// 2008.04.08 TLW: currentdevice  and devicetomoveto are indexes into device array on server side
			"currentdevice"		: CurrentDevice,
			"devicetomoveto"	: deviceToMoveTo, 

			"currentnumber"		: CurrentNumber,
			// 2008.04.03 TLW: "phonenumber"  : deviceObject[ CurrentDevice ][ 'DID' ][ CurrentNumber ][ 'E164' ],

			"ringpattern"		: ringpattern
			
			/*** MOVED TO SERVER SIDE ONLY ***
			"firstname"			: deviceObject[ CurrentDevice ][ 'firstname' ],
			"lastname"			: deviceObject[ CurrentDevice ][ 'lastname' ],
			"email"				: deviceObject[ CurrentDevice ][ 'email' ],
			"defaultDID"		: deviceObject[ CurrentDevice ][ 'DefaultDID' ],
			
			"virtualNumID"		: deviceObject[ CurrentDevice ][ 'DID' ][ CurrentNumber ][ 'VNumID' ],
			"CName"				: deviceObject[ CurrentDevice ][ 'DID' ][ CurrentNumber ][ 'CName' ],
			"starcode"			: deviceObject[ CurrentDevice ][ 'DID' ][ CurrentNumber ][ 'StarCode' ],
			"enableScreen"		: deviceObject[ CurrentDevice ][ 'DID' ][ CurrentNumber ][ 'Monitor' ],
			/ / 2008.03.25 KJD: Updated to use Device RNS
			"rna"				: deviceObject[ CurrentDevice ][ 'RNA' ],

			// 2008.04.08 TLW:  "isMaster"  : isMaster
			**** MOVED TO SERVER SIDE ONLY ***/
			
		}

		// 2008.04.08 TLW: use loungeMVC 
		var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
		// var myResponse		= JSON.parse( PostFile( postBackLocation, thisPost ) );
		
		// 2008.02.14 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.02.14 KJD: Error returned
			errors[ errors.length ] = 30451;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
			return false;
		}		
		
		popin_hide( popinID );

		// 2008.04.28 KJD: Show settings updated message
		popin_open( 'message',	'SettingsUpdated' );
		
		// 2008.04.28 KJD: Update OK button to reload the page
		var thisbutton = document.getElementById( 'button_popin_SettingsUpdated_OK' );
		thisbutton.onclick = doreload;

		// 2008.03.24 KJD: On success, reload the page
		// window.location.reload( false );
	}
	
	return false;
}



// 2008.01.30 KJD: Edit number save for Sub account
function EditNumberSave_sub( popinID )
{
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "EditNumberSave_sub( '" + popinID + "' )" ) ) ){ return false;}


	var ringpattern	= StripString( document.getElementById( 'number_ringpattern'	).value );

	// 2008.01.30 KJD: Combine the errors
	var errors		= new Array();

	FormError( 'error_editnumber_ringpattern', 		'reset' );
	
	if( !( ringpattern	) ){ errors[ errors.length ] = 30440; FormError( 'error_editnumber_ringpattern', errors[ errors.length - 1 ] );	}
	
	// if( errors ){	displayerror( errors );	}

	// 2008.01.31 KJD: Success Continue
	if( !( errors.length ) )
	{
		// 2008.02.14 KJD: post the request to the controller
		var thisPost 		= new Object();
		thisPost			= {
			"transition"	: "editnumber",
			"sessionID"		: sessionID,
			"ringpattern"	: ringpattern
		}
		
		var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
		
		// 2008.02.14 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.02.14 KJD: Error returned
			errors[ errors.length ] = 30452;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
			return false;
		}		
		
		popin_hide( popinID );
	}

	return false;
}

// 2008.01.30 KJD: Edit the number attributes
function EditNumberPopin( popinID )
{
	popin_hide( popinID );
	
	popin_open( 'popin', 'popin_EditNumber' );

	return false;
}

// 2008.01.31 KJD: Initialize the Add Number popin
function AddNumberInit( popinID )
{
	document.getElementById( 'addnumber_phone_row' 				).style.display = 'none';
	document.getElementById( 'addnumber_callerID_row' 			).style.display = 'none';
	document.getElementById( 'addnumber_device_row' 			).style.display = 'none';
	document.getElementById( 'addnumber_ringpattern_row' 		).style.display = 'none';
	document.getElementById( 'button_' + popinID + "_Save" 		).style.display = 'none';
	
	document.getElementById( 'addnumber_savebutton' 			).value 		= 'button_' + popinID + "_Save";

	return false;
}

// 2008.01.31 KJD: Add Number
function AddNumberSelect( thisNumber )
{
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "AddNumberSelect( '" + thisNumber + "' )" ) ) ){ return false;}

	thisNumber = OnlyDigits( thisNumber );
	
	if( thisNumber )
	{
		// 2008.02.07 KJD: Check if a number previously selected
		FormError( 'error_addnumber_select', 		'reset' );

		// 2008.03.28 KJD: using postback, we can bring this Back
		var oldnumber = OnlyDigits( document.getElementById( 'addnumber_phone_show' ).innerHTML );
		if( oldnumber )
		{
			var UnReserveError = NumberRequest( 'unreserve', oldnumber );
			
			if( UnReserveError )
			{
				FormError( 'error_addnumber_select', UnReserveError );
				
				return false;
			}
		}

		var ReserveError = NumberRequest( 'reserve', thisNumber );

		if( ReserveError )
		{
			// 2008.04.21 KJD: open popin if error
			popin_open( 'popin', 'popin_DIDsearch' );

			FormError( 'error_addnumber_select', ReserveError );
			return false;
		}

		// 2008.02.06 KJD: Close popin
		// 2008.04.21 KJD: Only close if no error
		popin_hide( 'popin_popin_DIDsearch' );			
		
		document.getElementById( 'addnumber_phone' 		).value 	= thisNumber;
		document.getElementById( 'addnumber_phone_show' ).innerHTML = phone_format( thisNumber );
		
		// 2008.03.18 KJD: Remove the Add a new Number link
		// 2008.04.03 KJD: Bring back since we can now release DID
		// document.getElementById( 'addnumberlink' ).style.display	= "none";
		
		AddNumberUpdate();
	}
	else
	{
		popin_open( 'popin', 'popin_DIDsearch' );
		
		// 2008.03.28 KJD: Reset the DID search window
		PopinPopulate( "DIDsearch" );

		// 2008.03.27 KJD: Clear the error messages
		FormError( 'error_phonesearch', 		'reset' );
	}
	
	return false;
}

// 2008.02.07 KJD: Send number request to OSS
function NumberRequest( thisString, thisNumber )
{
	// 2008.03.28 KJD: Added for wait window display
	// 2008.04.21 KJD: Timing issues using this line
	// if( !( WaitWindow( 'open', functioncalled, "NumberRequest( '" + thisString + "', '" + thisNumber + "' )" ) ) ){ return false;}

	thisNumber = OnlyDigits( thisNumber );
	
	if( thisString == 'reserve' )
	{
		// 2008.02.14 KJD: post the request to the controller
		var thisPost 		= new Object();
		thisPost			= {
			"transition"	: "DID_reserve",
			"phonenumber"	: thisNumber
		}
		
		// 2008.03.28 KJD: Use postback because it works
		// var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
		var myResponse		= JSON.parse( PostFile( postBackLocation, thisPost ) );
		
		// 2008.02.14 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.02.14 KJD: Error returned
			var errors = new Array;
			errors[ errors.length ] = 30510;

			// 2008.04.21 KJD: Return the error code
			return DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ], errors[ errors.length - 1 ] );
		}


		// 2008.03.28 KJD: Set reservationID
		reservationID	= myResponse['Response']['DIDReservation']['@attributes']['res_reference'];

		return false;
	}
	else if( thisString == 'unreserve' )
	{
		// 2008.02.14 KJD: post the request to the controller
		var thisPost 		= new Object();
		thisPost			= {
			"transition"	: "DID_release",
			"sessionID"		: reservationID,
			"phonenumber"	: thisNumber
		}
		
		// 2008.03.28 KJD: Use postback
		// var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
		var myResponse		= JSON.parse( PostFile( postBackLocation, thisPost ) );
		
		// 2008.02.14 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.02.14 KJD: Error returned
			var errors = new Array;
			errors[ errors.length ] = 30520;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
			
			return false;
			return errors[ errors.length - 1 ];
		}
		
		return false;
	}
	

	return false;
}


// 2008.01.31 KJD: Display parts as we continue
function AddNumberUpdate(  )
{
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "AddNumberUpdate( )" ) ) ){ return false;}

	// 2008.01.31 KJD: Has phone, show callerID
	if( StripString( document.getElementById( 'addnumber_phone' ).value ) )
	{
		document.getElementById( 'addnumber_phone_row' 				).style.display = 'block';
		document.getElementById( 'addnumber_callerID_row' 			).style.display = 'block';
		document.getElementById( 'addnumber_device_row' 			).style.display = 'block';
		document.getElementById( 'addnumber_ringpattern_row' 		).style.display = 'block';
		
		// 2008.04.03 KJD: Check if we've set this
		if( document.getElementById( 'addnumber_device' ).options.length < 2 )
		{
			// 2008.03.07 KJD: Populate device drop-down
			for( var i in deviceObject )
			{
				// 2008.03.13 KJD: Use devicePK as value
				document.getElementById( 'addnumber_device' ).options[ document.getElementById( 'addnumber_device' ).options.length ] = new Option( deviceObject[ i ][ 'deviceName' ], deviceObject[ i ][ 'devicePK' ] );
			}
		}
			
		document.getElementById( document.getElementById( 'addnumber_savebutton'	).value		).style.display = 'block';
		
		// 2008.03.28 KJD: If no current device, set it to 0 (Shared)
		if( !( CurrentDevice ) ){ CurrentDevice = 0; }

		// 2008.03.27 KJD: Select the device, if for device
		document.getElementById( 'addnumber_device' ).value = deviceObject[ CurrentDevice ][ 'devicePK' ];
	}

	return false;
}

// 2008.01.30 KJD: Add a new number
function AddNumberSave( popinID )
{
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "AddNumberSave( '" + popinID + "' )" ) ) ){ return false;}

	var phonenumber		= StripString( document.getElementById( 'addnumber_phone'		).value );
	var callerID		= StripString( document.getElementById( 'addnumber_callerID'	).value );
	var device			= StripString( document.getElementById( 'addnumber_device'		).value );
	var ringpattern		= StripString( document.getElementById( 'addnumber_ringpattern'	).value );

	// 2008.02.25 KJD: session vars
	var starcode		= 1;

	// var reservationID	= "web,Web";
	var virtualNumID	= 1;

	// 2008.01.30 KJD: Combine the errors
	var errors		= new Array();

	// 2008.01.31 KJD: Check phone number
	FormError( 'error_addnumber_phone', 	'reset' );
	if( !( phonenumber	) )
	{
		errors[ errors.length ] = 30460;
		FormError( 'error_addnumber_phone', errors[ errors.length - 1 ] );
	}
	
	// 2008.01.31 KJD: Check caller ID	
	FormError( 'error_addnumber_callerID', 	'reset' );
	if( !( callerID		) )
	{
		errors[ errors.length ] = 30470;
		FormError( 'error_addnumber_callerID', errors[ errors.length - 1 ] );
	}
	else
	{
		// 2008.01.31 KJD: Check for valid CallerID
		if( notValidCallerID( callerID, 'error_addnumber_callerID' ) )	{	errors[ errors.length ] = notValidCallerID( callerID, 'error_addnumber_callerID' );	}
		
		// 2008.03.28 KJD: Update CallerID to valid Characters
		callerID	= ValidCallerID( callerID );
	}
		
	// 2008.01.31 KJD: Check for selected device 
	FormError( 'error_addnumber_device', 	'reset' );
	if( !( device		) )
	{
		errors[ errors.length ] = 30480;
		FormError( 'error_addnumber_device', errors[ errors.length - 1 ] );
	}
	
	// 2008.01.31 KJD: Check for valid ring pattern
	FormError( 'error_addnumber_ringpattern', 	'reset' );
	if( !( ringpattern	) )
	{
		errors[ errors.length ] = 30490;
		FormError( 'error_addnumber_ringpattern', errors[ errors.length - 1 ] );
	}

	// 2008.01.31 KJD: Success Continue
	if( !( errors.length ) )
	{
		// 2008.02.14 KJD: post the request to the controller
		// 2008.02.25 KJD: Updated post values
		var thisPost 		= new Object();
		thisPost			= {
			"transition"	: "DID_add",
			"sessionID"		: userObject[ 'sessionID' ],
			"phonenumber"	: phonenumber,
			"devicePK"		: device,
			// 2008.03.14 TLW: "devicePK"		: devicePK,
			"callerID"		: callerID,
			"starcode"		: starcode,
			"reservationID"	: reservationID,
			"virtualNumID"	: virtualNumID,
			"ringpattern"	: ringpattern
		}
		
		// 2008.03.07 KJD: Trap the JSON response
		try
		{
			// 2008.03.28 KJD: Use postback
			// var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
			var myResponse		= JSON.parse( PostFile( postBackLocation, thisPost ) );
	
			// 2008.02.14 KJD: Check response error
			if( myResponse[ 'responsecode' ] )
			{
				// 2008.02.14 KJD: Error returned
				errors[ errors.length ] = 30491;
				
				// 2008.06.04 KJD: Check if max number of VMs reached (display custom popin message)
				if( ( myResponse[ 'responsecode' ] ) && ( myResponse[ 'responsecode' ] == 162 ) )
				{
					popin_open( 'message',	'AddDIDlimit' 	);
				}
				else
				{
					DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
				}
				
				return errors[ errors.length - 1 ];
			}
		}
		catch( e )
		{
			// 2008.03.07 KJD: Return the error
			errors[ errors.length ] = 30492;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );

			// window.location.reload( false );
			
			return errors[ errors.length - 1 ];
		}
		
		// popin_hide( popinID );
		// TODO: GET USER RECORD AGAIN

		// 2008.04.28 KJD: Show settings updated message
		popin_open( 'message',	'SettingsUpdated' );
		
		// 2008.04.28 KJD: Update OK button to reload the page
		var thisbutton = document.getElementById( 'button_popin_SettingsUpdated_OK' );
		thisbutton.onclick = doreload;
	}
	
	return false;
}

// 2008.02.01 KJD: Check for valid phone# and email
function ForgotPasswordSubmit( popinID )
{
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "ForgotPasswordSubmit( '" + popinID + "' )" ) ) ){ return false;}

	var phonenumber		= StripString( document.getElementById( 'forgotlogin_phonenumber'	).value );
	var emailaddress	= StripString( document.getElementById( 'forgotlogin_email'	).value );

	// 2008.02.01 KJD: Combine the errors
	var errors		= new Array();
	
	// 2008.02.01 KJD: Check phone number
	FormError( 'error_forgotlogin_phonenumber', 	'reset' );
	if( !( phonenumber			) )			{ errors[ errors.length ] = 30260; FormError( 'error_forgotlogin_phonenumber', errors[ errors.length - 1 ] );	}
	else if( notValidPhone( phonenumber ) )	{ errors[ errors.length ] = 30261; FormError( 'error_forgotlogin_phonenumber', errors[ errors.length - 1 ] );	}
	
	// 2008.02.01 KJD: Check email address
	FormError( 'error_forgotlogin_email', 	'reset' );
	if( !( emailaddress			) )				{ errors[ errors.length ] = 30270; FormError( 'error_forgotlogin_email', errors[ errors.length - 1 ] );	}
	else if( notValidEmail( emailaddress ) )	{ errors[ errors.length ] = 30271; FormError( 'error_forgotlogin_email', errors[ errors.length - 1 ] );	}
	
	// 2008.01.31 KJD: Success Continue
	if( !( errors.length ) )
	{
		// 2008.02.14 KJD: post the request to the controller
		var thisPost 		= new Object();
		thisPost			= {
			"transition"	: "ResetPassword",
			"phonenumber"	: OnlyDigits( phonenumber ),
			"email"			: emailaddress
		}
		
		// 2008.03.10 KJD: Using postBack for time being
		// TODO: use MVC controller
		// var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
		var myResponse		= JSON.parse( PostFile( postBackLocation, thisPost ) );
		
		// 2008.02.14 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.02.14 KJD: Error returned
			errors[ errors.length ] = 30272;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
			return errors[ errors.length - 1 ];
		}		
		
		popin_hide( popinID );
		
		popin_open( 'message',	'ForgotPassword_sent' 	);
	}
	
	return false;
}

// 2008.02.06 KJD: Check for Available DIDs
function SearchDID(  )
{
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "SearchDID(  )" ) ) ){ return false;}

	var areacode	= document.getElementById( 'areacode' ).value;
	var prefix		= document.getElementById( 'prefix' ).value;
	var suffix		= "0000";
	
	// 2008.02.06 KJD: Combine the errors
	var errors		= new Array();
	
	// 2008.02.06 KJD: Check if a valid entry was made
	FormError( 'error_phonesearch', 	'reset' );
		 if( !( areacode ) )				{ errors[ errors.length ] = 30022; FormError( 'error_phonesearch', errors[ errors.length - 1 ] );	}
	else if( notDigits( areacode ) )		{ errors[ errors.length ] = 30023; FormError( 'error_phonesearch', errors[ errors.length - 1 ] );	}
	else if( notValidLength( areacode, 3 ) ){ errors[ errors.length ] = 30024; FormError( 'error_phonesearch', errors[ errors.length - 1 ] );	}
	
	if( prefix )
	{
		 if( notDigits( prefix ) )			{ errors[ errors.length ] = 30026; FormError( 'error_phonesearch', errors[ errors.length - 1 ] );	}
	else if( notValidLength( prefix, 3 ) )	{ errors[ errors.length ] = 30027; FormError( 'error_phonesearch', errors[ errors.length - 1 ] );	}
	}
	
	// 2008.02.06 KJD: No Errors, Continue
	if( !( errors.length ) )
	{
		// 2008.02.06 KJD: Show progress image
		document.getElementById( 'phone_lookup_progress' ).innerHTML = DisplayStatus( 'progress' );
		
		
		var thisFile = '/ajax/xml.php?method=requestDID&npa=' + areacode + '&nxx=' + prefix;
		
		// 2008.02.06 KJD: Send AJAX Request
		var ThisResult = ParseResponse( GetFile( thisFile, "XML", "object" ) );

		// 2008.02.06 KJD: Create a number array
		var Numbers = new Object();
		
		// 2008.02.06 KJD: Save values into array
		try
		{
			for( var i in ThisResult[ 'output' ]['data']['requestDID'] )
			{
				if( ThisResult[ 'output' ]['data']['requestDID'][i]['did'] )
				{
					// 2008.02.06 KJD: for each DID attribute
					Numbers[ OnlyDigits( ThisResult[ 'output' ]['data']['requestDID'][i]['did'] ) ] = ThisResult[ 'output' ]['data']['requestDID'][i]['city'] + ", " + ThisResult[ 'output' ]['data']['requestDID'][i]['state'];
				}
			}
		}
		catch(e){}

		// 2008.04.03 KJD: Count the DIDs returned
		var numbercount	= 0;
		for( var i in Numbers ){numbercount++;}
		
		var sortednumbers = new Array();
		
		// 2008.04.03 KJD: Check for number count
		//if( Numbers.length )
		if( numbercount )
		{
			// 2008.02.06 KJD: Correct values
			var DIDnumbers = new Array();
			for( var i in Numbers )
			{
				if( OnlyDigits( i ) )
				{
					DIDnumbers[ DIDnumbers.length ] = OnlyDigits( i ) + "####" + Numbers[ i ];
				}
			}
			
			// 2008.02.06 KJD: Sort the list of DIDs
			sortednumbers = DIDnumbers.sort();
		}
		else
		{
			// 2008.02.07 KJD: Check for error
			var XMLerror = ThisResult[ 'error' ]['fault'];
		
			if( XMLerror )
			{
				// 2008.02.07 KJD: Error from OSS
				errors[ errors.length ] = 30502; FormError( 'error_phonesearch', errors[ errors.length - 1 ] );
			}
			else
			{
				// 2008.02.06 KJD: No results
				errors[ errors.length ] = 30501;
				FormError( 'error_phonesearch', errors[ errors.length - 1 ] );
			}
		}
		
		// 2008.02.06 KJD: Paginate numbers
		DisplayNumbers( sortednumbers );
	}

	// 2008.02.06 KJD: Clear the status image
	document.getElementById( 'phone_lookup_progress' ).innerHTML = DisplayStatus( 'clear' );

	return false;
}

// 2008.02.06 KJD: Display Status images
function DisplayStatus( thisStatus )
{
	var thisString 	= "";
	var thisImage	= "";
	
	// 2008.02.06 KJD: Image states
		 if( thisStatus == 'status' )	{	thisImage = "/images/green-status.gif";		}
	else if( thisStatus == 'progress' )	{	thisImage = "/images/ajaxindicator.gif";	}
	else if( thisStatus == 'failed' )	{	thisImage = "/images/gray-status.gif";		}

	if( thisImage )
	{
		thisString = "<IMG SRC='" + thisImage + "'>";
	}
	
	return thisString;
}


var PreferencesSystemSaveType="";

function PreferencesSystemSave(type){
	

	var errors		= new Array();
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "PreferencesSystemSave()" ) ) ){ return false;}
	var tenDigitDial="";
	var connectTone="";

	var flashPass="";
	var starCode="";
	
	var thisFile='/ajax/xml.php?method=SET_CUSTATTR';
	
	if(PreferencesSystemSaveType=='landline'){
		//set connect Tone and ten digit dialing
		//set flash pass through and star code
		flashPass=document.getElementById( 'flashPass' ).checked== true ? "true" : "false";
		starCode=document.getElementById( 'starCode' ).checked== true ? "true" : "false";
		var thisFile = thisFile + '&flashPass=' + flashPass + '&starCode=' + starCode;
	}
	else{		
		tenDigitDial=document.getElementById( 'tenDigitDial' ).checked== true ? "true" : "false";
		connectTone=document.getElementById( 'connectTone' ).value
		var thisFile = thisFile + '&connectTone=' + connectTone + '&tenDigitDial=' + tenDigitDial;		
	}
	
	// 2008.02.06 KJD: Send AJAX Request
	var ThisResult = ParseResponse( GetFile( thisFile, "XML", "object" ) );

	if(ThisResult['output'][ 'respCode']!="1"){
		alert("There was a problem saving the system settings.  Please logout, log back in and try again.");
		return false;
	}
	
	Growl.Bezel({
			title: '<br><img src="/content/en/us/lounge/images/active.gif">&nbsp;Settings Saved!',
			duration:2.5
	});
	
	return false;	

}



// 2008.02.15 KJD: Validate Privacy Preferences
function PreferencesMRSave()
{
	
	var errors		= new Array();
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "PreferencesMRSave()" ) ) ){ return false;}
	
	// Check if MultiRingActive is Checked (this sets the CFNetActive parameters too...)
	var MultiRingActive;
	var CFActive;
	var CFNetActive;
	var CFOptions=document.getElementById( 'MROptions' ).value;
	var MultiRingLocal;
	
	//determine if we should turn on Multi-Ring or CFNet
	if(document.getElementById( 'CFActive' ).checked== true){
		//set CFNet and MultiringLocalSettings
		//call forward or multi-ring on
		if(CFOptions=="MR" || CFOptions=="CF"){
			MultiRingActive="true";
			CFNetActive="false";
			MultiRingLocal = (CFOptions=="MR") ? "true" : "false"; //set if we should ring home phones
		}
		//call forward is set...
		else{
			CFNetActive="true";
			MultiRingActive="false";
			MultiRingLocal="false";
		}
	}
	//both are disabled:
	else{
		MultiRingActive="false";
		CFNetActive="false";
	}
	
	
	//kinda redudant but I couldn't find out why my function can't pass in arguments!!
	var MultiRing1 = document.getElementById( "MultiRing1" ).value;	
	MultiRing1 = MultiRing1.replace(/[\(\)\.\-\ ]/g, '');    
	var digit1="1";
	
	if(MultiRing1 !=""){
		MultiRing1=digit1.concat(MultiRing1);
	}
	
	var CurrentDevice=document.getElementById( "currentDevice" ).value;
	var numPhone=document.getElementById( "numPhone" ).value;
	//CurrentNumber=0;

	var thisPost 		= new Object();
	
	//loop through all the current devices number and update the multiring settings.
	for (var i = 0; i < numPhone; i++)
//	for (var i = 0; i < 1; i++)

	{	
		thisPost			= {
			"transition"		: "DID_update",
			"currentdevice"		: CurrentDevice,
			"currentnumber"		: i,			//index 
			"MultiRingLocal"	: MultiRingLocal,
			"MultiRing1"		: MultiRing1,
			"MultiRingActive"	: MultiRingActive,
			"CFNetActive"		: CFNetActive			
		}


		// 2008.04.08 TLW: use loungeMVC 
		var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
		
		// 2008.02.14 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.02.14 KJD: Error returned
			errors[ errors.length ] = 30451;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
			return false;
		}		
	}		
	//	popin_open( 'message',	'SettingsUpdated' );
		
		// 2008.04.28 KJD: Update OK button to reload the page
	//	var thisbutton = document.getElementById( 'button_popin_SettingsUpdated_OK' );
	//	thisbutton.onclick = doreload;

		// 2008.03.24 KJD: On success, reload the page
		// window.location.reload( false );
		Growl.Bezel({
			title: '<br><img src="/content/en/us/lounge/images/active.gif">&nbsp;Settings Saved!',
			duration:2.5
		});
	
	return false;	

}

function GetBlackList(){
	/*
	var myTable=document.getElementById("blackListTable");
	
	rows = myTable.getElementsByTagName("tr");
	
	var phoneNumbers='';
	phoneNumbers='';
	
	firstrow=rows[0].getElementsByTagName("td")[0].innerHTML.replace(/[\(\)\.\-\ ]/g, '');
	
	//check if first row is a number...
	if(firstrow.match(/\D/)){
		return '';
	}
	
	//first column of table is the phone number
	for(i=0; i < rows.length; i++){
		phoneNumber= "1" + rows[i].getElementsByTagName("td")[0].innerHTML.replace(/[\(\)\.\-\ ]/g, '');    
		if(i ==0){
			phoneNumbers=phoneNumber;
		}
		else{
			phoneNumbers=phoneNumbers + "," + phoneNumber;
		}
	}*/
	var phoneNumbers='';
	
	for(i=0; i< didBLArray.length; i++){
		if(i ==0){
			phoneNumbers="1" + didBLArray[i];
		}
		else{
			phoneNumbers=phoneNumbers + "," + "1" + didBLArray[i];;
		}
	}
		
	return phoneNumbers;
	
}

function arraySearch(array, value){
	var length=array.length;
	var i;
	
	for(i=0; i < length; i++ ){
		if(array[i]==value){
			return i;
		}
	}
	return -1;
}

function EditBlackList(){

	
	//update the blacklist Entry in the table if SQL success
	index=document.getElementById('rowIndex').value;
	var mytable=document.getElementById("blackListTable");

	var category=document.getElementById( 'blackListCategory' ).value;
	var comments=document.getElementById("blackListComments").value;
	var callerName=document.getElementById("blackListCallerName").value;
	
	var commentsAbrv=comments;

	if(comments.length > 20){
		commentsAbrv=comments.substr(0,19) + " [..]";
	}
	
	//do SQL stuff here to update the entry...
	numberDigits= document.getElementById( 'blackListNumber' ).value.replace(/[\(\)\.\-\ ]/g, '');    
	e164Number= "1" + numberDigits;    
	
	DBAction(e164Number,callerName,category,comments,"edit");
	
	//update table entry...		
	row=mytable.getElementsByTagName("tr")[index];
	row.getElementsByTagName("td")[1].innerHTML=callerName;
	row.getElementsByTagName("td")[2].innerHTML=category;
	
	row.getElementsByTagName("td")[3].innerHTML=commentsAbrv;
	row.getElementsByTagName("td")[4].innerHTML=comments;
	

	
	
	popin_hide( 'popin_popin_BlackListNumberEdit' );			
}

function DeleteBlackList(popinID){
	numberDigits= document.getElementById( 'blackListNumber' ).value.replace(/[\(\)\.\-\ ]/g, '');    
	e164Number= "1" + numberDigits;    
	
	DBAction(e164Number,callerName,category,comments,"delete");
	
	deleteFromBlackListTable();
	//remove from didBLArray:
	Array.prototype.remove=function(s){
		var i = this.indexOf(s);
		if(i != -1) this.splice(i, 1);
	}
	
	//remove from blackList array
	didBLArray.remove(numberDigits);
	
	PreferencesBlackListSave();
	popin_hide( 'popin_popin_BlackListNumberEdit' );			
	
}


function SetOptOut(popinID){
	//get and validate phone Number

//	alert(document.getElementById("optout_yes").checked)


	var optOut_pref;
	
	var thisFile='/ajax/xml.php?method=SET_CUSTATTR';
	
	if(document.getElementById("optout_yes").checked==true){
		optOut_pref="true";
	}else{
		optOut_pref="false";
	}

	thisFile = thisFile + '&optOut_pref=' + optOut_pref;

	
	// 2008.02.06 KJD: Send AJAX Request
	var ThisResult = ParseResponse( GetFile( thisFile, "XML", "object" ) );

	if(ThisResult['output'][ 'respCode']!="1"){
		alert("There was a problem saving the system settings.  Please logout, log back in and try again.");
		return false;
	}
	
	//Growl.Bezel({
	//		title: '<br><img src="/content/en/us/lounge/images/active.gif">&nbsp;Settings Saved!',
	//		duration:2.5
	//});
	popin_hide( 'popin_popin_OptOut' );			
	doreload();

	return false;	

}


function AddBlackList(popinID){
	//get and validate phone Number
	var errorID="errorBLNumberAdd";
	var number=document.getElementById("blackListNumberAdd");
	
	//display phone number validation error if any...
	phoneNumber=isValidPhoneNumber(number,errorID);
	if(phoneNumber =="ERROR"){		
		return false;
	}
	
	
	
	//check to see if in existing blacklist
	if(arraySearch(didBLArray, phoneNumber.substr(1,10)) != -1){
		document.getElementById(errorID).innerHTML="This number already exists on your blacklist";
		return false;
	}
	
	var category=document.getElementById( 'blackListCategoryAdd' ).value;
	var comments=document.getElementById("blackListCommentsAdd").value;
	var callerName=document.getElementById("blackListCallerNameAdd").value;
	
	var commentsAbrv=comments;


	if(comments.length > 20){
		commentsAbrv=comments.substr(0,19) + " [..]";
	}
	
	numberDigits= number.value.replace(/[\(\)\.\-\ ]/g, '');    
	e164Number= "1" + numberDigits;    
	
	
	DBAction(e164Number,callerName,category,comments,"add");
	
	//if we're on the privacy page, add to the blacklist table...
	if( thispagelocation.indexOf( "Privacy" ) > -1 ){
		addToBlackListTable(number.value, callerName,category, comments, commentsAbrv);	
	}
	
	didBLArray.unshift(numberDigits);
	popin_hide( 'popin_popin_BlackListNumber' );			

	var response=PreferencesBlackListSave();

	//update call logs to correct images...
	if(response==true && thispagelocation.indexOf( "callLogs" ) > -1){
		setBlacklistIcons(e164Number);
	}
}


function PreferencesBlackListSave()
{
	
	var errors		= new Array();
	// 2008.03.28 KJD: Added for wait window display
	//if( !( WaitWindow( 'open', functioncalled, "PreferencesBlackListSave()" ) ) ){ return false;}
	document.getElementById( 'WaitWindow_mask' ).style.height="1100px";
	document.getElementById( 'WaitWindow' ).style.display="block";

	
	// Set Community BlackList Entries
	var CommBLActive=(document.getElementById( 'CommBLActive' ).checked== true) ? "true" : "false";
	var CommBLSelect = document.getElementById( "CommBLSelect" ).value;
	
	var PersBLActive=(document.getElementById( 'PersBLActive' ).checked== true) ? "true" : "false";
	var PersBLSelect=document.getElementById( 'PersBLSelect' ).value;
	var PersBLNumbers=GetBlackList();
	//alert(PersBLNumbers);
	//return;
	
	//replace image id...
	
	if( thispagelocation.indexOf( "callLogs" ) > -1 ){
		var imgId=document.getElementById("blackListImg").value;
	}
	
	var CurrentDevice=document.getElementById( "currentDevice" ).value;
	var numPhone=document.getElementById( "numPhone" ).value;
	

	var thisPost 		= new Object();
	
	//loop through all the current devices number and update the multiring settings.
	for (var i = 0; i < numPhone; i++)
	{
		
		thisPost			= {
			"transition"		: "DID_update",
			"currentdevice"		: CurrentDevice,
			"currentnumber"		: i,			//index 
			"CommBLActive"		: CommBLActive,
			"CommBLSelect"		: CommBLSelect,
			"PersBLActive"		: PersBLActive,	
			"PersBLSelect"		: PersBLSelect,
			"PersBLNumbers"    	: PersBLNumbers
		}


		// 2008.04.08 TLW: use loungeMVC 
		var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
		
		// 2008.02.14 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.02.14 KJD: Error returned
			errors[ errors.length ] = 30451;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
			document.getElementById( 'WaitWindow' ).style.display="none";
			return false;
		}		
	}		
		//popin_open( 'message',	'SettingsUpdated' );
		
		// 2008.04.28 KJD: Update OK button to reload the page
		//var thisbutton = document.getElementById( 'button_popin_SettingsUpdated_OK' );
		//thisbutton.onclick = doreload;
		document.getElementById( 'WaitWindow' ).style.display="none";

	
		


		Growl.Bezel({
			title: '<br><img src="/content/en/us/lounge/images/active.gif">&nbsp;Blacklist Saved!',
			duration:2.5
		});
		
		//window.location.reload( false );
		
	
	return true;	

}



// 2008.02.15 KJD: Validate Privacy Preferences
function PreferencesPrivacySave()
{
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "PreferencesPrivacySave()" ) ) ){ return false;}
	
	// 2008.02.15 KJD: Check if caller ID block selected
	var radioItems 		= document.forms['privacyform'].elements['blockCallID'];
	var thisSelected 	= 0;
	
	FormError( 'error_blockcallerID', 'reset' );
	
	var errors = new Array();
	
	for( var i = 0; i < radioItems.length; i++ )
	{
		if( radioItems[ i ].checked )
		{
			thisSelected = radioItems[ i ].value;
		}
	}

	if( !( thisSelected ) )
	{
		errors[ errors.length ] = 30540;
		FormError( 'error_blockcallerID', errors[ errors.length - 1 ] );
	}
	
	// 2008.02.15 KJD: Check outgoing number
	phonenumber = document.getElementById( "outgoingnumber" ).value;
	
	FormError( 'error_defaultcallerID', 	'reset' );
	if( !( phonenumber	) )
	{
		errors[ errors.length ] = 30550;
		FormError( 'error_defaultcallerID', errors[ errors.length - 1 ] );
	}
	
	//ACR Prefs
	//grab the ACR Active Prefs
	if(document.getElementById( 'ACRActive' ).checked== true){
		ACRActive="true";
	}else{
		ACRActive="false";
	}	
	
	//grab ACR call treatment disposition
	ACRSelect = document.getElementById( "ACRSelect" ).value;
		
	// 2008.02.15 KJD: Success, continue
	if( !( errors.length ) )
	{
		// 2008.02.15 KJD: post the request to the controller
		var thisPost 		= new Object();
		thisPost			= {
			"transition"		: "privacypreferences",
			'blockCallerID' 	: thisSelected,
			'defaultDID' 		: phonenumber
		}
		
		// 2008.03.10 KJD: Using postBack for time being
		// TODO: use MVC controller
		 //var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
			var myResponse		= JSON.parse( PostFile( postBackLocation, thisPost ) );
		
		// 2008.02.15 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.02.15 KJD: Error returned
			errors[ errors.length ] = 30560;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
			return false;
		}
		
		var CurrentDevice=document.getElementById( "currentDevice" ).value;
		var numPhone=document.getElementById( "numPhone" ).value;

		thisPost 		= new Object();

		//loop through all the current devices number and update the multiring settings.
		for (var i = 0; i < numPhone; i++)
		{
			

			thisPost			= {
				"transition"		: "DID_update",
				"currentdevice"		: CurrentDevice,
				"currentnumber"		: i,			//index 
				"ACRActive"			: ACRActive,
				"ACRSelect"			: ACRSelect
			}

			// 2008.04.08 TLW: use loungeMVC 
			myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );

			// 2008.02.14 KJD: Check response error
			if( myResponse[ 'responsecode' ] )
			{
				// 2008.02.14 KJD: Error returned
				errors[ errors.length ] = 30451;
				DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
				return false;
			}		
		}
		
		
		popin_open( 'message',	'PrivacyPreferencesSaved'	);

	}
	
	return false;
}


// 2008.02.15 KJD: Save the BAM Hub Settings
function BAMHubSettings(bam_callscreen_setting)
{
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "BAMHubSettings(" + bam_callscreen_setting + ")" ) ) ){ return false;}

	var bam_time		= document.getElementById( 'bam_time' ).value;
	var radioItems 		= document.forms['BAMhubsettings'].elements['bam_callscreen'];
	var thisSelected 	= bam_callscreen_setting;

	
	var errors = new Array();

	FormError( 'error_bam_time', 		'reset' );
	FormError( 'error_bam_callscreen',	'reset' );

	// 2008.02.15 KJD: No time selected
	if( !( bam_time	) )
	{
		errors[ errors.length ] = 30570;
		FormError( 'error_bam_time', errors[ errors.length - 1 ] );
	}
	
	// 2008.02.15 KJD: Check if screening selected
	//SK commented this out since this scenario never takes place. One of the Radio buttons(either Yes or No) is always selected. This was also somehow causing an errorneous value being set.
	/*for( var i = 0; i < radioItems.length; i++ )
	{
		if( radioItems[ i ].checked )
		{
			thisSelected = radioItems[ i ].value;
		}
	}
	alert(thisSelected);
	if( !( thisSelected ) )
	{
		errors[ errors.length ] = 30580;
		FormError( 'error_bam_callscreen', errors[ errors.length - 1 ] );
	}*/
	
	// 2008.02.15 KJD: Success, continue
	if( !( errors.length ) )
	{
		// 2008.02.15 KJD: post the request to the controller
		var thisPost 		= new Object();
			
		// 2008.03.18 KJD: Updated to use same call as privacy preferences
		thisPost			= {
			"transition"		: "SetBAMsettings",
			'enableScreen'		: thisSelected,
			'rna' 				: bam_time
		}

		// 2008.03.10 KJD: Using postBack for time being
		// TODO: use MVC controller
		// var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
		var myResponse		= JSON.parse( PostFile( postBackLocation, thisPost ) );
		
		// 2008.02.15 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.02.15 KJD: Error returned
			errors[ errors.length ] = 30590;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
			return false;
		}
		
		//popin_open( 'message',	'BAMHubSettingsSaved'	);
		Growl.Bezel({
			title: '<br><img src="/content/en/us/lounge/images/active.gif">&nbsp;Settings Saved!',
			duration:2.5
		});
	}
	
	return false;
}

// 2008.02.19 KJD: Save the BAM Email settings
function BAMEmailSave()
{
	// 2008.03.28 KJD: Added for wait window display
	if( !( WaitWindow( 'open', functioncalled, "BAMEmailSave()" ) ) ){ return false;}

	var email1	= StripString( document.getElementById( 'emailaddress1' ).value );
	var email2	= StripString( document.getElementById( 'emailaddress2' ).value );
	var email3	= StripString( document.getElementById( 'emailaddress3' ).value );
	
	var errors = new Array();

	FormError( 'error_bam_email', 		'reset' );
	
	// 2008.05.07 KJD: Set up variables for email attachments / SMS
	var email1type	= GetItemValue( 'type1' );
	var email2type	= GetItemValue( 'type2' );
	var email3type	= GetItemValue( 'type3' );
	
	var mobile1		= TenDigit( OnlyDigits( StripString( GetItemValue( 'mobilenumber1' ) ) ) );
	var mobile2		= TenDigit( OnlyDigits( StripString( GetItemValue( 'mobilenumber2' ) ) ) );
	var mobile3		= TenDigit( OnlyDigits( StripString( GetItemValue( 'mobilenumber3' ) ) ) );
	
	var carrier1	= GetItemValue( 'carrierlist1' );
	var carrier2	= GetItemValue( 'carrierlist2' );
	var carrier3	= GetItemValue( 'carrierlist3' );

	if( ( email1type == 'email' ) && notValidEmail( email1 ) )	{ errors[ errors.length ] = 30600; FormError( 'error_bam_email', errors[ errors.length - 1 ] );	}
	if( ( email2type == 'email' ) && notValidEmail( email2 ) )	{ errors[ errors.length ] = 30610; FormError( 'error_bam_email', errors[ errors.length - 1 ] );	}
	if( ( email3type == 'email' ) && notValidEmail( email3 ) )	{ errors[ errors.length ] = 30620; FormError( 'error_bam_email', errors[ errors.length - 1 ] );	}
	

	if( document.getElementById( 'attach1_yes' ).checked )	{	email1	= "attachment\\" + email1;	}
	if( document.getElementById( 'attach2_yes' ).checked )	{	email2	= "attachment\\" + email2;	}
	if( document.getElementById( 'attach3_yes' ).checked )	{	email3	= "attachment\\" + email3;	}
	
	
	// 2008.05.07 KJD: If SMS, check for required variables
	if(	email1type	== 'sms'	)
	{
		// 2008.05.07 KJD: Check phone number values
		if( !( mobile1		) )				{	errors[ errors.length ] = 30720;	FormError( 'error_bam_email', errors[ errors.length - 1 ] );	}
		else if( notValidPhone( mobile1	) )	{	errors[ errors.length ] = 30721;	FormError( 'error_bam_email', errors[ errors.length - 1 ] );	}
		
		// 2008.05.07 KJD: Check for valid carrier selected
		if( !( carrier1		) )				{	errors[ errors.length ] = 30730;	FormError( 'error_bam_email', errors[ errors.length - 1 ] );	}
		
		// 2008.05.07 KJD: Now, combine the Mobile/SMS email address
		email1			= mobile1 + "" + carrier1;
	}
	
	if(	email2type	== 'sms'	)
	{
		// 2008.05.07 KJD: Check phone number values
		if( !( mobile2		) )				{	errors[ errors.length ] = 30720;	FormError( 'error_bam_email', errors[ errors.length - 1 ] );	}
		else if( notValidPhone( mobile2	) )	{	errors[ errors.length ] = 30721;	FormError( 'error_bam_email', errors[ errors.length - 1 ] );	}
		
		// 2008.05.07 KJD: Check for valid carrier selected
		if( !( carrier2		) )				{	errors[ errors.length ] = 30730;	FormError( 'error_bam_email', errors[ errors.length - 1 ] );	}

		// 2008.05.07 KJD: Now, combine the Mobile/SMS email address
		email2			= mobile2 + "" + carrier2;
	}
	
	if(	email3type	== 'sms'	)
	{
		// 2008.05.07 KJD: Check phone number values
		if( !( mobile3		) )				{	errors[ errors.length ] = 30720;	FormError( 'error_bam_email', errors[ errors.length - 1 ] );	}
		else if( notValidPhone( mobile3	) )	{	errors[ errors.length ] = 30721;	FormError( 'error_bam_email', errors[ errors.length - 1 ] );	}
		
		// 2008.05.07 KJD: Check for valid carrier selected
		if( !( carrier3		) )				{	errors[ errors.length ] = 30730;	FormError( 'error_bam_email', errors[ errors.length - 1 ] );	}
		
			// 2008.05.07 KJD: Now, combine the Mobile/SMS email address
		email3			= mobile3 + "" + carrier3;
	}
	
	// 2008.05.07 KJD: Check for cleared values
	if( !( email1type ) || ( document.getElementById( 'notifyrow1' ).style.display != 'block' ) ){	email1	= "";	}
	if( !( email2type ) || ( document.getElementById( 'notifyrow2' ).style.display != 'block' ) ){	email2	= "";	}
	if( !( email3type ) || ( document.getElementById( 'notifyrow3' ).style.display != 'block' ) ){	email3	= "";	}
	
	
	// 2008.02.19 KJD: Success, continue
	if( !( errors.length ) )
	{
		// 2008.02.15 KJD: post the request to the controller
		var thisPost 		= new Object();
		
		// 2008.04.02 KJD: Removed token, get it from session
		thisPost			= {
			"transition"	: "BAMemailsettings",
			"email1"		: email1,
			"email2"		: email2,
			"email3"		: email3
		}
		
		// 2008.03.10 KJD: Using postBack for time being
		// TODO: use MVC controller
		// var myResponse		= JSON.parse( PostFile( postLocation, thisPost ) );
		var myResponse		= JSON.parse( PostFile( postBackLocation, thisPost ) );
		
		// 2008.02.15 KJD: Check response error
		if( myResponse[ 'responsecode' ] )
		{
			// 2008.02.15 KJD: Error returned
			errors[ errors.length ] = 30630;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
			return false;
		}

		//popin_open( 'message',	'BAMHubSettingsSaved'	);
		Growl.Bezel({
			title: '<br><img src="/content/en/us/lounge/images/active.gif">&nbsp;Settings Saved!',
			duration:2.5
		});

	}
	
	return false;
}

// 2008.03.10 KJD: Validate login info on login page
function ValidateLogin()
{
	var phonenumber	= OnlyDigits( document.getElementById( 'phonenumber' ).value );
	var password	= document.getElementById( 'password' ).value;

	var errors = new Array();

	FormError( 'login_error', 		'reset' );
	
	// 2008.03.10 KJD: Check phone number
	if( !( phonenumber	) )					{	errors[ errors.length ] = 30190; FormError( 'login_error', errors[ errors.length - 1 ] );	}
	else if( notValidPhone( phonenumber ) )	{	errors[ errors.length ] = 30191; FormError( 'login_error', errors[ errors.length - 1 ] );	}
	
	// 2008.03.10 KJD: Check password
	if( !( password	) )						{	errors[ errors.length ] = 30042; FormError( 'login_error', errors[ errors.length - 1 ] );	}
	
	
	if( !( errors.length ) )
	{
		// 2008.03.21 KJD: Update the username to only be digits
		document.getElementById( 'phonenumber' ).value		= phonenumber;
	
		// 2008.07.15 KJD: Added extra lines to determine issue with VM timeout
		// 2008.06.03 KJD: Update the submit location
		var thisAddress	= "";
			thisAddress	= document.header_signin.action;
			thisAddress	+= ""; // 2008.07.15 KJD: Make sure it's a string.
		
		if( thisAddress.indexOf( 'https' ) == -1 )
		{
			thisAddress		= thisAddress.replace( /http/gi, "https" );
			document.header_signin.action	= thisAddress;
		}

		return true;
	}
	
	return false;
}


function AddressTypeSelected( thisType )
{
	//billingInfo.poboxElem ,billingInfo.addressElem - objects initially set to null
	if (billingInfo.poboxElem == null) {
		billingInfo.poboxElem = document.getElementById( 'POBoxAddress' );	
	}
	
	if (billingInfo.addressElem == null) {
		billingInfo.addressElem = document.getElementById( 'StreetAddress' );	
	}
	
	if( thisType != 'pobox' )
	{
		
		billingInfo.poboxElem.style.display = "none";
		billingInfo.addressElem.style.display = "block";
		
	}
	else
	{
		
		billingInfo.poboxElem.style.display = "block";
		billingInfo.addressElem.style.display = "none";
		
		
	}
	
	return false;
	
}


//03/02/2008 : Shanthi - Function to add/remove the row for the Street address and PO box
//on page load show both the tr's - Street address and PO box 
//if PObox is selected, remove the street address row (node) , clone it before removing
//If POBox is unselected, remove the PObox row(node), clone it before removing
function AddressTypeSelected1( thisType )
{
	
	//billingInfo.poboxElem ,billingInfo.addressElem - objects initially set to null
	if (billingInfo.poboxElem == null) {
		billingInfo.poboxElem = document.getElementById( 'POBoxAddress' );	
	}
	
	if (billingInfo.addressElem == null) {
		billingInfo.addressElem = document.getElementById( 'StreetAddress' );	
	}
	
	
	if( thisType != 'pobox' )
	{
		
		if (billingInfo.addressElem == null || billingInfo.poboxElem == null) return false;
		
		//take a copy of the address node before it is deleted because we will need to use it when the radio button is toggled
		var obj1 = billingInfo.addressElem.cloneNode(true);
		var poboxNode = document.getElementById( 'POBoxAddress' );
		
		if (poboxNode == null) return false;
		
		//remove the pobox 
		billingInfo.poboxElem = poboxNode.cloneNode(true);
		poboxNode.parentNode.removeChild(poboxNode);
		
		//If the street address (tr) already exists - which it would when the page initially loads, then remove the street address row
		var elem =  document.getElementById( obj1.getAttribute('id') );
		
		if (elem != null) {
			elem.parentNode.removeChild(elem);	
		}
		
		//add the street address 
		var nextNode = document.getElementById('address_anchor');
		if (nextNode != null) {
			nextNode.parentNode.insertBefore(obj1,nextNode);
			billingInfo.addressElem = obj1;
		}
	}
	else
	{
		//PO box selected 
		
		if (billingInfo.addressElem == null || billingInfo.poboxElem == null) return false;
		
		var obj1 = billingInfo.poboxElem.cloneNode(true);
		var addrNode = document.getElementById( 'StreetAddress' );
		
		if (addrNode == null) return false;
		
		billingInfo.addressElem = addrNode.cloneNode(true);
		addrNode.parentNode.removeChild(addrNode);
		
		var elem =  document.getElementById( obj1.getAttribute('id') );
		if (elem != null) {
			elem.parentNode.removeChild(elem);	
		}
		
		var nextNode = document.getElementById('address_anchor');
		if (nextNode != null) {
			nextNode.parentNode.insertBefore(obj1,nextNode);
			billingInfo.poboxElem = obj1;
		}
		
		
	}

	return false;
}

// 2008.03.25 KJD: Get an item value
function GetItemValue( thisID )
{
	// 2008.03.25 KJD: Check if item exists
	if( !( document.getElementById( thisID ) ) )
	{
		return "";
	}
	else
	{
		return document.getElementById( thisID ).value;
	}
}




//06/03/08 - Shanthi : Function Added for verifying password for a particular user
function VerifyPasswordSubmit( popinID )
{
	if( !( WaitWindow( 'open', functioncalled, "VerifyPasswordSubmit( '" + popinID + "' )" ) ) ){ return false;}
    
	//get the Phonenumber and Password values
	var phonenumber		= StripString( document.getElementById('phonenumber').innerHTML);
	var password	= StripString( document.getElementById( 'password'	).value );
	

	var errors		= new Array();
	
	/*FormError( 'error_verify_password', 	'reset' );*/
	if( !( password			) )				{ errors[ errors.length ] = 30738; FormError( 'error_verify_password', errors[ errors.length - 1 ] );	}
	
	
	if( !( errors.length ) )
	{
		// 2008.02.14 KJD: post the request to the controller
		var thisPost 		= new Object();
		thisPost			= {
			"transition"	: "Login",
			"phonenumber"	: OnlyDigits( phonenumber ),
			"password"		: password
		}
		
		//Response is as an XML and not a JSON in this case
		var myResponse		= PostFile( postBackLocation, thisPost );
		//Search for Response Code(RC) 
		var myRegExp = /RC="1"/;
		var matchPos1 = myResponse.search(myRegExp);
		
		if(matchPos1 != -1)
		{
			popin_hide( popinID );
			//Open Email / Pwd / Sec Info - the respective popins based on the context
			if (PopinEditLoginContext.isLoginContext()) {
				popin_open( 'popin',	'popin_EditEmailInfo' 	);PopinPopulate( 'logininfo' );
			} else if (PopinEditLoginContext.isPasswordContext()) {
				popin_open( 'popin',	'popin_EditPassword' 	);PopinPopulate( 'logininfo' );
			} else if (PopinEditLoginContext.isSecurityContext()) {
				popin_open( 'popin',	'popin_EditSecurityQandA' 	);PopinPopulate( 'logininfo' );
			}
		}
		else{
			
			errors[ errors.length ] = 30272;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
			return errors[ errors.length - 1 ];
		}
	}
	
	return false;
}



//Shanthi : 06/12/08 - Update Email Info.
function EditEmailSave( popinID )
{
	
	if( !( WaitWindow( 'open', functioncalled, "EditEmailSave( '" + popinID + "' )" ) ) ){ return false;}

	var email		= StripString( document.getElementById( 'login_emailaddress').value );
	
	var errors		= new Array();
	/*FormError( 'error_login_emailaddress', 	'reset' );*/
	if( !( email			) )			{ errors[ errors.length ] = 30250; FormError( 'error_login_emailaddress', errors[ errors.length - 1 ] );	}
	else if( notValidEmail( email ) )	{ errors[ errors.length ] = 30251; FormError( 'error_login_emailaddress', errors[ errors.length - 1 ] );	}

	
	if( !( errors.length ) )
	{
		var thisPost 		= new Object();
		thisPost			= {
			"transition"	: "UpdateEmailInfo",
			"email"			: email
		}
		
		var myResponse		= JSON.parse( PostFile( postBackLocation, thisPost ) );
		
		if( myResponse[ 'responsecode' ] )
		{
			
			errors[ errors.length ] = 30252;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
		
			popin_hide( popinID );		
			
			return false;
		}		
		
		popin_hide( popinID );
		popin_open( 'message',	'EmailUpdated' );
	}
	
	return false;
}

//Shanthi : Update Password
function EditPasswordSave( popinID )
{
	
	if( !( WaitWindow( 'open', functioncalled, "EditPasswordSave( '" + popinID + "' )" ) ) ){ return false;}

	var password	= StripString( document.getElementById( 'login_password'	).value );
	var password2	= StripString( document.getElementById( 'login_password2'	).value );
	
	
	var errors		= new Array();
	
	/*FormError( 'error_login_password', 	'reset' );
	FormError( 'error_login_password2', 'reset' );*/
	if( notPasswordMatch( password, password2 ) )
	{
		errors[ errors.length ] = notPasswordMatch( password, password2, 'error_login_password', 'error_login_password2' );
	}
	
	
	
	if( !( errors.length ) )
	{
		var thisPost 		= new Object();
		thisPost			= {
			"transition"	: "UpdatePasswordInfo",
			"password"		: password
		}
		
		var myResponse		= JSON.parse( PostFile( postBackLocation, thisPost ) );
		
		if( myResponse[ 'responsecode' ] )
		{
			
			errors[ errors.length ] = 30252;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
		
			popin_hide( popinID );		
			
			return false;
		}		
		
		popin_hide( popinID );
		
		popin_open( 'message',	'LoginUpdated' );
	}
	
	return false;
}


//Shanthi : Update Security Q and A
function EditSecurityInfoSave( popinID )
{
	
	if( !( WaitWindow( 'open', functioncalled, "EditSecurityInfoSave( '" + popinID + "' )" ) ) ){ return false;}

	var SecQuestion 	= StripString( document.getElementById( 'security_question'	).value );
	var SecAnswer		= StripString( document.getElementById( 'securityanswer1'	).value );
	var SecAnswer2		= StripString( document.getElementById( 'securityanswer2'	).value );
	
	var current_security_question = StripString(document.getElementById( 'current_security_question'	).value );
	var errors		= new Array();
	
	
	if (SecQuestion != current_security_question ) 
	{
		if (SecAnswer == "") {
			// error ... please enter security answer
			 errors[ errors.length ] = 30737; FormError( 'error_login_securityanswer', errors[ errors.length - 1 ] );
		} else {
			if( notSecurityAnswerMatch( SecAnswer, SecAnswer2 ))
			{
				
				errors[ errors.length ] = notSecurityAnswerMatch( SecAnswer, SecAnswer2, 'error_login_securityanswer', 'error_login_securityanswer2' );
			}
		}
	} else {
		// If the question has not been changed and the answer has been changed, then make sure that the new answer matches the repeat answer 
		if (SecAnswer != "") {
			if( notSecurityAnswerMatch( SecAnswer, SecAnswer2 ))
			{
				
				errors[ errors.length ] = notSecurityAnswerMatch( SecAnswer, SecAnswer2, 'error_login_securityanswer', 'error_login_securityanswer2' );
			}
		}
	}
	
		
	if( !( errors.length ) )
	{
		var thisPost 		= new Object();
		thisPost			= {
			"transition"	: "UpdateSecurityInfo",
			"SecQuestion"	: SecQuestion,
			"SecAnswer"		: SecAnswer
			
		}
		
		
		var myResponse		= JSON.parse( PostFile( postBackLocation, thisPost ) );
	
		
		if( myResponse[ 'responsecode' ] )
		{
			
			errors[ errors.length ] = 30736;
			DisplayError( errors[ errors.length - 1 ], myResponse[ 'responsecode' ], myResponse[ 'message' ] );
		
			popin_hide( popinID );		
			
			return false;
		}		
		
		popin_hide( popinID );
		
		popin_open( 'message',	'SecurityInfoUpdated' );
	}
	
	return false;
}

