var PX = new function()
{
    /**
     * The URI for card requests
     */
    this.REQUEST_URI = 'https://www.sharis.com/px_actions.php';
    
    /**
     * Ajax class
     */
    this.ajax;
    
    /**
     * Card input field
     */
    this.cardField;	
    
    /**
     * Hidden token field
     */
    this.tokenField;    
    
    /**
     * Response message field
     */
    this.messageField;      
	
    /**
     * Prepares to receive ajax balance requests
     */
    this.init = function()
    {
        var self = PX;	
        
        // make sure we are in a DOM supporting browser ...
	if (typeof document.getElementById == 'undefined' || typeof document.getElementsByTagName == 'undefined') 
	{return;}	
	
	// make sure Ajax class is loaded ...
	if (typeof Ajax != 'function') {return;}	
	self.ajax = new Ajax();
		
	// cancel form submit action ...
	var theForm = document.getElementById('balance-request-form');	
	theForm.onsubmit = function() {return false;}
	
	// assign event listener to submit button ...
	document.getElementById('submit-button').onclick = self.doBalanceInquiry;
	
	// store reference to card field and message element
	self.cardField    = document.getElementById('card');	
	self.tokenField   = document.getElementById('token');
	self.messageField = document.getElementById('message');
	
	// set focus ...
	self.cardField.focus();		
    }
	
    /**
     * Displays ajax activity animation
     */
    this.displayAjaxAnimation = function()
    {
        var self = PX;         
        self.messageField.className = 'processing';
	self.messageField.firstChild.nodeValue = 'Checking card balance ....';	
    }
			
    /**
     * Sends XMLHttpRequest balance request
     */
    this.doBalanceInquiry = function(e)
    {
        var self = PX;  
        self.displayAjaxAnimation();
        var postData = 'token=' + escape(self.tokenField.value) + '&action=balance&card=' + escape(self.cardField.value);
	self.ajax.doPost(self.REQUEST_URI, postData, self.handleResponse, 'xml');	
    }
	
    /**
     * Handles response from the server
     */
    this.handleResponse = function(dom)
    {
        var self    = PX;          
        var root    = dom.documentElement;
        var token   = root.getElementsByTagName('token')[0].firstChild.nodeValue;
	var status  = root.getElementsByTagName('status')[0].firstChild.nodeValue;
	var message = root.getElementsByTagName('message')[0].firstChild.nodeValue;
		
	// clear any existing message ...
	while (self.messageField.childNodes.length > 0)
	{
	    var child = self.messageField.removeChild(self.messageField.childNodes[0]);
	    child = null;
	}	
	
	self.messageField.className = status;	    
	self.messageField.appendChild(document.createTextNode(message));
	self.tokenField.value = token;
	self.cardField.value  = '';
	self.cardField.focus();
    }	

    /**
     * Removes element references to prevent IE memory leak
     */
    this.cleanup = function()
    {
        var self = PX;		
	self.cardField    = null;	
	self.tokenField   = null;
	self.messageField = null;
    }
}

window.onload   = PX.init;
window.onunload = PX.cleanup;