/*****global variables*******/

var pInputMonth;
var pInputDay;
var pInputYear;
var today = new Date();
var year = javaYear;
var month = javaMonth;
var inputDateField;
var inputDate;
var defaultDate;
var vertical;
var pInputMonth;
var pInputDay;
var pInputYear;
var tInputMonth;
var tInputDay;
var tInputYear;
var calShim;
var kCal;
var kCalShim;
var defaultDateString = 'mm/dd/yy';
var pkId = "";
var pkJsMOver = " ";
var pkJsMOut = " ";
var pkJsOnClick = " ";
var foo = true; //debugging var
// Utilities functions

function stopBubble(e) {
    if(e.stopPropagation) {
        e.stopPropagation();
    } else {
        e.cancelBubble = true;
    }
}

function killAllCalendars() {
    // The max number of calendars can exist in one page is 12
    var num = 12;
    for(i = 1; i < num; i++) {
        kCal = "cal"+i;
        kCalShim = "cal"+i+"Shim";
        setVisible(false,"cal"+i, "cal"+i+"Shim");
    }
}

function parseToDoubleDigit(number) {
    return (number < 10) ? '0' + number : number;
}

function parseToSingleDigit(number) {
    var str = '' + number;
    return str = str.replace(/^0+/g, '');
}

function getAllDaysInMonth(month)  {
	var days;
    var year = (month >= javaMonth) ? javaYear : javaYear + 1;
	if (month==0 || month==2 || month==4 || month==6 || month==7 || month==9 || month==11)  { days=31; }
    else if (month==3 || month==5 || month==8 || month==10) { days=30; }
    else if (month==1)  {
        if (isThisLeapYear(year)) { days=29; }
        else { days=28; }
    }
    return (days);
}

function isThisLeapYear (Year) {
	if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) { return (true); }
    else { return (false); }
}

function parseDate(dateString){
    
    /****utitility and subfunctions*******/
    function trim(sString){
    	var re1 = /\s{2,10}/g;  //precompile reg ex's for performance
    	sString = sString.replace(re1, ' ');
    	while(sString.substring(0,1) == ' '){
    	sString = sString.substring(1, sString.length);
    	}
    	while(sString.substring(sString.length-1, sString.length) == ' '){
    	sString = sString.substring(0,sString.length-1);
    	}
    
    return sString;
    }
    /******/
    
    function delimit(sString){
    	var thisString;
    	var re1 = /,\s/g;
    	var re2 = /([|]|[.]|[,]|[;]|[\s]|[\/])/g; //BUG: ugly, but mozilla has problems with some character class formations 
    	thisString = sString.replace(re1, ',');
    	thisString = thisString.replace(re2, '|');
    	thisString = thisString.toLowerCase();
    	
    	return thisString;
    }
    
    /*****/
    function convertMonthAbbreviation(inputString){
    	var alphaMonth;
    	var numericMonth;
    	var numericString;
    	var re1 = /^[a-zA-Z]*/;
    	var re2 = /^[a-zA-Z]{3}/;
    	var alphaMonthArray = new Array("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec" );
    	
        if(inputString.length < 3) return;
    	if(inputString.match(re1)){
    	alphaMonth = inputString.match(re2);
    		for(i=0;i<alphaMonthArray.length;i++){
    			if(alphaMonth == alphaMonthArray[i]) {
    			numericMonth = i + 1;
    			numericString = inputString.replace(re1, numericMonth);
    			return numericString;
    			}
    		}
    	}
    }
    /*****/
    function matchPattern(sString){
    	var normString = sString;
    	var normStringTwo = sString;
    	var testPattern =  /^(\d{1,2})([|]\d{1,2})([|](\d{2}){1,2})?$/i;//check if input conforms to allowed input patterns
        var re2 = /^([a-zA-z])/;
            
    	if(normString.match(re2)){
    	    normStringTwo = convertMonthAbbreviation(normString);
    	} 
        
        if(normStringTwo.match(testPattern)) {
    	    return normStringTwo;
        }
        
        return;
    }
    /****************Main Function-Accepts initial Inputs*****************************/
    function parseDateMain(dateString){
    	var inputString;
    	var normString;
    	var normStringTwo;
    	
    	inputString = trim(dateString);
    	normString = delimit(inputString);
    	normStringTwo = matchPattern(normString);
    	setDateInputs(normStringTwo);
    
    }
    /****Output Function***/
    
    function setDateInputs(dateString){
    	var re1 = "|";
    	
    	if(dateString != null){
    	var dateTokenArray = dateString.split(re1);//tokenize input into array
    		 pInputMonth = dateTokenArray[0];
    		 pInputDay = dateTokenArray[1];
    		 pInputYear = dateTokenArray[2];
    	}else{
    	    return;
    	}
    }
    
    parseDateMain(dateString);
}


function processMonth(startMonthField,endMonthField) {
	endMonthField.selectedIndex = startMonthField.selectedIndex;
}

function process(num,cal) {

	if(num == -1) {
		if(month == 0) {
			month = 11;
			year--;
			today.setFullYear(year);
		}
		else { month--; }
	}
	if(num == 1) {
		if(month == 11) {
			month = 0;
			year++;
			today.setFullYear(year);
		}
		else { month++; }
	}
	// month set twice for bug #10002
	today.setMonth(month);
    today.setMonth(month);
	writeCalendar(cal);
}

function returnMonth(thismonth) {
	monthArray = new Array('JANUARY', 'FEBRUARY', 'MARCH', 'APRIL', 'MAY', 'JUNE','JULY', 'AUGUST', 'SEPTEMBER', 'OCTOBER', 'NOVEMBER', 'DECEMBER');
	return monthArray[thismonth];
}

function setVisible(state,sCal,sCalShim) {

    if(!state) {
        sCal = kCal;
        sCalShim = kCalShim;
    }
    if(document.getElementById(sCal)) {
        var divRef = document.getElementById(sCal);
    } else { return; }
    if(document.getElementById(sCalShim)) {
        var ifrRef = document.getElementById(sCalShim);
    } else { return; }
    if(state) {
        divRef.style.display = "block";
        ifrRef.style.width = divRef.offsetWidth;
        ifrRef.style.height = divRef.offsetHeight;
        ifrRef.style.top = divRef.style.top;
        ifrRef.style.left = divRef.style.left;
        ifrRef.style.zIndex = divRef.style.zIndex - 1;
        ifrRef.style.display = "block";
        ifrRef.onClick = true;
    } else { 
        divRef.style.display = "none";
        ifrRef.style.display = "none";
    }
}

function closeCalendar(cCal, cCalShim) {
    kCal = cCal;
    kCalShim = cCalShim;
    setVisible(false);
}

function setField(userDateField,userDate) {
    // First off, lets kill all calendars if any.
        killAllCalendars();
		inputDateField = userDateField;
    inputDate = userDate;

    var dToday = today;
    defaultDate = dToday.getMonth()+1+'/'+dToday.getDate()+'/'+javaYear;

    if (inputDate == defaultDateString) {
			inputDate = defaultDate;
    } else if (inputDate.length < 1) {
        inputDate = defaultDate;
    }
    
    try {
        parseDate(inputDate);
    } catch(e) {
        parseDate(defaultDate);
    }
    
    if (parseToSingleDigit(pInputMonth) > 12) {
        parseDate(defaultDate);
    }
    
    tInputMonth =  parseToSingleDigit(pInputMonth);
    tInputDay = parseToSingleDigit(pInputDay);
    tInputYear = ((pInputYear.length <= 2) ? '20' + pInputYear : pInputYear);

    month = tInputMonth - 1;
    today.setMonth(month);
    year = tInputYear;
    today.setFullYear(year);
}

function returnDate(inDay,cal) {
	var thisDay = inDay;
	var thisMonth = month + 1;
  var thisYear = year;
  var thisYearString = '' + thisYear;
  inputDateField.value = parseToDoubleDigit(thisMonth) + '/' + parseToDoubleDigit(thisDay) + '/' + (thisYear);
	closeCalendar(cal, calShim);
}

function writeCalendar(cal) {
//alert(vertical);
  calShim = cal + "Shim";
	cellHeight = '18';
	blankColumn = "<td height=" + cellHeight + " class='clickableDays'>&nbsp;</td>"
	tableOutput = "<table cellpadding='0' cellspacing='0' border='0' width='150'><tr><td colspan='7'><img src='images/spacer.gif' width='1' height='1' border='0'></td></tr><tr><td align='center' bgcolor='#EFEFEF' class='weekdays'>S</td><td align='center' bgcolor='#EFEFEF' class='weekdays'>M</td><td align='center' bgcolor='#EFEFEF' class='weekdays'>T</td><td align='center' bgcolor='#EFEFEF' class='weekdays'>W</td><td align='center' bgcolor='#EFEFEF' class='weekdays'>T</td><td align='center' bgcolor='#EFEFEF' class='weekdays'>F</td><td align='center' bgcolor='#EFEFEF' class='weekdays'>S</td></tr><tr align='right'>"

 	var days = getAllDaysInMonth(month);
	var firstOfMonth = new Date (year, month, 1);
	var startingPos  = firstOfMonth.getDay();
	days += startingPos;
	var columnCount = 0;

	for (i = 0; i < startingPos; i++) {
		tableOutput += blankColumn;
		columnCount++;
    }

	var currentDay = 0;
   	for (i = startingPos; i < days; i++) {
		currentDay = i-startingPos+1;
		var pStyle = " ";
        var pStyleCode = " ";
        var sltdDt = " ";
		var sltdDtA= " ";

		var pkMonth = parseToDoubleDigit(month + 1); //modify date segments for peak date id's
		var pkCurrentDay;
		pkCurrentDay = parseToDoubleDigit(currentDay);
		year = "" + year;  //javascript internal bug; force type to year
		        
        if(month + 1 == tInputMonth && (currentDay == tInputDay)) { sltdDt = "style=\"border:1px solid #9CADBD; background-color:#FFEF9C;\""
     sltdDtA="style=\"background-color:#FFEF9C;\""
 } 

		var verticalDate = javaDate;
		
        var nonClickableDayString = "<td height=" + cellHeight + " align='center' " + pkJsMOver + pkJsMOut + pkJsOnClick + " onmouseout='javascript:hideLayer(\"pkDayDtls\");' class='nonclickableDays " + pStyleCode + "' " + ">" + currentDay + "</td>";

        var clickableDayString = "<td height=" + cellHeight + " align='center' " + pkJsMOver + pkJsMOut + pkJsOnClick + " class='clickableDays " +  pStyleCode +  "' " + " id='" + pkId + "' " + sltdDt + "><a href='javascript:returnDate(" + currentDay + ",\"" + cal + "\");' class='clickableDays " + pStyleCode + "' " + " id=' " + pkId   + "' " + sltdDtA + ">" + currentDay + "</a></td>"
tableOutput += clickableDayString;
//alert (nonClickableDayString);
//alert(clickableDayString);
//For Past Purchase vertical we have to show the previous/past date, the below check is done for that.
//        if(vertical != 'pastpurchase') {
//		if (month <= javaMonth && year == javaYear) {
//            if (month == javaMonth && currentDay >= verticalDate) {//
//				tableOutput += clickableDayString;
//			} else {
//				tableOutput += nonClickableDayString;
//			}
//		} else if (year >= javaLimitYear) {
 //           if ((month > javaLimitMonth) || (month == javaLimitMonth && currentDay >= javaLimitDate) || (year > javaLimitYear)){
//                tableOutput += nonClickableDayString;
//            } else {
//                tableOutput += clickableDayString;
//            }
//        } else if (year < javaYear) {
//            tableOutput += nonClickableDayString;
//		} else {
 //           tableOutput += clickableDayString;
  //      }
//         } else {
 //               tableOutput += clickableDayString;
//         }

		columnCount++;
		if (columnCount % 7 == 0) {
            tableOutput += "</tr><tr align='center'>";
        }
    }

	for (i=days; i<42; i++)  {
		tableOutput += blankColumn;
		columnCount++;

        if (columnCount % 7 == 0) {
            tableOutput += "</tr>";
            if (i<41) {
                tableOutput += "<tr align='center'>";
            }
        }
    }

var leftarrow;
var rightarrow;


//if(vertical == 'pastpurchase') {
    //Show left arrow of the calendar as the customer can go and check any past dates for past purchase vertical
    leftarrow="<a href='javascript:process(-1,\"" + cal + "\")'><img src='/iworq/include/Calendar/images/left.gif' width='11' height='17' border='0'></a>"
//}
//else {
//    if(month==javaMonth && year==javaYear) leftarrow="<img src='/iworq/include/Calendar/images/spacer.gif' width='11' height='17' border='0'>"
//    else leftarrow="<a href='javascript:process(-1,\"" + cal + "\")'><img src='/iworq/include/Calendar/images/left.gif' width='11' height='17' border='0'></a>"

//}

//Show right arrow of the calendar as the customer can go and check any future dates for past purchase vertical
if(vertical == 'pastpurchase') {
    rightarrow="<a href='javascript:process(1,\"" + cal + "\")'><img src='/iworq/include/Calendar/images/right.gif' width='11' height='17' border='0'></a>"
}
else {
    //if((month==javaMonth-1) && (year==javaYear+1)) rightarrow="<img src='/iworq/include/Calendar/images/spacer.gif' width='11' height='17' border='0'>"
    //else 
    rightarrow="<a href='javascript:process(1,\"" + cal + "\")'><img src='/iworq/include/Calendar/images/right.gif' width='11' height='17' border='0'></a>"
}


tableOutput += "</table>";
monthOutput = "<table width='154' cellspacing='0' cellpadding='0' border='0' bgcolor='#FFFFFF'><tr><td bgcolor='#333333' colspan='5'><img src='/iworq/include/Calendar/images/spacer.gif' width='1' height='1' border='0'></td></tr><tr><td bgcolor='#333333'><img src='/iworq/include/Calendar/images/spacer.gif' width='1' height='1' border='0'></td><td bgcolor='#FFFFFF'><img src='/iworq/include/Calendar/images/spacer.gif' width='1' height='1' border='0'></td><td><img src='/iworq/include/Calendar/images/spacer.gif' width='150' height='1' border='0'><br /><table cellpadding='0' cellspacing='0' border='0' width='150' bgcolor='#9CADBD'><tr><td bgcolor='#9CADBD' height='15' valign='top'>" + leftarrow + "</td><td align='center' valign='middle' class='months' bgcolor='#9CADBD'>" + returnMonth(month) + " " + year + "</td><td align='right' bgcolor='#9CADBD' valign='top'>" + rightarrow + "</td></tr></table>";

//var offPeakImage = "<img src='/iworq/include/Calendar/images/offPeakMes.gif' width='130' height='38' border='0'>";
//var peakImage = "<img src='/iworq/include/Calendar/images/peakMes.gif' width='130' height='38' border='0'>";
//disclaimerImage = ((month==0 || month==4 || month==6 || month==7 || month==8 || month==10 || month==11) ? peakImage : offPeakImage);
//if(vertical == 'hotels') { disclaimerImage = "<img src='/iworq/include/Calendar/images/hotelDisclaim.gif' width='130' height='38' border='0'>"; }
//else if(vertical == 'cars') { disclaimerImage = "<img src='/iworq/include/Calendar/images/carDisclaim.gif' width='130' height='38' border='0'>"; }
//else if(vertical == 'pastpurchase') { disclaimerImage = ""; }
bottom = "<table width='150' cellspacing='0' cellpadding='0' border='0'><tr><td bgcolor='#333333' colspan='2'><img src='/iworq/include/Calendar/images/spacer.gif' width='1' height='1' border='0'></td></tr><tr><td align='center' valign='bottom'></td><td align='right' valign='bottom'><a href='javascript:closeCalendar(\"" + cal + "\",\"" + calShim + "\")'><img src='/iworq/include/Calendar/images/close.gif' width='16' height='12' border='0'></a><br /><img src='/iworq/include/calendar/images/spacer.gif' width='1' height='2' border='0' /></td></tr></table></td><td bgcolor='#FFFFFF'><img src='/iworq/include/Calendar/images/spacer.gif' width='1' height='1' border='0'></td><td bgcolor='#333333'><img src='/iworq/include/Calendar/images/spacer.gif' width='1' height='1' border='0'></td></tr><tr><td bgcolor='#333333' colspan='5'><img src='/iworq/include/Calendar/images/spacer.gif' width='1' height='1' border='0'></td></tr></table>";
tableOutput = (monthOutput + tableOutput) + bottom;
    
    document.getElementById(cal).innerHTML=tableOutput;
    setVisible(true,cal,calShim);

}


