var itsenatevallist = [
	{'id':'senate_dem','styles':{'background': 'url(/indepth/uselections2008/images/demograt-vert-sen.gif)'}},
	{'id':'senate_gop','styles':{'background': 'url(/indepth/uselections2008/images/republican-vert-sen.gif)'}}, 
	{'id':'senate_oth','styles':{'background': 'url(/indepth/uselections2008/images/independent-vert-sen.gif)'}}
];

var itsenatedelay = 60000;
var itsenateurl = "/indepth/uselections2008/xml/congress.xml";
var itsenatelasttxt = "";

var itsenatestartpos = 0; // Specify the width of the tick area
var itsenatebarspacing = 0.95; // Spacing between bars as percentage

var itsenatetotalseats = 100;

var itsenateratio;

window.addEvent( 'domready', function() {
	itsenatesetupgraph( itsenatevallist );
	itsenategetdata();
});

function itsenategetdata() {
  var request = new XHR({
    method: 'get',
    onSuccess: function(txt, xml) {

      if (itsenatelasttxt == txt) {
				itsenateloaded();
        window.setTimeout("itsenategetdata();", itsenatedelay);
        return;
      }
      itsenatelasttxt = txt;

			var vallist = {};

      var xmldoc = xml.documentElement;
      var itemlist = xmldoc.getElementsByTagName('item');
      for(var i=0; i<itemlist.length; i++) {
				var record = {};

				var node = itemlist[i].getElementsByTagName('id');
				record['id'] = node[0].childNodes[0].nodeValue;
				node = itemlist[i].getElementsByTagName('name');
				record['name'] = node[0].childNodes[0].nodeValue;
				node = itemlist[i].getElementsByTagName('seats');
				record['seats'] = node[0].childNodes[0].nodeValue;
				node = itemlist[i].getElementsByTagName('existingseats');
				if ( node[0] ) {
					record['existingseats'] = node[0].childNodes[0].nodeValue;
				}

				vallist[ record.id ] = record;
      }

			itsenatevallist.each( function(item) {
				if (vallist[ item.id ]) {
					item.seats = vallist[ item.id ].seats;
					item.existingseats = vallist[ item.id ].existingseats;
				}
			});

			itsenateloaddata( itsenatevallist );
	
			itsenateloaded();

      window.setTimeout("itsenategetdata();", itsenatedelay);
    }
  });
	
	$('itsenateloading').setStyle( 'display', 'block' );
	new Fx.Style($('itsenategraph'), 'opacity' ).start( 0.2 ).chain( function() {
		new Fx.Style($('itsenateloading'), 'opacity').start( 1 ).chain( function() {
			request.send( itsenateurl + "?ts=" + (new Date()).getTime() );
		});
	});
}

function itsenatesetupgraph (itsenatevallist) {
	var gw = $('itsenategraphwrapper');
	var gwidth = gw.getStyle( 'width' ).toInt();
	var gheight = gw.getStyle( 'height' ).toInt();

	var offset = (gwidth - itsenatestartpos) / itsenatevallist.length;

	itsenateratio = gheight / itsenatetotalseats;

	// Center the loading icon
	var loading = $('itsenateloading');
	var lwidth = loading.getStyle( 'width' ).toInt();
	var lheight = loading.getStyle( 'height' ).toInt();

	loading.setStyle( 'top', (gheight/2) - (lheight/2));
	loading.setStyle( 'left', (gwidth/2) - (lwidth/2));

	if (itsenatestartpos == 0) {
		itsenatestartpos = gwidth - (gwidth * itsenatebarspacing);
		itsenatestartpos /= 4;
	}

	itsenatevallist.each( function (item, i) {

		var el = new Element('div',
			{ 'id': item.id, 'class': 'vbar', 'styles': item.styles }
		);
		var el2 = new Element('div',
			{ 'id': item.id+'_existing', 'class': 'vbar', 'styles': item.styles }
		);
	
		el.setStyle( 'width', Math.round( offset * itsenatebarspacing ) );
		el2.setStyle( 'width', Math.round( offset * itsenatebarspacing ) );
	
		var left = itsenatestartpos;
		if (i > 0) {
			left += offset * i;
		}
		el.setStyle( 'left', left.toInt() );
		el2.setStyle( 'left', left.toInt() );
		el2.setOpacity( 0.5 );
	
		el.injectInside( $('itsenategraph') );
		el2.injectInside( $('itsenategraph') );
	});
	
	// TODO Do ticks using min-max range?
	/*
	for(var pos=25;pos<=250;pos+=25) {
		var tick = new Element('div',
			{ 'class': 'tick', 'styles': { 'bottom': pos+'px' } }
		);
		tick.setHTML( pos*2 );
		tick.injectInside( $('graph') );
	}
	*/
}

function itsenateloaddata( vallist ) {
	vallist.each( function (item, i) {
		var el2 = $( item.id + "_existing" );
		el2.setText( '' );
		new Fx.Style(el2, 'height' ).start( 0, item.existingseats*itsenateratio+10 ).chain(
			function() { el2.setText( item.existingseats ); }
		);

		var el = $( item.id );
		el.setText( '' );
		el.setStyle( 'bottom', (item.existingseats*itsenateratio) + 25 );
		if (item.seats > 0) {	
			new Fx.Style(el, 'height' ).start( 0, item.seats*itsenateratio ).chain(
				function() {el.setText( item.seats );}
			);
		} else {
			el.setStyle( 'height', 0 );
		}
	});
}


function itsenateloaded() {
	new Fx.Style($('itsenateloading'), 'opacity').start( 0 );
	new Fx.Style($('itsenategraph'), 'opacity').start( 1 );
}
