var CalWidget = {
	isloaded: 0,
	Node: null,
	months: ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
	months2: ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'],
	daylabels: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
	modata: [],
	moindex: 0,
	DealReg: null,
	ActiveReg: null,
	
	// init
	load: function(){
		if(this.isloaded++) return;
		
		// find first month
		var curmo, curyr;
		var mos = {};
		for(var i=0; i<this.months.length; i++)mos[this.months[i]] = i;
		var html = $('.mini-cal-title b').html();
		if(typeof(html)!='string') return; // parsing error
		var parts = html.split(' ');
		for(var i=0; i<parts.length; i++){
			var part = parts[i];
			if(!part)continue;
			var n = parseInt(part);
			if(!isNaN(n)) curyr = n;
			else{
				var parts2 = part.split("\n");
				for(var j=0; j<parts2.length; j++){
					if(mos[parts2[j]]) curmo = mos[parts2[j]];
					}
				}
			}
		if(!curmo || !curyr) return; // parsing error
		
		// get month data
		this.DealReg = new RegExp("deal");		// look for key words in class attr
		this.ActiveReg = new RegExp("active");
		var MiniNodes = $(".mini-cal");
		var mo = curmo;
		var yr = curyr;
		for(var i=0; i<MiniNodes.length; i++){
		
			this.modata.push({
				title: (this.months2[mo] + " " + yr),
				classes: this.fetchExisting($(MiniNodes[i])),
				Node: null
				});
			
			if(!this.months[++mo]){mo = 1; yr++; }
			}
		
		// initial month
		if(this.modata.length<3) return; // error
		this.Node = $('.cal-months:first');
		this.Node.show(); 
		$('.cal-widget:first').find('.cal-key:first').show(); 
		this.setMonth(0);
		},
	
	fetchExisting: function(Node){
		var isstarted = false;
		var classes = [];
		var Nodes = Node.find(".mini-cal-day");
		if(!Nodes[0]) return;
		for(var i=0; i<Nodes.length; i++){
			var tdnode = $(Nodes[i]);
			var kids = tdnode.children();
			var str2 = kids.length ? $(kids[0]).html() : tdnode.html();
			var n = parseInt(str2);
			if(!isNaN(n)){classes.push(this.convert(tdnode)); isstarted = true; }
			else if(!isstarted) classes.push('cal-empty');
			else return classes;
			}
		
		return classes;
		},
	
	getMonthNode: function(index, pos){
		var Data = this.modata[index];
		if(Data.Node)return Data.Node.show(); // return existing node
		
		// create new node
		var main, label, list;
		main = this.div("cal-month");
		main.append(label = this.tag('b', 'cal-label'));
		label.append(main[0].prevNode = this.button('cal-prev', this.showPrev, "<img src='/resources/eda49c056d/images/vrfresh/t.gif' border='0' />"));
		label.append(main[0].nextNode = this.button('cal-next', this.showNext, "<img src='/resources/eda49c056d/images/vrfresh/t.gif' border='0' />"));
		label.append(Data.title); 
		main.append(this.div('cal-clear')); 
		main.append(list = this.div('cal-list')); 
		for(var i=0; i<7; i++){
			list.append(this.listitem('cal-day', "<span>"+this.daylabels[i]+"</span>")); 
			}
		var daycount = 1;
		for(var i=0; i<Data.classes.length; i++){
			if(Data.classes[i]=='cal-empty')list.append(this.listitem('cal-empty', "&nbsp;")); 
			else if(Data.classes[i]=='cal-blocked'){list.append(this.listitem(Data.classes[i], "<span><strike>"+(daycount++)+"</strike></span>"));}
			else list.append(this.listitem(Data.classes[i], "<span>"+(daycount++)+"</span>")); 
			}
		main.append(this.div('cal-clear')); 
		this.Node.append(main); // append to main node
		return Data.Node = main;
		},
	
	// navigation
	
	showPrev: function(){CalWidget.setMonth(CalWidget.moindex-1); return false; },
	showNext: function(){CalWidget.setMonth(CalWidget.moindex+1); return false; },
	setMonth: function(pos){
		this.moindex = Math.max(0, Math.min(this.modata.length-3, pos));
		if(!this.modata[this.moindex]) return; // error
		var node = $('.cal-months:first');
		
		// hide all
		for(var i=0; i<this.modata.length; i++){
			if(this.modata[i].Node)this.modata[i].Node.hide(); 
			}
		
		// left
		var node1 = this.getMonthNode(this.moindex);
		if(this.moindex)node1[0].prevNode.show(); 
		else node1[0].prevNode.hide(); 
		node1[0].nextNode.hide(); 
		
		// center
		var node2 = this.getMonthNode(this.moindex+1);
		node2[0].prevNode.hide(); 
		node2[0].nextNode.hide(); 
		
		// right
		var node3 = this.getMonthNode(this.moindex+2);
		node3[0].prevNode.hide(); 
		if((this.moindex+3) < this.modata.length) node3[0].nextNode.show(); else node3[0].nextNode.hide(); 
		},
	
	// utilities
	
	div: function(cssclass){return this.tag('div', cssclass); },
	listitem: function(cssclass, html){return this.tag('li', cssclass).html(html+''); },
	button: function(cssclass, func, html, extra){
		var Node = this.tag('a', cssclass).attr('href', '#'); 
		if(html)Node.html(html); 
		return (typeof(func)=='function') ? Node.click(func) : Node;
		},
	tag: function(tag, cssclass){
		var Node = $(document.createElement(tag));
		if(cssclass) Node.addClass(cssclass);
		return Node;
		},
	
	convert: function(tdnode){
		var Str = new String(tdnode.attr('class'));
		if(Str.match(this.DealReg)) return 'cal-deals';
		if(Str.match(this.ActiveReg)) return 'cal-blocked';
		return '';
		},
	
	
	endclass: null
	// END OF CLASS
	}



$(document).ready(function(){
	CalWidget.load();
	});


