// loads up and parses mobile banking feed and dumps out an HTML formatted list of compatible devices associated where carrier == AT&T

var deviceData = {};
var prevManu = '';
var manuStack = new Array();
var IE = (document.all);
var numATTDevices = 0;
var fileToLoad = '/devices_list/device_list.xml';
var rowAddedLast;
var prevDeviceID = '';

// uh-oh
function parseError() {
	alert('error loading xml file');
}

// deal with collection of similar nodes
function parseChildNodes(node, parent, child, count) {
	var retVal = [];
	var children = $A(
		node.getElementsByTagName(parent)[count].getElementsByTagName(child)
	);
	retVal = children.collect(
		function(value, index) {
			return value.firstChild.data;
		}
	);
	return retVal;
}

// add to the DOM
function addDevice(deviceName, manu, id) {
	rowAddedLast = false;
	if(prevManu.toString() != manu.toString() && manuStack.indexOf(manu.toString()) == -1) {
		rowAddedLast = true;
		manuStack.push(manu.toString());
		var row = document.createElement('tr');
		row.setAttribute('id', manu);
		if(manuStack.size()%2) {
			row.setAttribute('class', 'alt');
		}
		document.getElementById('mobileBankingCompatibleDeviceList').appendChild(row);
		var cell = document.createElement('td');
		cell.innerHTML = '<strong>'+manu+': </strong>';
		cell.setAttribute('style', 'width:113px;');
		if(document.all) {
			cell.style.setAttribute('cssText', 'width:113px;');
		}
		document.getElementById(manu).appendChild(cell);
		var cellb = document.createElement('td');
		cellb.setAttribute('id', manu+'container');
		document.getElementById(manu).appendChild(cellb);
		prevManu = manu;
	}
	var cell2 = document.createElement('span');
	cell2.setAttribute('id', 'device'+manu);
	cell2.innerHTML = deviceName+', ';
	document.getElementById(manu+'container').innerHTML += cell2.innerHTML.replace('\(Preload\)', '');
	prevDeviceID = manu+'container';
}

// try to parse the file
function parseResponse(transport) {
	var response = transport.responseXML;	
	var docRoot = response.getElementsByTagName('devices')[0];
	var numDevices = response.getElementsByTagName('totalDevices')[0].firstChild.data;
	for(i = 0; i < numDevices;i++) {
		deviceData.name = parseChildNodes(docRoot, "device", "name", i);
		deviceData.manufacturer = parseChildNodes(docRoot, "device", "manufacturer", i);
		deviceData.carrier = parseChildNodes(docRoot, "device", "carrier", i);
		if(deviceData.carrier == 'AT&T') {
			numATTDevices++;
			addDevice(deviceData.name, deviceData.manufacturer, i);
			//console.log(numATTDevices);
		}
	}
	onListComplete();
}

// of course IE has to do things it's own non standard way
function ieParse() {
	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
	function loadXML(xmlFile) { 
		xmlDoc.async="false"; 
	 	xmlDoc.onreadystatechange=verify; 
	 	xmlDoc.load(xmlFile); 
	 	xmlObj=xmlDoc.documentElement; 
	}
	function verify() { 
		if (xmlDoc.readyState != 4) { 
			return false; 
	 	} 
	}
	loadXML(fileToLoad);
	var numDevices = xmlObj.childNodes(1).firstChild.text;
	for(i = 0; i < numDevices;i++) {
		deviceData.name = xmlObj.childNodes(i+2).childNodes(0).firstChild.text;
		deviceData.manufacturer = xmlObj.childNodes(i+2).childNodes(1).firstChild.text;
		deviceData.carrier = xmlObj.childNodes(i+2).childNodes(2).firstChild.text;
		if(deviceData.carrier == 'AT&T') {
			numATTDevices++;
			addDevice(deviceData.name, deviceData.manufacturer, i+2);
		}
	}
	onListComplete();
}

function onListComplete() {
	manuStack.each(function(s) {
		//console.log(s);
		var container = s+'container';
		$(container).innerHTML = $(container).innerHTML.substr(0, $(container).innerHTML.length-2);
	});	
}

// load the xml from the moblieBanking vendor
function loadFile(urlToFile) {
	if(!IE) {
		new Ajax.Request(urlToFile, {
			method: 'get',
			onSuccess: parseResponse,
			onFailure: parseError
		});
	} else {
		// yuck
		ieParse();
	}
}

Event.observe(window, 'load', function(){
	loadFile(fileToLoad);		
});