
////////////////////////////////////////////////////////////////////
// Cookies
////////////////////////////////////////////////////////////////////
function createCookie(name,value,minutes)
{
	var expires	= "";
	
	if (minutes)
	{
		var date 		= new Date();
		date.setTime	(date.getTime() + (minutes*60*1000));
		expires 		= "; expires=" + date.toGMTString();
	}
		
	document.cookie 	= name + "=" + escape(value) + expires + "; path=/";
}

function readCookie(name)
{
	var nameEQ 	= name + "=";
	var ca 		= document.cookie.split(';');
	
	for (var i=0;i < ca.length;i++)
	{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	
	return null;
}

function eraseCookie(name)
{
	createCookie(name,"",-1);
}


function UserRemind(name,value,days)
{
	if (days)
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/;";
}


function GetXmlHttpObject()
{
	var xmlHttp=null;
	try
	{
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e)
	{
		//Internet Explorer
		try
		{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}


// generate random 32 byte (256 bit) session key 
// we will encrypt sym_key with this session key 
function GenerateRandomSessionKey()
{
	var rng 			= new SecureRandom();
  	var randoms 		= new Array(32);
	rng.nextBytes		(randoms);
	
	var session_key     = byteArrayToString(randoms);

	return session_key;
}

function CreateClientSecurePasswordCookie(password, session_key)
{
	// create sym_key
	var sk_pbkdf2 		= make_sym_key	(password);
	
	// encrypt sym_key with session_key
	var secure_pwd 		= sym_encrypt(sk_pbkdf2, session_key);
	
	// create cookie and put encrypted sym_key   
	createCookie('secure_pwd',  stringToHex(secure_pwd), 0,04166);
	
	return sk_pbkdf2;
}


function onBillingHistory()
{

	blockUI	();
	
	$.ajax({
		url: 'core/billing_history.php',
		type: 'POST',
		dataType: 'xml',
		error: function(){
			unblockUI	();
			alert		('Error in billing history');
		},
		success: function(xml) {
			
			unblockUI	();

			var status 	= getXmlTag(xml, "status");
			var message = getXmlTag(xml, "message");
			
			if(status == interface_ok)
			{
				var msg = "An email with your account's billing information has been sent. "; 
				alert	(msg);
			}
			else { // status != interface_ok
				alert("ERROR: " + message);
			}
		}
	});				
	
}

/* 
* Block UI functionality
*/

function blockUI()
{
	$.blockUI ({ message: '<h2><img src="images/controls/busy.gif" /> Processing...</h2>'});
}

function unblockUI()
{
	$.unblockUI	();
}


/**
* get xml tag
*/
function getXmlTag (xml, tag_name)
{
	if (xml.getElementsByTagName(tag_name).length == 0) return null;
	
  	return (xml.getElementsByTagName(tag_name)[0].childNodes.length != 0 ?
         	xml.getElementsByTagName(tag_name)[0].childNodes[0].nodeValue : "");
}

function formatComma(number) {
	
	number = '' + number;
	if (number.length > 3) {
		var mod = number.length % 3;
		var output = (mod > 0 ? (number.substring(0,mod)) : '');
		for (i=0 ; i < Math.floor(number.length / 3); i++) {
			if ((mod == 0) && (i == 0))
				output += number.substring(mod+ 3 * i, mod + 3 * i + 3);
			else
				output+= ',' + number.substring(mod + 3 * i, mod + 3 * i + 3);
		}
		return (output);
	}
	
	else return number;
}
/**
* Format money in format: $1, 540.00
* money - amount in cents
**/
function formatMoney(money)
{
	// monthly amount is in cents - get dollars
	var cents				= money % 100;
	
	// to get dollars - use integral division
	var dollars 			= (money - cents) / 100;
	
	var amount_str 			= '$';
	amount_str 				+= formatComma(dollars);
	amount_str				+= '.';
	
	// add cents
	if (cents == 0) 		amount_str += '00';
	else if (cents <= 9) 	amount_str += '0' + cents;
	else 					amount_str += cents;
	
	return amount_str;
}



/********************************************************************
* Spin control initializing for registration and activation pages
*********************************************************************/

function IncrementalStorageSpinCtrlInit(initial_value) {

	spinCtrlIncrementalStorage = new SpinControl();
	spinCtrlIncrementalStorage.GetAccelerationCollection().Add(new SpinControlAcceleration(10, 500));
	spinCtrlIncrementalStorage.GetAccelerationCollection().Add(new SpinControlAcceleration(100, 1750));
	spinCtrlIncrementalStorage.GetAccelerationCollection().Add(new SpinControlAcceleration(1000, 3000));
	spinCtrlIncrementalStorage.GetAccelerationCollection().Add(new SpinControlAcceleration(10000, 5000));
	spinCtrlIncrementalStorage.GetAccelerationCollection().Add(new SpinControlAcceleration(100000, 10000));

	document.getElementById('incremental_storage_div').appendChild(spinCtrlIncrementalStorage.GetContainer());
	
	spinCtrlIncrementalStorage.SetMinValue		(0);
	spinCtrlIncrementalStorage.SetMaxValue		(9999999);
	spinCtrlIncrementalStorage.SetReadOnly		(true);
	spinCtrlIncrementalStorage.SetWidth			(70);
	
	spinCtrlIncrementalStorage.StartListening	();
	
	spinCtrlIncrementalStorage.AttachValueChangedListener(spinCtrlChanged);
	
	spinCtrlIncrementalStorage.SetCurrentValue	(initial_value);

	$.ajax({
		url: 'core/account_pricing_version_info.php',
		type: 'POST',
		dataType: 'xml',
		error: function(){
			alert('Error loading Unit size');
		},
		success: function(xml){
			
			var status 	= getXmlTag(xml, "status");
			var message = getXmlTag(xml, "message");
			
			if(status == interface_ok)
			{
				unit_size = getXmlTag(xml, "storage_per_unit");
				
				// translate into gigabytes
				unit_size = unit_size / (1024 * 1024 * 1024);
				
				// set increment size
				spinCtrlIncrementalStorage.SetIncrement		(unit_size);
				spinCtrlIncrementalStorage.SetCurrentValue 	(initial_value);
			} else {
				alert('Error loading unit size');
			}
		}
	});		
}

function spinCtrlChanged(sender, value)
{
	accountSpecificationsNeedRecalculate 		= true;
	//spinCtrlIncrementalStorage.SetCurrentValue	();
}

/********************************************************************/



