﻿// JScript File
var currMeetingTime;
var oldMeetingTime;
var currMettingDuration;
var startHour;
var endHour;
var workDaysStartHour = 8;
var workDaysEndHour = 17;
var workWeekStart = 1;
var workWeekEnd = 5;
var rp01;
var selTimeZones = new Array();
function Init()
{
    InitTimeZoneData();
    SetTimeZones();
    InitPopupTimeZoneData();
    SetPopupTimeZones();
    isPopupTimeZoneEventFirePopup = true;
    var cookieVal = readCookie('TimezoneID');
    if ((cookieVal!=null) && (cookieVal!='') && (cookieVal!='-1'))
    {
        var tzID = parseInt(cookieVal);
        SetCurrentTimeZone(tzID);
    }
    else
    {
        SetServerCountry();
    }    
    var tzObj = GetCurrentTimeZoneObj();
    var currDay = GetNowDateTime(tzObj).GetDateOnlyDateTime();
    startHour = currDay.AddHours(8);
    endHour = currDay.AddHours(17);
    currMeetingTime = startHour.AddHours(2);
    oldMeetingTime = currMeetingTime;
    currMettingDuration = 60;
    InitSpinners();
    InitRangePickers();
    isTimeZoneEventFire=true;
    ShowMainData();
    disableSelection(document.getElementById('ScheudleTimeSelector'));
    disableSelection(document.getElementById('SwitchLink'));

    UpdateUI();
    ShowDiv("ScheudleTimeSelector", false);
    if (client.length > 0){
         AnalyticsTracker('/MeetingPlanner/'+client);
    }
    else{
        AnalyticsTracker('/MeetingPlanner/Site');
    } 
}
function SizeChangedEvent()
{   
        
    SetScheduleTimeSelectorSize();
    PositionScheduleTimeSelector();
}
function UpdateUI(isRebuildTable)
{
   if (isRebuildTable==null)
   {
      isRebuildTable = true;
   }
   selStartTimeSpinner.SetValue(currMeetingTime);
   selEndTimeSpinner.SetValue(currMeetingTime.AddMinutes(currMettingDuration));
   selDuratonTimeSpinner.SetValue(currMettingDuration);  
   var txtDate = document.getElementById('TxtDate');
   txtDate.value = '  '+currMeetingTime.formatDate('NNN dd, yyyy');
   var switchTxt = 'Switch to 24hr';
   if ((GetUserDateTimeFormatCookie()==1) || (GetUserDateTimeFormatCookie()==3))
   {
      switchTxt = 'Switch to 12hr';
   }
   document.getElementById('SwitchLink').innerHTML = '<a style="font-size: 12px" href="javascript:SwitchDateTimeView();" class="operation">'+switchTxt+'</a>';
   if (isRebuildTable)
   {
       BuildSingleTimeTable();
   }
   SetScheduleTimeSelectorSize();
   PositionScheduleTimeSelector();
   SelectTime(currMeetingTime.innerMiliSecs,currMettingDuration);
   if (!oldMeetingTime.IsEqualToDate(currMeetingTime))
   {
    var dtStr = currMeetingTime.GetYearForShow()+','+currMeetingTime.GetMonthForShow()+','+currMeetingTime.GetDateForShow();
    rp01.set_range(dtStr,'');
   }
}

function TimeZoneListChanged()
{
        var tzObj = GetCurrentTimeZoneObj();
        var mins = currMeetingTime.GetHoursForShow()*60 + currMeetingTime.GetMinutesForShow();
        currMeetingTime.SetTimeZoneObj(tzObj);
        var currDay = currMeetingTime.GetDateOnlyDateTime();
        startHour = currDay.AddHours(startHour.GetHoursForShow());
        endHour = currDay.AddHours(endHour.GetHoursForShow());
        currMeetingTime = currDay.AddMinutes(mins);
        if (startHour.CompareTo(endHour)==1)
        {
            endHour = endHour.AddHours(24);
            currMeetingTime = currMeetingTime.AddHours(24);
            var minsDiff = currMeetingTime.GetHoursForShow()*60 + currMeetingTime.GetMinutesForShow();
           if (startHour.GetDateForShow()!=currMeetingTime.GetDateForShow())
           {
               minsDiff = Math.floor((currMeetingTime.innerMiliSecs -  startHour.innerMiliSecs) / MINUTE_IN_MILISECONDS);
           }
           else
           {
               minsDiff -= startHour.GetHoursForShow()*60 + startHour.GetMinutesForShow();
           }
            if (minsDiff>=(9*60))
            {
               currMeetingTime = currDay.AddMinutes(mins); 
            }
        }
        createCookie('TimezoneID',tzObj.id,50);
        UpdateUI();
}

function InitRangePickers()
{
    var maxDate = GetNowDateTime(null).AddDays(30*18); // 18 months from now
    rp01 = new rangepickerCP('rp01', currUserData.userStartWeekDay, 0, 0,true,null,null,true,maxDate);
    rp01.DateClicked = DateClicked;
}
function InitSpinners()
{   
    selStartTimeSpinner = new SpinnerControl('selStartTimeSpinner','meetingStartSpan',null,TimeSpinnerToString,TimeSpinnerSpin,'#ECF5E8');
    selStartTimeSpinner.onChange = MeetingTimeChanged;
    selEndTimeSpinner = new SpinnerControl('selEndTimeSpinner','meetingEndSpan',null,TimeSpinnerToString,TimeSpinnerSpin,'#FBE6E6');
    selEndTimeSpinner.onChange = MeetingTimeChanged;
    selDuratonTimeSpinner = new SpinnerControl('selDuratonTimeSpinner','meetingDurationSpan',null,DurationSpinnerToString,DurationSpinnerSpin,'#FFFFFF');
    selDuratonTimeSpinner.onChange = MeetingDurationChanged;
    selEndTimeSpinner.CreateSpinnerControl(50);
    selStartTimeSpinner.CreateSpinnerControl(50);
    selDuratonTimeSpinner.CreateSpinnerControl(50);
}

function DateClicked()
{
    var tzObj = GetCurrentTimeZoneObj();
    var startHourInMinutes = (startHour.GetInnerMilisecondsForShow() - startHour.GetDateOnlyDateTime().GetInnerMilisecondsForShow()) /MINUTE_IN_MILISECONDS ;
    var endHourInMinutes = (endHour.GetInnerMilisecondsForShow() - startHour.GetDateOnlyDateTime().GetInnerMilisecondsForShow()) /MINUTE_IN_MILISECONDS ;

    currMeetingTimeMins = currMeetingTime.GetHoursForShow()*60 + currMeetingTime.GetMinutesForShow();
    currMeetingTime = rp01.GetStartDate(tzObj).GetDateOnlyDateTime().AddMinutes(currMeetingTimeMins);
    startHour = currMeetingTime.GetDateOnlyDateTime().AddMinutes(startHourInMinutes);
    endHour = currMeetingTime.GetDateOnlyDateTime().AddMinutes(endHourInMinutes);
    CloseMeetingDate();
    UpdateUI();
}

    function MeetingTimeChanged()
    {
      currMeetingTime = selStartTimeSpinner.GetValue();
      var tmp = (selEndTimeSpinner.GetValue().GetInnerMilisecondsForShow() - selStartTimeSpinner.GetValue().GetInnerMilisecondsForShow()) /MINUTE_IN_MILISECONDS ;
      var tmpInt = parseInt(tmp);
      currMettingDuration = parseInt(tmp);
      UpdateUI(false);
    }
    function MeetingDurationChanged()
    {
      if (selDuratonTimeSpinner.GetValue()>=15)
      {
          currMettingDuration = selDuratonTimeSpinner.GetValue();
          UpdateUI(false);
      }
    }

    function TimeSpinnerToString(value)
    {
       return FormatTimeByUser(value);
    }
    function IsInBoundaries(time)
    {
        if ( time.LowerOrEqual(endHour) )
        {
            if ( time.GreaterOrEqual(startHour))
            {
                return true;
            }
        }
        return false;
    }
    function TimeSpinnerSpin(dir,value,spinnerObj)
    {
       var toChange = false;
       var newVal = value.AddMinutes(-15*dir);
       if (spinnerObj == selStartTimeSpinner)
       {
        if (IsInBoundaries(newVal))
        { // if in boundaries
            var endTime = currMeetingTime.AddMinutes(currMettingDuration);
            var newDur = parseInt((endTime.innerMiliSecs - newVal.innerMiliSecs) /MINUTE_IN_MILISECONDS) ;
            if (newDur >= 15)
            { // if meeting more then 30 minutes long
                toChange = true;
            }
        }
       }
       if (spinnerObj == selEndTimeSpinner)
       {
            var endTime = newVal;
            if (IsInBoundaries(newVal))
            { // if in boundaries
                var newDur = parseInt((endTime.innerMiliSecs - currMeetingTime.innerMiliSecs) /MINUTE_IN_MILISECONDS) ;
                if (newDur >= 15)
                { // if meeting more then 30 minutes long
                    toChange = true;
                }
            }
       }
       
       if (toChange)
       {
            return value.AddMinutes(-15*dir);
       }
       else
       {
            return value;
       }
    }
    
    function DurationSpinnerToString(value)
    {
       var mins = (value % 60);
       if (mins<10)
       {
          mins = '0' + mins;
       }
       var ret = parseInt(value / 60) + ':' + mins;
       return ret;
    }
    function DurationSpinnerSpin(dir,value,spinnerObj)
    {
       var newVal = value+ (-15*dir);
       if (newVal>=15)
       {
        var endTime = currMeetingTime.AddMinutes(newVal);
        if (IsInBoundaries(endTime))
        { // if in boundaries
          return newVal;
        }
       }
       return value;
    }
    
    function SwitchDateTimeView()
    {
       var userDateFormat = GetUserDateTimeFormatCookie();
       switch (userDateFormat)
       {
           case 0:
             userDateFormat = 1;
             break;
           case 1:
             userDateFormat = 2;
             break;
           case 2:
             userDateFormat = 3;
           break;
           case 3:
             userDateFormat = 2;
           break;
       }
       SaveUserDateTimeFormatCookie(userDateFormat);
       UpdateUI();
    }
    
    function CloseMeetingDate()
    {
        var propDiv =document.getElementById('dvMeetingDateRange');
        propDiv.style.left = '-10000px';
    }

    function OpenDatePicker()
    {
        var obj = document.getElementById('CalDiv');
        //ShowDiv('dvMeetingDateRange');
        var propDiv =document.getElementById('dvMeetingDateRange');
        var meetingPos = findPos(obj);
        var meetingSize =getSize(obj);
        var timeSize = getSize(propDiv);
        var left = meetingPos[0];
        var top = meetingPos[1];
        propDiv.style.position = 'absolute';
        propDiv.style.left = left +'px';
        propDiv.style.top = top +'px';
        //propDiv.style.zIndex = 100011;
    }
    
    function CloseTimeZonePicker()
    {
        var propDiv =document.getElementById('dvTimezonePicker');
        propDiv.style.left = '-10000px';
    }
    
    var currTimeZoneIdx = -1;
    function OpenTimeZonePicker(idx, object)
    {
        
        if (idx==-1)
        {
           if (selTimeZones.length==9)
           {
              alert ('Cannot add more then 10 time zones');
              return;
           }
        }
        currTimeZoneIdx = idx;
        //ShowDiv('dvMeetingDateRange');
        HideDiv('RegionErrorDiv',false);
        var obj = document.getElementById('timezonePickerOp');
        var meetingPos = findPos(obj);
        if (idx > -1)
        {
            var diff = selTimeZones.length - idx;
            meetingPos[1] = meetingPos[1] - diff*48;
//            var e = window.event;
//            if (e != null)
//            {
//                obj = e.target || event.srcElement;
//            }
        }
//        if (obj == null)
//        {
//            obj =document.getElementById('timezonePickerOp');
//        }
        meetingPos[1] = meetingPos[1] - 30;
        var propDiv =document.getElementById('dvTimezonePicker');
        
       // var meetingSize =getSize(obj);
       // var timeSize = getSize(propDiv);
        var left = meetingPos[0];
        var top = meetingPos[1];
        propDiv.style.position = 'absolute';
        propDiv.style.left = left +'px';
        propDiv.style.top = top +'px';
        if (currTimeZoneIdx>-1)
        {
            SetCurrentPopupTimeZone(selTimeZones[currTimeZoneIdx].id);
        }
        else
        {
            ClearCurrentPopupTimeZone();

        }
        //propDiv.style.zIndex = 100011;
    }

    function PopupTimeZoneListChanged()
    {
        var errDiv = document.getElementById('RegionErrorDiv');
        errDiv.innerHTML = '';
    }    
    function ApplyTimezonePicker()
    {
        var errDiv = document.getElementById('RegionErrorDiv');
        if (GetPopupCountry()=='-1')
        {
            errDiv.innerHTML = 'Please select your time zone';
            ShowDiv('RegionErrorDiv',false);
        }
        else
        {
            if (GetCurrentPopupTimeZoneID()<0)
            {
                errDiv.innerHTML = 'Please select your region';
                ShowDiv('RegionErrorDiv',false);
            }
            else
            {
                HideDiv('RegionErrorDiv',false);
                if (currTimeZoneIdx>-1)
                {
                    selTimeZones[currTimeZoneIdx]=GetCurrentPopupTimeZoneObj();
                }
                else
                {
                    selTimeZones[selTimeZones.length]=GetCurrentPopupTimeZoneObj();
                }
                CloseTimeZonePicker();
                UpdateUI();
            }
        }
    }

    function GetTimesString(startTime,duration,timeZoneObj,newLineSep)
    {
            if (newLineSep==null)
            {
                newLineSep='\r\n';
            }
            var time = CreateNewDateFromMili(startTime,timeZoneObj);
            var str = timeZoneObj.toFullNameString(1000,true);
            if (timeZoneObj.hasDayLightSavings)
            {
                if (time.IsInDLS())
                {
                     str += ' [daylight saving time] ';
                }
            }
            str += newLineSep;
            str += time.formatDate('EE, MMM dd yyyy, ');
            str += FormatTimeByUser(time,currUserData);
            var durationHours = duration / 60;
            durationHours = parseInt(durationHours.toString());
            var durationMins = (duration - durationHours*60);
            durationMins = parseInt(durationMins.toString());
            if (durationMins<10)
            {
                durationMins = '0' + durationMins;
            }
            str += ', ' + durationHours+':'+durationMins + 'hr'+newLineSep;
            str += '------------------------------------------------'+newLineSep;
            return str;
    }
    var currStartTime;
    var currDuration;
    function SelectTime(startTime,duration)
    {
        var str='';
        if ((duration>0) || (startTime>0))
        {
            var timeZoneArr = new Array();
            currStartTime = startTime;
            currDuration = duration;
            var len = selTimeZones.length;
            var tzObj = GetCurrentTimeZoneObj();
            str = GetTimesString(startTime,duration,tzObj);
            timeZoneArr[timeZoneArr.length] = tzObj.id;
            for (var i=0;i<len;i++)
            {
                if (!IsValInArray(timeZoneArr, selTimeZones[i].id))
                {
                    timeZoneArr[timeZoneArr.length] = selTimeZones[i].id;
                    str+=GetTimesString(startTime,duration,selTimeZones[i]);
                }
            }
        }
        document.getElementById('InviteeSelectedTimes').value = str;
    }
    function GetInviteeTimesForEmail()
    {
        var timeZoneArr = new Array();
        var len = selTimeZones.length;
        var tzObj = GetCurrentTimeZoneObj();
        var str = GetTimesString(currStartTime,currDuration,tzObj,'%0A');
        timeZoneArr[timeZoneArr.length] = tzObj.id;
        for (var i=0;i<len;i++)
        {
            if (!IsValInArray(timeZoneArr, selTimeZones[i].id))
            {    
                timeZoneArr[timeZoneArr.length] = selTimeZones[i].id;
                str+=GetTimesString(currStartTime,currDuration,selTimeZones[i],'%0A');
            }
        }
        return str;
    }
    function EmailTimeSelection()
    {

        if (selTimeZones.length<20)
        {
            var href = 'mailto:?subject=Time and date for our meeting&body=The meeting will take place on:%0A%0A';
            href+=GetInviteeTimesForEmail();
            href+='%0A%0AThese times were converted with absolute accuracy using www.scheduleonce.com';
            document.location = href;
        }
        else
        {
            alert('Email from here does not work with more than 20 time zones. Please copy and paste manually.');
        }
    }
    
    function BuildSingleTimeTable()
    {
       var len = selTimeZones.length;
       var inHtmlSb = new StringBuilder('<table class="singleTimeTable" cellpadding="0" cellspacing="0" border="0">\r\n'); 
       var tzObj = GetCurrentTimeZoneObj();
       var currTime = startHour;
       var moveHeight = 47*(len+2)-5;
       inHtmlSb.append('<tr>\r\n');  
       inHtmlSb.append('    <td class="singleTimeHeaderTzCell">\r\n');  
       inHtmlSb.append('        <div class="singleTimeTzCellDiv"  style="top:0px;"> '+tzObj.toFullNameStringGmtLastDstIcon(20,false)+'</div> \r\n');  
       inHtmlSb.append('    </td>\r\n');
       inHtmlSb.append('<td rowspan="' + ((len + 1) * 2 + 1) + '" style="width: 27px;vertical-align:middle;"><div class="singleTimeLeftBorder" onmousedown="TableLeftClickStarted()" onmouseup="TableLeftClickEnded()" onmousemove="TableLeftClickEnded()" style="height:' + moveHeight + 'px" ><img style="position:relative;top:' + ((moveHeight / 2 - 5)) + 'px" border="0" src="' + STATIC_URL + '/Images/singleTimeArrowLeft.gif"/></div></td>\r\n');
       var idx = 0;
       while (currTime.CompareTo(endHour)<0)
       { 
          inHtmlSb.append('<td class="singleTimeHeaderCell" id="TableHeader'+idx+'" >'+FormatTimeByUser(currTime,currUserData)+'</td>\r\n');  
          currTime = currTime.AddHours(1);
          idx++;
       }
      inHtmlSb.append('<td rowspan="' + ((len + 1) * 2 + 1) + '" style="width: 27px;vertical-align:middle"><div class="singleTimeRightBorder" onmousedown="TableRightClickStarted()" onmouseup="TableRightClickEnded()" onmousemove="TableRightClickEnded()" style="height:' + moveHeight + 'px" ><img style="position:relative;top:' + ((moveHeight / 2 - 5)) + 'px" border="0" src="' + STATIC_URL + '/Images/singleTimeArrowRight.gif"/></div></td>\r\n');
       inHtmlSb.append('</tr>\r\n');  
       
       currTime = startHour;
       while (currTime.CompareTo(endHour)<=0)
       { 
          inHtmlSb.append('<td class="greyDotBackSlim" style="font-size:1px;height:1px"></td>\r\n');  
          currTime = currTime.AddHours(1);
       }
       inHtmlSb.append('</tr>\r\n');  
       
       for (var idx=0;idx<len;idx++)
       {
           currTime = startHour.clone(selTimeZones[idx]);
           inHtmlSb.append('<tr>\r\n');  
           inHtmlSb.append('    <td class="singleTimeTzCell">\r\n');  
           inHtmlSb.append('      <table style="width:100%" cellpadding="0" cellspacing="0"><tr><td style="width:15px;font-size:1px">&nbsp;</td><td><a href="javascript:OpenTimeZonePicker('+idx+', this)" class="operation">'+selTimeZones[idx].toFullNameStringGmtLastDstIcon(15,false)+'</a></td><td style="text-align:right;vertical-align:top;"><a href="javascript:RemoveTimeZone('+idx+');" class="operation" style="color: #CC0E00;position:relative;top:-10px">[x]</a>&nbsp;</td></tr></table> \r\n');  
           inHtmlSb.append('    </td>\r\n');  
           
           while (currTime.CompareTo(endHour)<0)
           { 
              if (IsInWorkHours(currTime))
              {
                  inHtmlSb.append('<td class="singleTimeCell" style="background-color:#E6F8D9">');
              }
              else
              {
                  inHtmlSb.append('<td class="singleTimeCell">');
              }
              
              inHtmlSb.append(FormatTimeByUser(currTime,currUserData) +'</td>\r\n');  
              //inHtmlSb.append(currTime.toString() +'</td>\r\n');  
              currTime = currTime.AddHours(1);
           }
           inHtmlSb.append('<tr>\r\n');  
           currTime = startHour;
           while (currTime.CompareTo(endHour)<=0)
           {
              inHtmlSb.append('<td ><div class="greyDotBackSlim" style="font-size:1px;height:1px"></div></td>\r\n');  
              currTime = currTime.AddHours(1);
           }
              
           inHtmlSb.append('</tr>\r\n');  
            
       }
       inHtmlSb.append('<tr>\r\n');  
       inHtmlSb.append('    <td class="singleTimeTzCell">\r\n');  
       inHtmlSb.append('        <div id="timezonePickerOp" class="singleTimeTzCellDiv" style="position:relative;top:0px"><a  href="javascript:OpenTimeZonePicker(-1)" class="operation" style="font-size:14px;font-weight:bold;position:relative;top:0px">+ Add attendee time zone </a></div> \r\n');  
       inHtmlSb.append('    </td>\r\n');  
       currTime = startHour;
       var idx = 0;
       while (currTime.CompareTo(endHour)<0)
       {
          inHtmlSb.append('<td class="singleTimeCell" id="TableFooter'+idx+'">&nbsp;</td>\r\n');  
          currTime = currTime.AddHours(1);
          idx++;
       }
       inHtmlSb.append('<tr>\r\n');  
       currTime = startHour;
       inHtmlSb.append('<td><div class="greyDotBackSlim" style="width:100%;font-size:1px;height:1px"></div></td>\r\n');  
       while (currTime.CompareTo(endHour)<=0)
       {
          inHtmlSb.append('<td><div class="greyDotBackSlim" style="width:100%;font-size:1px;height:1px"></div></td>\r\n');  
          currTime = currTime.AddHours(1);
       }
       inHtmlSb.append('</tr>\r\n');  
       inHtmlSb.append('<tr >\r\n');  
       inHtmlSb.append('<td style="height:6px;background-color:#B7D3E9;font-size:1px" colspan="100">&nbsp;</td>\r\n');  
       inHtmlSb.append('</tr>\r\n');  
       inHtmlSb.append('<tr >\r\n');  
       inHtmlSb.append('<td style="height:3px;font-size:1px;line-height:1px" colspan="100">&nbsp;</td>\r\n');  
       inHtmlSb.append('</tr>\r\n'); 
       inHtmlSb.append(' </table>\r\n');  
       document.getElementById('singleTimeTableDiv').innerHTML = inHtmlSb.toString();
       
    }
    
    function IsInWorkHours(time)
    {
       if ((time.GetDayForShow()<=workWeekEnd) && (time.GetDayForShow()>=workWeekStart))
       {
           if ( (time.GetHoursForShow()<=workDaysEndHour) && (time.GetHoursForShow()>=workDaysStartHour) )
           {
               return true;
           }
       } 
        return false;
    }
    var intervalID;
    function TableLeftClickStarted()
    {
       intervalID = window.setInterval('TableLeftClicked()',80);
    }
    function TableLeftClickEnded()
    {
       window.clearInterval ( intervalID );
    }

    function TableLeftClicked()
    {
        if (currMeetingTime.AddHours(-1).IsPastDue())
        {
           window.clearInterval ( intervalID );
        }
        else
        {
            currMeetingTime = currMeetingTime.AddHours(-1);
            startHour = startHour.AddHours(-1);
            endHour = endHour.AddHours(-1);
            UpdateUI();
        }
    }

    function TableRightClickStarted()
    {
       intervalID = window.setInterval('TableRightClicked()',80);
    }
    function TableRightClickEnded()
    {
       window.clearInterval ( intervalID );
    }
    
    function TableRightClicked()
    {
        startHour = startHour.AddHours(+1);
        endHour = endHour.AddHours(+1);
        currMeetingTime = currMeetingTime.AddHours(+1);
        UpdateUI();
    }
    
    function SetScheduleTimeSelectorSize()
    {
       ShowDiv('ScheudleTimeSelector');
       var scheduleTimeSelectorDiv = document.getElementById('ScheudleTimeSelector');
       var headerTD = document.getElementById('ScheudleTimeSelectorHeaderTD');
       var bodyTD = document.getElementById('ScheudleTimeSelectorBodyTD');
       var footerTD = document.getElementById('ScheudleTimeSelectorFooterTD');
       var hourIdx = 0;
       var headerTD = document.getElementById('TableHeader' + hourIdx);
       var footerTD = document.getElementById('TableFooter' + hourIdx);
       
       var headerPos = findPos(headerTD);
       var headerSize = getSize(headerTD);       
       var footerPos = findPos(footerTD);
       var footerSize = getSize(footerTD);
       scheduleTimeSelectorDiv.style.top = headerPos[1] +'px';
       //headerTD.style.height = headerSize[1] + 'px';
       //footerTD.style.height = footerSize[1] + 'px';
       bodyTD.style.height = (footerPos[1]  - headerPos[1]) + 'px';
    }
    
    function PositionScheduleTimeSelector()
    {
       var headerTD = document.getElementById('TableHeader0');
       var headerPos = findPos(headerTD);
       var headerSize = getSize(headerTD);       
       var scheduleTimeSelectorDiv = document.getElementById('ScheudleTimeSelector');
       var minsDiff = currMeetingTime.GetHoursForShow()*60 + currMeetingTime.GetMinutesForShow();
       if (startHour.GetDateForShow()!=currMeetingTime.GetDateForShow())
       {
           minsDiff = Math.floor((currMeetingTime.innerMiliSecs -  startHour.innerMiliSecs) / MINUTE_IN_MILISECONDS);
       }
       else
       {
           minsDiff -= startHour.GetHoursForShow()*60 + startHour.GetMinutesForShow();
       }
       var left = headerPos[0]+ (minsDiff *headerSize[0] /60);
       var top = headerPos[1] + headerSize[1];
       var width = (currMettingDuration * headerSize[0]/ 60);
       if (browser.isChrome)
       {
        //alert(browser.version)
        top -= (browser.version > 1) ?47 :64;
        scheduleTimeSelectorDiv.style.top = (top) +'px';
       }
       if (browser.isSafari)
       {
        //alert(browser.version)
        top -= 47;
        scheduleTimeSelectorDiv.style.top = (top) +'px';
       }
       scheduleTimeSelectorDiv.style.left = (left-4) +'px';
       scheduleTimeSelectorDiv.style.width = (width+10) + 'px';
      window.status = currMeetingTime.toString(false) +'__' + startHour.toString(false);
    }
    var x,y;
    var isLeftResize;
    var isRightResize;
    var isMove;
    var origSelectTime;
    var origSelectDuration;
    var dragMinuteWidth;
    function MouseStartDrag (e)
    {
      x = GetMouseX(e);
      y = GetMouseY(e);
      var div = document.getElementById('TableHeader0');
      var sz = getSize(div);
      dragMinuteWidth = 60/sz[0];
      document.onmousemove=MoveMouse;
      document.onmouseup = StopMouseOp;
    }
    function MoveMouse(e)
    {
        var left = GetMouseX(e);
        var top =  GetMouseY(e);
        var diffMinutes = (left - x)*dragMinuteWidth;
        
        if (isMove)
        { 
            var newTime = currMeetingTime.AddMinutes(diffMinutes);
            var endTime = newTime.AddMinutes(currMettingDuration);
            if ((IsInBoundaries(newTime)) && (IsInBoundaries(endTime)))
            {
                if (currMettingDuration>=15)
                {
                    currMeetingTime = newTime;
                    UpdateUI(false);
                }
            }
        }
        if (isRightResize)
        {
            
            var newTime = currMeetingTime;
            var endTime = newTime.AddMinutes(currMettingDuration+diffMinutes);
            if ((IsInBoundaries(newTime)) && (IsInBoundaries(endTime)))
            {
                currMettingDuration += diffMinutes;
                if (currMettingDuration>=15)
                {
                    UpdateUI(false);
                }
                else
                {
                   currMettingDuration -= diffMinutes;
                }
            }
        }
        if (isLeftResize)
        {
            var newTime = currMeetingTime.AddMinutes(diffMinutes);
            var endTime = newTime.AddMinutes(currMettingDuration-diffMinutes);
            if ((IsInBoundaries(newTime)) && (IsInBoundaries(endTime)))
            {
                currMeetingTime = currMeetingTime.AddMinutes(diffMinutes);
                currMettingDuration -= diffMinutes;
                if (currMettingDuration>=15)
                {
                    UpdateUI(false);
                }
                else
                {
                   currMettingDuration -= diffMinutes;
                   currMeetingTime = currMeetingTime.AddMinutes(-1*diffMinutes);
                }
            }
            
        }
        x = left;
        y = top;
        return false;
    }

    function StartLeftResize(e)
    {
       isLeftResize = true;
       MouseStartDrag(e);
    }
    function StartRightResize(e)
    {
      isRightResize = true;
       MouseStartDrag(e);
    }

    function StartMove(e)
    {
       isMove = true;
       MouseStartDrag(e);
    }
    
    function StopMouseOp()
    {
      isLeftResize = false;
      isRightResize = false;
      isMove = false;
      var tempScheduleMeetingDuration = Math.round((currMettingDuration/15))*15;
      var FifteenMinsInMilisecs = MINUTE_IN_MILISECONDS*15;
      var tempScheduleMeetingTime = Math.round(currMeetingTime.innerMiliSecs/FifteenMinsInMilisecs)*FifteenMinsInMilisecs;
      if (tempScheduleMeetingDuration<23)
      {
         tempScheduleMeetingDuration = 15;
      }
      if ((tempScheduleMeetingDuration>=15) && (tempScheduleMeetingTime>0))
      {
          currMettingDuration = tempScheduleMeetingDuration;
          currMeetingTime.innerMiliSecs = tempScheduleMeetingTime;
          UpdateUI(false);
      }
      document.onmousemove = null;
      document.onmouseup = null;
    }
    
    
    function RemoveTimeZone(idx)
    {
       selTimeZones.splice(idx,1);
       UpdateUI(true);
   }
   function ShowVideo(code, headerText) {
       ShowDiv('VideoPopUpDiv');
       ShowDiv('VideoPopUpFrame');
       var html = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="370" height="300"><param name="movie" value="http://www.youtube.com/v/' + code + '&autoplay=1&rel=0&color1=0x2b405b&color2=0x6b8ab6&border=0"></param><embed src="http://www.youtube.com/v/' + code + '&autoplay=1&rel=0&color1=0x2b405b&color2=0x808080&border=0" type="application/x-shockwave-flash" width="370" height="300"></embed></object>';
       var elem = document.getElementById('VideoEmbeddTD');
       var header = document.getElementById('VideoHeader');
       elem.innerHTML = html;
       header.innerHTML = headerText;
       CenterDiv('VideoPopUpDiv');
       CenterDiv('VideoPopUpFrame');
       moveObjShimObj = document.getElementById('VideoPopUpDiv');
       movedObj = document.getElementById('VideoPopUpFrame');
       SynchMoveObjPopUpShim();
   }
   function HideVideo(code) {
       HideDiv('VideoPopUpDiv');
       HideDiv('VideoPopUpFrame');
       var elem = document.getElementById('VideoEmbeddTD');
       elem.innerHTML = '';
   }
