function $(psEl) {
	return (document.getElementById)? document.getElementById(psEl) : null;
}

function SMS() {
	
	var countryEl = null;
	var countryNumEl = null;
	var numberEl = null;
	var messageIdEl = null;
	var languageIdEl = null;
	var sendBtnEl = null;
	
	var countryVal = null;
	var numberVal = null;
	var messageIdVal = null;
	var languageIdVal = null;
	
	var countryString = null;
	
	var successEl = null;
	var failureEl = null;
	var sentNumberEl = null;
	var feedUrl = null;
	
	// initializes the class ... init
	this.init = function(psUrl, psCountry, psCountryNum, psNumber, psMessageId, psLanguage, psSendBtn, psSuccess, psFailure, psSentNumber) {
		this.countryEl = $(psCountry);
		this.countryNumEl = $(psCountryNum);
		this.numberEl = $(psNumber);
		this.messageIdEl = $(psMessageId);
		
		this.languageIdEl = $(psLanguage);
		this.sendBtnEl = $(psSendBtn);
		
		this.successEl = $(psSuccess);
		this.failureEl = $(psFailure); 
		
		this.sentNumberEl = $(psSentNumber);
		
		this.feedUrl = psUrl;
	}
	
	// does the ajax request - prereq - prototype.js
	this.getData = function(psUrl) {
		var xmlDoc = undefined;
		xmlDoc = new Ajax.Request(psUrl,{
			method: 'get',
			asynchronous: false
		});	
				
		return xmlDoc.transport.responseXML;
	}
	
	// setting up the url to send to the getData and processor 
	this.send = function() {
		
		this.clearMessaging();
		this.disableFormEls();
		
		var countryIndex = this.countryEl.selectedIndex;
		//this.countryVal = this.countryEl[countryIndex].value;
		this.countryString = this.countryEl[countryIndex].innerHTML;
		this.countryVal = parseInt(this.countryNumEl.value);
		
		this.numberVal = this.numberEl.value;
		this.messageIdVal = this.messageIdEl.value;
		this.languageIdVal = this.languageIdEl.value;
		
		url = this.feedUrl + '?country=' + escape(this.countryVal) + '&number=' + escape(this.numberVal) + '&type=' + escape(this.messageIdVal) + '&language=' + escape(this.languageIdVal);
		
		// prompt('', url);
		
		try {
			xmlRoot = this.getData(url).getElementsByTagName('data');
		} catch(e) {
			this.failure('We\'re sorry. There was an error sending you the message.'); 
			return;
		}
					
		this.process(xmlRoot);
	}
	
	// getting the data back from the XML ... processing
	this.process = function(psData) {
		var el = null;
		
		
		if (psData) {		
			el = psData;
			var element = null;
			for( var i=0; i < el.length; i++ ) {
				element = el[i].getElementsByTagName('error');
				
				if (element) {
					element = element[0];
					
					// get the error number -> 0 = =success
					if (element.childNodes[0].nodeValue == '0') {
						this.success();
					} else {
						// there is a error. get the message
						element = el[i].getElementsByTagName("msg");
						
						if (element) {
							element = element[0];
							this.failure(element.childNodes[0].nodeValue);
							return;
						} else {
							this.failure('Error processing XML error message');
							return;
						}
					}
				} else {
					this.failure('Error processing XML error message');
					return;
				}
			}
		}
	}
	
	// track the clicks for this site ... prereq - google analytics	
	this.trackUrl = function(psType) {
		if (psType) {
			urchinTracker('/sms/error/fromserver/' + escape(this.countryVal) + escape(this.numberVal));
		} else {
			urchinTracker('/sms/' + escape(this.countryString) + '/' + escape(this.messageIdVal) + '/' + escape(this.countryVal) + escape(this.numberVal));
		}
	}
	
	
	// form elements disable enable
	this.disableFormEls = function() {
		this.countryEl.disabled = true;
		this.numberEl.disabled = true;
		this.languageIdEl.disabled = true;
		this.messageIdEl.disabled = true;
		this.sendBtnEl.disabled = true;
		this.countryNumEl.disabled = true;
		
		this.sendBtnEl.className = "disabled";
		
	}
	
	this.enableFormEls = function(pbClearMessaging) {
		this.countryEl.disabled = false;
		this.numberEl.disabled = false;
		this.languageIdEl.disabled = false;
		this.messageIdEl.disabled = false;
		this.sendBtnEl.disabled = false;
		this.countryNumEl.disabled = false;
		
		this.sendBtnEl.className = "green";
		
		if (pbClearMessaging) {
			this.clearMessaging();
		}
	}
	
	
	// messaging
	this.clearMessaging = function() {
		this.successEl.style.display = 'none';
		this.failureEl.style.display = 'none';
	}
	
	this.success = function(psMessage) {
		this.sentNumberEl.innerHTML = " to +" + this.countryVal + this.numberVal;
		this.successEl.style.display = 'block';
		if(psMessage) {
			this.successEl.innerHTML = psMessage;
		}
		this.trackUrl();
	}
	
	this.failure = function(psMessage) {
		this.failureEl.style.display = 'block';
		if (psMessage) {
			this.failureEl.innerHTML = psMessage;
		}
		
		this.enableFormEls();
		this.trackUrl('failure');
	}
}

var c_sms = new SMS();