function travelCalendar(position, wholMonth, travel,lang) {
	if(!travel || travel == 0 || !position) return;
	this.language = {
		"year"   : [["年"],["-"]],
		"month"  : [["月"],[""]],
		"day"    : [["日"],["Day"]],
		"weeks"  : [["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],["Sun","Mon","Tue","Wed","Thur","Fri","Sat"]],
		"weekT"  : [["每","周","每天"],["Every","","Every Day"]],
		"status" : [["满员","充足","紧张"],["full","enough","stain"]],
		"price"  : [["起"],[""]]
		
	};
	this.lang = 0;
	if(lang) this.lang = lang;
	this.weeks = this.language.weeks[this.lang];
	this.weekt = this.language.weekT[this.lang];
	this.price = this.language.price[this.lang];
	this.date = new Date();
	this.year = this.date.getFullYear();
	this.month = this.date.getMonth();
	this.current = this.year+'/'+(this.month+1)+'/'+this.date.getDate();
	this.nextYear = this.nextMonth = null;
	//是否显示整月 1为整月 0为半月 以每月的15日为界(未完待续,现在只实现两个半月的效果)
	this.wholeMonth = 1; 
	if(wholMonth) this.wholMonth = wholMonth;

	this.position = position;
	
	this.ajax = new AjaxHttp;
	this.travel = travel;
	
	this.empty = 0;
	this.getDays = function(){}
	this.getShowDays = function(){}
	this.getSpecial = function(){return;}

	/** 获取指定年份及月份的总天数 **/
	this.getDays = function(year, month) {
		if (month != 1) return ((month%7)&1)?30:31;
		return ((0==year%4)&&(year%100))||(0==year%400)?29:28;
	}

	/** 获取指定日期是星期几 **/
	this.getTodayWeek = function(year, month, date) {
		var day = new Date(Date.parse(year+'/'+month+'/'+date));
		return day.getDay();
	}

	/** 获取上半月的显示天数 **/
	this.getFirstHalf = function(year, month) {
		if(month < 0) {
			month = 11;
			year -= 1;
		}
		this.year = year;
		this.month = month;
		var today =  this.getTodayWeek(year, month+1, 15);
		var first = 15 - today;
		var days = this.getDays(year,month);
		var i = first; 
		var box = new Array();
		for(i;i<=days;i++){
			box.push(i);
		}
		this.empty = 21 - box.length;
		return year+'-'+(month+1)+'-'+first;

	}
	/** 获取下半月的显示天数 **/
	this.getSecondHalf = function(year, month) {
		month += 1;
		if(month >= 12) {
			month = 0;
			year += 1;
		}
		this.nextYear = year ;
		this.nextMonth = month;
		var i = j = 0; 
		var box = new Array();
		var days = this.empty+21;
		return year+'-'+(month+1)+'-'+days;
	}
	/** 获取需要特殊显示的数据内容 **/
	this.getSpecial = function(year, month) {
		var start = this.getFirstHalf(year, month);
		var end = this.getSecondHalf(year, month);
		if(start == "" || end == "") return;
		var text = null;
		var url = "info.php?id=travelstart&travel="+this.travel;
		url += "&start="+start+'&end='+end;
		text = this.ajax.doGet(url);
		if(text.substr(0,3)=='ok:' && text.length > 3){
			text = eval(text.substr(3));
			return text;
		}
	}
	this.getOtherInfo = function(start) {
		var url = "info.php?id=traveldepart&travel="+this.travel;
		url += "&start="+start+"&lang="+this.lang;
		var text = this.ajax.doGet(url);
		if(text.substr(0,3)=='ok:' && text.length > 3){
			text = eval('('+text.substr(3)+')');
			return text;
		}
	}
	this.$ = function(id) {
		if (typeof id == 'object') return id;
		return document.getElementById(id);
	}

	this.getTitle = function(year, month) {
		month++;
		var Y = this.language.year[this.lang];
		var M = this.language.month[this.lang];
		return year + Y + month + M;
	}
	this.conTrast = function(start ,end) {
		start = start.replace("-", "/").replace("-", "/");
		end = end.replace("-", "/").replace("-", "/");
		var starts = new Date(start);
		var ends = new Date(end);
		return starts.dateDiff("d",ends);
	}
	this.showItem = function(item) {
		if(item.paypal == null && item.status == null) return item.date;
		var items = [];
		var price = (this.price!="")?"￥"+item.paypal+this.price : "from ￥"+item.paypal;

		items[items.length] = '<span class="Tdate">'+item.date+'</span>';
		if(item.status == 2 || item.status == 0)
			items[items.length] = '<span class="Tstatus'+item.status+'">'+this.itemStatus(item.status)+'</span>';
		else items[items.length] = '<span><br></span>';

		if(item.status > 0)
			items[items.length] = '<span class="Tpaypal">'+price+'</span>';
		else items[items.length] = '<span><br></span>';

		items[items.length] = '<span class="Tpaypal" style="display:none">'+item.begins+'</span>';
		return items.join("");
	}
	this.itemStatus = function(status) {
		var item = this.language.status[this.lang];
		return item[status];
	}
	this.Previous = function() {
		this.year = this.nextYear;
		this.month = this.nextMonth;
		this.draw();
	}
	this.Next = function() {
		this.month -= 1;
		this.draw();
	}
	this.addEvent = function() {
		var obj = this;
		var td = this.$(this.position).getElementsByTagName("td");
		var i=0;var item = '';var date = '';
		var thedate='',depart='',status='',paypal='',weeks='';
		var temp = new Array();
		for(i;i<td.length;i++) {
			item = td[i];
			if(item.className == 'TopData') {
				item.onclick = function() {
					if(conTrast(current, this.childNodes[3].innerHTML) < 0) {
						return false;
					}
					status = this.childNodes[1].innerHTML;
					paypal = this.childNodes[2].innerHTML.replace('起',' ');
					thedate = this.childNodes[3].innerHTML;
					if(!temp[thedate]){
						depart = getOtherInfo(thedate);
						temp[thedate] = depart;
					}else{
						depart = temp[thedate];
					}
					weeks = depart.weeks;
					$('sweeks').innerHTML = weeks;
					$('starts').value = thedate;
					$('starts').className = '';
					$('sprice').innerHTML = paypal+'.00';
					$('sinter').innerHTML = '('+depart.begins+' ~ '+depart.ends+')';
				}
			}
		}
		this.$('Tnext').onclick = function() {Previous()}
		this.$('Tprevi').onclick = function() {Next()}
	}

	/** 生成html文件**/
	this.draw = function() {
		var draw = [];
		var i = j = k = 0;
		var item = '';var data = '';var date = '';var tdclass = '';
		draw[draw.length] = '<table cellpadding="0" cellspacing="1" class="travelC" id="travelTable">';
		draw[draw.length] = '<tr>';
			for(i;i<8;i++){
				if(i == 0) {
					draw[draw.length] = '<td width="16%" height="20" ><br></td>';
				}else if(i == 1){
					draw[draw.length] = '<td width="12%" height="20" class="Tsunday" align="center">'+this.weeks[i-1]+'</td>'
				}else if(i == 7){
					draw[draw.length] = '<td width="12%" height="20" class="Tsatday" align="center">'+this.weeks[i-1]+'</td>'
				}else {
					draw[draw.length] = '<td width="12%" height="20" align="center">'+this.weeks[i-1]+'</td>'
				}
			}
		draw[draw.length] = '</tr>';
		data = this.getSpecial(this.year, this.month);
		
		for(j;j<6;j++){
			draw[draw.length] = '<tr>';
			if(j==0){
				draw[draw.length] = '<td width="16%" rowspan="3"  align="center"><img src="images/new_up_off.jpg" id="Tprevi">'+this.getTitle(this.year, this.month)+'</td>';
			}else if(j == 3) {
				draw[draw.length] = '<td width="16%" rowspan="3"  align="center"><img src="images/new_down_off.jpg" id="Tnext">'+this.getTitle(this.nextYear, this.nextMonth)+'</td>';
			}
			for(k=0;k<7;k++){
				item = data[(j*7)+k];
				if(item.paypal != null && item.status != null) {
					tdClass = (this.conTrast(this.current, item.begins) >= 0) ? "TopData" : "Texpired";
					draw[draw.length] = '<td width="12%"  class="'+tdClass+'">'+this.showItem(item)+'</td>';
				}else{
					draw[draw.length] = '<td width="12%" class="TopUnData">'+item.date+'</td>';
				}
			}
			draw[draw.length] = '</tr>';
		}
		draw[draw.length] = '</table>';
		$(this.position).innerHTML = draw.join("");
		this.addEvent();
	
	}
	this.draw();
}
function AjaxHttp() {
	if(window.XMLHttpRequest)
		this.objXmlHttp = new XMLHttpRequest();
	else if(window.ActiveXObject) {
		var success = false;
		try {
			this.objXmlHttp = new ActiveXObject('MSXML2.XMLHTTP');
			success = true;
		}catch(e) {}
		if (!success)
			this.objXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	}else {
		this.objXmlHttp = null;
		throw "XmlHttp Error!";
	}
	this.async = true;
	this.typeXml = false;
	this.onsuccess = null;
	this.doGet = function(url, callback) {
		var self = this.objXmlHttp;
		this.objXmlHttp.onreadystatechange = function() {
			if (self.readyState != 4 || !callback) return;
			var text = self.responseText;
			if (self.status != 200)
				callback(false, text);
			else if (text=='' || text.substr(0,3)=='ok:')
				callback(true, text.substr(3));
			else {
				if (text.substr(0,9) == "<!DOCTYPE")
					text = '';
				callback(false, text);
			}
		}
		this.objXmlHttp.open("GET", url, callback?true:false);
		this.objXmlHttp.setRequestHeader("If-Modified-Since","0");
		this.objXmlHttp.send("");
		return callback?"":self.responseText;
	}
}
Date.prototype.dateDiff = function(interval,objDate){
    if(arguments.length<2||objDate.constructor!=Date) return undefined;
    switch (interval) {   
      case "s":return parseInt((objDate-this)/1000); //計算秒差    
      case "n":return parseInt((objDate-this)/60000);//計算分差      
      case "h":return parseInt((objDate-this)/3600000);//計算時差      
      case "d":return parseInt((objDate-this)/86400000);//計算日差    
      case "w":return parseInt((objDate-this)/(86400000*7)); //計算週差      
      case "m":return (objDate.getMonth()+1)+((objDate.getFullYear()-this.getFullYear())*12)-(this.getMonth()+1);//計算月差
      case "y":return objDate.getFullYear()-this.getFullYear();//計算年差
      default:return undefined;
    }
}
function checkTheStart(str, travel) {
	var url = "info.php?id=loadstart&date="+str;
	url += "&travel="+travel;
	var ajax = new XmlHttp;
	var text = ajax.doGet(url);
	if(text == 'true') return true;
	else return false;
}
function checkTheDate(str){
	var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;
	var r = str.match(reg);
	if(r==null)return false;
	var d= new Date(r[1], r[3]-1,r[4],r[5],r[6],r[7]);
	var newStr=d.getFullYear()+r[2]+(d.getMonth()+1)+r[2]+d.getDate()+" "+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds()
	return Date.parse.toLocaleString(newStr)==Date.parse.toLocaleString(str);
}

var sina={
	$:function(objName){
		if(document.getElementById){
			return eval('document.getElementById("'+objName+'")')
		} else{
			return eval('document.all.'+objName)
		}
	},
	isIE:navigator.appVersion.indexOf("MSIE")!=-1?true:false,addEvent:function(l,i,I){
		if(l.attachEvent){
			l.attachEvent("on"+i,I)
			} else{
			l.addEventListener(i,I,false)
		}
	},
	delEvent:function(l,i,I){
		if(l.detachEvent){
			l.detachEvent("on"+i,I)
		} else{
			l.removeEventListener(i,I,false)
		}
	},
	readCookie:function(O){
		var o="",l=O+"=";
		if(document.cookie.length>0){
			var i=document.cookie.indexOf(l);
			if(i!=-1){
				i+=l.length;
				var I=document.cookie.indexOf(";",i);
				if(I==-1)I=document.cookie.length;
				o=unescape(document.cookie.substring(i,I))
			}
		} ;
		return o
	},
	writeCookie:function(i,l,o,c){
		var O="",I="";
		if(o!=null){
			O=new Date((new Date).getTime()+o*3600000);
			O="; expires="+O.toGMTString()
		};
		if(c!=null){
			I=";domain="+c
		};
		document.cookie=i+"="+escape(l)+O+I
	},
	readStyle:function(I,l){
		if(I.style[l]){
			return I.style[l]
		} else if(I.currentStyle){
			return I.currentStyle[l]
		} else if(document.defaultView&&document.defaultView.getComputedStyle){
			var i=document.defaultView.getComputedStyle(I,null);
			return i.getPropertyValue(l)
		} else{
			return null
		}
	}
};
//图片左右滚动构造函数 
function ScrollPic(scrollContId,arrLeftId,arrRightId,dotListId){
	this.scrollContId = scrollContId;
	this.arrLeftId = arrLeftId;
	this.arrRightId = arrRightId;
	this.dotListId = dotListId;
	this.dotClassName = "dotItem";
	this.dotOnClassName = "dotItemOn";
	this.directLeftB = "images/prior_b.gif";
	this.directLeftS = "images/prior_s.gif";
	this.directRightB = "images/next_b.gif";
	this.directRightS = "images/next_s.gif";
	this.dotObjArr = [];
	this.pageWidth = 0;
	this.frameWidth = 0;
	this.speed = 10;
	this.space = 10;
	this.pageIndex = 0;
	this.autoPlay = true;
	this.autoPlayTime = 5;
	var _autoTimeObj,_scrollTimeObj,_state="ready";
	this.stripDiv=document.createElement("DIV");
	this.listDiv01=document.createElement("DIV");
	this.listDiv02=document.createElement("DIV");
	if(!ScrollPic.childs){
		ScrollPic.childs=[]
	}
	this.ID=ScrollPic.childs.length;
	ScrollPic.childs.push(this);
	this.initialize=function(){
		if(!this.scrollContId){
			throw new Error("必须指定scrollContId.");
			return;
		}
		this.scrollContDiv=sina.$(this.scrollContId);
		if(!this.scrollContDiv){
			throw new Error("scrollContId不是正确的对象.(scrollContId = \""+this.scrollContId+"\")");
			return;
		}
		this.scrollContDiv.style.width=this.frameWidth+"px";
		this.scrollContDiv.style.overflow="hidden";
		this.listDiv01.innerHTML=this.listDiv02.innerHTML=this.scrollContDiv.innerHTML;
		this.scrollContDiv.innerHTML="";
		this.scrollContDiv.appendChild(this.stripDiv);
		this.stripDiv.appendChild(this.listDiv01);
		this.stripDiv.appendChild(this.listDiv02);
		this.stripDiv.style.overflow="hidden";
		this.stripDiv.style.zoom="1";
		this.stripDiv.style.width="33000px";
		if(sina.isIE) {
			this.listDiv01.style.styleFloat="left";
			this.listDiv02.style.styleFloat="left";
		}else {
			this.listDiv01.style.cssFloat="left";
			this.listDiv02.style.cssFloat="left";
		}

		sina.addEvent(this.scrollContDiv,"mouseover",Function("ScrollPic.childs["+this.ID+"].stop()"));
		sina.addEvent(this.scrollContDiv,"mouseout",Function("ScrollPic.childs["+this.ID+"].play()"));

		if(this.arrLeftId){
			this.arrLeftObj=sina.$(this.arrLeftId);
			if(this.arrLeftObj){
				sina.addEvent(this.arrLeftObj,"mousedown",Function("ScrollPic.childs["+this.ID+"].rightMouseDown()"));
				sina.addEvent(this.arrLeftObj,"mouseup",Function("ScrollPic.childs["+this.ID+"].rightEnd()"));
				sina.addEvent(this.arrLeftObj,"mouseout",Function("ScrollPic.childs["+this.ID+"].rightEnd()"));
				sina.addEvent(this.arrLeftObj,"mouseover",Function("ScrollPic.childs["+this.ID+"].leftMouse()"));

			}
		}
		if(this.arrRightId){
			this.arrRightObj=sina.$(this.arrRightId);
			if(this.arrRightObj){
				sina.addEvent(this.arrRightObj,"mousedown",Function("ScrollPic.childs["+this.ID+"].leftMouseDown()"));
				sina.addEvent(this.arrRightObj,"mouseup",Function("ScrollPic.childs["+this.ID+"].leftEnd()"));
				sina.addEvent(this.arrRightObj,"mouseout",Function("ScrollPic.childs["+this.ID+"].leftEnd()"));
				sina.addEvent(this.arrRightObj,"mouseover",Function("ScrollPic.childs["+this.ID+"].rightMouse()"));
			}
		}
		if(this.autoPlay){
			this.play()
		}
	}
	this.leftMouse = function() {
		var obj = this;
		var item = this.arrLeftObj.childNodes[0];
		item.onmouseover = function() {
			item.src = obj.directLeftB;
		}
		item.onmouseout = function() {
			item.src = obj.directLeftS;
		}
		item.onmousedown = function() {
			item.src = obj.directLeftS;
		}
		item.onmouseup = function() {
			item.src = obj.directLeftB;
		}
	}
	this.rightMouse = function() {
		var obj = this;
		var item = this.arrRightObj.childNodes[0];
		item.onmouseover = function() {
			item.src = obj.directRightB;
		}
		item.onmouseout = function() {
			item.src = obj.directRightS;
		}
		item.onmousedown = function() {
			item.src = obj.directRightS;
		}
		item.onmouseup = function() {
			item.src = obj.directRightB;
		}
	}
	this.leftMouseDown=function(){
		if(_state!="ready"){
			return
		}
		_state="floating";
		_scrollTimeObj=setInterval("ScrollPic.childs["+this.ID+"].moveLeft()",this.speed);
	}
	this.rightMouseDown=function(){
		if(_state!="ready"){
			return
		}
		_state="floating";
		_scrollTimeObj=setInterval("ScrollPic.childs["+this.ID+"].moveRight()",this.speed);
	}
	this.moveLeft=function(){
		if(this.scrollContDiv.scrollLeft+this.space>=this.listDiv01.scrollWidth){
			this.scrollContDiv.scrollLeft=this.scrollContDiv.scrollLeft+this.space-this.listDiv01.scrollWidth
		} else{
			this.scrollContDiv.scrollLeft+=this.space;
		}
		this.accountPageIndex()
	}
	this.moveRight=function(){
		if(this.scrollContDiv.scrollLeft-this.space<=0){
			this.scrollContDiv.scrollLeft=this.listDiv01.scrollWidth+this.scrollContDiv.scrollLeft-this.space
		} else{
			this.scrollContDiv.scrollLeft-=this.space;
		}
		this.accountPageIndex();
	}
	this.leftEnd=function(){
		if(_state!="floating"){
			return;
		}
		_state="stoping";
		clearInterval(_scrollTimeObj);
		var fill=this.pageWidth-this.scrollContDiv.scrollLeft%this.pageWidth;
		this.move(fill);
	}
	this.rightEnd=function(){
		if(_state!="floating"){
			return
		};
		_state="stoping";
		clearInterval(_scrollTimeObj);
		var fill=-this.scrollContDiv.scrollLeft%this.pageWidth;
		this.move(fill)
	}
	this.move=function(num,quick){
		var thisMove=num/5;
		if(!quick){
			if(thisMove>this.space){
				thisMove=this.space
			} ;
			if(thisMove<-this.space){
				thisMove=-this.space
			}
		} ;
		if(Math.abs(thisMove)<1&&thisMove!=0){
			thisMove=thisMove>=0?1:-1
		}else{
				thisMove=Math.round(thisMove)
		};
		var temp=this.scrollContDiv.scrollLeft+thisMove;
		if(thisMove>0) {
			if(this.scrollContDiv.scrollLeft+thisMove>=this.listDiv01.scrollWidth){
				this.scrollContDiv.scrollLeft=this.scrollContDiv.scrollLeft+thisMove-this.listDiv01.scrollWidth
			} else {
				this.scrollContDiv.scrollLeft+=thisMove
			}
		} else {
			if(this.scrollContDiv.scrollLeft-thisMove<=0){
				this.scrollContDiv.scrollLeft=this.listDiv01.scrollWidth+this.scrollContDiv.scrollLeft-thisMove
			} else{
				this.scrollContDiv.scrollLeft+=thisMove
			}
		};
		num-=thisMove;
		if(Math.abs(num)==0){
			_state="ready";
			if(this.autoPlay){
				this.play();
			};
			this.accountPageIndex();
			return;
		} else{
			this.accountPageIndex();
			setTimeout("ScrollPic.childs["+this.ID+"].move("+num+","+quick+")",this.speed);
		}
	};
	this.next=function(){
		if(_state!="ready"){
			return;
		}
		_state="stoping";
		this.move(this.pageWidth,true)
	}
	this.play=function(){
		if(!this.autoPlay){
			return;
		}
		clearInterval(_autoTimeObj);
		_autoTimeObj=setInterval("ScrollPic.childs["+this.ID+"].next()",this.autoPlayTime*1000);
	}
	this.stop=function(){
		clearInterval(_autoTimeObj);
	}
	this.pageTo=function(num){
		if(_state!="ready"){
			return
		}
		_state="stoping";
		var fill=num*this.frameWidth-this.scrollContDiv.scrollLeft;
		this.move(fill,true)
	}
	this.accountPageIndex=function(){
		this.pageIndex=Math.round(this.scrollContDiv.scrollLeft/this.frameWidth);
		if(this.pageIndex>Math.round(this.listDiv01.offsetWidth/this.frameWidth+0.4)-1) {
			this.pageIndex=0
		}
		var i;
		for(i=0;i<this.dotObjArr.length;i++){
			if(i==this.pageIndex){
				this.dotObjArr[i].className=this.dotClassName
			} else{
				this.dotObjArr[i].className=this.dotOnClassName
			}
		}
	}
}
