﻿//线路日期控件,有比较复杂的业务逻辑,在没有明白业务逻辑之前,不要擅自改动．zhangqing
var startConDate="";  //日期选择范围的开始日期.
var endConDate="";    //日期选择范围的结束日期.

var journeyNo;    //行程序号.

var p_leaveType="";  //出发班期．

var p_fixed="";    //固定出发日期．出发班期和固定出发日期二者只能选其一,当两者都有值时,固定出发日期优先．

var p_estop="";//禁用日期．禁用日期优先级最高,固定出发日期次之,最后为出发班期.

var p_quitDate=""; //退房后禁用日期(已将退房后禁用班期合并到这个日期当中).

var fillTextFlag="";  //根据这个标记来确定要填充的文本框．

//此函数适用于除去日期间的空格
function trim(s){
	return s.replace(/^\s+|\s+$/, '');
}

function MonthTxt(MonthNumber){
	var Month = new Array();
	Month[1] = "一月";
	Month[2] = "二月";
	Month[3] = "三月";
	Month[4] = "四月";
	Month[5] = "五月";
	Month[6] = "六月";
	Month[7] = "七月";
	Month[8] = "八月";
	Month[9] = "九月";
	Month[10] = "十月";
	Month[11] = "十一月";
	Month[12] = "十二月";
	return Month[MonthNumber];
}

//calendar
var datePattern=/^(\d{4})-(\d{2})-(\d{2})$/;
var monthDayPattern=/^(\d{2})-(\d{2})$/;

var weekend = [0,6];  //礼拜六,礼拜天
var weekendColor = "#D5D5D5";//礼拜六,礼拜天显示的颜色
var fontface = "Verdana";

var gNow = new Date();//当前日期

var ggWinCal;　　//弹出的窗口对象

isNav = (navigator.appName.indexOf("Netscape") != -1) ? true : false;
isIE = (navigator.appName.indexOf("Microsoft") != -1) ? true : false;//判断当前使用的浏览器

Calendar.Months = ["一月", "二月", "三月", "四月", "五月", "六月",
        "七月", "八月", "九月", "十月", "十一月", "十二月"];

// Non-Leap year Month days..
Calendar.DOMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
// Leap year Month days..
Calendar.lDOMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];//每个月的最大天数

function Calendar(p_item, p_WinCal, p_month, p_year, p_format) {
    if ((p_month == null) && (p_year == null))    return;

    if (p_WinCal == null){
        this.gWinCal = ggWinCal;
   	}else{
        this.gWinCal = p_WinCal;
    }

    if (p_month == null) {
        this.gMonthName = null;
        this.gMonth = null;
        this.gYearly = true;
    } else {
        this.gMonthName = Calendar.get_month(p_month);
        this.gMonth = new Number(p_month);
        this.gYearly = false;
    }

    this.gYear = p_year;
    this.gFormat = p_format;
    this.gBGColor = "#D2D2D2";
    //"white";
    this.gFGColor = "black";
    this.gTextColor = "black";
    this.gHeaderColor = "#1A595B";
    //"black";
    this.gReturnItem = p_item;
}

Calendar.get_month = Calendar_get_month; //monthNo的大写,eg:五月
Calendar.get_daysofmonth = Calendar_get_daysofmonth;  //年月的最后一天是多少
Calendar.calc_month_year = Calendar_calc_month_year; //当前月份的前一个月和后一个月,-1为前一个月,1为后一个月．
Calendar.print = Calendar_print;

function Calendar_get_month(monthNo) {  //monthNo的大写,eg:五月	
    return Calendar.Months[monthNo];
}

function Calendar_get_daysofmonth(monthNo, p_year) { //年月的最后一天是多少
    if ((p_year % 4) == 0) {
        if ((p_year % 100) == 0 && (p_year % 400) != 0){
        	return Calendar.DOMonth[monthNo];
        }
        return Calendar.lDOMonth[monthNo];
    } else{
        return Calendar.DOMonth[monthNo];
    }
}

function Calendar_calc_month_year(p_Month, p_Year, incr) {　　
    var ret_arr = new Array();
    if (incr == -1) {
        //前一个月
        if (p_Month == 0) {
            ret_arr[0] = 11;
            ret_arr[1] = parseInt(p_Year) - 1;
        }
        else {
            ret_arr[0] = parseInt(p_Month) - 1;
            ret_arr[1] = parseInt(p_Year);
        }
    } else if (incr == 1) {
        //后一个月
        if (p_Month == 11) {
            ret_arr[0] = 0;
            ret_arr[1] = parseInt(p_Year) + 1;
        }
        else {
            ret_arr[0] = parseInt(p_Month) + 1;
            ret_arr[1] = parseInt(p_Year);
        }
    }
    return ret_arr;
}

function Calendar_print() {
    ggWinCal.print();
}

// This is for compatibility with Navigator 3, we have to create and discard one object before the prototype object exists.
new Calendar();

Calendar.prototype.getMonthlyCalendarCode = function() {
    var vCode = "";
    var vHeader_Code = "";
    var vData_Code = "";

    //Begin Table Drawing code here..
    //vCode = vCode + "<TABLE BORDER=1 BGCOLOR=\"" + this.gBGColor + "\">";
    vCode = vCode + "<TABLE width=\"200\" BORDER=0 cellpadding=\"1\" cellspacing=\"1\" BGCOLOR=\"" + this.gBGColor + "\">";
    vHeader_Code = this.cal_header();   //星期显示
    vData_Code = this.cal_data();    //日期显示
    vCode = vCode + vHeader_Code + vData_Code;

    vCode = vCode + "</TABLE>";
    vCode = vCode + "<p align=center><a href=# onclick=self.opener.document.getElementById('" + this.gReturnItem + "').value='';self.opener.document.getElementById('" + this.gReturnItem + "').focus();self.close()><img border=0 src=images/b_clear_normal.gif onMouseOver=this.src='images/b_clear_down.gif' onMouseOut=this.src='images/b_clear_normal.gif' name=b_clear_normal></a></p>";
    //清空文本框
    return vCode;
}

Calendar.prototype.show = function() {   //显示页面的所有内容
    var vCode = "";
    var fsize = "2";
    this.gWinCal.document.open();

    // Setup the page...
    this.wwrite("<html>");
    this.wwrite("<head><title>Calendar</title>");
    this.wwrite("</head>");

    this.wwrite("<body " +
                "link=\"" + this.gLinkColor + "\" " +
                "vlink=\"" + this.gLinkColor + "\" " +
                "alink=\"" + this.gLinkColor + "\" " +
                "text=\"" + this.gTextColor + "\">");
    //this.wwriteA("<FONT FACE='" + fontface + "' SIZE=1><B>");
    this.wwriteA("<FONT FACE='" + fontface + "' SIZE=2>");
    //this.wwriteA(this.gMonthName + " " + this.gYear);
    //this.wwriteA("</B><BR>");

    // Show navigation buttons
    var prevMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, -1);
    var prevMM = prevMMYYYY[0];
    var prevYYYY = prevMMYYYY[1];

    var nextMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, 1);
    var nextMM = nextMMYYYY[0];
    var nextYYYY = nextMMYYYY[1];

    this.wwrite("<table width=\"200\" border=\"0\" cellpadding=\"1\" cellspacing=\"1\" bgcolor=\"#B6B6B6\"><TR align=\"center\">");
    this.wwrite("<td bgcolor=\"#E0E0E0\"><font size=\"" + fsize + "\">");
    this.wwrite("[<A HREF=\"" +
                "javascript:window.opener.Build(" +
                "'" + this.gReturnItem + "', '" + prevMM + "', '" + prevYYYY + "', '" + this.gFormat + "'" +
                ");" +
                "\"><<\/A></font></TD><td width=\"80\" bgcolor=\"#E0E0E0\"><font color=\"#FF0000\" size=\"" + fsize + "\">");
    this.wwrite(this.gYear + "年" + (this.gMonth + 1) + "月</TD><TD ALIGN=center bgcolor=\"#E0E0E0\"><font size=\"" + fsize + "\">");
    this.wwrite("<A HREF=\"" +
                "javascript:window.opener.Build(" +
                "'" + this.gReturnItem + "', '" + nextMM + "', '" + nextYYYY + "', '" + this.gFormat + "'" +
                ");" +
                "\">><\/A>]</font></TD>");
    this.wwrite("</TR></TABLE><BR>");

    // Get the complete calendar code for the month..
    vCode = this.getMonthlyCalendarCode();
    this.wwrite(vCode);

    this.wwrite("</font></body></html>");
    this.gWinCal.document.close();
}

Calendar.prototype.showY = function() {
    var vCode = "";
    var i;
    var vr, vc, vx, vy;
    // Row, Column, X-coord, Y-coord
    var vxf = 285;
    // X-Factor
    var vyf = 200;
    // Y-Factor
    var vxm = 10;
    // X-margin
    var vym;
    // Y-margin
    if (isIE){   
     	vym = 75;
    }else if (isNav){    
    	vym = 25;
    }

    this.gWinCal.document.open();

    this.wwrite("<html>");
    this.wwrite("<head><title>Calendar</title>");
    this.wwrite("<style type='text/css'>\n<!--");
    for (i = 0; i < 12; i++) {
        vc = i % 3;
        if (i >= 0 && i <= 2)    vr = 0;
        if (i >= 3 && i <= 5)    vr = 1;
        if (i >= 6 && i <= 8)    vr = 2;
        if (i >= 9 && i <= 11)    vr = 3;

        vx = parseInt(vxf * vc) + vxm;
        vy = parseInt(vyf * vr) + vym;

        this.wwrite(".lclass" + i + " {position:absolute;top:" + vy + ";left:" + vx + ";}");
    }
    this.wwrite("A {style:font-size:12pt;}");
    this.wwrite("-->\n</style>");
    this.wwrite("</head>");

    this.wwrite("<body " +
                "link=\"" + this.gLinkColor + "\" " +
                "vlink=\"" + this.gLinkColor + "\" " +
                "alink=\"" + this.gLinkColor + "\" " +
                "text=\"" + this.gTextColor + "\">");
    this.wwrite("<FONT FACE='" + fontface + "' SIZE=2><B>");
    this.wwrite("Year : " + this.gYear);
    this.wwrite("</B><BR>");

    // Show navigation buttons
    var prevYYYY = parseInt(this.gYear) - 1;
    var nextYYYY = parseInt(this.gYear) + 1;
    this.wwrite("<table width=\"200\" border=\"0\" cellpadding=\"1\" cellspacing=\"1\" bgcolor=\"#B6B6B6\"><TR align=\"center\"><td bgcolor=\"#E0E0E0\"><font size=\"2\">");
    //this.wwrite("<TABLE WIDTH='100%' BORDER=1 CELLSPACING=0 CELLPADDING=0 BGCOLOR='#e0e0e0'><TR><TD ALIGN=center>");
    this.wwrite("[<A HREF=\"" +
                "javascript:window.opener.Build(" +
                "'" + this.gReturnItem + "', null, '" + prevYYYY + "', '" + this.gFormat + "'" +
                ");" +
                "\" alt='Prev Year'><<<\/A>]</TD><TD ALIGN=center>");
    this.wwrite("[<A HREF=\"javascript:window.print();\">Print</A>]</TD><TD ALIGN=center>");
    this.wwrite("[<A HREF=\"" +
                "javascript:window.opener.Build(" +
                "'" + this.gReturnItem + "', null, '" + nextYYYY + "', '" + this.gFormat + "'" +
                ");" +
                "\">>><\/A>]</TD></TR></TABLE><BR>");

    // Get the complete calendar code for each month..
    var j;
    for (i = 11; i >= 0; i--) {
        if (isIE)
            this.wwrite("<DIV ID=\"layer" + i + "\" CLASS=\"lclass" + i + "\">");
        else if (isNav)
            this.wwrite("<LAYER ID=\"layer" + i + "\" CLASS=\"lclass" + i + "\">");

        this.gMonth = i;
        this.gMonthName = Calendar.get_month(this.gMonth);
        vCode = this.getMonthlyCalendarCode();
        this.wwrite(this.gMonthName + "/" + this.gYear + "<BR>");
        this.wwrite(vCode);

        if (isIE)
            this.wwrite("</DIV>");
        else if (isNav)
            this.wwrite("</LAYER>");
    }

    this.wwrite("</font><BR></body></html>");
    this.gWinCal.document.close();
}

Calendar.prototype.wwrite = function(wtext) {  //换行写文本
    this.gWinCal.document.writeln(wtext);
}

Calendar.prototype.wwriteA = function(wtext) {　　//不换行写文本
    this.gWinCal.document.write(wtext);
}

Calendar.prototype.cal_header = function() {   //星期显示
    var fsize = "2";
    var vCode = "";
    vCode = vCode + "<TR align=\"center\">";
    vCode = vCode + "<TD WIDTH='14%' bgcolor=\"#F0F0F0\"><strong><FONT SIZE='" + fsize + "'  COLOR='" + this.gHeaderColor + "'>日</strong></FONT></TD>";
    vCode = vCode + "<TD WIDTH='14%' bgcolor=\"#F0F0F0\"><strong><FONT SIZE='" + fsize + "'  COLOR='" + this.gHeaderColor + "'>一</strong></FONT></TD>";
    vCode = vCode + "<TD WIDTH='14%' bgcolor=\"#F0F0F0\"><strong><FONT SIZE='" + fsize + "'  COLOR='" + this.gHeaderColor + "'>二</strong></FONT></TD>";
    vCode = vCode + "<TD WIDTH='14%' bgcolor=\"#F0F0F0\"><strong><FONT SIZE='" + fsize + "'  COLOR='" + this.gHeaderColor + "'>三</strong></FONT></TD>";
    vCode = vCode + "<TD WIDTH='14%' bgcolor=\"#F0F0F0\"><strong><FONT SIZE='" + fsize + "'  COLOR='" + this.gHeaderColor + "'>四</strong></FONT></TD>";
    vCode = vCode + "<TD WIDTH='14%' bgcolor=\"#F0F0F0\"><strong><FONT SIZE='" + fsize + "'  COLOR='" + this.gHeaderColor + "'>五</strong></FONT></TD>";
    vCode = vCode + "<TD WIDTH='16%' bgcolor=\"#F0F0F0\"><strong><FONT SIZE='" + fsize + "'  COLOR='" + this.gHeaderColor + "'>六</strong></FONT></TD>";
    vCode = vCode + "</TR>";
    return vCode;
}

Calendar.prototype.cal_content = function(vCode,j,vDay,link) {   //内容显示,link==yes有超链接内容,否则为无超链接内容
	if(link=="yes"){
		vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j) + " align=\"center\">" +
			"<A HREF='#' " +
			"onclick=\"self.opener.control_txt('"+this.format_data(vDay)+"');return false;\"><FONT SIZE='2' COLOR='blue'>" +
			this.format_day(vDay) +
			"</FONT></A>" +
			"</TD>";
	}else{
		vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j) + " align=\"center\"><FONT SIZE='2' COLOR='gray'>" +
			this.format_day(vDay) +
			"</FONT></TD>";
	}	
	return vCode;
}

Calendar.prototype.cal_data = function() {    //日期显示
    var vDate = new Date();
    vDate.setDate(1);
    vDate.setMonth(this.gMonth);
    vDate.setFullYear(this.gYear);

    var vFirstDay = vDate.getDay();  //求该月的一号是星期几  
    var vDay = 1;
    var vLastDay = Calendar.get_daysofmonth(this.gMonth, this.gYear); //求该月的最后一天是多少号
    var vOnLastDay = 0;
    var vCode = "";

    vCode = vCode + "<TR align=\"center\" bgcolor=\"#FFFFFF\">";
    for (i = 0; i < vFirstDay; i++) {
        vCode = vCode + "<TD  WIDTH='14%'" + this.write_weekend_string(i) + " align=\"center\"><FONT SIZE='2'>&nbsp;</FONT></TD>";
    }

    // Write rest of the 1st week    
    for (j = vFirstDay; j < 7; j++) {
    	var oneDay=this.format_data(vDay);  //日期字符串
    	vDate.setDate(vDay);   //日期对象      	 		    	
    	if(compareDate(oneDay,startConDate)!=-1 && compareDate(oneDay,endConDate)!=1){//这一天在有效的日期范围内  
	    	if(fillTextFlag=="LEAVEDATEFLAG"){   //出发日期
	    		if(journeyNo=="0"){  //当为第一个行程时
	   				if(p_fixed!=null && p_fixed!=""){   //固定出发日期．出发班期和固定出发日期二者只能选其一,当两者都有值时,固定出发日期优先．
	   					if(p_fixed.indexOf(oneDay)!=-1 && p_estop.indexOf(oneDay)==-1){//固定出发日期包含,禁用日期不包含
	   						vCode=this.cal_content(vCode,j,vDay,"yes");
	   					}else{
	   						vCode=this.cal_content(vCode,j,vDay,"");
	   					}	   				
	   				}else{
	   					if(p_leaveType.indexOf(vDate.getDay())!=-1){ //出发班期
	   						if(p_estop.indexOf(oneDay)==-1){   //这一天没有禁用
	   							vCode=this.cal_content(vCode,j,vDay,"yes");
	   						}else{
	   							vCode=this.cal_content(vCode,j,vDay,"");
	   						}
	   				   	}else{//不在出发班期里
	   				   		vCode=this.cal_content(vCode,j,vDay,"");
	   				   	}	   					
	   				}	    			
	    		}else{	
    				if(p_quitDate.indexOf(oneDay)!=-1){//如果这一天是禁用的
    					vCode=this.cal_content(vCode,j,vDay,"");
    				}else{
    					vCode=this.cal_content(vCode,j,vDay,"yes");
    				}
	    		}	    		
	    	}
	    	if(fillTextFlag=="STARTDATEFLAG" || fillTextFlag=="ENDDATEFLAG"){  //入住日期或退房日期	    		
	    		vCode=this.cal_content(vCode,j,vDay,"yes");	    			    				    		
	    	}
	    }else{	    	
	    	vCode=this.cal_content(vCode,j,vDay,"");
	    }                        
        vDay = vDay + 1;
    }
    vCode = vCode + "</TR>";

    // Write the rest of the weeks
    for (k = 2; k < 7; k++) {
        vCode = vCode + "<TR bgcolor=\"#FFFFFF\">";
        for (j = 0; j < 7; j++) {
        	var oneDay=this.format_data(vDay);  //日期字符串
    		vDate.setDate(vDay);   //日期对象        	        	
        	if(compareDate(oneDay,startConDate)!=-1 && compareDate(oneDay,endConDate)!=1){  	
		    	if(fillTextFlag=="LEAVEDATEFLAG"){   //出发日期
		    		if(journeyNo=="0"){  //当为第一个行程时	    			
		   				if(p_fixed!=null && p_fixed!=""){   //固定出发日期．出发班期和固定出发日期二者只能选其一,当两者都有值时,固定出发日期优先．
		   					if(p_fixed.indexOf(oneDay)!=-1 && p_estop.indexOf(oneDay)==-1){//固定出发日期包含,禁用日期不包含
		   						vCode=this.cal_content(vCode,j,vDay,"yes");
		   					}else{
		   						vCode=this.cal_content(vCode,j,vDay,"");
		   					}	   				
		   				}else{	 
		   					if(p_leaveType.indexOf(vDate.getDay())!=-1){ //出发班期
		   						if(p_estop.indexOf(oneDay)==-1){   //这一天没有禁用
		   							vCode=this.cal_content(vCode,j,vDay,"yes");
		   						}else{
		   							vCode=this.cal_content(vCode,j,vDay,"");
		   						}
		   				   	}else{//不在出发班期里
		   				   		vCode=this.cal_content(vCode,j,vDay,"");
		   				   	}	   					
		   				}	    			
		    		}else{	 
	    				if(p_quitDate.indexOf(oneDay)==-1){//如果这一天是禁用的 
	    					vCode=this.cal_content(vCode,j,vDay,"yes");
	    				}else{ 
	    					vCode=this.cal_content(vCode,j,vDay,"");
	    				}
		    		}	    		
		    	}
		    	if(fillTextFlag=="STARTDATEFLAG" || fillTextFlag=="ENDDATEFLAG"){  //入住日期或退房日期	    		
		    		vCode=this.cal_content(vCode,j,vDay,"yes");	    			    				    		
		    	}
		    }else{
		    	vCode=this.cal_content(vCode,j,vDay,"");
		    }                        
            vDay = vDay + 1;
            if (vDay > vLastDay) {
                vOnLastDay = 1;
                break;
            }
        }
        if (j == 6)
            vCode = vCode + "</TR>";
        if (vOnLastDay == 1)
            break;
    }

    for (m = 1; m < (7 - j); m++) {
        if (this.gYearly)
            vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j + m) +
                    " align=\"center\"><FONT SIZE='2' COLOR='gray'>&nbsp;</FONT></TD>";
        else
            vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j + m) +
                    " align=\"center\"><FONT SIZE='2' COLOR='gray'>" + m + "</FONT></TD>";
    }
    return vCode;
}

Calendar.prototype.format_day = function(vday) {  //使当前日期变为红色
    var vNowDay = gNow.getDate();
    var vNowMonth = gNow.getMonth();
    var vNowYear = gNow.getFullYear();

    if (vday == vNowDay && this.gMonth == vNowMonth && this.gYear == vNowYear)
        return ("<FONT COLOR=\"red\"><B>" + vday + "</B></FONT>");
    else
        return (vday);
}

Calendar.prototype.write_weekend_string = function(vday) {　　//使礼拜六,礼拜天变成weekendColor的颜色
    var i;
    // Return special formatting for the weekend day.
    for (i = 0; i < weekend.length; i++) {
        if (vday == weekend[i])
            return (" BGCOLOR=\"" + weekendColor + "\"");
    }
    return "";
}

Calendar.prototype.format_data = function(p_day) {
    var vData;
    var vMonth = 1 + this.gMonth;
    vMonth = (vMonth.toString().length < 2) ? "0" + vMonth : vMonth;
    var vMon = Calendar.get_month(this.gMonth).substr(0, 3).toUpperCase();
    var vFMon = Calendar.get_month(this.gMonth).toUpperCase();
    var vY4 = new String(this.gYear);
    var vY2 = new String(this.gYear.substr(2, 2));
    var vDD = (p_day.toString().length < 2) ? "0" + p_day : p_day;

    switch (this.gFormat) {
        case "MM\/DD\/YYYY" :
            vData = vMonth + "\/" + vDD + "\/" + vY4;
            break;
        case "MM\/DD\/YY" :
            vData = vMonth + "\/" + vDD + "\/" + vY2;
            break;
        case "MM-DD-YYYY" :
            vData = vMonth + "-" + vDD + "-" + vY4;
            break;
        case "MM-DD-YY" :
            vData = vMonth + "-" + vDD + "-" + vY2;
            break;

        case "DD\/MON\/YYYY" :
            vData = vDD + "\/" + vMon + "\/" + vY4;
            break;
        case "DD\/MON\/YY" :
            vData = vDD + "\/" + vMon + "\/" + vY2;
            break;
        case "DD-MON-YYYY" :
            vData = vDD + "-" + vMon + "-" + vY4;
            break;
        case "DD-MON-YY" :
            vData = vDD + "-" + vMon + "-" + vY2;
            break;

        case "DD\/MONTH\/YYYY" :
            vData = vDD + "\/" + vFMon + "\/" + vY4;
            break;
        case "DD\/MONTH\/YY" :
            vData = vDD + "\/" + vFMon + "\/" + vY2;
            break;
        case "DD-MONTH-YYYY" :
            vData = vDD + "-" + vFMon + "-" + vY4;
            break;
        case "DD-MONTH-YY" :
            vData = vDD + "-" + vFMon + "-" + vY2;
            break;

        case "DD\/MM\/YYYY" :
            vData = vDD + "\/" + vMonth + "\/" + vY4;
            break;
        case "DD\/MM\/YY" :
            vData = vDD + "\/" + vMonth + "\/" + vY2;
            break;
        case "DD-MM-YYYY" :
            vData = vDD + "-" + vMonth + "-" + vY4;
            break;
        case "DD-MM-YY" :
            vData = vDD + "-" + vMonth + "-" + vY2;
            break;
        case "YYYY\/MM\/DD" :
            vData = vY4 + "\/" + vMonth + "\/" + vDD;
            break;
        case "YYYY-MM-DD" :
            vData = vY4 + "-" + vMonth + "-" + vDD;
            break;

        default :
        	//vData = vMonth + "\/" + vDD + "\/" + vY4;
            vData = vY4 + "\/" + vMonth + "\/" + vDD;
    }

    return vData;
}

function Build(p_item, p_month, p_year, p_format) {
    var p_WinCal = ggWinCal;
    gCal = new Calendar(p_item, p_WinCal, p_month, p_year, p_format);

    // Customize your Calendar here..
    gCal.gBGColor = "#D2D2D2";
    gCal.gLinkColor = "black";
    gCal.gTextColor = "black";
    gCal.gHeaderColor = "darkgreen";

    // Choose appropriate show function
    if (gCal.gYearly)    
    	gCal.showY();
    else    
    	gCal.show();
}

/*
==================出发日期调用===============================
参数说明:
lineStartDate:线路的开始日期,日期格式必须为:YYYY-MM-DD;
lineEndDate:线路的结束日期,日期格式必须为:YYYY-MM-DD;
leaveType:出发班期,各数字用,分开. eg:"1,2,3,4,5,6,7"  1为星期一,2为星期二,依此类推;(只对第一个行程的出发日期有效);
estopDate:禁用日期,每个日期的格式必须为:MM-DD,多个日期之间用,分开. eg:'05-01,05-04,05-17,05-27',
		  年份为当前年.(只对第一个行程的出发日期有效);
aheadDay:提前预定天数,数字类型,一个正整数;
fixedDate:固定出发日期．每个日期的格式必须为:MM-DD,多个日期之间用,分开. eg:'05-01,05-04,05-17,05-27',
		   年份为当前年.(只对第一个行程的出发日期有效);
inputid:行程序号,必须从0开始,程序根据此序号来确定出发日期,入住日期,退房日期的文本框的id.
*/
function show_calendar(lineStartDate,lineEndDate,leaveType,estopDate,aheadDay,fixedDate,inputid) {
	fillTextFlag="LEAVEDATEFLAG";　//根据这个标记来确定要填充的文本框

	if(lineStartDate==null || lineStartDate=="" || !datePattern.test(trim(lineStartDate))){
		alert("线路的开始日期格式不对，必须为YYYY-MM-DD样式。(show_calendar)");
		return;
	}
	if(lineEndDate==null || lineEndDate=="" || !datePattern.test(trim(lineEndDate))){
		alert("线路的结束日期格式不对，必须为YYYY-MM-DD样式。(show_calendar)");
		return;
	}
	if((leaveType==null || leaveType=="") && (fixedDate==null || fixedDate=="")){
		alert("出发班期和固定出发日期必须选其一。");
		return;
	}	
	if(leaveType!=null && leaveType!=""){
		var arr_leaveType=leaveType.split(",");
		for(var i=0;i<arr_leaveType.length;i++){
			if(isNaN(arr_leaveType[i])){
				alert("出发班期必须为数字类型。");
				return;	
			}		
		}
		p_leaveType=week_conversion(leaveType);  //星期转换
	}	
	if(fixedDate!=null && fixedDate!=""){
		var arr_fixedDate=fixedDate.split(",");
		for(var i=0;i<arr_fixedDate.length;i++){
			if(!monthDayPattern.test(trim(arr_fixedDate[i]))){
				alert("固定出发日期格式不对，必须为MM-DD样式。(show_calendar)");
				return;	
			}		
		}
		p_leaveType="";
	}	
	if(estopDate!=null && estopDate!=""){
		var arr_estop=estopDate.split(",");
		for(var i=0;i<arr_estop.length;i++){
			if(!monthDayPattern.test(trim(arr_estop[i]))){
				alert("禁用日期格式不对，必须为MM-DD样式。(show_calendar)");
				return;	
			}		
		}
	}		
	if(aheadDay==null || aheadDay==""){
		aheadDay=0;
	}
	if(isNaN(aheadDay)){
		alert("提前预定天数必须为数字类型。");
		return;
	}
	if(parseInt(aheadDay,10)<0){
		alert("提前预定天数必须为正整数。");
		return;
	}
	
	if(inputid==null || inputid==""){
		inputid="0";
	}		
	journeyNo=inputid;
	p_item = "leaveDate"+inputid;

	if(journeyNo=="0"){
		//计算开始日期
		var cur_Date=current_date();
		if(add_day(cur_Date,aheadDay)>lineStartDate){
			lineStartDate=add_day(cur_Date,aheadDay);
		}
	    startConDate = lineStartDate;
				
		//计算结束日期	
		endConDate = lineEndDate;
		//固定出发日期字符串
		p_fixed=isValidDate(startConDate,endConDate,fixedDate);
		//禁用日期字符串
		p_estop=isValidDate(startConDate,endConDate,estopDate);
	}else{
		var privEndDate=document.getElementsByName("endDate")[parseInt(inputid,10)-1].value;  //上一行程的结束日期
		if(privEndDate==null || privEndDate==""){
			return;
		}
		var p_stayNightDays=parseInt(document.getElementsByName("stayNightDays")[parseInt(inputid,10)-1].value,10);
		var p_backBusDay=parseInt(document.getElementsByName("backStayNightDays")[parseInt(inputid,10)-1].value,10);				
		//计算开始日期
		var oth_temp_sd="";		
		if(privEndDate=="1899-01-01"){  //当endDate入住日期为1899-01-01时,意为这个行程没有酒店,是在程序里硬编码的.
			oth_temp_sd=add_day(document.getElementsByName("leaveDate")[parseInt(inputid,10)-1].value,(p_stayNightDays+p_backBusDay));
		}else{
			oth_temp_sd=add_day(privEndDate,p_backBusDay);
		}
	    startConDate = oth_temp_sd;
						
		//计算结束日期
		var maxday = parseInt(document.getElementsByName("curMaxDays")[parseInt(inputid,10)-1].value,10);
		var oth_temp_ed=add_day(document.getElementsByName("leaveDate")[parseInt(inputid,10)-1].value,(p_stayNightDays+p_backBusDay+maxday));	
		endConDate = oth_temp_ed;
		
		//退房后禁用日期(已将退房后禁用班期合并到这个日期当中)
		p_quitDate=uniteWeekDate(startConDate,endConDate,document.getElementsByName("quitRoomNoDate")[parseInt(inputid,10)-1].value,document.getElementsByName("quitRoomNoWeek")[parseInt(inputid,10)-1].value);			
	}
	               
    p_month = new String(parseInt((startConDate.split("-"))[1]-1,10));
    p_year = new String((startConDate.split("-"))[0]);
    p_format = "YYYY-MM-DD";
    
    vWinCal = window.open("", "Calendar",
            "width=220,height=220,status=yes,resizable=yes,top=200,left=200");
    vWinCal.opener = self;
    ggWinCal = vWinCal;

    Build(p_item, p_month, p_year, p_format);
}

/*
==================入住日期调用===============================	
inputid:行程序号,必须从0开始,程序根据此序号来确定出发日期,入住日期,退房日期的文本框的id.
*/
function show_calendar_sd(inputid) {
	fillTextFlag="STARTDATEFLAG";　//根据这个标记来确定要填充的文本框
   	if(document.getElementsByName("leaveDate")[parseInt(inputid,10)].value==null || document.getElementsByName("leaveDate")[parseInt(inputid,10)].value==""){
   		return;
   	} 	
	if(inputid==null || inputid==""){
		inputid="0";
	}	
	journeyNo=inputid;
	p_item = "leaveDate"+inputid;
				
	var ppp_busDay=document.getElementsByName("stayNightDays")[parseInt(inputid,10)].value;
    if(ppp_busDay==null || ppp_busDay==""){
    	ppp_busDay=0;
    } 
    ppp_busDay=parseInt(ppp_busDay,10);        			    	
	//计算开始日期
	var bc_temp_sd=document.getElementsByName("leaveDate")[parseInt(inputid,10)].value;
	startConDate=add_day(bc_temp_sd,ppp_busDay);
     	  			    	
	//计算结束日期
	var minday = parseInt(document.getElementsByName("curMinDays")[parseInt(inputid,10)].value,10);
	var maxday = parseInt(document.getElementsByName("curMaxDays")[parseInt(inputid,10)].value,10);
	var bc_temp_endd=add_day(bc_temp_sd,(ppp_busDay+maxday-minday));
	//结束日期:出发日期文本框的值+最大入住天数-最小入住天数.	
	endConDate = bc_temp_endd;
   	             
    p_month = new String(parseInt((startConDate.split("-"))[1]-1,10));
    p_year = new String((startConDate.split("-"))[0]);
    p_format = "YYYY-MM-DD";
    
    vWinCal = window.open("", "Calendar",
            "width=220,height=220,status=yes,resizable=yes,top=200,left=200");
    vWinCal.opener = self;
    ggWinCal = vWinCal;

    Build(p_item, p_month, p_year, p_format);
}

/*
==================退房日期调用===============================	
inputid:行程序号,必须从0开始,程序根据此序号来确定出发日期,入住日期,退房日期的文本框的id.
*/
function show_calendar_endd(inputid) {
	fillTextFlag="ENDDATEFLAG";　//根据这个标记来确定要填充的文本框
	if(document.getElementsByName("startDate")[parseInt(inputid,10)].value==null || document.getElementsByName("startDate")[parseInt(inputid,10)].value==""){
   		return;
   	} 
	if(inputid==null || inputid==""){
		inputid="0";
	}
		
	journeyNo=inputid;	
	p_item = "leaveDate"+inputid;
	
	var ppp_busDay=document.getElementsByName("stayNightDays")[parseInt(inputid,10)].value;
    if(ppp_busDay==null || ppp_busDay==""){
    	ppp_busDay=0;
    } 
    ppp_busDay=parseInt(ppp_busDay,10);   //交通上停留天数
    	
	//计算开始日期
	var minday = parseInt(document.getElementsByName("curMinDays")[parseInt(inputid,10)].value,10);	
	startConDate=add_day(document.getElementsByName("startDate")[parseInt(inputid,10)].value,minday);
		
	//计算结束日期
	var maxday = parseInt(document.getElementsByName("curMaxDays")[parseInt(inputid,10)].value,10);
	var endd_temp_end=add_day(document.getElementsByName("leaveDate")[parseInt(inputid,10)].value,(maxday+ppp_busDay));
	//退房日期:出发日期文本框的值+最大入住天数.		
	endConDate = endd_temp_end;
                
    p_month = new String(parseInt((startConDate.split("-"))[1]-1,10));
    p_year = new String((startConDate.split("-"))[0]);
    p_format = "YYYY-MM-DD";
    
    vWinCal = window.open("", "Calendar",
            "width=220,height=220,status=yes,resizable=yes,top=200,left=200");
    vWinCal.opener = self;
    ggWinCal = vWinCal;

    Build(p_item, p_month, p_year, p_format);   
}
/*
退房后禁用日期,退房后禁用班期合并成日期字符串
参数:
startConDate:字符串，本行程出发日期范围的开始日期
endConDate:字符串，本行程出发日期范围的结束日期
vdate:字符串,退房后禁用日期(上一行程的)
vweek:字符串,退房后禁用班期(上一行程的)
*/
function uniteWeekDate(startConDate,endConDate,vdate,vweek){
	if(startConDate==null || startConDate=="" || !datePattern.test(trim(startConDate))){
		alert("日期格式不对，必须为YYYY-MM-DD样式。(uniteWeekDate)");
		return;
	}
	if(endConDate==null || endConDate=="" || !datePattern.test(trim(endConDate))){
		alert("日期格式不对，必须为YYYY-MM-DD样式。(uniteWeekDate)");
		return;
	}
	var strDate=isValidDate(startConDate,endConDate,vdate);
	var strWeek=week_conversion(vweek);
	while(compareDate(startConDate,endConDate)!=1){  //startConDate<=endConDate
		var d1=new Date(startConDate.replace("-","\/"));
		if(strWeek.indexOf(d1.getDay())!=-1){  
			if(strDate.indexOf(startConDate)==-1) //在strDate中不包含startConDate时
				strDate+=startConDate+",";
		}	
		startConDate=add_day(startConDate,1);				
	}
	return strDate;
}
/*
两个日期比较大小
参数:
fristDate:第一个日期
secondDate:第二个日期
*/
function compareDate(fristDate,secondDate){
	if(fristDate==null || fristDate=="" || !datePattern.test(trim(fristDate))){
		alert("日期格式不对，必须为YYYY-MM-DD样式。(compareDate)");
		return;
	}
	if(secondDate==null || secondDate=="" || !datePattern.test(trim(secondDate))){
		alert("日期格式不对，必须为YYYY-MM-DD样式。(compareDate)");
		return;
	}			
	if(fristDate>secondDate) return 1;
	else if(fristDate==secondDate) return 0;
	else return -1;

}
/*
当前日期的YYYY-MM-DD格式．
*/
function current_date(){  
	var now1 = new Date();
    var yy1 = now1.getYear();
    var mm1 = now1.getMonth()+1;
    if(mm1<10)
      	mm1 = "0"+mm1.toString();
   	var dd1 = now1.getDate();
    if(dd1<10)
      	dd1 = "0"+dd1.toString();
  	return yy1+"-"+mm1+"-"+dd1;
}
/*
一个日期p_date加上p_day天后的日期,返回的是YYYY-MM-DD的字符串．
*/
function add_day(p_date,p_day){
	if(p_date==null || p_date=="" || !datePattern.test(trim(p_date))){
		alert("日期格式不对，必须为YYYY-MM-DD样式。(add_day)");
		return;
	}
	if(p_day==null || p_day==""){
		p_day=0;
	}
	if(isNaN(p_day)){
		return;
	}
	var new_Date = new Date(p_date.replace("-","\/"));   	     	
   	var lIntval = parseInt(p_day,10)//间隔
 	new_Date.setDate(new_Date.getDate() + lIntval)
   	       
	var yy1 = new_Date.getYear();
    var mm1 = new_Date.getMonth()+1;
    if(mm1<10)
      	mm1 = "0"+mm1.toString();
   	var dd1 = new_Date.getDate();
    if(dd1<10)
      	dd1 = "0"+dd1.toString();
   	return yy1+"-"+mm1+"-"+dd1;           	
}

/*
传入一个出发班期的数组,作用:星期数转换.
*/
function week_conversion(jj){   
	if(jj==null || trim(jj)==""){
		return "";
	}
	var arrWeek=jj.split(",");
	for(var i=0;i<arrWeek.length;i++){
		if(isNaN(arrWeek[i])){
			alert("班期必须为数字类型。");
			return;			
		}
	}	
	return jj.replace("7","0");
}
/*
将MM-DD样式的日期转换成YYYY-MM-DD样式的日期,年份为开始日期到结束日期的有效年份.
参数:
startDate:开始日期
endDate:结束日期
fixedStr:字符串,MM-DD样式的日期
*/
function isValidDate(startDate,endDate,fixedStr){
	if(startDate==null || startDate=="" || !datePattern.test(trim(startDate))){
		alert("日期格式不对，必须为YYYY-MM-DD样式。(isValidDate)");
		return;
	}
	if(endDate==null || endDate=="" || !datePattern.test(trim(endDate))){
		alert("日期格式不对，必须为YYYY-MM-DD样式。(isValidDate)");
		return;
	}
	if(fixedStr==null || trim(fixedStr)==""){
		return "";
	}else{		
		var fixedArr=fixedStr.split(",");
		for(var i=0;i<fixedArr.length;i++){
			if(!monthDayPattern.test(trim(fixedArr[i]))){
				alert("日期格式不对，必须为MM-DD样式。(isValidDate)");
				return;	
			}		
		}		
		var starts = startDate.split("-");
		var startVDYear = parseInt(starts[0],10);
		var endss = endDate.split("-");
		var endVDYear = parseInt(endss[0],10);
		
		var fixedValid="";	
		for(var i=startVDYear;i<=endVDYear;i++){
			if(fixedArr.length>0){
				for(var j=0;j<fixedArr.length;j++){
					var fixedTemp=i+"-"+fixedArr[j];
					if(compareDate(fixedTemp,startDate)!=-1 && compareDate(fixedTemp,endDate)!=1 ){  //startDate<=fixedTemp<=endDate时
						fixedValid += fixedTemp+",";
					}							
				}
			}									
		}
		return fixedValid;			
	}								
}
/*
点击日期时的onclick事件.
*/
function control_txt(currentDate){
	if(fillTextFlag=="LEAVEDATEFLAG"){
		var txt_p_leaveDate=document.getElementsByName("leaveDate")[parseInt(journeyNo,10)];
		var txt_p_startDate=document.getElementsByName("startDate")[parseInt(journeyNo,10)];
		var txt_p_endDate=document.getElementsByName("endDate")[parseInt(journeyNo,10)];
		
		if(txt_p_leaveDate!=null){
			document.getElementsByName("leaveDate")[parseInt(journeyNo,10)].value=currentDate;
			document.getElementsByName("leaveDate")[parseInt(journeyNo,10)].focus();
		}
		if(txt_p_startDate!=null && document.getElementsByName("startDate")[parseInt(journeyNo,10)].value!="1899-01-01"){
			document.getElementsByName("startDate")[parseInt(journeyNo,10)].value=add_day(currentDate,document.getElementsByName("stayNightDays")[parseInt(journeyNo,10)].value);
		}
		if(txt_p_endDate!=null && document.getElementsByName("endDate")[parseInt(journeyNo,10)].value!="1899-01-01"){
			document.getElementsByName("endDate")[parseInt(journeyNo,10)].value="";
		}	
		
		if(journeyNo=="0"){
			var stayNightDaysObj=document.getElementsByName("stayNightDays");
			var backStayNightDaysObj=document.getElementsByName("backStayNightDays");
			var curMinDaysObj=document.getElementsByName("curMinDays");
			var curMaxDaysObj=document.getElementsByName("curMaxDays");
			
			var leaveDateObj=document.getElementsByName("leaveDate");
			var startDateObj=document.getElementsByName("startDate");	
			var endDateObj=document.getElementsByName("endDate");
			
			var leaveDateImgObj=document.getElementsByName("leaveDateImg");
			var startDateImgObj=document.getElementsByName("startDateImg");
			var endDateImgObj=document.getElementsByName("endDateImg");
			
			if(curMinDaysObj!=null && curMaxDaysObj!=null){   //先清空所有文本框的值
				if(leaveDateObj[0].value!=currentDate){
					for(var i=0;i<leaveDateObj.length;i++){
						if(leaveDateObj[i]!=null ){
							leaveDateObj[i].value="";
						}
						if(startDateObj[i]!=null && startDateObj[i].value!="1899-01-01"){
							startDateObj[i].value="";
						}
						if(endDateObj[i]!=null && endDateObj[i].value!="1899-01-01"){
							endDateObj[i].value="";
						}
					}
				}
				var equalsCurrentDate=currentDate;
				for(var i=0;i<curMinDaysObj.length;i++){
					if(trim(endDateObj[i].value)!="1899-01-01"){ //当startDate入住日期为1899-01-01时,意为这个行程没有酒店,是在程序里硬编码的.
						if(curMinDaysObj[i].value!=null && trim(curMinDaysObj[i].value)!="" && trim(curMinDaysObj[i].value)==trim(curMaxDaysObj[i].value)){ 
							if(leaveDateObj[i]!=null){
								leaveDateObj[i].value=equalsCurrentDate;
								if(i!=0){
									leaveDateImgObj[i].style.display="none";
								}
							}
							if(stayNightDaysObj[i].value!=null && trim(stayNightDaysObj[i].value)!=""){
								if(startDateObj[i]!=null){
									startDateObj[i].value=add_day(leaveDateObj[i].value,stayNightDaysObj[i].value);	
									startDateImgObj[i].style.display="none";
								}
							}
							if(endDateObj[i]!=null){
								endDateObj[i].value=add_day(startDateObj[i].value,curMaxDaysObj[i].value);
								endDateImgObj[i].style.display="none";
							}
							
							if(backStayNightDaysObj[i].value!=null && trim(backStayNightDaysObj[i].value)!=""){
								equalsCurrentDate=add_day(endDateObj[i].value,backStayNightDaysObj[i].value);						
							}
						}else{ //如果下一个行程有酒店,但最大最小停留天数不相等.						
							if(leaveDateObj[i]!=null){
								leaveDateObj[i].value=equalsCurrentDate;
								//if(i!=0){
									//leaveDateImgObj[i].style.display="none";
								//}
							}													
							break;
						}
					}else{ //如果下一个行程没有酒店.					
						if(leaveDateObj[i]!=null){														
							leaveDateObj[i].value=equalsCurrentDate;							
							if(i!=0){
								leaveDateImgObj[i].style.display="none";
							}
						}												
						leaveDateObj[i].value=equalsCurrentDate;
						equalsCurrentDate=add_day(equalsCurrentDate,backStayNightDaysObj[i].value);
						equalsCurrentDate=add_day(equalsCurrentDate,stayNightDaysObj[i].value);
						//break;
					}
				}
			}
		}			
	}							
	if(fillTextFlag=="STARTDATEFLAG"){		
		var ff_p_startDate=document.getElementsByName("startDate")[parseInt(journeyNo,10)];
		if(ff_p_startDate!=null){
			document.getElementsByName("startDate")[parseInt(journeyNo,10)].value=currentDate;
		}
		var ff_p_endDate=document.getElementsByName("endDate")[parseInt(journeyNo,10)];
		if(ff_p_endDate!=null){
			document.getElementsByName("endDate")[parseInt(journeyNo,10)].value=add_day(currentDate,document.getElementsByName("curMinDays")[parseInt(journeyNo,10)].value);
		}
	}
	if(fillTextFlag=="ENDDATEFLAG"){
		var et_p_endDate=document.getElementsByName("endDate")[parseInt(journeyNo,10)];
		if(et_p_endDate!=null){
			document.getElementsByName("endDate")[parseInt(journeyNo,10)].value=currentDate;
		}
				
		var txtld=document.getElementsByName("leaveDate")[parseInt(journeyNo,10)+1];						
		if(txtld!=null){			
    		var hidBackStayNightDays=document.getElementsByName("backStayNightDays")[parseInt(journeyNo,10)].value;
    		if(hidBackStayNightDays==null || hidBackStayNightDays==""){
    			hidBackStayNightDays=0;
    		}
    		    		    		    		
    		//当填入到下一行程的出发日期刚好禁用时，不应自动填入，而让其为空
    		var p_backBusDay=parseInt(hidBackStayNightDays);
    		var st_date=add_day(currentDate,p_backBusDay);
    		    						
    		//计算结束日期
    		var p_stayNightDays=parseInt(document.getElementsByName("stayNightDays")[parseInt(journeyNo,10)].value,10);
    		var maxday = parseInt(document.getElementsByName("curMaxDays")[parseInt(journeyNo,10)].value,10);
    		var ed_date=add_day(document.getElementsByName("leaveDate")[parseInt(journeyNo,10)].value,(p_stayNightDays+p_backBusDay+maxday));	    		
    		    		
    		var invalid_date=uniteWeekDate(st_date,ed_date,document.getElementsByName("quitRoomNoDate")[parseInt(journeyNo,10)].value,document.getElementsByName("quitRoomNoWeek")[parseInt(journeyNo,10)].value);    		
    		if(invalid_date.indexOf(st_date)==-1){ //如果禁用日期里没有计算后要填入的日期时，则填入   		
    			document.getElementsByName("leaveDate")[parseInt(journeyNo,10)+1].value=st_date;
    		}else{
    			document.getElementsByName("leaveDate")[parseInt(journeyNo,10)+1].value="";
    		}	    													
    	}    	    							
	}
	if(ggWinCal && ggWinCal.open && !ggWinCal.closed){
		ggWinCal.close();
	}
}










