function getCookie( name ) {
	var start = document.cookie.indexOf( name + "=" );
	var len = start + name.length + 1;
	if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ){
		return null;
	}
	if ( start == -1 ) return null;
	var end = document.cookie.indexOf( ";", len );
	if ( end == -1 ) end = document.cookie.length;
	return unescape( document.cookie.substring( len, end ) );
}


function removeNewUserMessage ()
{
	var cookie_date = new Date ( );  // current date & time
	cookie_date.setTime ( cookie_date.getTime() - 1 );
	document.cookie = "new_user=false; expires=" + cookie_date.toGMTString() + "; path=/;";

	document.getElementById('newuser_container').innerHTML = '';

	//alert (document.cookie);

	return false;


} 

function showInLineEdit (field)
{
	staticField = document.getElementById (field);
	staticField.style.display = 'none';

	cancelLink = document.getElementById (field + '_cancel');
	cancelLink.style.display = 'inline';

	inputField = document.getElementById (field + '_input');
	inputField.style.display = 'inline';
	inputField.focus ();
}

function hideInLineEdit (field)
{
	inputField = document.getElementById (field + '_input');
	cancelLink = document.getElementById (field + '_cancel');
	staticFieldText = document.getElementById (field + '_text');
	staticField = document.getElementById (field);

	inputField.style.display = 'none';	
	cancelLink.style.display = 'none';
	staticField.style.display = 'inline';
}


function submitChange (field_prefix, txn_id, txn_field_name)
{
	// Create an AJAX request to POST our data to our form handler
    var request = new AJAXRequest();
    
    inputField = document.getElementById (field_prefix + '_input');
	staticFieldText = document.getElementById (field_prefix + '_text');
	staticField = document.getElementById (field_prefix);
	cancelLink = document.getElementById (field_prefix + '_cancel');
    
    request.Method = 'post';
    request.Target = 'ajax/updatetxn'; // Will either be 'txn' or 'cat'

    request.PostData = "id=" + txn_id +
                       "&" + txn_field_name + "=" + escape (inputField.value);

	inputField.disabled = true;
  
    // Our load handler for the AJAX request
    request.Req.onreadystatechange = function()
    {
        // It is still being processed until the readyState is 4
        if(request.Req.readyState == 4)
        {
        	var returnData = eval ('(' + request.Req.responseText + ')');
        	
        	if (returnData.success == 'false')
        	{
        		inputField.style.color = '#991717';
        		inputField.disabled = false;
			}
        	else if (returnData.success == 'true')
        	{
        		staticFieldText.innerHTML = returnData.extra['updatedValue'];
			    inputField.style.display = 'none';
			    cancelLink.style.display = 'none';
        		inputField.disabled = false;			    
			    staticField.style.display = 'inline';
			    
			} 
        }
        // Check for an error
        if(request.Req.responseText == "error")
        {
            alert("Your changes were not saved.");
            return;
        }
	}
	
    request.Load();
    return false;
}

function updateBudgetGraph(field, txn_id, txn_field_name, max_checked)
{
	if (txn_field_name == "showBudgetGraph") {
	
	var checked = document.getElementById(field).checked;
	var request = new AJAXRequest();
	if (checked == true) { checked = 1; } else { checked = 0; } 
    	
	request.Method = 'post';
    	request.Target = 'ajax/updatecat'; 
    	request.PostData = "id=" + txn_id +
        	"&" + txn_field_name + "=" + checked;
	
	// Our load handler for the AJAX request
	request.Req.onreadystatechange = function()
	{
	// It is still being processed until the readyState is 4
	if(request.Req.readyState == 4)
	{
		var returnData = eval ('(' + request.Req.responseText + ')');
		if (returnData.success == 'false')
		{
			inputField.style.color = '#991717';
			inputField.disabled = false;
		}
		else if (returnData.success == 'true')
		{
		inputField.style.display = 'none';
		cancelLink.style.display = 'none';
		inputField.disabled = false;
		staticField.style.display = 'inline';
		staticFieldText.innerHTML = returnData.extra['updatedValue'];
		document.getElementById('category_count').innerHTML = returnData.extra['numCategories'] + ' Categories (' +
		returnData.extra['numBudgetedCategories'] + ' Budgeted)';
		document.getElementById('total_monthly_budget').innerHTML = returnData.extra['totalMonthlyBudget'];
		}
	}
	}
	request.Load();
	}
	var num_checked = 0;
	//blur the other boxes if max 10 is selected
	for (var i=0; i< parseInt(max_checked); i++){
	    var tempField = "catgraph" + i;
	    document.getElementById(tempField).disabled = false;
	    if (document.getElementById(tempField).checked){
		num_checked ++;
	    }
	}
	if ( parseInt(num_checked) >= 10){
	    for (var i=0; i< parseInt(max_checked); i++){
	        var tempField = "catgraph" + i;
	        if (document.getElementById(tempField).checked == false){
		    document.getElementById(tempField).disabled = true;
	        }
 	    }
	}

	return false;
}

function checkRemember()
{
	//Create an AJAX request to POST our data
	var request = new AJAXRequest();
	var cookie = getCookie("ssAuth");
	
	request.Method = 'post';
	request.Target = 'ajax/checkremember';
	request.PostData = cookie;	
	// Our load handler for the AJAX request
	request.Req.onreadystatechange = function()
	{
	    // It is still being processed until the readyState is 4
	    if(request.Req.readyState == 4)
	    {
		var returnData = eval ('(' + request.Req.responseText + ')');
		if (returnData.success == 'true'){
			document.getElementById("username").value = returnData.extra['email'];
			document.getElementById("password").value = returnData.extra['password'];
		}
	    }
	}
	request.Load();
	return false;
}

function updateCat (field_prefix, txn_id, txn_field_name)
{
	// Create an AJAX request to POST our data to our form handler
    var request = new AJAXRequest();
    
    
    inputField = document.getElementById (field_prefix + '_input');
	staticFieldText = document.getElementById (field_prefix + '_text');
	staticField = document.getElementById (field_prefix);
	cancelLink = document.getElementById (field_prefix + '_cancel');
    
    request.Method = 'post';
    request.Target = 'ajax/updatecat'; 

    request.PostData = "id=" + txn_id +
                       "&" + txn_field_name + "=" + escape (inputField.value);

	inputField.disabled = true;
  
    // Our load handler for the AJAX request
    request.Req.onreadystatechange = function()
    {
        // It is still being processed until the readyState is 4
        if(request.Req.readyState == 4)
        {
        	var returnData = eval ('(' + request.Req.responseText + ')');
        	
        	if (returnData.success == 'false')
        	{
        		inputField.style.color = '#991717';
        		inputField.disabled = false;
			}
        	else if (returnData.success == 'true')
        	{
        		inputField.style.display = 'none';
			    cancelLink.style.display = 'none';
        		inputField.disabled = false;			    
			    staticField.style.display = 'inline';
			    
		    	staticFieldText.innerHTML = returnData.extra['updatedValue'];
			    
			    document.getElementById('category_count').innerHTML = returnData.extra['numCategories'] + ' Categories (' +
			    													  returnData.extra['numBudgetedCategories'] + ' Budgeted)';
			    
			    document.getElementById('total_monthly_budget').innerHTML = returnData.extra['totalMonthlyBudget'];
			    
			} 
        }

	}
	
    request.Load();
    return false;
}



function deleteTxn (txn_id, element_to_delete)
{
	var request = new AJAXRequest();
	
	txnElem = document.getElementById (element_to_delete);
	
	request.Method = 'post';
	request.Target = 'ajax/deletetxn';
	
	request.PostData = 'txn_id=' + txn_id;

	request.Req.onreadystatechange = function()
	{
	    // It is still being processed until the readyState is 4
        if(request.Req.readyState == 4)
        {
        	var returnData = eval ('(' + request.Req.responseText + ')');
        	
        	if (returnData.success == 'false')
        	{
				return;
			}
			else if (returnData.success == 'true')
				txnElem.parentNode.removeChild (txnElem);
			
        }
 
        // Check for an error
        if(request.Req.responseText == "error")
        {
            alert("Your changes were not saved.");
            return;
        }
	}
    request.Load();
    return false;
}


function createTxn ()
{

	var request = new AJAXRequest();

	var amount = document.getElementById ('amount');
	var description = document.getElementById ('description');
	var txn_time = document.getElementById ('date');
	var createtxn_submit = document.getElementById ('createtxn_submit');

	request.Method = 'post';
	request.Target = 'ajax/createtxn';
	
	request.PostData = 'amount=' + escape (amount.value) +
					   '&description=' + escape (description.value) +
					   '&txn_time=' + escape (txn_time.value);
			   
	amount.disabled = true;
	description.disabled = true;
	txn_time.disabled = true;
	createtxn_submit.disabled=true;


	document.getElementById('createtxn_error').innerHTML = ''; 		

	request.Req.onreadystatechange = function()
	{

	    // It is still being processed until the readyState is 4
        if(request.Req.readyState == 4)
        {
        	returnData = eval ('(' + request.Req.responseText + ')');
        	if (returnData.success == 'false')
        	{
        		document.getElementById('createtxn_error').innerHTML = returnData.message;
        		amount.disabled = false;
        		description.disabled = false;
        		txn_time.disabled = false;
        		createtxn_submit.disabled = false;
            	return false;
			}
        	else
        	{
        		amount.value = '';
        		amount.disabled = false;
        		description.value = '';
        		description.disabled = false;
        		
        		var d = new Date ();
        		txn_time.value = (d.getMonth() + 1) + '/' + d.getDate();
        		txn_time.disabled = false;
        		
        		createtxn_submit.disabled = false;

        		document.getElementById('stat_boxes').innerHTML = returnData.extra['stat_boxes_html'];
            	document.getElementById('mini_transaction_table').innerHTML = returnData.extra['mini_transaction_table_html'];
     	
        		refreshHomeCharts();
            	return false;
			} 
        }
 
        // Check for an error
        if(request.Req.responseText == "error")
        {
            alert("Your changes were not saved.");
            return false;
        }
	}
    request.Load();
    return false;
}


function assignCategory (select_field, txn_id)
{
	// Create an AJAX request to POST our data to our form handler
    var request = new AJAXRequest();
    
    selectField = document.getElementById (select_field);

	selectField.disabled = true;    
	
    request.Method = 'post';
    request.Target = 'ajax/assigncat';

    request.PostData = "txn_id=" + txn_id +
                       "&category_id=" + selectField.options[selectField.selectedIndex].value;

	selectField.disabled = true;
  
    // Our load handler for the AJAX request
    request.Req.onreadystatechange = function()
    {
		// It is still being processed until the readyState is 4
        if(request.Req.readyState == 4)
        {
        	var returnData = eval ('(' + request.Req.responseText + ')');
       	
        	if (returnData.success == 'false' || request.Req.responseText == 'error')
        	{
        		selectField.style.color = '#991717';
        		selectField.disabled = false;
			}
        	else if (returnData.success == 'true')
        	{
        		selectField.disabled = false;
			} 
        }
 
        // Check for an error
        if(request.Req.responseText == "error")
        {
            alert("Your changes were not saved.");
            return;
        }
	}
	
    request.Load();
    return false;

}


function refreshChart (image_id, report_type)
{

    var request = new AJAXRequest();
    
    request.Method = 'get';
    request.Target = 'ajax/getchart?report_type=' + report_type;


    // Our load handler for the AJAX request
    request.Req.onreadystatechange = function()
    {
        // It is still being processed until the readyState is 4
        if(request.Req.readyState == 4)
        {
        	if (request.Req.responseText == 'false' || request.Req.responseText == 'error')
        	{
        		//
        	}
        	else
        		document.getElementById(image_id).src = request.Req.responseText;
        }
 
        // Check for an error
        if(request.Req.responseText == "error")
        {
            alert("Chart retrieval busted.");
            return;
        }
	}
	
    request.Load();
    return false;
}	
		
		
function refreshHomeCharts ()
{
	refreshChart ("top_line_chart", "line_month");
	refreshChart ("bottom_pie_chart", "pie_month");
	
	// Home bar chart doesn't need to refresh for now based on quick-create
	// if (document.getElementById ('bottom_bar_chart'))
	//	refreshChart ("bottom_bar_chart", "bar_month");
}
	

function refreshTransactionTable (time_period)
{
	// Need to do something pretty here to the div with id='transactions_table' while we wait.
	// Create an AJAX request to POST our data to our form handler
    var request = new AJAXRequest();
    
    request.Method = 'post';
    request.Target = 'ajax/gettxntable';

    request.PostData = "time_period=" + document.getElementById('filterDate').value + "&category=" + document.getElementById('filterCategory').value;

	//inputField.disabled = true;
  
    // Our load handler for the AJAX request
    request.Req.onreadystatechange = function()
    {
        // It is still being processed until the readyState is 4
        if(request.Req.readyState == 4)
        {
        	var returnData = eval ('(' + request.Req.responseText + ')');
       	
        	if (returnData.success == 'false' || request.Req.responseText == 'error')
        	{
        		//
			}
        	else if (returnData.success == 'true')
        		document.getElementById('transactions_table').innerHTML = returnData.extra['transaction_table_html'];
        }
 
        // Check for an error
        if(request.Req.responseText == "error")
        {
            alert("Your changes were not saved.");
            return;
        }
	}
	
    request.Load();
    return false;
}	
	





function AJAXRequest()
{
    // Create our request which differs across browsers
    if(window.XMLHttpRequest)
    {
        this.Req = new XMLHttpRequest();
 
        if(this.Req.overrideMimeType)
        {
            this.Req.overrideMimeType("text/html");
        }
    }
    else if(window.ActiveXObject)
    {
        this.Req = new ActiveXObject("Microsoft.XMLHTTP");
    }
 
    // Set default values for our Method (get or post) and PostData.
    this.Method = "get";
    this.PostData = "";
}
 
// Process the request
AJAXRequest.prototype.Load = function()
{
    if(this.Method == "get")
    {
        // Send a "get" request
        this.Req.open(this.Method, this.Target, true);
        this.Req.send(null);
    }
    else
    {
        // Send a "post" request
        this.Req.open(this.Method, this.Target, true);
        this.Req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        this.Req.setRequestHeader("Content-length", this.PostData.length);
        this.Req.setRequestHeader("Connection", "close");
        this.Req.send(this.PostData);
    }
}
