var Graph = Class.create();
Graph.prototype = {
	config: {},	
	prevDate: null,
	totalWidth: 20,
	prevPos: 101,
	id: 'graph',

	dom: function(tagName, options) {
		var element = document.createElement(tagName);
		for(var i in options) {
			element[i] = options[i];
		}
		return element;
	},

	initialize: function() {
		this.frame = this.dom('div', {className: 'frame'});
	},
	
	show: function(data) {
		this.frame.innerHTML = '';
		
		this.config = {frameLength: 500,frameHeight: 300,totalDays: 0};
		this.prevDate = null;
		this.totalWidth = 20;
		this.prevPos = 101;
		
		for(var i=0;i<data.length;i++) {
			var date = data[i][0].split('-');
			var dateObj = new Date(date[0],date[1],date[2]);
			var days = (this.prevDate) ? Math.round((dateObj.getTime()-this.prevDate.getTime())/(1000 * 3600 * 24)) : 1;
			this.prevDate = new Date(dateObj);
			data[i][0] = date[2]+'/'+date[1];
			data[i][2] = days;
			this.config.totalDays += days;
		}

		var cellWidth = Math.floor(this.config.frameLength / (this.config.totalDays+1));
		var cellHeight = Math.floor(this.config.frameHeight / 100);

		var bar = this.dom('div', {className: 'bar'});
			bar.style.width = this.totalWidth - 1 + 'px';
			bar.style.height = cellHeight*100 + 'px';
		this.frame.appendChild(bar);

		for(var i=0;i<data.length;i++) {
			var point = data[i];
			var width = cellWidth * point[2];
				this.totalWidth += width+1;
			var bar = this.dom('div', {className: 'bar' + (i%2?' rht':' inv')});
				bar.style.width = width + 'px';
				bar.style.height = cellHeight * (point[1]-1) + 'px';
			var change = this.prevPos-point[1];
				this.prevPos = point[1];
				bar.innerHTML = '<i'+(i%2?' class="o"':'')+'>'+point[0]+'</i><span'+(change?'':' class="z"')+'>'+point[1]+
						' <b'+(change<0?' class="r">(-':'>(+')+Math.abs(change)+')</b>'+'</span>';
			this.frame.appendChild(bar);
		}

		this.frame.style.width = this.totalWidth + 'px';
		this.frame.style.height = this.config.frameHeight + 'px';
		this.insert();
	},
	
	insert: function() {
		Element.show('graph-parent');
		$(this.id).innerHTML = '';
		$(this.id).appendChild(this.frame);
		window.scrollTo(0,0);
	}
};