//var date = "2007-08-09T14:10:17+09:00";
//May 28 2006 09:00:00 GMT

var timeline_tl;
var timeline_resizeTimerID = null;

function TimelineFactory() {
	this.initialize();
}

TimelineFactory.getContent = function(xpath, xml) {
	return (xpath == undefined) ? "" : $(xpath,xml).text();
}

TimelineFactory.prototype = {
	initialize: function() {
		TimelineFactory.cfg = "timelineCfg";
		TimelineFactory.monthName = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
		TimelineFactory.domParser = new DOMParser();
	},
	
	
	getMonthName: function(num) {
		return this.monthName(num-1);
	},
	
	getTimeline: function(id,dataSet,sourceName) {
		
		var data = dataSet.getData();
		var xmlStr = "<?xml version='1.0' encoding='UTF-8'?><data>" + this.createEventData(data, sourceName) + "</data>";
		var xml = TimelineFactory.domParser.parseFromString(xmlStr, "text/xml");
		this.createTimeline(id,xml);
		
		
		//alert(xmlStr);
		
	},
	
	createTimeline: function(id, xml) {
		
		var eventSource = new Timeline.DefaultEventSource();
		var bandInfos = [
	    Timeline.createBandInfo({
					eventSource: eventSource,
					//date:           "Aug 12 2007 00:00:00 GMT+0900",
	        width:          "70%", 
	        intervalUnit:   Timeline.DateTime.DAY, 
	        intervalPixels: 200
	    }),
	    Timeline.createBandInfo({
					eventSource: eventSource,
					//date:           "Aug 12 2007 00:00:00 GMT+0900",
					showEventText:  false,
	        width:          "15%", 
	        intervalUnit:   Timeline.DateTime.WEEK, 
	        intervalPixels: 200
	    }),
	    Timeline.createBandInfo({
					eventSource: eventSource,
					//date:           "Aug 12 2007 00:00:00 GMT+0900",
					showEventText:  false,
	        width:          "15%", 
	        intervalUnit:   Timeline.DateTime.YEAR, 
	        intervalPixels: 100
	    })
	  ];
	  
	  bandInfos[1].syncWith = 0;
 		bandInfos[1].highlight = true;
 		bandInfos[2].syncWith = 0;
 		bandInfos[2].highlight = true;
	  
	  timeline_tl = Timeline.create(document.getElementById(id), bandInfos);
		eventSource.loadXML(xml, location.href);
		//Timeline.loadXML("event.xml", function(xml, url) { eventSource.loadXML(xml, url); });
		
  },
  
  getXPath: function (sourceName,property) {
		return eval(TimelineFactory.cfg + "." + sourceName + "." + property);
	},
	
  createEventData: function(data,sourceName) {
		
		var base = this.getXPath(sourceName,"base");
		var start = this.getXPath(sourceName, "start");
		var end = this.getXPath(sourceName, "end");
		var isDuration = this.getXPath(sourceName, "isDuration");
		var title = this.getXPath(sourceName, "title");
		var image = this.getXPath(sourceName, "image");
		var discription = this.getXPath(sourceName, "discription");
		var link = this.getXPath(sourceName, "link");
		
		var xmlStr = "";
		
		//var createXMLNode = this.createXMLNode;
		$(data).find(base).each(function(){
			
			xmlStr += TimelineFactory.prototype.createXMLNode(
									TimelineFactory.getContent(start,this),
									TimelineFactory.getContent(end,this),
									TimelineFactory.getContent(isDuration,this),
									TimelineFactory.getContent(title,this),
									TimelineFactory.getContent(image,this),
									TimelineFactory.getContent(discription,this),
									TimelineFactory.getContent(link,this)
									);
			
		});
		
		return xmlStr;
		
	},
	
	createXMLNode: function( start, end, isDuration, title, image, discription, link ) {
		var _start = ""
		if(start != "" ) {
			_start = this.formatDate(start);
		}
		
		var _end = _start;
		if(end != "" ) {
			_end = this.formatDate(end);
		}
		
		var _isDuration;
		if(isDuration == "" ) {
			_isDuration = "false";
		} else {
			_isDuration = isDuration;
		}
		
		var str = "<event start=\"" + _start + "\" end=\"" + _end + "\" isDuration=\"" + _isDuration + "\" title=\"" + escapeStr(title) + "\" image=\"" + image + "\">" + escapeStr(discription) + "<\/event>";
		// link=\"" + link + "\"
		return str;
	},
	
	formatDate: function(date) {
		
		//2007-08-11T21:50:18+09:00 -> Aug 11 2007 21:50:18 GMT+0900
		
		var d = date.split("T");
		var _day = d[0].split("-");
		var time = d[1].slice(0,8);
		var td = d[1].slice(8).replace(":","");
		
		var numMonth = parseInt(_day[1].replace("0",""));
		
		var month = TimelineFactory.monthName[ numMonth - 1];
		var day = _day[2];
		var year = _day[0];
		
		var formated =  month + " " + day + " " + year + " " + time + " GMT" + td;
		
		return formated;
	},
	
  onResize: function() {
    if (timeline_resizeTimerID == null) {
        timeline_resizeTimerID = window.setTimeout(function() {
            timeline_resizeTimerID = null;
            timeline_tl.layout();
        }, 500);
    }
	},
  
}

function escapeStr(str) {
	str = str.replace(/\&/g,"&amp;");
	str = str.replace(/</g,"&lt;");
	str = str.replace(/>/g,"&gt;");
	str = str.replace(/'/g,"&apos;");
	str = str.replace(/"/g,"&quot;");
	return str;
}

var timelineFactory = new TimelineFactory();
