﻿var openedTextID=null;
function validateField(dateString,formatDate)
{
return dateCheck(dateString,formatDate);
}
function OnChange()
{
var sId=event.srcElement.id;
var sProp=event.propertyName;
if(event.propertyName=="value"&&event.srcElement.CalledBy=="SelectDay")
{
if(event.srcElement.value!="mm/dd/yy")
{
ValidateDates(event.srcElement,new Object());
}
}
}
function ValidateDates(element,args)
{
var elementFrom,elementTo;
var sDate=element.value;
element.setAttribute("CalledBy","");
if(sDate==""||validateField(sDate,document.formatDate))
{
args.IsValid=true;
if(element.getAttribute("To"))
{
elementFrom=element;
var toId=element.getAttribute("To");
elementTo=document.getElementById(toId)||document.getElementById(toId);
if(elementTo.getAttribute('disabled'))
{
elementTo.removeAttribute('disabled');
if(elementTo.getAttribute("IsMasterLevel").toLowerCase()=="true")
{
elementTo.setAttribute('className','dateSetUpField');
}
else
{
elementTo.setAttribute('className','dateField');
}
}
if(elementFrom.value=="")
{
elementTo.value="";
elementTo.setAttribute('disabled','disabled');
if(elementTo.getAttribute("IsMasterLevel").toLowerCase()=="true")
{
elementTo.setAttribute('className','dateSetUpField  disabledDateField');
}
else
{
elementTo.setAttribute("className","dateField disabledDateField");
}
}
}
if(element.getAttribute("From"))
{
elementFrom=document.getElementById(element.getAttribute("From"));
if(!elementFrom){elementFrom=document.getElementById(element.getAttribute("From"));}
elementTo=element;
}
args.To=elementTo.value;
args.From=elementFrom.value;
if(!compareTwoDates(elementFrom.value,elementTo.value,document.formatDate))
{
args.IsValid=false;
element.style.color="red";
element.value="mm/dd/yy";
}
else
{
args.IsValid=true;
element.style.color="black";
}
}
else
{
args.IsValid=false;
element.style.color="red";
element.value="mm/dd/yy";
if(element.getAttribute("To"))
{
elementFrom=element;
elementTo=document.getElementById(element.getAttribute("To"));
if(!elementTo){elementTo=document.getElementById(element.getAttribute("To"));}
elementTo.value="";
elementTo.setAttribute('disabled','disabled');
if(elementTo.getAttribute("IsMasterLevel").toLowerCase()=="true")
{
elementTo.setAttribute("className","dateSetUpField disabledDateField");
}
else
{
elementTo.setAttribute("className","dateField disabledDateField");
}
}
}
if(args.IsValid&&(element.getAttribute("ToBeUpdatedByAjax")))
{
document.startDate=args.From;
document.endDate=args.To;
TripCart.AjaxMethods.UpdateTripCartDateSettings(args.From,args.To);
}
return args.IsValid;
}
function compareTwoDates(fromDate,toDate,formatDate)
{
if(fromDate!=""&&toDate!=""&&fromDate!="mm/dd/yy"&&toDate!="mm/dd/yy")
{
var dateFromDate=buildDate(fromDate,formatDate);
var dateToDate=buildDate(toDate,formatDate);
if(dateFromDate<=dateToDate)
{
return true;
}
else
{
return false;
}
}
else
{
return true;
}
}
function ShowCalendar(ev,id)
{
closeReminderDlg();
var iFrameCont=window.frameElement;
var el,divDatePicker,curDocument,parentDoc,posX,posY,iFrPosX=0,iFrPosY=0;
if(iFrameCont){
el=iFrameCont.parentNode;
parentDoc=el.ownerDocument;
iFrPosX=findPosX(iFrameCont.id,parentDoc);
iFrPosY=findPosY(iFrameCont.id,parentDoc);
}else{
parentDoc=document;
}
divDatePicker=parentDoc.getElementById('divDatePicker');
var frmDatePicker=parentDoc.getElementById("frmDatePicker");
var startDate=parentDoc.startDate;
var endDate=parentDoc.endDate;
var element=document.getElementById(id);
var elementFrom=null;
var elementTo=null;
var isFromField=null;
var isToField=null;
var to=element.getAttribute("To",0);
var from=element.getAttribute("From",0);
if(to)
{
elementFrom=element;
elementTo=document.getElementById(to);
isFromField=true;
isToField=false;
}
if(from)
{
elementFrom=document.getElementById(from);
elementTo=element;
isFromField=false;
isToField=true;
}
frmDatePicker.src="Picker.aspx?txtID="+id+
"&pnlID=divDatePicker"+
"&startDate="+startDate+
"&endDate="+endDate+
"&fromDate="+elementFrom.value+
"&toDate="+elementTo.value+
"&currentDate="+element.value+
"&isMasterLevel="+element.getAttribute("IsMasterLevel")+
"&isFromField="+isFromField+
"&isToField="+isToField;
posX=findPosX(id,document);
if(ev)
posY=ev.clientY;
else
posY=findPosY(id,document)+10;
divDatePicker.style.left=posX+iFrPosX-10+"px";
divDatePicker.style.top=posY+iFrPosY+10+"px";
divDatePicker.style.display="block";
var firstTime=true;
parentDoc.onclick=function(ev){
var el;
if(ev){
el=ev.target;
}else{
if(window.event){
el=window.event.srcElement;
}else if(window.ie){
if(parentDoc.parentWindow.event)
el=parentDoc.parentWindow.event.srcElement;
}
}
for(;el!=null&&el!=divDatePicker;el=el.parentNode);
if(el==null&&!firstTime){
hideDiv('divDatePicker');
parentDoc.onclick="";
}
firstTime=false;
}
divDatePicker.style.display="block";
}
function hideDiv(id){
var div=document.getElementById(id);
if(div==null)
{
div=this.parent.document.getElementById(id);
}else{
document.onclick="";
}
div.style.display="none";
}
function SetDisabled()
{
var arrElements=GetElementsByAttributes("input","From");
for(var i=0;i<arrElements.length;i++)
{
var obj=arrElements[i];
if(obj!=null)
{
if(obj.value==""&&document.getElementById(obj.getAttribute("From")).value=="")
{
obj.setAttribute("className",obj.className+" disabledDateField");
obj.setAttribute("disabled","disabled");
}
}
}
}
var tokPat=new RegExp("^month_strict|month|Month|MONTH|yyyy|YYYY|mins|MINS|mon_strict|ampm|AMPM|mon|Mon|MON|min|MIN|dd|DD|mm|MM|yy|YY|hh|HH|ss|SS|m|M|d|D|y|Y|h|H|s|S");
var lowerMonArr={jan:1,feb:2,mar:3,apr:4,may:5,jun:6,jul:7,aug:8,sep:9,oct:10,nov:11,dec:12}
var monPatArr=new Array();
monPatArr['mon_strict']=new RegExp(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/);
monPatArr['Mon']=new RegExp(/Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec/);
monPatArr['MON']=new RegExp(/JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC/);
monPatArr['mon']=new RegExp("jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec",'i');
var monthPatArr=new Array();
monthPatArr['month']=new RegExp(/^january|february|march|april|may|june|july|august|september|october|november|december/i);
monthPatArr['Month']=new RegExp(/^January|February|March|April|May|June|July|August|September|October|November|December/);
monthPatArr['MONTH']=new RegExp(/^JANUARY|FEBRUARY|MARCH|APRIL|MAY|JUNE|JULY|AUGUST|SEPTEMBER|OCTOBER|NOVEMBER|DECEMBER/);
monthPatArr['month_strict']=new RegExp(/^january|february|march|april|may|june|july|august|september|october|november|december/);
var cutoffYear=50;
function FormatToken(token,type){
this.token=token;
this.type=type;
}
function parseFormatString(formatStr){
var tokArr=new Array;
var tokInd=0;
var strInd=0;
var foundTok=0;
while(strInd<formatStr.length){
if(formatStr.charAt(strInd)=="%"&&
(matchArray=formatStr.substr(strInd+1).match(tokPat))!=null){
strInd+=matchArray[0].length+1;
tokArr[tokInd++]=new FormatToken(matchArray[0],"symbolic");
}else{
if(tokInd>0&&tokArr[tokInd-1].type=="literal"){
tokArr[tokInd-1].token+=formatStr.charAt(strInd++);
}
else{
tokArr[tokInd++]=new FormatToken(formatStr.charAt(strInd++),"literal");
}
}
}
return tokArr;
}
function buildDate(dateStr,formatStr){
var tokArr=parseFormatString(formatStr);
var strInd=0;
var tokInd=0;
var intMonth;
var intDay;
var intYear;
var intHour;
var intMin;
var intSec;
var ampm="";
var strOffset;
var curdate=new Date();
intMonth=curdate.getMonth()+1;
intDay=curdate.getDate();
intYear=curdate.getFullYear();
intHour=0;
intMin=0;
intSec=0;
while(strInd<dateStr.length&&tokInd<tokArr.length){
if(tokArr[tokInd].type=="literal"){
if(dateStr.indexOf(tokArr[tokInd].token,strInd)==strInd){
strInd+=tokArr[tokInd++].token.length;
continue;
}
else{
return"\""+dateStr+"\" does not conform to the expected format: "+formatStr;
}
}
switch(tokArr[tokInd].token){
case'm':
case'M':
case'd':
case'D':
case'h':
case'H':
case'min':
case'MIN':
case's':
case'S':
curChar=dateStr.charAt(strInd);
nextChar=dateStr.charAt(strInd+1);
matchArr=dateStr.substr(strInd).match(/^\d{1,2}/);
if(matchArr==null){
switch(tokArr[tokInd].token.toLowerCase()){
case'd':var unit="day";break;
case'm':var unit="month";break;
case'h':var unit="hour";break;
case'min':var unit="minute";break;
case's':var unit="second";break;
}
return"Bad "+unit+" \""+curChar+"\" or \""+curChar+
nextChar+"\".";
}
strOffset=matchArr[0].length;
switch(tokArr[tokInd].token.toLowerCase()){
case'd':intDay=parseInt(matchArr[0],10);break;
case'm':intMonth=parseInt(matchArr[0],10);break;
case'h':intHour=parseInt(matchArr[0],10);break;
case'min':intMin=parseInt(matchArr[0],10);break;
case's':intSec=parseInt(matchArr[0],10);break;
}
break;
case'mm':
case'MM':
case'dd':
case'DD':
case'hh':
case'HH':
case'mins':
case'MINS':
case'ss':
case'SS':
strOffset=2;
matchArr=dateStr.substr(strInd).match(/^\d{2}/);
if(matchArr==null){
switch(tokArr[tokInd].token.toLowerCase()){
case'dd':var unit="day";break;
case'mm':var unit="month";break;
case'hh':var unit="hour";break;
case'mins':var unit="minute";break;
case'ss':var unit="second";break;
}
return"Bad "+unit+" \""+dateStr.substr(strInd,2)+
"\".";
}
switch(tokArr[tokInd].token.toLowerCase()){
case'dd':intDay=parseInt(matchArr[0],10);break;
case'mm':intMonth=parseInt(matchArr[0],10);break;
case'hh':intHour=parseInt(matchArr[0],10);break;
case'mins':intMin=parseInt(matchArr[0],10);break;
case'ss':intSec=parseInt(matchArr[0],10);break;
}
break;
case'y':
case'Y':
if(dateStr.substr(strInd,4).search(/\d{4}/)!=-1){
intYear=parseInt(dateStr.substr(strInd,4),10);
strOffset=4;
}
else{
if(dateStr.substr(strInd,2).search(/\d{2}/)!=-1){
intYear=parseInt(dateStr.substr(strInd,2),10);
if(intYear>=cutoffYear){
intYear+=1900;
}
else{
intYear+=2000;
}
strOffset=2;
}
else{
return"Bad year \""+dateStr.substr(strInd,2)+
"\". Must be two or four digits.";
}
}
break;
case'yy':
case'YY':
if(dateStr.substr(strInd,2).search(/\d{2}/)!=-1){
intYear=parseInt(dateStr.substr(strInd,2),10);
if(intYear>=cutoffYear){
intYear+=1900;
}
else{
intYear+=2000;
}
strOffset=2;
}else{
return"Bad year \""+dateStr.substr(strInd,2)+
"\". Must be two digits.";
}
break;
case'yyyy':
case'YYYY':
if(dateStr.substr(strInd,4).search(/\d{4}/)!=-1){
intYear=parseInt(dateStr.substr(strInd,4),10);
strOffset=4;
}
else{
return"Bad year \""+dateStr.substr(strInd,4)+
"\". Must be four digits.";
}
break;
case'mon':
case'Mon':
case'MON':
case'mon_strict':
monPat=monPatArr[tokArr[tokInd].token];
if(dateStr.substr(strInd,3).search(monPat)!=-1){
intMonth=lowerMonArr[dateStr.substr(strInd,3).toLowerCase()];
}
else{
switch(tokArr[tokInd].token){
case'mon_strict':caseStat="lower-case";break;
case'Mon':caseStat="mixed-case";break;
case'MON':caseStat="upper-case";break;
case'mon':caseStat="between Jan and Dec";break;
}
return"Bad month \""+dateStr.substr(strInd,3)+
"\". Must be "+caseStat+".";
}
strOffset=3;
break;
case'month':
case'Month':
case'MONTH':
case'month_strict':
monPat=monthPatArr[tokArr[tokInd].token];
matchArray=dateStr.substr(strInd).match(monPat);
if(matchArray==null){
return"Can't find a month beginning at \""+
dateStr.substr(strInd)+"\".";
}
intMonth=lowerMonArr[matchArray[0].substr(0,3).toLowerCase()];
strOffset=matchArray[0].length;
break;
case'ampm':
case'AMPM':
matchArr=dateStr.substr(strInd).match(/^(am|pm|AM|PM|a\.m\.|p\.m\.|A\.M\.|P\.M\.)/);
if(matchArr==null){
return"Missing am/pm designation.";
}
if(matchArr[0].substr(0,1).toLowerCase()=="a"){
ampm="am";
}
else{
ampm="pm";
}
strOffset=matchArr[0].length;
break;
}
strInd+=strOffset;
tokInd++;
}
if(tokInd!=tokArr.length||strInd!=dateStr.length){
return"\""+dateStr+"\" is either missing desired information or has more information than the expected format: "+formatStr;
}
if(intMonth<1||intMonth>12){
return"Month must be between 1 and 12.";
}
if(intDay<1||intDay>31){
return"Day must be between 1 and 31.";
}
if((intMonth==4||intMonth==6||intMonth==9||intMonth==11)&&intDay==31){
return"Month "+intMonth+" doesn't have 31 days!";
}
if(intMonth==2){
var isleap=(intYear%4==0&&(intYear%100!=0||intYear%400==0));
if(intDay>29||(intDay==29&&!isleap)){
return"February "+intYear+" doesn't have "+intDay+
" days!";
}
}
if(ampm==""){
if(intHour<0||intHour>23){
return"Hour must be between 0 and 23 for military time.";
}
}
else{
if(intHour<1||intHour>12){
return"Hour must be between 1 and 12 for standard time.";
}
}
if(ampm=="am"&&intHour==12){
intHour=0;
}
if(ampm=="pm"&&intHour<12){
intHour+=12;
}
if(intMin<0||intMin>59){
return"Minute must be between 0 and 59.";
}
if(intSec<0||intSec>59){
return"Second must be between 0 and 59.";
}
return new Date(intYear,intMonth-1,intDay,intHour,intMin,intSec);
}
function dateCheck(dateStr,formatStr){
var myObj=buildDate(dateStr,formatStr);
if(typeof myObj=="object"){
return true;
}
else{
return false;
}
}

