
//Timezone
var ttimezone = "";

var isLoading = false;

var ticket = getTicketIDFromCookie();    
var apikey = getAPIKey() ; //to be fetched from session

//Selected view: Open(Tasks),Tasks,App. and Note
var selectedView = "";

var loadingImg = "<img src=\"" + contextPath +"/images/loading.gif\">";

//
var currentPageId = "";

/*Ajax url for sending all ajax calls to enterpreneur server */
var ajaxURL = contextPath + "/plannerReq.do?";

/* Stores the Page objects. One page is associated to a date */
/*   (except 'Home Page' being created by planner by default) */
var PageDB = new Array();

/* Stores the List object. One list is associated to a page */
var ListDB = new Array();

/* Stores the ListItem details.All the list items are associated to a list object.  */
var ListItemsDB = new Array();

/* Stores the appointments associated to a page */
var AppointmentsDB = new Array();

/* Stores the Note associated to a page. One page has only Note */
var NoteDB = new Array();

/* holds the current view that the user views. */
var currentView = 'Month';

/* represents a single page data */
Page = function( pageId , pageName , pageDate)
{
    this.pageId = pageId;
    this.pageName = pageName;
    this.pageDate = pageDate;
}

/* list data */
function List( listId , listName )
{
    this.listId = listId;
    this.listName = listName;
}

/* List items data */
function ListItem(listItemId , listItemName , status )
{
    this.listItemId = listItemId;
    this.listItemName = listItemName;
    this.isCompleted = status;
}

/* Note data */
function Note( noteId , noteTitle , noteBody )
{
    this.noteId = noteId;
    this.noteTitle = noteTitle;
    this.noteBody = noteBody;
}

/* Appointment data */
function Appointment( appAt , app , reminder , appId , freq )
{
    this.appointmentAt = appAt;
    this.appointment = app;
    this.reminder = reminder;
    this.appointmentId = appId;
    this.frequency = freq;

}

getRequestURL = function( method, url )
{
    var fullUrl = ajaxURL + "method=" + method + "&url=" + url;
    fullUrl = appendTicketKey( fullUrl );
    return fullUrl;
}

getAllPages = function()
{
    showCalendarLoadingDiv();
    var url = getRequestURL( "getPlannerData", "http://planner.zoho.com/api/private/xml/pages" );
    sendAsyncAJAXRequest( 'GET', url, handlePages );
}

handlePages = function( xmlhttp )
{
    if ( xmlhttp.readyState == 4)
    {
        //alert("CurrentDate::::;;"+currDate+"*****month::"+currDate.getMonth()+"***** date:"+currDate.getDate());
        var response = xmlhttp.responseXML;
        var reslt = response.getElementsByTagName('result');
        //alert("hanldepages::::::::::::"+reslt);
        if( reslt != null && reslt.item(0) != null )
        {
            var pgdetails = reslt.item(0).getElementsByTagName('PageDetails')[0];
            var pgdet = pgdetails.getElementsByTagName('PageDetail');
            var len = pgdet.length; 
            for( var i = 0 ; i < len; i++ )
            {                                
                var pgid = pgdet[i].getElementsByTagName('page_id')[0].firstChild.data;
                var pgtitle = pgdet[i].getElementsByTagName('page_title')[0].firstChild.data;
                //Filtering out the Home Page from the response, which is getting created
                //on zoho planner by default
                if(pgtitle == "Home Page")
                {
                    continue;
                }
                var splitdate = pgtitle.split("-");
                var datestr = splitdate[0].split("_");
                var pgDate = new Date;
                pgDate.setDate( datestr[1] );
                pgDate.setMonth( datestr[0] );
                pgDate.setYear( datestr[2] );
                var pgcontains = currDate.getMonth()+"_"; 
                var pgyear = "_"+currDate.getFullYear();
                
                //Error handling:: If the page title already exists
                //in PageDB, skipping the same.
                var existPageId = getPageIdForName(pgtitle);
                if(existPageId != "")
                {
                    continue;
                }

                var obj = new Page( pgid, pgtitle,pgDate);
                PageDB[PageDB.length] = obj;
                setDataInClndrCell(obj);
            }            
        }
        else
        {
            alert("Unable to fetch data from server. Please try again.");
        }
        hideCalendarLoadingDiv();
    }
}

function getPageNameForCurrDate()
{
    var date = currDate.getDate();
    var month = currDate.getMonth();
    var year = currDate.getFullYear();
    var pageName = month+"_"+date+"_"+year+"-Page";
    return pageName;
}

function getListNameForCurrDate()
{
    var date = currDate.getDate();
    var month = currDate.getMonth();
    var year = currDate.getFullYear();
    var listName = month+"_"+date+"_"+year+"-List";
    return listName;
}

function getNoteNameForCurrDate()
{
    var date = currDate.getDate();
    var month = currDate.getMonth();
    var year = currDate.getFullYear();
    var noteName = month+"_"+date+"_"+year+"-Note";
    return noteName;
}

function setCellDataForMonth()
{
    var ln = PageDB.length;
    if(ln == 0)
    {
        return;
    }
    for(var i = 0 ; i < ln ; i++ )
    {
         var obj = PageDB[i];
         setDataInClndrCell(obj);
    }
}


function setDataInClndrCell(pageObj)
{
    var pgid = pageObj.pageId;
    var pgname = pageObj.pageName;
    var pgDate = pageObj.pageDate;
    var cellId = getClndrCellId(pgname);
 
    //alert("IDDDDDDDDDDD::"+cellId+"::");
    var cellEle = document.getElementById(cellId);
    //Filtering out the pages not related to this month
    if(cellEle == null)
    {
        return;
    }
    cellEle.style.align = "left";
     
    //open id
    //var openLinkId = cellId+"_open";
    //var openEle = document.getElementById(openLinkId);
    //openEle.href = "javascript:fetchPageDataFromServer('Tasks','"+pgid+"')";

    //new image id
    var addImageId = "addImage_"+cellId;
    var ele = document.getElementById(addImageId);
    ele.style.display = "none";

    cellEle.innerHTML = cellEle.innerHTML+" <div class=\"password\"><a href=\"javascript:fetchPageDataFromServer('Tasks','"+pgid+"')\">Tasks</a><br /><a href=\"javascript:fetchPageDataFromServer('Appointments','"+pgid+"')\">Appointments</a><br /><a href=\"javascript:fetchPageDataFromServer('Note','"+pgid+"')\">Note</a></div>";
}

function getClndrCellId(pgname)
{
    var splitdate = pgname.split("-");
    return splitdate[0];
}

appendTicketKey = function( url )
{
    url += "&apikey=" + apikey + "&ticket=" + getTicketIDFromCookie();
    return url;
}


//
//
showAllEntries = function( month, year )
{            
    var entdate = new Date();
    entdate.setMonth( month+1 );
    entdate.setFullYear( year );
    for ( var k=0;k<totalDays[ entdate.getMonth() ];k++)
    {
        entdate.setDate( k );
        checkEntryForDate( entdate );
    }
}

//
//
checkEntryForDate =  function( thisdate )
{
    var date = thisdate.getDate();
    var mnth = thisdate.getMonth();
    var yr = thisdate.getFullYear();
    
    var pgName=mnth+"_"+date+"_"+yr+"-page";
    for( var l=0; l<PageDB.length;l++)
    {
        var page = PageDB[l];
        if ( page && page.pageName==pgName )
        {
            var idd = mnth+'_'+date+'_'+yr;
            var dttd = document.getElementById( idd );            
            if ( dttd )
            {
                //dttd.innerHTML = "Tasks (2)";
                var tsk = getTaskDiv();
                tsk.innerHTML = "Tasks (2)";
                dttd.appendChild( tsk );
                tsk.onclick=function(){ Calendar.show(); }
                
                var task = getNotesDiv();
                task.innerHTML = "Notes (1)";
                task.onclick=function(){ //alert('hhh'); 
                }
                dttd.appendChild( task );                
            }
        }
    }
}

function isValidDate()
{
    var isPast = isPastDate();
    var pageId = getPageIdForCurrDate();
    if(isPast && pageId == "")
    {
        return false;
    }
    return true;
}

function fetchPageDataFromServer(slctdTask,pageId)
{
    //If the date is past date and the date has no
    //tasks,appointments and note, returns with out
    //processing further
    if(!isValidDate())
    {
        alert("No entries for this past date");
        return;
    }
    if(isLoading)
    {
        //Since already a process is running.
        return;
    }
    showLoadingDiv("Loading...");
    selectedView = slctdTask;
    currentPageId = pageId;
    //No page created for this calendar.
    //Just opening the page, with add provision
    if(pageId == "")
    {
        hideLoadingDiv();
        openManageView(slctdTask);
        return;
    }
    //var fullurl = getRequestURL("getAllLists","http://planner.zoho.com/api/private/json/lists");
    var fullurl = ajaxURL+"method=getPageData";
    fullurl += "&pageId=" + pageId ;
    fullurl = appendTicketKey(fullurl);
    sendAsyncAJAXRequest( 'GET', fullurl, handlePageResponse );
}

function handlePageResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var xmlRes = xmlhttp.responseText;
        if(xmlRes != null )
        {
             var evalResp = eval('('+xmlRes+')');
            if(evalResp != null && evalResp.length > 0 )
            {
                var listItems = evalResp[0].response.result.PageDetail;
                parseListData(listItems);
                
                var appointments = evalResp[1];
                parseAppointmentsData(appointments);
                
                var note = evalResp[2];
                parseNoteData(note);

                if(selectedView == "Tasks")
                {
                    showTasks();
                }
                else if(selectedView == "Appointments")
                {
                    showAppointments();
                }
                else if(selectedView == "Note")
                {
                    showNote();
                }
            }
            //Handling of error scenarios
            else
            {
                alert("Unable to fetch data from server. Please try again.");
                //return;
            }
        }
        hideLoadingDiv();
    }
}

//
function parseAppointmentsData(appnmnts)
{
    if(appnmnts != null && appnmnts.response.result != null)
    {
        var pgDt = appnmnts.response.result.PageDetail;
        if(pgDt.PageAppointments != null)
        {
             var pgApps = pgDt.PageAppointments;
             if(pgApps != null)
             {
                 var apps = pgApps.Appointment;
                 if(apps.length == null || apps.length == 0)
                 {
                     addAppointmentsInDB(apps);
                 }
                 else
                 {
                     var ln = apps.length;
                     for( var cn = 0 ; cn < ln ; cn++ )
                     {
                         var tmpApp = apps[cn];
                         addAppointmentsInDB(tmpApp);
                     }
                 }
             }
        }
        //alert("Appointments DB:::::::::"+AppointmentsDB);
    }
    else
    {
        alert("Unable to fetch appointments");
        return;
    }
}

function addAppointmentsInDB(app)
{
    var appId = app.appointment_id;
    var appAt = app.appointment_at;
    var apptmnt = app.appointment;
    var reminder = app.remind_me;
    var freq = app.repeat_frequency;


    AppointmentsDB[AppointmentsDB.length] = new Appointment( appAt , apptmnt , reminder , appId , freq);
}


//Error scenario not handled.In case of any errors,
//not adding in NoteDB.
function parseNoteData(note)
{
   if(note != null )
   {
       if(note.response.result != null)
       {
           if(note.response.result.PageDetail.PageNotes == null)
           {
               return;
           }
           var notes = note.response.result.PageDetail.PageNotes.Notes;
           if(notes.length == null)
           {
               addNoteInNoteDB(notes);
           }
           else
           {
               var ln = notes.length;
               for(var cn = 0 ; cn < ln ; cn++ )
               {
                   var tmpNote = notes[cn];
                   addNoteInNoteDB(tmpNote);
               }
           }
       }
       else
       {
           //error scenario
       }
   }
   else
   {
         //error scenario
   }
   //alert("NoteDB:::::::"+NoteDB);
}

function addNoteInNoteDB(note)
{ 
    var noteId = note.note_id;
    var noteTitle = note.note_title;
    var noteBody = note.note_body;
    var currNoteName = getNoteNameForCurrDate();
    //alert("currNoteName::::::"+currNoteName+"***********"+noteTitle);
    if(noteTitle == currNoteName)
    {
        NoteDB[NoteDB.length] = new Note(noteId,noteTitle,noteBody);
    }
}

function parseListData(listItems)
{
    var lists = listItems.PageList.List;
    //alert("sdfsdfsdfds:::::"+lists);
    if(lists != null && lists.length == null)
    {
         updateListDBAndListItemDB(lists);    
    }
    else if(lists != null)
    {
        var lstCnt = lists.length;
        //alert("ListCnt::::::"+lstCnt);
        for(var cn = 0 ; cn < lstCnt ; cn++ )
        {
            var list = lists[cn];
            updateListDBAndListItemDB(list);
        }
    }
    //alert("ListDB:::::::"+ListDB);
    //alert("ListItemDB::::"+ListItemsDB);
}

function updateListDBAndListItemDB(list)
{
    var listId = list.list_id;
    var listName = list.list_name;
    //Checks the List name corresponding to this page
    var listName_CurrDate = getListNameForCurrDate();
    //alert("listName_CurrDate:::"+listName_CurrDate+"*");
    //alert("listName::::"+listName+"*");
    if(listName == listName_CurrDate)
    {
        //Updating ListDB
        ListDB[ListDB.length] = new List(listId,listName);
        //

        var items = list.ListItem;
        if(items != null)
        {
            if(items.length != null)
            {
                var count = items.length;
                //alert("ListItem::::::;"+items.length);
                for(var i = 0 ; i < count ; i++ )
                {
                    var it = items[i];
                    updateListItemDB(it);
                }
            }
            else
            {
                updateListItemDB(items);
            }
        }
    }
}

function updateListItemDB(listItem)
{
     var itemId = listItem.listitem_id;
     var itemName = listItem.list_item;
     var status = listItem.is_completed;
     ListItemsDB[ListItemsDB.length] = new ListItem(itemId,itemName,status);
}


function openManageView(slctdItem)
{
    if(slctdItem == 'Tasks')
    {
       showTasks();
    }
    else if(slctdItem == 'Appointments')
    {
        showAppointments();
    }
    else if(slctdItem == 'Note')
    {
        showNote();
    }
}

function showTasks()
{
    clearTaskListsDiv();
    //
    showTaskView();

    var itemLn = ListItemsDB.length;
    if(itemLn > 0)
    {
        createListItemsTable();
        var ttbody = document.getElementById("taskItemsListTBody");
        for(var i = 0 ; i < itemLn ; i++ )
        {
            var listItem = ListItemsDB[i];
            addListItemInTBody(listItem,ttbody);
        }
    }
    else
    {
        showNoDataDiv('noTasksDiv');
    }
}

function showNoDataDiv(axnId)
{
    var divEle = document.getElementById(axnId);
    divEle.style.display = "block";
}

function hideNoDataDiv(axnId)
{
    var divEle = document.getElementById(axnId);
    divEle.style.display = "none";
}

function addListItemInTBody(listItem,ttbody)
{
    var title =  listItem.listItemName;
    var isCompleted = listItem.isCompleted;
    var itemId =  listItem.listItemId;
    var trow = document.createElement("tr");
    trow.id = "taskRow_"+itemId;
    var tcell = document.createElement("td");
    tcell.className = "rowclear";
    tcell.style.borderBottom = "solid 1px #CCCCCC";
    tcell.style.borderTop = "solid 1px #CCCCCC";
    var indx = ttbody.childNodes.length;
    if(indx%2 == 1)
    {
        tcell.style.backgroundColor = "#eff4f8";
    }
    //var status = getListDisplayStatus(isCompleted);
   
    var dispTitle = title;
    if(dispTitle.length > 45)
    {
        dispTitle = dispTitle.substring(0,43);
        dispTitle = dispTitle + "...";
    }
    
    var statusCombo = getStatusDisplayCombo(isCompleted,itemId);

    tcell.innerHTML = "<div class=\"bookmarkheader\" style=\"overflow:hidden\" title=\""+title+"\">"+dispTitle+"</div><div>&nbsp;</div><div id=\"status_"+itemId+"\" class=\"bookmarktext\" style=\"padding-bottom:5px;\"><strong>Status:</strong>"+statusCombo+"</div><div id=\"checkBoxDiv_"+itemId+"\">";

    ttbody.appendChild(trow);
    trow.appendChild(tcell);

    var tcell2 =  document.createElement("td");
    tcell2.className = "rowclear";
    tcell2.style.width = "27";
    tcell2.style.align = "left";
    if(indx%2 == 1)
    {
        tcell2.style.backgroundColor = "#eff4f8";
    }
    tcell2.style.borderLeft = "dotted 1px #CCCCCC";
    tcell2.style.borderBottom = "solid 1px #CCCCCC";
    tcell2.style.borderTop = "solid 1px #CCCCCC";
    tcell2.innerHTML = "<div id=\"deleteCBCell_"+itemId+"\"><input id=\"deleteCB_"+itemId+"\" type=\"checkbox\" name=\"checkbox2\" value=\"checkbox\" onclick=\"javascript:deselectSelectAll()\"></div>"
    trow.appendChild(tcell2);

}

function getStatusDisplayCombo(isCompleted,itemId)
{
    var contentt = "<select id=\"statusTaskCombo_"+itemId+"\" name=\"statusCombo\" onChange=\"javascript:statusComboChanged('"+itemId+"')\">";
    if(isCompleted == "true")
    {
        contentt = contentt + "<option value=\"complete\" selected>Complete <option value=\"incomplete\">Incomplete";
    }
    else
    {
        contentt = contentt + "<option value=\"incomplete\" selected>InComplete <option value=\"complete\">Complete";
    }
    contentt = contentt+ "</select>";
    return contentt;
}

function statusComboChanged(itemId)
{
    //alert("statusComboChanged:::::::"+itemId);
    var comboEleId = "statusTaskCombo_"+itemId;
    var comboEle = document.getElementById(comboEleId);
    var slctdVal = comboEle.options[comboEle.selectedIndex].text;
    var changeSt = "true";
    if(slctdVal == "Incomplete")
    {
       changeSt = "false";
    }
    var itemsParam = itemId+"_"+changeSt;

    sendStatusChangeReqToServer(itemsParam);
}

function deleteListItems()
{
    var ln = ListItemsDB.length;
    if(ln == 0)
    {
        return;
    }
    var itemsParam = "";
    for(var cn = 0 ; cn < ln ; cn++ )
    {
         var itemId = ListItemsDB[cn].listItemId;
         var deleteCBEle = document.getElementById("deleteCB_"+itemId);
         var val = deleteCBEle.checked;
         if(val)
         {
             if(itemsParam != "")
             {
                 itemsParam = itemsParam + ",";
             }
             itemsParam = itemsParam+itemId;
         }
    }
    //alert("itemsParams:::::::::::;"+itemsParam+"*");
    if(itemsParam == "")
    {
        alert("Please select a task to delete");
        return;
    }
   
    //
    showPageSpLoadingDiv("Deleting...");

    var plannerUrll = "http://planner.zoho.com/api/private/json/listitem/delete/";
    var urll = getRequestURL("deleteListItem",plannerUrll);
    urll = urll+"&itemsParam="+itemsParam;
    //alert(":::::::::status:::::"+status+":::::::::isCompleted:::::"+isCompleted);
    sendAsyncAJAXRequest('GET',urll,handleDeleteItemResponse)
}

function handleDeleteItemResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var jsonRes = xmlhttp.responseText;
        var resp = eval(jsonRes);
        //alert("handleDeleteItemResponse:::::::::"+resp);
        if(resp != null && resp.length > 0)
        {
            var lngth = resp.length;
            var errorResp = new Array();
            for(var ij = 0 ; ij < lngth ; ij++ )
            {
                var listId = resp[ij].listItemId;
                if(resp[ij].zohoResp.response.result != null)
                {
                    listId = resp[ij].zohoResp.response.result.listitem_id;
                    var desc = resp[ij].zohoResp.response.result.description;
                    if(desc == "List item removed")
                    {
                        //Change the status in ListItemDB
                        var ln = ListItemsDB.length;
                        for(var cn = 0 ; cn < ln ; cn++ )
                        {
                            var list_id = ListItemsDB[cn].listItemId;
                            if(list_id == listId)
                            {
                                //Splicing the ListItemsDB 
                                ListItemsDB.splice(cn,1);
                                break;
                            }
                        }

                        deleteListItemFromTable(listId);
                    }
                    else
                    {
                        errorResp[errorResp.length] = listId;
                    }
                }
                else
                {
                        errorResp[errorResp.length] = listId;
                }
            }
            if(errorResp.length > 0)
            {
                var alertMsg = "Unable to delete the following tasks "; 
                var gg = errorResp.length;
                for(var k = 0 ; k < gg ; k++ )
                {
                    var lg = ListItemsDB.length;
                    var listIId = errorResp[k];
                    for(var pp = 0 ; pp < lg ; pp++ )
                    {
                         var lId = ListItemsDB[pp].listItemId;
                         if(listIId == lId)
                         {
                              var na = ListItemsDB[pp].listItemName;
                              alertMsg = alertMsg + " \n " + na ;
                         }
                    }
                }
                alert(alertMsg);
                //return;
            }
        }
        else
        {
            alert("Unable to get the response from server");
            //return;
        }
        hidePageSpLoadingDiv();
    }
}

function deleteListItemFromTable(listItemId)
{
    /*
    var listItemRow = "taskRow_"+listItemId;
    var divEle = document.getElementById(listItemRow);
    var ttBody = document.getElementById("taskItemsListTBody");
    ttBody.removeChild(divEle);
    */
    showTasks();
}

function getListDisplayStatus(isCompleted)
{
    var st = "Completed";
    if(isCompleted != "true")
    {
        st = "Not Completed";
    }
    return st;
}

function changeListItemStatus(itemId,isCompleted)
{
    var ln = ListItemsDB.length;
    if(ln == 0)
    {
        return;
    }

    var itemsParam = "";
    for(var cn = 0 ; cn < ln ; cn++ )
    {
         var itemId = ListItemsDB[cn].listItemId;
         var deleteCBEle = document.getElementById("deleteCB_"+itemId);
         var val = deleteCBEle.checked;
         if(val)
         {
             if(itemsParam != "")
             {
                 itemsParam = itemsParam + ",";
             }
             var itemStatus = ListItemsDB[cn].isCompleted;
             var st = "true";
             if(itemStatus == "true")
             {
                 st = false;
             }
             itemsParam = itemsParam+itemId+"_"+st;
         }
    }
    //alert("itemsParams:::::::::::;"+itemsParam+"*");
    if(itemsParam == "")
    {
        alert("Please select a task to change the status");
        return;
    }
    sendStatusChangeReqToServer(itemsParam);
}

function sendStatusChangeReqToServer(itemsParam)
{
    showPageSpLoadingDiv("Changing status...");
    var plannerUrll = "http://planner.zoho.com/api/private/json/listitem/complete/";
    var urll = getRequestURL("changeItemStatus",plannerUrll);
    urll = urll+"&itemsParam="+itemsParam;
    //alert(":::::::::status:::::"+status+":::::::::isCompleted:::::"+isCompleted);
    sendAsyncAJAXRequest('GET',urll,handleStatusChangeResponse)
}

function handleStatusChangeResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var jsonresp = xmlhttp.responseText;
        var resp = eval('('+jsonresp+')');
        //alert("rrrrrrrrrrrrrrrr::::::"+resp);
        if(resp != null && resp.length > 0)
        {
            var lngth = resp.length;
            var errorResp = new Array();
            for(var ij = 0 ; ij < lngth ; ij++ )
            {
                var listId = resp[ij].listItemId;
                if(resp[ij].zohoResp.response.result != null)
                {
                    listId = resp[ij].zohoResp.response.result.listitem_id;
                    var desc = resp[ij].zohoResp.response.result.description;
                    if(desc == "Marked the list item")
                    {
                        //Change the status in ListItemDB
                        var ln = ListItemsDB.length;
                        var st = "false";
                        for(var cn = 0 ; cn < ln ; cn++ )
                        {
                            var list_id = ListItemsDB[cn].listItemId;
                            if(list_id == listId)
                            {
                                var currSt = ListItemsDB[cn].isCompleted;
                                if(currSt == "false")
                                {
                                    st = "true";
                                }
                                //alert("sssssssssssssssssSS::::::::"+st);
                                ListItemsDB[cn].isCompleted = st;
                                break;
                            }
                        }

                        //Change the field in table
                        var statusID = "status_"+listId;
                        //alert("statusID:::::::;;"+statusID);
                        var divEle = document.getElementById(statusID);
                        var statusCombo = getStatusDisplayCombo(st,listId); 
                        divEle.innerHTML =  "<strong>Status:</strong>"+statusCombo;//getListDisplayStatus(st);

                        //
                        var cbDiv = document.getElementById("deleteCB_"+listId);
                        cbDiv.checked = false;
                    }
                    else
                    {
                        errorResp[errorResp.length] = listId;
                    }
                }
                else
                {
                        errorResp[errorResp.length] = listId;
                }
            }
            if(errorResp.length > 0)
            {
                var alertMsg = "Unable to change the status for ";
                var gg = errorResp.length;
                for(var k = 0 ; k < gg ; k++ )
                {
                    var lg = ListItemsDB.length;
                    var listIId = errorResp[k];
                    for(var pp = 0 ; pp < lg ; pp++ )
                    {
                         var lId = ListItemsDB[pp].listItemId;
                         if(listIId == lId)
                         {
                              var na = ListItemsDB[pp].listItemName;
                              alertMsg = alertMsg + " \n " + na ;
                         }
                    }
                }
                alert(alertMsg);
                //return;
            }
        }
        else
        {
            alert("Unable to change the status. Please try again.");
            //return;
        }
        hidePageSpLoadingDiv();
    }
}


function createListItemsTable()
{
    //If the table is already created.
    if(document.getElementById("taskItemsListTBody") != null)
    {
        return;
    }
    var listDiv = document.getElementById("taskItemsListDiv");
    
    var itemsTable = document.createElement("table");
    var itemsTBody = document.createElement("tbody");
    itemsTBody.id = "taskItemsListTBody";
    itemsTable.style.width = "100%";
    itemsTable.style.border = "0";
    itemsTable.cellPadding = "0";
    itemsTable.cellSpacing = "0";
    itemsTable.className = "formtext";
    itemsTable.style.borderLeft = "solid 1px #CCCCCC";
    itemsTable.style.borderRight = "solid 1px #CCCCCC";

    listDiv.appendChild(itemsTable);
    itemsTable.appendChild(itemsTBody);

    addFirstRowForTBody(itemsTBody,'tasks');
}

function addFirstRowForTBody(ttbody,ttype)
{

    var trow = document.createElement("tr");
    var tcell = document.createElement("td");
    tcell.className = "rowclear";
    tcell.style.borderBottom = "solid 1px #CCCCCC";
    tcell.style.borderTop = "solid 1px #CCCCCC";
    var indx = ttbody.childNodes.length;
    if(indx%2 == 1)
    {
        tcell.style.backgroundColor = "#eff4f8";
    }
    tcell.innerHTML = "<div>&nbsp;</div>";

    ttbody.appendChild(trow);
    trow.appendChild(tcell);

    var tcell2 =  document.createElement("td");
    tcell2.className = "rowclear";
    tcell2.style.width = "27";
    tcell2.style.align = "left";
    if(indx%2 == 1)
    {
        tcell2.style.backgroundColor = "#eff4f8";
    }
    tcell2.style.borderLeft = "dotted 1px #CCCCCC";
    tcell2.style.borderBottom = "solid 1px #CCCCCC";
    tcell2.style.borderTop = "solid 1px #CCCCCC";
    tcell2.innerHTML = "<div><input id=\"selectDeselectCombo\" type=\"checkbox\" name=\"checkbox2\" value=\"checkbox\" onclick=\"javascript:selectDeselectAll('"+ttype+"')\"></div>";
    trow.appendChild(tcell2);
}

function selectDeselectAll(ttype)
{
    var state = document.getElementById("selectDeselectCombo").checked;
    if(ttype == 'tasks')
    {
        var ln = ListItemsDB.length;
        if(ln == 0)
        {
            return;
        }
        for(var i = 0 ; i < ln ; i++ )
        {
             var idd = ListItemsDB[i].listItemId;
             var eleId = "deleteCB_"+idd;
             var ele = document.getElementById(eleId);
             if(ele != null)
             {
                 ele.checked = state;
             }
        }
    }
    else if(ttype == 'appointments')
    {
        var lng = AppointmentsDB.length;
        if(lng == 0)
        {
            return;
        }
        for(var ij = 0 ; ij < lng ; ij++ )
        {
            var iddd = AppointmentsDB[ij].appointmentId;
            var eleeID = "appCBDel_"+iddd;
            var elee = document.getElementById(eleeID);
            if(elee != null)
            {
                elee.checked = state;
            }
        }
    }
}

function deselectSelectAll()
{
    var ele = document.getElementById("selectDeselectCombo");
    if(ele != null)
    {
         ele.checked = false;
    }
}

function getDisplayDate()
{
    var month = currDate.getMonth() + 1;
    var date  = currDate.getDate();
    var year = currDate.getFullYear();
    var str = month+"-"+date+"-"+year;
    return str;
}

function hideAddTaskLink()
{
    var divEle = document.getElementById("addTaskLink");
    divEle.style.display = "none";
}

function showAddTaskLink()
{
    var divEle = document.getElementById("addTaskLink");
    divEle.style.display = "block";
    enableButton("taskAdd_button");
}

function showPageDiv()
{
    var divEle = document.getElementById("pageDiv");
    divEle.style.display = "block";
}

function showTaskView()
{

    if(isPastDate())
    {
        hideAddTaskLink();
    }

    hideCalendarView();
    showPageDiv();
    hideNoteView();
    hideAppointmentView();
    //Hide all other views

    var divEle = document.getElementById("tasksdiv");
    divEle.style.display = "block";
    showOptionsDiv();
    //
    setHeaderDiv("Tasks");
}

function hideTaskView()
{
    var divEle = document.getElementById("tasksdiv");
    divEle.style.display = "none";
    var divTable = document.getElementById("taskItemsListDiv");
    divTable.innerHTML = "";
    hideOptionsDiv();
    hideAddTaskItem();
}

function showOptionsDiv()
{
    var divEle = document.getElementById("optionsDiv");
    divEle.style.display = "block";
}

function hideOptionsDiv()
{
    var divEle = document.getElementById("optionsDiv");
    divEle.style.display = "none";
}

function showAppointments()
{
    clearAppointmentsDiv();
    showAppointmentView();
    var ln = AppointmentsDB.length;
    if( ln > 0 )
    {
        createAppointmentsTable();
        var ttbody = document.getElementById("appointmentsTBody");
        for(var i = 0 ; i < ln ; i++ )
        {
            var appt = AppointmentsDB[i];
            addAppointmentsInTable(appt , ttbody);
        }
    }
    else
    {
        showNoDataDiv('noAppointmentsDiv');
    }
}

function clearAppointmentsDiv()
{
    var divEle = document.getElementById("appointmentsListDiv");
    divEle.innerHTML = "";
}

function clearTaskListsDiv()
{
    var divEle =document.getElementById("taskItemsListDiv");
    divEle.innerHTML = "" ;
}


function createAppointmentsTable()
{
    //If the table is already created.
    if(document.getElementById("appointmentsTBody") != null)
    {
        return;
    }
    var appDiv = document.getElementById("appointmentsListDiv");
    
    var appTable = document.createElement("table");
    var appTBody = document.createElement("tbody");
    appTBody.id = "appointmentsTBody";
    appTable.style.width = "100%";
    appTable.style.border = "0";
    appTable.cellPadding = "0";
    appTable.cellSpacing = "0";
    appTable.className = "formtext";
    appTable.style.borderLeft = "solid 1px #CCCCCC";
    appTable.style.borderRight = "solid 1px #CCCCCC";

    appDiv.appendChild(appTable);
    appTable.appendChild(appTBody);

    //
    addFirstRowForTBody(appTBody,'appointments');
}

function addAppointmentsInTable(app,ttbody)
{
    var appt =  app.appointment;
    var appAt  = app.appointmentAt;
    var appId = app.appointmentId;
    var rmndr = app.reminder;
    var freq =  app.frequency;
    

    var trow = document.createElement("tr");
    trow.id = "appointmentRow_"+appId;
    var tcell = document.createElement("td");
    tcell.className = "rowclear";
    tcell.style.borderBottom = "solid 1px #CCCCCC";
    tcell.style.borderTop = "solid 1px #CCCCCC";
    var indx = ttbody.childNodes.length;
    if(indx%2 == 1)
    {
        tcell.style.backgroundColor = "#eff4f8";
    }

    var dispApp = appt;
    if(dispApp.length > 45)
    {
        dispApp = dispApp.substring(0,43);
        dispApp = dispApp+"...";
    }
     
    var dispDate = getAppDateInDispFormat(appAt);

    //tcell.innerHTML = "<div class=\"bookmarkheader\" style=\"overflow:hidden\">"+appt+"</div><div class=\"bookmarktext\"> @ "+appAt+" </div><div class=\"bookmarktext\">Reminder: "+rmndr+"</div><div class=\"bookmarktext\">Frequency:"+freq+"</div>";
    tcell.innerHTML = "<div class=\"bookmarkheader\" style=\"overflow:hidden\" title=\""+appt+"\">"+dispApp+"</div><div class=\"bookmarktext\"> @ "+dispDate+" - Reminder: "+rmndr+"</div>";

    ttbody.appendChild(trow);
    trow.appendChild(tcell);

    var tcell2 =  document.createElement("td");
    tcell2.className = "rowclear";
    tcell2.style.width = "27";
    tcell2.style.align = "left";
    if(indx%2 == 1)
    {
        tcell2.style.backgroundColor = "#eff4f8";
    }
    tcell2.style.borderLeft = "dotted 1px #CCCCCC";
    tcell2.style.borderBottom = "solid 1px #CCCCCC";
    tcell2.style.borderTop = "solid 1px #CCCCCC";
    tcell2.innerHTML = "<div id=\"appCBDelDiv_"+appId+"\"><input id=\"appCBDel_"+appId+"\" type=\"checkbox\" name=\"checkbox2\" value=\"checkbox\" onclick=\"javascript:deselectSelectAll()\"></div>"
    trow.appendChild(tcell2);
   
}

function getAppDateInDispFormat(appAt)
{
    var str = ""
    if(appAt != null)
    {
        var tmpArr = appAt.split(" ");
        var dddateArr = tmpArr[0].split("-");
        var ddate = dddateArr[2];
        var mmonth = dddateArr[1];
        var yyear = dddateArr[0];
        var ddd = mmonth+"-"+ddate+"-"+yyear;

        var ttimeArr = tmpArr[1].split(":");
        var hhr = ttimeArr[0];
        var mmin = ttimeArr[1];
        var ampm = "am";
        if(hhr >= 12)
        {
            ampm = "pm";
        }
        if(hhr > 12)
        {
            hhr = hhr-12;
        }
        var ttt = hhr+":"+mmin+" "+ampm

        str = ttt+" / "+ddd;
    }
    return str;
}

function hideAddAppointmentLink()
{
    var divEle = document.getElementById("addAppointmentLink");
    divEle.style.display = "none";
}

function showAddAppointmentLink()
{
    var divEle = document.getElementById("addAppointmentLink");
    divEle.style.display = "block";
    //
    enableButton("appointmentAdd_button");
}

function showAppointmentView()
{
    if(isPastDate())
    {
        hideAddAppointmentLink();
    }

    //
    hideCalendarView();
    showPageDiv();
    hideTaskView();
    hideNoteView();

    var divEle = document.getElementById("appointmentsdiv");
    divEle.style.display = "block";

    showOptionsDiv();
    setHeaderDiv("Appointments");
}

function hideAppointmentView()
{
    var divEle = document.getElementById("appointmentsdiv");
    divEle.style.innerHTML = "";
    divEle.style.display = "none";
    hideAddAppointment();
}

function showAddAppointment()
{
    var divEle = document.getElementById("addAppointmentsDiv");
    divEle.style.display = "block";
}

function hideAddAppointment()
{
    var divEle = document.getElementById("addAppointmentsDiv");
    
    //
    document.getElementById("appointmentTitle_TF").value = "";
    document.getElementById("appointmentSchedule_TF").value = "";
    var rmdC = document.getElementById("remindMeCombo");
    rmdC.selectedIndex = 0;
    document.getElementById("hoursCombo").selectedIndex = 0;
    document.getElementById("ampmCombo").selectedIndex = 0;
    document.getElementById("minutesCombo").selectedIndex = 0;
    document.getElementById("repeatCombo").selectedIndex = 0;
    //

    divEle.style.display = "none";

    hideSplCharDiv();
}

function showNote()
{
    showNoteView();
    
    var ln = NoteDB.length;
    if(ln == 0)
    {
        setNoteButtonDiv("add");
        showNoDataDiv('noNoteDiv');
    }
    else
    {
        setNoteButtonDiv("edit");
        setNoteInDisplay();
        hideNoDataDiv('noNoteDiv');
    }

}


function setNoteInDisplay()
{
    var noteBody = " <b> -- No note available. -- </b> ";
    if(NoteDB.length > 0)
    {
       noteBody = NoteDB[0].noteBody;
       noteBody = replaceStr(noteBody,"\n","<br>");
    }
    var divEle = document.getElementById("noteDetailsDiv");
    //noteDetailsDiv.innerHTML = "<textarea id=\"textarea_note\" cols=\"80\" rows=\"10\" readonly>"+noteBody+"</textarea>";
    divEle.innerHTML = "<div class=\"savetext\">"+noteBody+"</div>";
    divEle.style.display="block";
}

function setNoteButtonDiv(axn)
{
    var axnLink = "";
    if(!isPastDate())
    {
        if(axn == 'add')
        {
            axnLink = "<td align=\"left\" class=\"formtext\"><a href=\"javascript:showAddNote()\">Add Notes</a></td>";
        }
        else if(axn == 'edit')
        {
            axnLink = "<td align=\"left\" class=\"formtext\"><a href=\"javascript:showEditNote()\">Edit Notes</a></td>";
        }
    }
    var divEle = document.getElementById("noteButtonDiv");
    divEle.innerHTML = "<table width=\"100%\"><tr>"+axnLink+"<td align=\"right\" class=\"formtext\"><a href=\"javascript:backToCalendarView()\">Planner view</a></td></tr></table>";
}

function clearNoteButtonDiv()
{
    var divEle = document.getElementById("noteButtonDiv");
    divEle.innnerHTML = "";
}

function showEditNote()
{
    var noteBody = NoteDB[0].noteBody;
    var ddate = getInternalDivDisplayDate();
    var divEle = document.getElementById("noteDetailsDiv");
    divEle.innerHTML = "<table width=\"100%\"><tr><td><div class=\"addheader\">Edit Note "+ddate+"</div><div class=\"bookmarktext\"><textarea id=\"textarea_note_display\" style=\"width:100%;height:400px\" >"+noteBody+"</textarea><input type=\"hidden\" id=\"textarea_note\" value=\""+noteBody+"\"></div>"+
                  "<div><img src=\"images/spacer.gif\" width=\"68\" height=\"1\"/><input id=\"noteEdit_button\" type=\"button\" name=\"Submit\" value=\"Submit\" onclick=\"javascript:editNote()\">"
                  +"&nbsp;<input type=\"button\" name=\"Cancel\" value=\"Cancel\" onclick=\"javascript:showNote()\" ></div>"
                  +"</td><td align=\"center\" valign=\"top\"><a href=\"javascript:showNote()\"><img src=\"images/large_icons/icon_cancel.gif\" border=\"0\" class=\"imgcancel\" title=\"Close\"/></a></td></tr></table>";
    divEle.style.display="block";
}

function showAddNote()
{
    var divEle = document.getElementById("noteDetailsDiv");
     var ddate = getInternalDivDisplayDate();
    divEle.innerHTML = "<table width=\"100%\"><tr><td><div class=\"addheader\">Add Note "+ddate+" </div><div class=\"bookmarktext\"><textarea id=\"textarea_note_display\" style=\"width:100%;height:400px\"></textarea><input type=\"hidden\" id=\"textarea_note\"></div>"+
                  "<div><img src=\"images/spacer.gif\" width=\"68\" height=\"1\"/><input id=\"noteAdd_button\" type=\"button\" name=\"Submit\" value=\"Submit\" onclick=\"javascript:addNote()\">"
                  +"&nbsp;<input type=\"button\" name=\"Cancel\" value=\"Cancel\" onclick=\"javascript:hideAddNote();\"></div>"
                  +"</td><td align=\"center\" valign=\"top\"><a href=\"javascript:hideAddNote()\"><img src=\"images/large_icons/icon_cancel.gif\" border=\"0\" class=\"imgcancel\" title=\"Close\"/></a></td></tr></table>";
    divEle.style.display="block";
}

function deleteNote()
{
    showPageSpLoadingDiv("Editing...");

    //disabling the button
    disableButton("noteEdit_button");

    var noteId = NoteDB[0].noteId;
    var urll = "http://planner.zoho.com/api/private/json/note/delete/"+noteId;
    var fullurll = getRequestURL("deleteNote",urll);
    fullurll = appendTicketKey(fullurll);
    sendAsyncAJAXRequest('GET',fullurll,deleteNoteResp);
}

function deleteNoteResp(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var jsonresp = xmlhttp.responseText;
        var resp = eval('('+jsonresp+')');
        if(resp != null)
        {
            if(resp.response.result != null && 
                resp.response.result.description == "Notes removed")
            {
                NoteDB.splice(0,1);
                hideAddNote();
                showNote();
            }
            else
            {
                alert("Unable to edit note");
            }
        }
        else
        {
            alert("Unable to edit note");
        }
        hidePageSpLoadingDiv();
        enableButton("noteEdit_button");
    }
}


function editNote()
{
    //If the text is an empty string, deleting the note
    //for this page
    if(!checkNoteText())
    {
        deleteNote();
        return;
    }
    showPageSpLoadingDiv("Editing...");

    //disabling the button
    disableButton("noteEdit_button");
    
    var noteBody = getNoteString()//document.getElementById("textarea_note").value;
    var noteTitle = getNoteNameForCurrDate();
    var noteId = NoteDB[0].noteId;
    var urll = "http://planner.zoho.com/api/private/json/note/update/"+noteId;
    var fullurl = getRequestURL("editNote",urll);
    fullurl = appendTicketKey(fullurl);
    fullurl += "&noteTitle="+noteTitle+"&noteBody="+noteBody;

    sendAsyncAJAXRequest( 'GET', fullurl, handleEditNoteResponse );
}

function handleEditNoteResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var jsonresp = xmlhttp.responseText;
        var resp = eval('('+jsonresp+')');
        //alert("Response:::::::"+resp);
        if(resp != null && resp.response.result != null)
        {
            var noteBody = resp.response.result.Notes.note_body;
            NoteDB[0].noteBody = noteBody;

            showNote();
        }
        else
        {
            alert("Unable to edit note");
            //return;
        }
        hidePageSpLoadingDiv();
        enableButton("noteEdit_button");
    }
}

function getNoteString()
{
    var noteStr = document.getElementById("textarea_note_display").value;
    //Removing the control M characters
    var pattern = /\cM/g;
    noteStr = noteStr.replace(pattern,"");
    
    var enStr = getEncodedString(noteStr);
    return enStr;
}

function checkNoteText()
{
    var noteStr = document.getElementById("textarea_note_display").value;
    if(trim(noteStr) == "")
    {
        return false;
    }
    return true;
}


function addNote()
{

    if(!checkNoteText())
    {
        alert("Note contents cannot be empty.");
        return;
    }
   
   //disabling the button
   disableButton("noteAdd_button");

    //Yet to create the page and list
    if(currentPageId == "")
    {
        addNewPageAndNote();
    }
    else
    {
        showPageSpLoadingDiv("Adding...");
        var listItem = getNoteString();//document.getElementById("textarea_note").value;
        var noteTitle = getNoteNameForCurrDate();
        //If page already exists
        var fullurl = getRequestURL("createNewNote","http://planner.zoho.com/api/private/json/note/add");
        fullurl = appendTicketKey(fullurl);
        fullurl += "&noteTitle="+noteTitle+"&noteBody="+listItem+"&pageId="+currentPageId;
        sendAsyncAJAXRequest( 'GET', fullurl, handleNewNoteResponse );
    }
}

function handleNewNoteResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var jsonResp = xmlhttp.responseText;
        var resp = eval('('+jsonResp+')');
        //alert("handleNewNoteResponse::::::::"+resp);
        if(resp != null && resp.response.result != null)
        {
              addNewNoteDetailsInClient(resp);
        }
        else
        {
            alert("Unable to add note");
            //return;
        }
        hidePageSpLoadingDiv();
        enableButton("noteAdd_button");
    }
}

function addNewPageAndNote()
{
    showPageSpLoadingDiv("Adding...");
    var listItem = getNoteString();//document.getElementById("textarea_note").value;
    var noteTitle = getNoteNameForCurrDate();
    var fullurl = ajaxURL+"method=createNewPageAndNote&noteTitle="+noteTitle+"&noteBody="+listItem;
    fullurl = appendNewPageAndListNames(fullurl);
    fullurl = appendTicketKey(fullurl);
    try
    {
        sendAsyncAJAXRequest( 'GET', fullurl, handleNewPageAndNoteResponse );
    }
    catch(e)
    {
        alert("Unable to send request");
    }
}

function handleNewPageAndNoteResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var jsonResp = xmlhttp.responseText;
        var resp = eval(jsonResp);
        //alert("handleNewPageAndNoteResponse:::::::"+resp);
        if(resp != null && resp.response != "error")
        {
            var comDet = resp[0];
            var noteDet = resp[1];
            var pageDetail = comDet[0];
            var listDetail = comDet[1];

            addNewPageInPageDB(pageDetail);
            addNewListInListDB(listDetail);
            //
            addNewNoteDetailsInClient(noteDet);
        }
        else
        {
            alert("Unable to add note");
            //return;
        }
        hidePageSpLoadingDiv();
        enableButton("noteAdd_button");
    }
}

function addNewNoteDetailsInClient(noteDet)
{
    if(noteDet != null && noteDet.response.result != null)
    {
        var note = noteDet.response.result.Notes;
        addNoteInNoteDB(note);
        showNote();
    }
    else
    {
        alert("Unable to add note");
        return;
    }
}

function hideAddNote()
{
    var divEle = document.getElementById("noteDetailsDiv");
    divEle.innerHTML = "";
    divEle.style.display="none";
}


function showNoteView()
{
    hideCalendarView();
    showPageDiv();

    hideTaskView();
    hideAppointmentView();
    //Hide all other views

    var divEle = document.getElementById("noteDiv");
    divEle.style.display = "block";
    showOptionsDiv();
    //
    setHeaderDiv("Notes");

    //
    hideSplCharDiv();
}

function hideNoteView()
{
    var divEle = document.getElementById("noteDiv");
    divEle.style.display = "none";
    hideAddNote();    
}

//currently not used,since reloading the page again.
function backToCalendarView()
{
    //hiding all the current page related views
    //Clear all the page divs inner html
    hideTaskView();
    hideAppointmentView();
    hideNoteView();
    hideOptionsDiv();
    hidePageSpLoadingDiv();

    //
    hideNoDataDiv('noTasksDiv');
    hideNoDataDiv('noAppointmentsDiv');
    hideNoDataDiv('noNoteDiv');
    hideHeaderDiv();

    //
    showAddAppointmentLink();
    showAddTaskLink();
    clearNoteButtonDiv();
    
    //
    //Clear all the page related db
    ListDB = new Array();
    ListItemsDB = new Array();
    AppointmentsDB = new Array();
    NoteDB = new Array();

    //Sets the option parameter to default
    selectedView = "";
    currentPageId = "";

    //
    hidePageDiv();
    showCalendarView();
}

function hidePageDiv()
{
    var divEle = document.getElementById("pageDiv");
    divEle.style.display = "none";
}

function showCalendarView()
{
    var calDiv = document.getElementById("mainCalendarDiv");
    calDiv.style.display = "block";
    scrollMonth(0);    
}

function showAddTaskItem()
{
    var ddate = getInternalDivDisplayDate();
    document.getElementById("internalAddTaskHeaderDiv").innerHTML = "Add Task "+ddate;

    var divEle = document.getElementById("addTaskItemDiv");
    divEle.style.backgroundColor = "#B8D4EC";
    divEle.style.display = "block";
}

function hideAddTaskItem()
{
    var divEle = document.getElementById("addTaskItemDiv");
    document.getElementById("addTask_TF").value = "";
    divEle.style.display = "none";

    hideSplCharDiv();
}



function hideCalendarView()
{
    //var calDiv = document.getElementById("calendardiv");
    var calDiv = document.getElementById("mainCalendarDiv");
    calDiv.style.display = "none";
}

function getCalenderView()
{
    var calDiv = document.getElementById("mainCalendarDiv");
    calDiv.style.display = "block";
}

function setHeaderDiv(message)
{
    var ddate = getDisplayDate();
    var divEle = document.getElementById("headerDivInPage");
    divEle.innerHTML = "<strong>"+message+" for  " + ddate +"</strong>";
    divEle.style.display = "block";
}

function hideHeaderDiv()
{
    var divEle = document.getElementById("headerDivInPage");
    divEle.style.display = "none";
}

function addListItem()
{
    var listItem = document.getElementById("addTask_TF").value;
    if(trim(listItem) == "")
    {
        alert("Please enter a task name");
        return;
    }
    listItem = getEncodedString(listItem);
    
    //
    showPageSpLoadingDiv("Adding...");

    //disabling add button
    disableButton("taskAdd_button");


    //New page and List has to be created and then
    //this new list item needs to be added
    if(currentPageId == "")
    {
        addNewPageAndListItem();
        //return;
    }
    else
    {
        //If page already exists
        var listId = getCurrentListId();
        var fullurl = getRequestURL("createNewListItem","http://planner.zoho.com/api/private/json/listitem/add");
        fullurl = appendTicketKey(fullurl);
        fullurl += "&listId="+listId+"&listItem="+listItem;
        sendAsyncAJAXRequest( 'GET', fullurl, handleNewListItemResponse );
    }
}

function handleNewListItemResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var resp = eval('('+xmlhttp.responseText+')');
        if(resp != null && resp.response != null)
        {
            addNewListItemDetailsInClient(resp);
        }
        else
        {
            alert("Unable to add the task. Please try again.");
            //return;
        }
        hidePageSpLoadingDiv();
        enableButton("taskAdd_button");
    }
}

function addNewListItemDetailsInClient(resp)
{
    //alert("resp:::::::"+resp);
    var listId = resp.response.result.ListItem.listitem_id;
    var listName = resp.response.result.ListItem.list_item;
    var status = "false";
    var listItem = new ListItem(listId,listName,status);
    ListItemsDB[ListItemsDB.length] = listItem;
    //If this list item is the first one, then the table needs to be created.
    createListItemsTable();
    //
    var ttbody = document.getElementById("taskItemsListTBody");
    addListItemInTBody(listItem,ttbody);
    //
    hideAddTaskItem();
    //
    hideNoDataDiv('noTasksDiv');
}

function getCurrentListId()
{
    var listId = ListDB[0].listId;
    return listId;
}

function addNewPageAndListItem()
{
    var listItem = document.getElementById("addTask_TF").value;
    listItem = getEncodedString(listItem);

    var fullurl = ajaxURL+"method=createNewPageAndListItem&listItem="+listItem;
    fullurl = appendNewPageAndListNames(fullurl);
    fullurl = appendTicketKey(fullurl);
    try
    {
        sendAsyncAJAXRequest( 'GET', fullurl, handleNewPageAndListItemResponse );
    }
    catch(e)
    {
        alert("Unable to send request ");
    }
}

function handleNewPageAndListItemResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var rslt = xmlhttp.responseText;
        var resp = eval(rslt);
        if(resp != null && resp.response != "error")
        {
            var comDet = resp[0];
            var listItemDet = resp[1];
            var pageDetail = comDet[0];
            var listDetail = comDet[1];

            addNewPageInPageDB(pageDetail);
            addNewListInListDB(listDetail);
            //
            addNewListItemDetailsInClient(listItemDet);
            //alert("handleNewPageAndListItemResponse::Resp:::::::::"+resp);
        }
        else
        {
            alert("Unable to add task list");
            //return;
        }
        hidePageSpLoadingDiv();
        enableButton("taskAdd_button");
    }
}

function addNewPageInPageDB(pageDetail)
{
    var pageId = pageDetail.response.result.PageDetails.PageDetail.page_id;
    var pageTitle = pageDetail.response.result.PageDetails.PageDetail.page_title;
    
    var splitdate = pageTitle.split("-");
    var datestr = splitdate[0].split("_");
    var pgDate = new Date;
    pgDate.setDate( datestr[1] );
    pgDate.setMonth( datestr[0] );
    pgDate.setYear( datestr[2] );
    
    //alert("addNewPageInPageDB**pageId:"+pageId+"*pageTitle:"+pageTitle+"*pgDate:"+pgDate+"*");
    var obj = new Page( pageId, pageTitle,pgDate);
    PageDB[PageDB.length] = obj;

    //currentPage
    currentPageId = pageId;
}

function addNewListInListDB(listDetail)
{
    var listId = listDetail.response.result.List.list_id;
    var listName = listDetail.response.result.List.list_name;
    //alert("addNewListInListDB::listId:"+listId+"* listName:"+listName+"*");
    ListDB[ListDB.length] = new List(listId,listName);
}

function appendNewPageAndListNames(urll)
{
    var listName = getListNameForCurrDate();
    var pageName = getPageNameForCurrDate();
    urll = urll + "&pageName="+pageName+"&listName="+listName;
    return urll;
}

function addAnAppointment()
{
    if(!validateAppointmentFields())
    {
        return;
    }
    var dateTime = getAppointmentDateTime();
    var ddate = dateTime[0];
    var ttime = dateTime[1];
    //Selected page's data, time and month
    var currPageDateTime = new Date(currDate.getFullYear() , currDate.getMonth(), currDate.getDate(),0,0,0);
    
    var dateArr = ddate.split("-");

    //Setting hours,minutes and seconds to 0, so the currDateTime is never 
    //lesser than the slctdDate if both the dates are same.
    var slctdDate = new Date(dateArr[2],(dateArr[0]-1),dateArr[1],0,0,0);

    //disabling the add button
    disableButton("appointmentAdd_button");


    //Means the appointment is scheduled for this page.
    if(slctdDate.getTime() == currPageDateTime.getTime())
    {
        addAnAppointmentForThisPage();
    }
    else
    {
        addAnAppointmentForOtherPage(dateTime);
    }
}

function addAnAppointmentForOtherPage(dateTime)
{
    var ddate = dateTime[0];
    var ttime = dateTime[1];
    var namesArr = getPageNameAndListNameForDate(dateTime);
    var pagNa = namesArr[0];
    var pIdd = getPageIdForName(pagNa); 
    if(pIdd == "")
    {
        //create new page,list and appointment 
        addNewPageAndAppointment('future',namesArr[0],namesArr[1]);
    }
    else
    {
        //add an appointment with the fetched pageid
        sendAddAppointmentRequestForPageId('future',pIdd);
    }
}

function getPageIdForName(pName)
{
    var pgeIdd = "";
    var ln = PageDB.length;
    if( ln > 0 )
    {
        for(var i = 0 ; i < ln ; i++ )
        {
            var pn = PageDB[i].pageName;
            if(pName == pn)
            {
                pgeIdd = PageDB[i].pageId;
                break;
            }
        }
    }
    return pgeIdd;
}

function getPageNameAndListNameForDate(dateTime)
{
    var ddateArr = dateTime[0].split("-");
    var ttime = dateTime[1];
    var ddate = 1*ddateArr[1];
    var mmonth = ((ddateArr[0])-1);
    var yyear = ddateArr[2];
    var pageName = mmonth+"_"+ddate+"_"+yyear+"-Page";
    //alert("pppppppppppppppppp:::::::"+pageName);
    var listName = mmonth+"_"+ddate+"_"+yyear+"-List";
    var rtnArr = new Array();
    rtnArr[0] = pageName;
    rtnArr[1] = listName;
    return rtnArr;
}

function addAnAppointmentForThisPage()
{
    //If no page exists for this date
    if(currentPageId == "")
    {
         addNewPageAndAppointment('today','','');
    }
    else
    {
        
        sendAddAppointmentRequestForPageId('today',currentPageId);
    }
}

function sendAddAppointmentRequestForPageId(dday,ppageIdd)
{
    var appTitle = document.getElementById("appointmentTitle_TF").value;
    var dateTime = getAppointmentDateTime();
    var ddate = dateTime[0];
    var ttime = dateTime[1];
    var reminderEle = document.getElementById("remindMeCombo");
    var reminder = reminderEle.options[reminderEle.selectedIndex].value;
    var freqEle = document.getElementById("repeatCombo");
    var freq = freqEle.options[freqEle.selectedIndex].value; 

    appTitle = getEncodedString(appTitle);

    //
    showPageSpLoadingDiv("Adding...");

    var plannerUrll = "http://planner.zoho.com/api/private/json/appointment/add";
    var urll = getRequestURL("addAnAppointment",plannerUrll);
    urll = urll+"&appTitle="+appTitle+"&schDate="+ddate+"&schTime="
        +ttime+"&remindMe="+reminder+"&repeatInt="+freq+"&pageId="+ppageIdd;
    //alert(":::::::::status:::::"+status+":::::::::isCompleted:::::"+isCompleted);
    if(dday == 'today')
    {
        sendAsyncAJAXRequest('GET',urll,handleAppointmentResponse);
    }
    else
    {
        sendAsyncAJAXRequest('GET',urll,handleFutureAppResp);
    }
}

function handleFutureAppResp(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var jsonresp = xmlhttp.responseText;
        var resp = eval('('+jsonresp+')');
        //alert("handleAppointmentResponse:::::::"+resp);
        if(resp != null && resp.response.result != null)
        {
             //
             showScheduledOnOtherDateDiv();
             //
             hideAddAppointment();
        }
        else
        {
            alert("Unable to add appointment");
            //return;
        }
        hidePageSpLoadingDiv();
        enableButton("appointmentAdd_button");
    }
}

function handleAppointmentResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var jsonresp = xmlhttp.responseText;
        var resp = eval('('+jsonresp+')');
        //alert("handleAppointmentResponse:::::::"+resp);
        if(resp != null && resp.response.result != null)
        {
            addAppointmentsInClient(resp);
        }
        else
        {
            alert("Unable to add appointment");
            //return;
        }
        hidePageSpLoadingDiv();
        enableButton("appointmentAdd_button");
    }
}


function addAppointmentsInClient(resp )
{
    if(resp != null && resp.response.result != null)
    {
        var apps = resp.response.result.Appointment;
        addAppointmentsInDB(apps);
        showAppointments();

        //
        hideAddAppointment();

        //
        hideNoDataDiv('noAppointmentsDiv');
    }
    else
    {
        alert("Unable to add appointment");
        return;
    }
}

function addNewPageAndAppointment(dday,newPPageName,newLListName)
{
    var appTitle = document.getElementById("appointmentTitle_TF").value;
    var appAt = document.getElementById("appointmentSchedule_TF").value;
    var dateTime = getAppointmentDateTime();
    var ddate = dateTime[0];
    var ttime = dateTime[1];
    var reminderEle = document.getElementById("remindMeCombo");
    var reminder = reminderEle.options[reminderEle.selectedIndex].value;
    var freqEle = document.getElementById("repeatCombo");
    var freq = freqEle.options[freqEle.selectedIndex].value; 

    appTitle = getEncodedString(appTitle);
    
    //
    showPageSpLoadingDiv("Adding...");

    var fullurl = ajaxURL+"method=createNewPageAndAppointment";
    fullurl = fullurl+"&appTitle="+appTitle+"&schDate="+ddate+"&schTime="
                  +ttime+"&remindMe="+reminder+"&repeatInt="+freq;
    fullurl = appendTicketKey(fullurl);

    try
    {
        if(dday == 'today')
        {
            fullurl = appendNewPageAndListNames(fullurl);
            sendAsyncAJAXRequest( 'GET', fullurl, handleNewPageAndAppointmentResponse );
        }
        else
        {
            fullurl = fullurl +"&pageName="+newPPageName+"&listName="+newLListName;
            sendAsyncAJAXRequest( 'GET', fullurl, handleFutureAppntmntResponse );
        }
    }
    catch(e)
    {
        alert("Unable to send request ");
    }
}

function handleFutureAppntmntResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var jsonresp = xmlhttp.responseText;
        var resp = eval(jsonresp);
        if(resp != null && resp.response != "error")
        {
            var comDet = resp[0];
            var appDet = resp[1];
            var pageDetail = comDet[0];
            var listDetail = comDet[1];

            addNewPageInPageDB(pageDetail);
            //
            if(appDet != null && appDet.response.result != null &&
                appDet.response.result.Appointment != null)
            {
                //
                showScheduledOnOtherDateDiv();
                //
                hideAddAppointment();
            }
            else
            {
                alert("Unable to add appointment");
            }
        }
        else
        {
            alert("Unable to add appointment");
         //   return;
        }
        hidePageSpLoadingDiv();
        enableButton("appointmentAdd_button");
    }
}

function handleNewPageAndAppointmentResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var jsonresp = xmlhttp.responseText;
        var resp = eval(jsonresp);
        if(resp != null && resp.response != "error")
        {
            var comDet = resp[0];
            var appDet = resp[1];
            var pageDetail = comDet[0];
            var listDetail = comDet[1];

            addNewPageInPageDB(pageDetail);
            addNewListInListDB(listDetail);
            //
            addAppointmentsInClient(appDet);

        }
        else
        {
            alert("Unable to add appointment");
         //   return;
        }
        hidePageSpLoadingDiv();
        enableButton("appointmentAdd_button");
    }
}

function validateAppointmentFields()
{
    var appTitle = document.getElementById("appointmentTitle_TF").value;
    if(appTitle == null || trim(appTitle) == "")
    {
        alert("Please enter a valid appointment name");
        return false;
    }
    var appAt = document.getElementById("appointmentSchedule_TF").value;
    if(appAt == null || trim(appAt) == "")
    {
        alert("Please select a schedule date");
        return false;
    }
    if(!checkWithCurrentDate())
    {
        return false;
    }
    return true;
}

function getAppointmentDateTime()
{
    var appAt = document.getElementById("appointmentSchedule_TF").value;
    var hrs = document.getElementById("hoursCombo");
    var hrsVal = hrs.options[hrs.selectedIndex].value;
    var mins = document.getElementById("minutesCombo");
    var minVal = mins.options[mins.selectedIndex].value;
     
    var ampmEle = document.getElementById("ampmCombo");
    var ampm = ampmEle.options[ampmEle.selectedIndex].value;

    if(ampm == "pm")
    {
        if(hrsVal != "12")
        {
            hrsVal = (1*hrsVal) + 12;
            hrsVal = hrsVal +"";
        }
    }
    else
    {
       if(hrsVal == "12")
       {
           hrsVal = "00";
       }
    }
    
    if(hrsVal.length == 1)
    {
        hrsVal = "0"+hrsVal;
    }

    var dateTime = new Array();
    dateTime[0] = appAt;
    dateTime[1] = hrsVal+":"+minVal;
    return dateTime;
}

function checkWithCurrentDate()
{
    var dateTime = getAppointmentDateTime();
    var ddate = dateTime[0];
    var ttime = dateTime[1];
    var currDateTime = new Date();
    
    var dateArr = ddate.split("-");
    var timeArr = ttime.split(":");
    var slctdDate = new Date(dateArr[2],(dateArr[0]-1),dateArr[1],timeArr[0],timeArr[1],0);
    if(currDateTime > slctdDate)
    {
        alert("Schedule date and time should not be lesser than the current time");
        return false;
    }
    var rmCombo = document.getElementById("remindMeCombo");
    var rmVal = rmCombo.options[rmCombo.selectedIndex].text;
    if(rmVal == "on time")
    {
        return true;
    }
    else
    {
        var oneMinInMillis = 60*1000;
        var oneHrInMillis = 60*oneMinInMillis;
        var millis = 0;
        if(rmVal == "15 mins")
        {
            millis = 15*oneMinInMillis;
        }
        else if(rmVal == "30 mins")
        {
            millis = 30*oneMinInMillis;
        }
        else if(rmVal == "1 hour")
        {
            millis = oneHrInMillis;
        }
        else if(rmVal == "2 hours")
        {
            millis = 2*oneHrInMillis;
        }
        else if(rmVal == "6 hours")
        {
            millis = 6*oneHrInMillis;
        }
        else if(rmVal == "12 hours")
        {
            millis = 12*oneHrInMillis;
        }
        else if(rmVal == "1 day")
        {
            millis =  24*oneHrInMillis;
        }
        var currDateInMillis = currDateTime.getTime();
        var slctdDateInMillis = slctdDate.getTime();
        
        var reminderTime = slctdDateInMillis - millis;

        if(reminderTime <= currDateInMillis)
        {
            alert("Appointment cannot be scheduled on expired timeline");
            return false;
        }
    }
    //alert("checkWithCurrentDate:::::: appAt:"+date);
    return true;
}

function deleteAppointments()
{
    var ln = AppointmentsDB.length;
    if(ln == 0)
    {
        return;
    }
    var appIds = "";
    for(var v = 0 ; v < ln ; v++ )
    {
        var appid = AppointmentsDB[v].appointmentId;
        var cbEle = document.getElementById("appCBDel_"+appid);
        if(cbEle != null && cbEle.checked)
        {
            if(appIds != "")
            {
                appIds = appIds + ",";
            }
            appIds = appIds + appid;
        }
    }
    if(appIds == "")
    {
        alert("Please elect an appointment to delete");
        return;
    }
   
    //
    showPageSpLoadingDiv("Deleting...");

    var plannerUrll = "http://planner.zoho.com/api/private/json/appointment/delete/";
    var urll = getRequestURL("deleteAppointments",plannerUrll);
    urll = urll+"&appIds="+appIds;
    //alert(":::::::::status:::::"+status+":::::::::isCompleted:::::"+isCompleted);
    sendAsyncAJAXRequest('GET',urll,handleDeleteAppointmentResponse)
}

function handleDeleteAppointmentResponse(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var jsonresp = xmlhttp.responseText;
        var resp = eval('('+jsonresp+')');
        //alert("handleDeleteAppointmentResponse::::::"+resp);
        if(resp != null && resp.length > 0)
        {
            var lngth = resp.length;
            var errorResp = new Array();
            for(var ij = 0 ; ij < lngth ; ij++ )
            {
                var appId = resp[ij].appointmentId;
                if(resp[ij].zohoResp.response.result != null)
                {
                    appId = resp[ij].zohoResp.response.result.appointment_id;
                    var desc = resp[ij].zohoResp.response.result.description;
                    if(desc == "Appointment removed")
                    {
                        //Change the status in ListItemDB
                        var ln = AppointmentsDB.length;
                        for(var cn = 0 ; cn < ln ; cn++ )
                        {
                            var app_id = AppointmentsDB[cn].appointmentId;
                            if(app_id == appId)
                            {
                                //Splicing the AppointmentsDB 
                                AppointmentsDB.splice(cn,1);
                                break;
                            }
                        }

                        deleteAppointmentsFromTable(appId);
                    }
                    else
                    {
                        errorResp[errorResp.length] = appId;
                    }
                }
                else
                {
                    errorResp[errorResp.length] = appId;
                }
            }
            if(errorResp.length > 0)
            {
                var alertMsg = "Unable to delete the following appointments "; 
                var gg = errorResp.length;
                for(var k = 0 ; k < gg ; k++ )
                {
                    var lg = AppointmentsDB.length;
                    var appIId = errorResp[k];
                    for(var pp = 0 ; pp < lg ; pp++ )
                    {
                        var lId = AppointmentsDB[pp].appointmentId;
                        if(appIId == lId)
                        {
                            var na = AppointmentsDB[pp].appointment;
                            alertMsg = alertMsg + " \n " + na ;
                        }
                    }
                }
                alert(alertMsg);
                //return;
            }
        }
        else
        {
            alert("Unable to get the data from the server");
            //return;
        }
        hidePageSpLoadingDiv();
     }
}

function deleteAppointmentsFromTable(appId)
{
    /*
    var rowId = "appointmentRow_"+appId;
    var ddiv = document.getElementById("appointmentsTBody");
    var divE = document.getElementById(rowId);
    ddiv.removeChild(divE);
    */
    showAppointments();

}

function getEncodedString(str)
{
    var tmp = encodeURIComponent(str);
    return tmp;
}

function getPageIdForCurrDate()
{
    var ln = PageDB.length;
    if(ln == 0)
    {
        return "";
    }
    var curPage = getPageNameForCurrDate();
    for(var cn = 0 ; cn < ln ; cn++ )
    {
        var ppage = PageDB[cn].pageName;
        if(ppage == curPage)
        {
            var pgId = PageDB[cn].pageId;
            return pgId;
        }
    }
    return "";
}

function getCurrPageDataFromMainPage(axn)
{
    //If the date is past date and the date has no
    //tasks,appointments and note, returns with out
    //processing further
    if(!isValidDate())
    {
        alert("No entries for the past date");
        return;
    }
    var currppid = getPageIdForCurrDate();
    fetchPageDataFromServer(axn,currppid);
}

function showDataWithAddView(axn)
{
    //If the date is past date and the date has no
    //tasks,appointments and note, returns with out
    //processing further
    if(!isValidDate())
    {
        alert("Cannot create entries for the past date");
        return;
    }
    //If the date is past date, not allowing to create any new 
    //task or appointment or note
    if(isPastDate())
    {
        alert("Cannot create entries for the past date");
        return;
    }
    var currppid = getPageIdForCurrDate();
    if(axn == 'Tasks')
    {
        showAddTaskItem();
    }
    else if(axn == 'Appointments')
    {
        showAddAppointment();
    }
    else if(axn == 'Note')
    {
        showAddNote();
    }
    fetchPageDataFromServer(axn,currppid);
}

function isValidNoteString(str)
{
    var regExp = /^[a-z-a-z0-9_\-\.\'\@\$\ ]{0,5000}$/i;
    if (!regExp.test(str))
    {
        return false;
    }
    return true;
}

function isValidTaskAndApp(str)
{
    var regExp = /^[a-z-a-z0-9_\-\.\'\@\$\ ]{0,600}$/i;
    if (!regExp.test(str))
    {
        return false;
    }
    return true;
}


function checkSplCharInNote(ev)
{
    var dispText = document.getElementById("textarea_note_display");
    var inText = document.getElementById("textarea_note");
    var val = dispText.value;
    var inVal = replaceStr(val,"\n","----e1n2t3e4r5----");
    if(!isValidNoteString(inVal))
    {
        dispText.value = val.substring(0,(val.length)-1);
        inVal = inVal.substring(0,(inVal.length)-1);
        var pointXX = findPosX(dispText);
        var pointYY = findPosY(dispText);
        pointYY = pointYY-30;
        showSplCharDiv(pointXX,pointYY);
        return
    }
    inText.value = replaceStr(inVal,"----e1n2t3e4r5----","\n");
    inText.value = getEncodedString(inText.value);
    
}
function checkSplCharInStr(idd)
{
    var textId = document.getElementById(idd);
    var val = textId.value;
    if(!isValidTaskAndApp(val))
    {
        textId.value = val.substring(0,(val.length)-1);
        var pointXX = findPosX(textId);
        var pointYY = findPosY(textId);
        pointYY = pointYY-30;
        showSplCharDiv(pointXX,pointYY);
        return
    }
}

function showSplCharDiv(xx,yy)
{
    var divEle = document.getElementById("specialCharDiv");
    divEle.style.top = yy;
    divEle.style.left = xx;
    divEle.style.position = "absolute";
    divEle.classname = "tagmenu";
    divEle.style.display = "block";
}

function hideSplCharDiv()
{
    var divEle = document.getElementById("specialCharDiv");
    divEle.style.display = "none";
}

function showLoadingDiv(message)
{
    var divEle = document.getElementById("loadingDiv");
    divEle.innerHTML = "&nbsp;"+message+"&nbsp; "+loadingImg+" &nbsp;";
    divEle.style.top = lastMouseClickY;
    divEle.style.left = lastMouseClickX;
    divEle.style.position = "absolute";
    divEle.classname = "tagmenu";
    divEle.style.display = "block";
    isLoading = true;
}

function hideLoadingDiv()
{
    var divEle = document.getElementById("loadingDiv");
    divEle.style.display = "none";
    isLoading = false;
}

function showCalendarLoadingDiv()
{
    var divEle = document.getElementById("calendarLoadingDiv");
    divEle.innerHTML = "&nbsp;Loading... &nbsp;"+loadingImg+"&nbsp;";
    divEle.style.display = "block";
}

function hideCalendarLoadingDiv()
{
    var divEle = document.getElementById("calendarLoadingDiv");
    divEle.style.display = "none";
}

function showPageSpLoadingDiv(mssg)
{
    var divEle = document.getElementById("pageSpLoadingDiv");
    divEle.innerHTML = "&nbsp;"+mssg+" &nbsp;"+loadingImg+"&nbsp;";
    divEle.style.display = "block";
}

function hidePageSpLoadingDiv()
{
    var divEle = document.getElementById("pageSpLoadingDiv");
    divEle.style.display = "none";
    deselectSelectAll();
}

function isPastDate()
{
    var todayDate = new Date();
    todayDate.setHours(0);
    todayDate.setMinutes(0);
    todayDate.setSeconds(0);
    //alert("today Date:::"+todayDate);
    if(currDate < todayDate)
    {
        return true;
    }
    return false;
}

//Enables the element
function enableButton(buttonId)
{
    var butEle = document.getElementById(buttonId);
    if(butEle != null)
    {
       butEle.disabled = false;
    }
}

//Disables the element
function disableButton(buttonId)
{
    var butEle = document.getElementById(buttonId);
    if(butEle != null)
    {
       butEle.disabled = true;
    }
}

function showScheduledOnOtherDateDiv()
{
    var divEle = document.getElementById("schedulingForOtherDateDiv");
    var dateTime = getAppointmentDateTime();
    divEle.innerHTML = "Appointment successfully scheduled for "+dateTime[0]+" "+dateTime[1]+".";
    divEle.style.display = "block";
    setTimeout('hideScheduledOnOtherDateDiv()',3000);
}

function hideScheduledOnOtherDateDiv()
{
    var divEle = document.getElementById("schedulingForOtherDateDiv");
    divEle.style.display = "none";
}

function showTimeZoneDiv()
{
    setTimezoneInCombo();
    var divEle = document.getElementById("TimeZoneDiv");
    divEle.style.position = "absolute";
    divEle.classname = "tagmenu";
    divEle.style.backgroundColor = "#FFFFFF";
    divEle.style.display = "block";
}

function setTimezoneInCombo()
{
    //Send request to server to fetch the existing timezone value
    if(ttimezone == "")
    {
        showDiv('timezoneLoadingDiv');
        var urll = getRequestURL( "getPlannerTimeZone", "http://planner.zoho.com/api/private/json/timezone/get" );
        sendAsyncAJAXRequest( 'GET', urll, handleGetTZResp );
    }
    else
    {
        setTimeZone(ttimezone);
    }
}


function handleGetTZResp(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var jsonResp = xmlhttp.responseText;
        if(jsonResp == null)
        {
           alert("Unable to fetch the configured timezone");
        }
        else
        {
            var resp = eval('('+jsonResp+')');
            //alert("handleGetTZResp::::::"+resp);
            if(resp != null && resp.response.result != null)
            {
                var tz = resp.response.result.TimeZone.time_zone;
                //set ttimezone on success.
                ttimezone = tz;
                setTimeZone(ttimezone);
            }
            else
            {
                alert("Unable to fetch the configured timezone");
            }
        }
        hideDiv('timezoneLoadingDiv');
    }
}

function configureTimezone()
{
     var slctdVal = getSelectedTimeZone();
     //If the selected time zone and the existing time zone are same
     if(slctdVal == ttimezone)
     {
         return;
     }
     slctdVal = getEncodedString(slctdVal);
     showDiv('timezoneLoadingDiv');
     var urll = getRequestURL( "setPlannerTimeZone", "http://planner.zoho.com/api/private/json/timezone/set" );
     urll = urll+"&timeZone="+slctdVal;
     sendAsyncAJAXRequest( 'GET', urll, handleSetTZResp );
}

function handleSetTZResp(xmlhttp)
{
    if(xmlhttp.readyState == 4)
    {
        var jsonresp = xmlhttp.responseText;
        if(jsonresp == null)
        {
            alert("Unable to configure the timezone");
        }
        else
        {
            var resp = eval('('+jsonresp+')');
            //alert("handleSetTZResp:::::::"+resp);
            if(resp != null && resp.response.result != null)
            {
                var tz = resp.response.result.TimeZone.time_zone;
                //set ttimezone on success.
                ttimezone = tz;
                hideTimeZoneDiv();
		alert("Time Zone set successfully");
            }
            else
            {
                alert("Unable to configure the timezone");
            }
        }
        hideDiv('timezoneLoadingDiv');
    }
}

function hideTimeZoneDiv()
{
    var divEle = document.getElementById("TimeZoneDiv");
    divEle.style.display = "none";
}

function showDiv(divId)
{
    var divEle = document.getElementById(divId);
    if(divId != null)
    {
        divEle.style.display = "block";
    }
}

function hideDiv(divId)
{
    var divEle = document.getElementById(divId);
    if(divId != null)
    {
        divEle.style.display = "none";
    }
}

function getInternalDivDisplayDate()
{
    var month = currDate.getMonth() + 1;
    var date  = currDate.getDate();
    var year = ""+currDate.getFullYear();
    year = year.substring(2);
    var str = month+"-"+date+"-"+year;
    return str;
}


function callCalendar(inpField, but)
{
    Calendar.setup({ 
        inputField     :    inpField,                // id of the input field
        ifFormat       :    "%m-%d-%Y",       // format of the input field
        button         :    but,         // trigger for the calendar (button ID)
        align          :    "Tl"           // alignment (defaults to "Bl")
        });
}
