var debugTitles = false;
var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var days = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
var list = "";
var alt;
var ampm = true;
var timeSep = ":";

function altFunc() {
    if (alt == true) {
        return "alt";
    } else {
        return "";
    }
}


function sortit(a, b) {
    return (a - b);
}


function addEvent(taskid, vtitle, vduration, vattended) {
    if (debugTitles) debug("addEvent");
    document.getElementById("editButton").value = "Add Event";
    document.getElementById("editButton").onclick = addEventSave;
    document.getElementById("editId").value = "";
    document.getElementById("taskId").value = (taskid) ? taskid : "";
    document.getElementById("editWhat").value = (vtitle) ? vtitle : "";
    document.getElementById("editLocation").value = "";
    document.getElementById("editDate").value = "";
    document.getElementById("selEdit_Hour").value = timeSel(8, "h");
    document.getElementById("selEdit_Min").value = timeSel(0, "m");
    document.getElementById("editTime").value = "";
    document.getElementById("editHours").value = "";
    document.getElementById("editHours_Hour").value = (vduration) ? hourSel(vduration, "h") : hourSel(1, "h");
    document.getElementById("editHours_Min").value = (vduration) ? hourSel(vduration, "m") : hourSel(0, "m");
    editColour("Blue");
    document.getElementById("editNotes").value = "";
    attClear();
    if (vattended) {
        id('attSelect').selectedIndex = 0;
        attEdit(vattended);
    } else {
        id('attText').style.display = "none";
        id('attSelect').style.display = "none";
    }
    id("eventAttachments").style.display = "none";
    document.getElementById("attachFileLink").style.display = "none";
    hideDialogs();
    document.getElementById("eventEdit").style.display = "block";
    id("eventEdit").style.top = String(dialogY() + "px");
    document.getElementById("editWhat").focus();
}


function addEventSave() {
    if (debugTitles) debug("addEventSave");
    saveStart();
    document.getElementById("eventEdit").style.display = "none";
    var vtaskid = document.getElementById("taskId").value;
    var vtitle = document.getElementById("editWhat").value;
    var vlocation = document.getElementById("editLocation").value;
    var vnotes = document.getElementById("editNotes").value;
    var vcolour = document.getElementById("editColour").value;
    var vdate = document.getElementById("editDate").value;
    var vtime = document.getElementById("selEdit_Hour").value + "." + document.getElementById("selEdit_Min").value;
    var vduration = document.getElementById("editHours_Hour").value + "." + document.getElementById("editHours_Min").value;
    var attendees = id("editAttend").value;
    createEventOnServer(vdate, vtime, vduration, vcolour, vtitle, vlocation, vnotes, vtaskid);
}


function createEvent(id, date, time, duration, colour, title, location, notes, attended, privated) {
    if (debugTitles) debug("createEvent");
    saveStop();
    var de;
    var dt;
    for (var i = 0; i < dEvent.length; i++) {
        var cDate = dEvent[i][1].split("-");
        cDate = new Date(cDate[2], cDate[1], cDate[0]);
        var nDate = date.split("-");
        nDate = new Date(nDate[2], nDate[1], nDate[0]);
        if (nDate == cDate) {
            var cEvents = new Array();
            for (var c = 0; c < dEvent.length; c++) {
                if (dEvent[c][1] == dEvent[i][1]) cEvents.push(c);
            }
            for (var d = 0; d < cEvents.length; d++) {
                var cTime = parseFloat(dEvent[cEvents[d]][2]);
                var nTime = parseFloat(time);
                if (nTime < cTime) {
                    de = cEvents[d];
                    break;
                }
            }
            if (!de) {
                de = cEvents[cEvents.length] + 1;
            }
        } else if (nDate < cDate) {
            de = i;
            break;
        }
    }
    if (!de) de = dEvent.length;
    dEvent.splice(de, 0, "temp");
    dEvent[de] = new Array();
    dEvent[de][0] = id;
    dEvent[de][1] = date;
    dEvent[de][2] = time;
    dEvent[de][3] = duration;
    dEvent[de][4] = colour;
    dEvent[de][5] = title;
    dEvent[de][6] = location;
    dEvent[de][7] = notes;
    dEvent[de][8] = "unlocked";
    dEvent[de][9] = attended;
    dEvent[de][10] = privated;
    listInit();
}


function listInit() {
    if (debugTitles) debug("listInit");
    alt = false;
    list = '<br />';
    if (calLocked == false && allowAdd) {
        list += '<div class="crud"><a class="add" href="javascript:addEvent();">Add Event</a></div>';
        list += '<hr />';
    }
    if (dEvent.length < 1) {
        list += '<p>There are no forthcoming events on this calendar.</p>';
    } else {
        for (var i = 0; i < dEvent.length; i++) {
            if (i > 0) {
                if (dEvent[i][1] == dEvent[i - 1][1]) {
                    alt = (alt == true) ? false : true;
                    list += '<table class="calList" id="tier1_' + dEvent[i][0].split("_")[1] + '" cellspacing="0" cellpadding="0">';
                    list += '<tr class="' + altFunc() + '">';
                } else {
                    list += '<table class="calList" cellspacing="0" cellpadding="0">';
                    list += '<tr class="' + altFunc() + '" id="tier1_' + dEvent[i][0].split("_")[1] + '">';
                }
            } else {
                list += '<table class="calList" cellspacing="0" cellpadding="0">';
                list += '<tr id="tier1_' + dEvent[i][0].split("_")[1] + '">';
            }
            var eDate = dEvent[i][1].split("-");
            eDate = new Date(eDate[0], (eDate[1] - 1), eDate[2]);
            list += '<td class="col1"><p>' + days[eDate.getDay()] + '</p></td>';
            list += '<td class="col2"><p>' + months[eDate.getMonth()].substr(0, 3) + ' ' + eDate.getDate() + ', ' + eDate.getFullYear() + '</p></td>';
            list += '<td class="col3"><p>' + fracTime(dEvent[i][2]) + '</p></td>';
            list += '<td class="col3"><p> ' + fracTime(parseFloat(dEvent[i][2]) + parseFloat(dEvent[i][3])) + '</p></td>';
            var colourFix = dEvent[i][4];
            var titlePrivate = (dEvent[i][10] && (allowEdit == false || dEvent[i][8] == "locked")) ? "Private Event" : dEvent[i][5];
            list += '<td class="col4"><p><a class="l' + colourFix + '" href="javascript:listDetail(\'' + dEvent[i][0].split("_")[1] + '\');">' + titlePrivate + '</a></p></td>';
            var atten = String(dEvent[i][9]).split("||");
            var attendessNames = '';
            var counter = 0;
            for (var at = 0; at < atten.length; at++) {
                if (atten[at].length > 0) {
                    var holder = String(atten[at]).split("|");
                    if (holder.length > 0) {
                        if (holder[1].length > 0) {
                            if (attendessNames.length > 0) {
                                attendessNames += ', ' + holder[1];
                            } else {
                                attendessNames += holder[1];
                            }
                        }
                    }
                }
            }
            list += '<td class="col5"><p> ' + attendessNames + '</p></td>';
            list += '</tr>';
            list += '<tr class="tier2 ' + altFunc() + '">';
            list += '<td class="col1"></td><td class="col2"></td><td class="col3"></td><td>';
            list += '<div class="listMore" id="tier2_' + dEvent[i][0].split("_")[1] + '" style="display: none;">';
            list += '<p>';
            list += '<strong>' + fracTime(dEvent[i][2]) + ' - ' + fracTime(parseFloat(dEvent[i][2]) + parseFloat(dEvent[i][3])) + '</strong>&#160;&#160;&#160;(' + dEvent[i][3] + 'hr)<br />';
            list += '</p>';
            if (dEvent[i][8] == "locked") list += '<p>This event is locked</p>';
            list += '<p>';
            list += 'Notes: ' + dEvent[i][7] + '<br />';
            list += '</p>';
            list += '<hr />';
            list += '<div class="crud">';
            if (calLocked == false) {
                if (dEvent[i][8] != "locked" && allowEdit) {
                    list += '<a class="edit" href="javascript:editEvent(' + i + ');">edit</a>';
                    list += '<a class="delete" href="javascript:eventDelete(' + i + ');">delete</a>';
                }
                if (allowAdd) list += '<a class="duplicate" href="javascript:duplicateEvent(' + i + ');">duplicate</a>';
            }
            list += '</div>';
            list += '</div>';
            list += '</td></tr></table>';
            alt = (alt == true) ? false : true;
        }
        list += '</table>';
    }
    document.getElementById("newness").innerHTML = list;
    includeFunc("newness");
}


function ap(x) {
    var aap = parseFloat(x);
    aap = (aap < 12) ? "am" : "pm";
    if (ampm == true) return aap;
    else return "";
}


function listDetail(x) {
    displayEvent(plar(String("event_" + x), "dEvent", 0));
}


function editEvent(de) {
    if (debugTitles) debug("editEvent");
    hideDialogs();
    globalDE = de;
    id('attText').style.display = "block";
    id('attSelect').style.display = "block";
    id("editButton").value = "Save";
    id("editButton").onclick = editSave;
    var ddate = String(dEvent[de][1].split("-"));
    var ttime = String(dEvent[de][2]);
    var hhours = String(dEvent[de][3]);
    id("eventAttachments").style.display = "block";
    checkForAttachments(dEvent[de][0]);
    if(calendarEntityCreation)
      id("editCreateEntityEvent").checked = (dEvent[de][11] == true) ? true : false;
    document.getElementById("attachFileLink").style.display = "block";
    id("attachFormEventID").value = dEvent[de][0];
    id("editId").value = dEvent[de][0];
    id("editDate").value = dEvent[de][1];
    id("editTime").value = ttime;
    id("editHours").value = hhours;
    editColour(dEvent[de][4]);
    id("editWhat").value = dEvent[de][5];
    id("editLocation").value = dEvent[de][6];
    id("editNotes").value = pipeBreak(dEvent[de][7]);
    id("selEdit_Hour").value = timeSel(ttime, "h");
    id("selEdit_Min").value = timeSel(ttime, "m");
    id("editHours_Hour").value = hourSel(hhours, "h");
    id("editHours_Min").value = hourSel(hhours, "m");
    id('attSelect').selectedIndex = 0;
    attEdit(dEvent[de][9]);
    id("editPrivate").checked = (dEvent[de][10] == true) ? true : false;
    id("eventEdit").style.display = "block";
    id("eventEdit").style.top = String(dialogY() + "px");
}

function attendeeUpdate() {
    if (debugTitles) debug("attendeeUpdate");
    saveStart();
    var de = globalDE;
    toggalContent('front');
    id("eventDisplay").style.display = "none";
    var vid = dEvent[de][0];
    var vdate = dEvent[de][1];
    var vtime = dEvent[de][2];
    var vduration = dEvent[de][3];
    id("editAttend").value = attSave();
    var attendees = id("editAttend").value;

    $.ajax({
        type: "POST",
        url:  "search/ajax2/updateEventAttendee/",
        data: "&id=" + vid + "&attendees=" + attendees + "&date=" + vdate + "&time=" + vtime + "&duration=" + vduration,
        success: function (msg) {
            if (msg == '200') {
                jGrowl('no clashes');
            } else {
                jGrowl('There are clashes. Please amend or cancel (esc).');
            }
            saveStop();
            dEvent[de][9] = attendees;
            rash("Changes saved!");
        }
    });
}

function editSave() {
    if (debugTitles) debug("editSave");
    saveStart();
    var de = globalDE;
    id("eventEdit").style.display = "none";
    var vid = id("editId").value;
    var vdate = id("editDate").value;
    var vtime = id("selEdit_Hour").value + "." + id("selEdit_Min").value;
    var vduration = id("editHours_Hour").value + "." + id("editHours_Min").value;
    var vcolour = id("editColour").value;
    var vtitle = id("editWhat").value;
    var vlocation = id("editLocation").value;
    id("editAttend").value = attSave();
    var attendees = id("editAttend").value;
    var vprivated = (id("editPrivate").checked) ? "1" : "0";
    var vcreateEntityEvent = '';
    if(calendarEntityCreation) {
      var vcreateEntityEvent = (id("editCreateEntityEvent").checked) ? "1" : "0";
    }
    var checkval = id("editNotes").value;
    checkval = checkval.replace(/\r\n/g, "|");
    checkval = checkval.replace(/\r/g, "|");
    checkval = checkval.replace(/\n/g, "|");
    var vnotes = checkval;
    editMonthEventProperties(de, vid, vtitle, vlocation, vnotes, vcolour, attendees, vdate, vtime, vduration, vprivated, vcreateEntityEvent);
}


function duplicateEvent(de) {
    if (debugTitles) debug("duplicateEvent");
    attClear();
    id('attText').style.display = "none";
    id('attSelect').style.display = "none";
    document.getElementById("editButton").value = "Duplicate";
    document.getElementById("editButton").onclick = duplicateSave;
    var ddate = String(dEvent[de][1].split("-"));
    var ttime = String(dEvent[de][2]);
    var hhours = String(dEvent[de][3]);
    document.getElementById("editId").value = dEvent[de][0];
    document.getElementById("editWhat").value = dEvent[de][5];
    document.getElementById("editLocation").value = dEvent[de][6];
    document.getElementById("editDate").value = dEvent[de][1];
    document.getElementById("selEdit_Hour").value = timeSel(ttime, "h");
    document.getElementById("selEdit_Min").value = timeSel(ttime, "m");
    document.getElementById("editTime").value = ttime;
    document.getElementById("editHours").value = hhours;
    document.getElementById("editHours_Hour").value = hourSel(hhours, "h");
    document.getElementById("editHours_Min").value = hourSel(hhours, "m");
    editColour(dEvent[de][4]);
    document.getElementById("editNotes").value = pipeBreak(dEvent[de][7]);
    id("eventEdit").style.height = dialogY() + "px";
    hideDialogs();
    document.getElementById("eventEdit").style.display = "block";
}


function duplicateSave() {
    if (debugTitles) debug("duplicateSave");
    saveStart();
    document.getElementById("eventEdit").style.display = "none";
    var xid = document.getElementById("editId").value;
    var vtitle = document.getElementById("editWhat").value;
    var vlocation = document.getElementById("editLocation").value;
    var vcolour = document.getElementById("editColour").value;
    var vdate = document.getElementById("editDate").value;
    var vtime = document.getElementById("selEdit_Hour").value + "." + document.getElementById("selEdit_Min").value;
    var vduration = document.getElementById("editHours_Hour").value + "." + document.getElementById("editHours_Min").value;
    var attendees = id("editAttend").value;
    var checkval = id("editNotes").value;
    checkval = checkval.replace(/\r\n/g, "|");
    checkval = checkval.replace(/\r/g, "|");
    checkval = checkval.replace(/\n/g, "|");
    var vnotes = checkval;
    createEventOnServer(vdate, vtime, vduration, vcolour, vtitle, vlocation, vnotes);
}


function timeSel(x, t) {
    if (debugTitles) debug("timeSel");
    var rtime;
    var x_str = String(x);
    for (var tt = 0; tt < x_str.length; tt++) {
        if (t == "h") {
            if (String(x_str).charAt(tt) == ".") {
                rtime = x_str.split(".")[0];
                break;
            } else {
                rtime = x_str;
            }
        } else if (t == "m") {
            if (String(x_str).charAt(tt) == ".") {
                rtime = x_str.split(".")[1];
                break;
            } else {
                rtime = 0;
            }
        }
    }
    return rtime;
}


function hourSel(x, t) {
    if (debugTitles) debug("hourSel");
    var rhours;
    var x_str = String(x);
    for (var hh = 0; hh < x_str.length; hh++) {
        if (t == "h") {
            if (String(x_str).charAt(hh) == ".") {
                rhours = x_str.split(".")[0];
                break;
            } else {
                rhours = x_str;
            }
        } else if (t == "m") {
            if (String(x_str).charAt(hh) == ".") {
                rhours = x_str.split(".")[1];
                break;
            } else {
                rhours = 0;
            }
        }
    }
    return rhours;
}
var cset = "b";

function editColour(x) {
    if (debugTitles) debug("editColour");
    var cArray = new Array('Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Pink', 'Grey');
    for (var ci = 0; ci < cArray.length; ci++) {
        document.getElementById("edit" + cArray[ci]).src =  "images/" + cset + cArray[ci] + "0.gif";
    }
    document.getElementById("edit" + x).src =  "images/" + cset + x + "1.gif";
    document.getElementById("editColour").value = x;
}
Now = new Date();
NowDay = Now.getDate();
NowMonth = Now.getMonth();
NowYear = Now.getFullYear();
if (NowYear < 2000) NowYear += 1900;

function DaysInMonth(WhichMonth, WhichYear) {
    var DaysInMonth = 31;
    if (WhichMonth == "Apr" || WhichMonth == "Jun" || WhichMonth == "Sep" || WhichMonth == "Nov") DaysInMonth = 30;
    if (WhichMonth == "Feb" && (WhichYear / 4) != Math.floor(WhichYear / 4)) DaysInMonth = 28;
    if (WhichMonth == "Feb" && (WhichYear / 4) == Math.floor(WhichYear / 4)) DaysInMonth = 29;
    return DaysInMonth;
}


function ChangeOptionDays(whichForm, Which) {
    DaysObject = eval("document." + whichForm + "." + Which + "Day");
    MonthObject = eval("document." + whichForm + "." + Which + "Month");
    YearObject = eval("document." + whichForm + "." + Which + "Year");
    Month = MonthObject[MonthObject.selectedIndex].text;
    Year = YearObject[YearObject.selectedIndex].text;
    DaysForThisSelection = DaysInMonth(Month, Year);
    CurrentDaysInSelection = DaysObject.length;
    if (CurrentDaysInSelection > DaysForThisSelection) {
        for (i = 0; i < (CurrentDaysInSelection - DaysForThisSelection); i++) {
            DaysObject.remove(DaysObject.options.length - 1);
        }
    }
    if (DaysForThisSelection > CurrentDaysInSelection) {
        for (i = 0; i < (DaysForThisSelection - CurrentDaysInSelection); i++) {
            NewOption = new Option(DaysObject.options.length + 1);
            try {
                DaysObject.add(NewOption, null);
            }
            catch(ex) {
                DaysObject.add(NewOption);
            }
        }
    }
    if (DaysObject.selectedIndex < 0) DaysObject.selectedIndex == 0;
}


function SetToToday(whichForm, Which) {
    DaysObject = eval("document." + whichForm + "." + Which + "Day");
    MonthObject = eval("document." + whichForm + "." + Which + "Month");
    YearObject = eval("document." + whichForm + "." + Which + "Year");
    YearObject[0].selected = true;
    MonthObject[NowMonth].selected = true;
    ChangeOptionDays(whichForm, Which);
    DaysObject[NowDay - 1].selected = true;
}


function WriteYearOptions(YearsAhead) {
    line = "";
    for (i = 0; i < YearsAhead; i++) {
        line += '<option value="' + (NowYear + i) + '">';
        line += NowYear + i;
        line += '</option>';
    }
    return line;
}


function durationCheck(id) {
    if (debugTitles) debug("durationCheck");
    var selKind = String(id).split("_");
    if (selKind[1] == "Min") {
        if (document.getElementById(id).value == 0 && document.getElementById(selKind[0] + "_Hour").value == 0) document.getElementById(selKind[0] + "_Hour").value = 1;
    } else if (selKind[1] == "Hour") {
        if (document.getElementById(id).value == 0 && document.getElementById(selKind[0] + "_Min").value == 0) document.getElementById(selKind[0] + "_Min").value = 25;
    }
}


function eventCancel(x) {
    if (debugTitles) debug("eventCancel");
    document.getElementById(x).style.display = "none";
    document.body.focus();
}


function editMonthSave() {
    if (debugTitles) debug("editMonthSave");
    saveStart();
    document.getElementById("eventEdit").style.display = "none";
    var xid = document.getElementById("editId").value;
    var title = document.getElementById("editWhat").value;
    var location = document.getElementById("editLocation").value;
    var notes = document.getElementById("editNotes").value;
    var colour = document.getElementById("editColour").value;
    var date = document.getElementById("editDate").value;
    var time = document.getElementById("selEdit_Hour").value + "." + document.getElementById("selEdit_Min").value;
    var duration = document.getElementById("editHours_Hour").value + "." + document.getElementById("editHours_Min").value;
    var attendees = id("editAttend").value;
    editListEventProperties(xid, title, location, notes, colour, date, time, duration);
}


function editSuccess(de) {
    if (debugTitles) debug("editSuccess");
    saveStop();
    var xid = id("editId").value;
    dEvent[de][1] = id("editDate").value;
    dEvent[de][2] = id("selEdit_Hour").value + "." + id("selEdit_Min").value;
    dEvent[de][3] = id("editHours_Hour").value + "." + id("editHours_Min").value;
    dEvent[de][4] = id("editColour").value;
    dEvent[de][5] = id("editWhat").value;
    dEvent[de][6] = id("editLocation").value;
    var checkval = id("editNotes").value;
    checkval = checkval.replace(/\r\n/g, "|");
    checkval = checkval.replace(/\r/g, "|");
    checkval = checkval.replace(/\n/g, "|");
    dEvent[de][7] = checkval;
    dEvent[de][9] = id("editAttend").value;
    dEvent[de][10] = id("editPrivate").checked;
    if(calendarEntityCreation)
      dEvent[de][11] = id("editCreateEntityEvent").checked;
    var ftime = fracTime(dEvent[de][2]);
    var fhours = parseFloat(dEvent[de][2]) + parseFloat(dEvent[de][3]);
    fhours = fracTime(fhours);
    listInit();
    rash("Changes saved!");
}
Array.prototype.remove = function (s) {
    for (i = 0; i < this.length; i++) {
        if (s == this[i]) this.splice(i, 1);
    }
}


function eventDelete(de) {
    if (debugTitles) debug("eventDelete");
    document.getElementById("eventEdit").style.display = "none";
    var listItem = String(dEvent[de][0]).split("_");
    var idToDelete = dEvent[de][0];
    var spliceIndex = parseInt(de);
    dEvent.splice(spliceIndex, 1);
    listInit();
    xdeleteEvent(idToDelete);
    hideDialogs();
}
var attArray = new Array();
var orig = new Array();

function atArray(str) {
    if (debugTitles) debug("atArray");
    attArray = new Array();
    if (str != '' && String(str).indexOf('|') != -1) {
        if (String(str).indexOf('||') != -1) {
            att = String(str).split('||');
            for (var i = 0; i < att.length; i++) {
                attArray[i] = String(att[i]).split('|');
            }
        } else {
            attArray[0] = String(str).split('|');
        }
    }
    attRedraw();
}


function attAdd(x, y) {
    if (debugTitles) debug("attAdd");
    var argLength = arguments.length;
    if (String(x) == 'attSelect') {
        var obj = id(x);
        var de = obj.value;
        var attType = String(obj.options[obj.selectedIndex].id).split('_');
        var anyDuplicates = attDuplicate(obj.value);
    } else {
        var de = arguments[0];
        var dePlace = plar(de, 'orig', 0);
        orig[dePlace][2] = true;
        var anyDuplicates = false;
    }
    if (String(x) == 'attSelect' && (id(x).value == 'null1' || id(x).value == 'null2')) {
        obj.selectedIndex = 0;
    } else {
        var attList = id('attendees');
        if (anyDuplicates == false) {
            var ahref = document.createElement('a');
            ahref.innerHTML = "x";
            ahref.href = (argLength == 1) ? "javascript:attRemove(" + de + ");" : "javascript:attRemove(" + de + ", 'This is a second argument for attendees not in the select.');";
            if (String(x) == 'attSelect') {
                if (String(id(x).options[id(x).selectedIndex].id).indexOf("orig") != -1) {
                    var dePlace = plar(String(de), 'orig', 0);
                    var newAttText = document.createTextNode(orig[dePlace][1]);
                } else {
                    var dePlace = plar(String(de), 'attArray', 0);
                    var newAttText = document.createTextNode(attArray[dePlace][1]);
                }
            } else {
                var dePlace = plar(String(de), 'orig', 0);
                var newAttText = document.createTextNode(orig[dePlace][1]);
            }
            var newAtt = document.createElement("li");
            newAtt.id = "attLi_" + de;
            newAtt.className = "attendee";
            newAtt.appendChild(ahref);
            newAtt.appendChild(newAttText);
            attList.appendChild(newAtt);
        }
    }
    if (argLength == 1) obj.selectedIndex = 0;
}


function attDuplicate(num) {
    if (debugTitles) debug("attDuplicate");
    for (var n = 0; n < orig.length; n++) {
        if (String(orig[n][0]) == String(num) && eval(orig[n][2]) == true) {
            return true;
            break;
        }
    }
    return false;
}


function attOptionsPre() {
    if (debugTitles) debug("attOptionsPre");
    var pre = '';
    if (attArray && attArray.length >= 1) {
        pre += '<option value="null1" selected="selected">' + attArray.length + ' results returned</option>';
        pre += '<option value="null2"> </option>';
    } else {
        pre += '<option value="null1">Please use search field above</option>'
    }
    return pre;
}


function attOptions(str) {
    if (debugTitles) debug("attOptions");
    var options = "";
    if (attArray && attArray.length >= 1) {
        for (var a = 0; a < attArray.length; a++) {
            options += '<option id="attOption_' + attArray[a][0] + '" value="' + attArray[a][0] + '">' + attArray[a][1] + '</option>';
        }
    }
    return options;
}


function attToggle(de, orig) {
    if (debugTitles) debug("attToggle");
    if (id("attOption_" + de) && id("attOption_" + de).style.display == 'none') {
        id("attOption_" + de).style.display = 'block';
    } else if (id("attOption_" + de)) {
        id("attOption_" + de).style.display = 'none';
    }
    if (id("origOption_" + de) && id("origOption_" + de).style.display == 'none') {
        id("origOption_" + de).style.display = 'block';
    } else if (id("origOption_" + de)) {
        id("origOption_" + de).style.display = 'none';
    }
}


function attHide(de, orig) {
    if (debugTitles) debug("attHide");
    if (id("attOption_" + de)) {
        id("attOption_" + de).style.display = 'none';
    }
    if (id("origOption_" + de)) {
        id("origOption_" + de).style.display = 'none';
    }
}


function attRemove(de, heh) {
    if (debugTitles) debug("attRemove");
    var attList = id('attendees');
    attList.removeChild(id("attLi_" + de));
    if (arguments.length == 1) {} else {
        attRedraw(de, false);
    }
}


function plar(de, arr, place) {
    if (debugTitles) debug("plar");
    if (isArray(eval(arr + '[0]'))) {
        for (var d = 0; d < eval(arr + '.length'); d++) {
            if (place || place == 0) {
                if (eval(arr + '[' + d + '][' + parseFloat(place) + ']') == de) {
                    return d;
                    break;
                }
            } else {
                if (eval(arr + '[' + d + ']') == de) {
                    return d;
                    break;
                }
            }
        }
    } else {
        if (place || place == 0) {
            if (eval(arr + '[0][' + parseFloat(place) + ']') == de) {
                return 0;
            }
        } else {
            if (eval(arr + '[0]') == de) {
                return 0;
            }
        }
    }
}


function attRedraw(de, bool) {
    if (debugTitles) debug("attRedraw");
    if (de) {
        var dePlace = plar(de, 'orig', 0);
        orig[dePlace][2] = eval(bool);
    }
    var attSel = id("attSelect");
    attSel.innerHTML = "";
    attSel.innerHTML += attOptionsPre();
    var anyOrigs = false;
    for (var h = 0; h < orig.length; h++) {
        if (orig[h][2] == false) {
            anyOrigs = true;
            attSel.innerHTML += '<option class="orig" id="origOption_' + orig[h][0] + '" value="' + orig[h][0] + '">' + orig[h][1] + '</option>';
        }
        if (h == (orig.length - 1) && anyOrigs == true) {
            attSel.innerHTML += '<option value="null2"> </option>';
        }
    }
    attSel.innerHTML += attOptions();
}


function attEdit(str) {
    if (debugTitles) debug("attEdit");
    attClear();
    var att = new Array();
    if (str != '' && String(str).indexOf('|') != -1) {
        if (String(str).indexOf('||') != -1) {
            att = String(str).split('||');
            for (var i = 0; i < att.length; i++) {
                orig[i] = String(att[i]).split('|');
                orig[i][orig[i].length] = true;
                attAdd(orig[i][0], orig[i][1]);
            }
        } else {
            orig[0] = String(str).split('|');
            orig[0][orig[0].length] = true;
            attAdd(orig[0][0], orig[0][1]);
        }
    }
}


function attClear() {
    if (debugTitles) debug("attClear");
    id('attText').value = "";
    orig = new Array();
    id('attUl').innerHTML = '<ul id="attendees"></ul>';
}


function attCheckDuplicate(str) {
    if (debugTitles) debug("attCheckDuplicate");
    var attList = id('attendees');
    var li = attList.getElementsByTagName('li');
    var attSel = id('attSelect');
    var options = attSel.getElementsByTagName('option');
    for (var l = 0; l < li.length; l++) {
        var liText = String(li[l].innerHTML);
        var caps = (liText.indexOf('</A>') != -1) ? true : false;
        liText = (caps == true) ? liText.substr(parseFloat(liText.indexOf('</A>')) + 4, liText.length) : liText.substr(parseFloat(liText.indexOf('</a>')) + 4, liText.length);
        for (var o = 0; o < options.length; o++) {
            if (liText == options[o].innerHTML) {
                attHide(String(options[o].id).split('_')[1]);
            }
        }
    }
}


function attSave() {
    if (debugTitles) debug("attSave");
    var attList = id('attendees');
    var li = attList.getElementsByTagName('li');
    var str = "";
    for (var s = 0; s < li.length; s++) {
        var liSplit = String(li[s].innerHTML);
        var caps = (liSplit.indexOf('</A>') != -1) ? true : false;
        liSplit = (caps == true) ? liSplit.substr(parseFloat(liSplit.indexOf('</A>')) + 4, liSplit.length) : liSplit.substr(parseFloat(liSplit.indexOf('</a>')) + 4, liSplit.length);
        str += String(li[s].id).split("_")[1];
        str += "|";
        str += liSplit;
        if (s < (li.length - 1)) str += "||";
    }
    return str;
}


function isArray(obj) {
    if (debugTitles) debug("isArray");
    return (typeof(obj.length) == "undefined") ? false : true;
}


function viewChange(state) {
    if (debugTitles) debug("viewChange");
    id("newness").innerHTML = '';
    if (String(state).toLowerCase() == "month") {
        view = "month";
        monthView(setDate);
    } else if (String(state).toLowerCase() == "list") {
        view = "list";
        listInit();
    } else if (String(state).toLowerCase() == "week") {
        view = "week";
        weekView();
    }
    YAHOO.example.DDApp.init();
}


function eventTools(de) {
    if (debugTitles) debug("eventTools");
    if (de == 0) {
        var lock = String(dEvent[de][8]);
    }
    if (!dEvent[de][8] && !lock) {
        var lock = "unlocked";
    } else {
        var lock = String(dEvent[de][8]);
    }
    id("toolEdit").style.display = (allowEdit) ? "block" : "none";
    id("toolDelete").style.display = (allowEdit) ? "block" : "none";
    id("toolDuplicate").style.display = (allowAdd) ? "block" : "none";
    if (calLocked == false && lock != "locked") {
        id("toolLocked").style.display = "none";
        id("toolUnlocked").style.display = "block";
    } else {
        id("toolUnlocked").style.display = "none";
        id("toolLocked").style.display = "block";
    }
    id("toolboxId").value = dEvent[de][0];
    id("toolEdit").href = "javascript:editEvent(" + de + ");";
    id("toolDuplicate").href = "javascript:duplicateEvent(" + de + ");";
    id("toolDelete").href = "javascript:deleteEvent(" + de + ");";
    id("eventToolbox").style.top = (tempY - 30) + "px";
    id("eventToolbox").style.left = (tempX - 60) + "px";
    id("eventToolbox").style.display = "block";
}


function hideDialogs() {
    if (debugTitles) debug("hideDialogs");
    for (var dd = 0; dd < da.length; dd++) {
        if (da[dd] != "debug" && da[dd] != "rashbox" && id(da[dd]) ) id(da[dd]).style.display = "none";
    }
    document.body.focus();
}


function eventCancel(x) {
    if (debugTitles) debug("eventCancel");
    id(x).style.display = "none";
    document.body.focus();
}
var attFocus = false;

function formSubmit(e) {
    if (debugTitles) debug("formSubmit");
    if (attFocus) {
        var terms = id("attText").value;
        attendeeSearch(terms);
    }
    return false;
    id("editButton").click();
}


function getWeekNr(today) {
    if (debugTitles) debug("getWeekNr");
    if (today == null) {
        today = new Date();
    }
    Year = takeYear(today);
    Month = today.getMonth();
    Day = today.getDate();
    now = Date.UTC(Year, Month, Day + 1, 0, 0, 0);
    var Firstday = new Date();
    Firstday.setYear(Year);
    Firstday.setMonth(0);
    Firstday.setDate(1);
    then = Date.UTC(Year, 0, 1, 0, 0, 0);
    var Compensation = Firstday.getDay();
    if (Compensation > 3) Compensation -= 4;
    else Compensation += 3;
    NumberOfWeek = Math.round((((now - then) / 86400000) + Compensation) / 7);
    return NumberOfWeek;
}


function takeYear(theDate) {
    x = theDate.getYear();
    var y = x % 100;
    y += (y < 38) ? 2000 : 1900;
    return y;
}


function idPlace(id) {
    for (var d = 0; d < dEvent.length; d++) {
        if (dEvent[d][0] == id) {
            return d;
            break;
        }
    }
}


function debugArray() {
    var darr = "";
    for (var i = 0; i < dEvent.length; i++) {
        for (var d = 0; d < dEvent[i].length; d++) {
            darr += dEvent[i][d];
            if (d <= (dEvent.length - 1)) darr += ", ";
        }
        debug(darr);
        darr = "";
        debug(" ");
    }
}
document.defaultAction = true;

function setEvents() {
    var eventHandler = detectEvent;
    document['onkeyup'] = eventHandler;
}


function detectEvent(e) {
    var evt = e || window.event;
    if (evt.type == "keyup" && evt.keyCode == 27) {
        hideDialogs();
    }
    return document.defaultAction;
}
window.onload = setEvents();

function displayEvent(de) {
    if (debugTitles) debug("displayEvent(" + de + ")");
    hideDialogs();
    toggalContent('front');
    globalDE = de;
    id("displayDE").value = de;
    var titlePrivate = (dEvent[de][10] && (allowEdit == false || dEvent[de][8] == "locked")) ? "Private Event" : dEvent[de][5];
    if (view == 'week') {
      id("reccursionStatus").style.display=(dEvent[de][11])?"block":"none";
    } else {
      id("reccursionStatus").style.display="none";
    }
    id("displayEvent").innerHTML = titlePrivate;
    id("displayLocation").innerHTML = dEvent[de][6];
    id("displayDate").innerHTML = dEvent[de][1];
    id("displayTime").innerHTML = fracTime(dEvent[de][2]) + " - " + fracTime(parseFloat(dEvent[de][2]) + parseFloat(dEvent[de][3])) + "&#160;&#160;(" + dEvent[de][3] + "hr)";
    id("displayNotes").innerHTML = pipeBreak(dEvent[de][7]);

    checkForAttachmentsView(dEvent[de][0]);
    if(allowEdit){
      id('attSelect').selectedIndex = 0;
      attEdit(String(dEvent[de][9]));
    } else {
      dattEdit(String(dEvent[de][9]));
    }
    if(calendarEntityCreation) {
      if(dEvent[de][11] == true) {
        checkForEventEntityPage(dEvent[de][0]);
      } else {
        id("displayCalendarEntityCreationURL").innerHTML = 'None';
      }
    }
    //ToDo : Event RSVP not implemented,so do it latter
    if(dEvent[de][15]=='3'){

      id("crudInfo").style.display="none";
      id("crudControl").style.display="none";
      id("crudInvitation").style.display="block";
    } else if(dEvent[de][15]=='0') {
      id("crud-info").innerHTML = "You are not a member of this event.";
      id("crudInfo").style.display="block";
      id("crudInvitation").style.display="none";
    } else if(dEvent[de][15]=='2') {
      id("crud-info").innerHTML = "You are tentative member of this event.";
      id("crudInfo").style.display="block";
      id("crudControl").style.display="none";
      id("crudInvitation").style.display="block";
    } else {
      id("crudInfo").style.display="none";
      id("crudInvitation").style.display="none";
      id("crudControl").style.display="block";
    }
    var isLeave = false;
      if(dEvent[de][13] != undefined && dEvent[de][13] != false) {
        isLeave = true;
      }
    id("leaveInfo").style.display=(isLeave)?"block":"none";
    id("crud-accept").href = "javascript:updateEventRSVP(" + de + ",'accept');";
    id("crud-decline").href = "javascript:updateEventRSVP(" + de + ",'decline');";
    id("crud-tentative").href = "javascript:updateEventRSVP(" + de + ",'tentative');";
    
    id("crud-edit").href = "javascript:editEvent(" + de + ");";
    id("crud-delete").href = "javascript:eventDelete(" + de + ");";
    id("crud-duplicate").href = "javascript:duplicateEvent(" + de + ");";
    id("crud-add").href = "business-process-administration?newTask=true&eventID=" + dEvent[de][0].split("_")[1];
    id("crud-link").href = "business-process-administration/tasks?linkEventToTask=true&ownerFilter=all&eventID=" + dEvent[de][0].split("_")[1];
    id("crud-edit").style.display = (allowEdit && dEvent[de][8] == "unlocked"&&!isLeave) ? "block" : "none";
    id("crud-delete").style.display = (allowEdit && dEvent[de][8] == "unlocked"&&!isLeave) ? "block" : "none";
    id("crud-duplicate").style.display = (allowAdd && dEvent[de][8] == "unlocked") ? "block" : "none";
    id("crud-add").style.display = (allowAdd && dEvent[de][8] == "unlocked"&&!isLeave) ? "block" : "none";
    id("crud-link").style.display = (allowAdd && dEvent[de][8] == "unlocked"&&!isLeave) ? "block" : "none";
    id("eventDisplay").style.top = (tempY - 120) + "px";
    id("eventDisplay").style.left = (tempX - 185) + "px";
    id("eventDisplay").style.display = "block";
}
var dorig;

function dattAdd(x, y) {
    if (debugTitles) debug("dattAdd");
    var argLength = arguments.length;
    var de = arguments[0];
    var dePlace = plar(de, 'dorig', 0);
    dorig[dePlace][2] = true;
    var attList = id('dattendees');
    var newAttText = document.createTextNode(dorig[dePlace][1]);
    var newAtt = document.createElement("li");
    newAtt.id = "attLi_" + de;
    newAtt.className = "attendee";
    newAtt.appendChild(newAttText);
    attList.appendChild(newAtt);
}


function dattEdit(str) {
    if (debugTitles) debug("dattEdit");
    dorig = new Array();
    id('displayAttUl').innerHTML = '<ul id="dattendees"></ul>';
    var datt = new Array();
    if (str != '' && String(str).indexOf('|') != -1) {
        if (String(str).indexOf('||') != -1) {
            datt = String(str).split('||');
            for (var i = 0; i < datt.length; i++) {
                dorig[i] = String(datt[i]).split('|');
                dorig[i][dorig[i].length] = true;
                dattAdd(dorig[i][0], dorig[i][1]);
            }
        } else {
            dorig[0] = String(str).split('|');
            dorig[0][dorig[0].length] = true;
            dattAdd(dorig[0][0], dorig[0][1]);
        }
    }
}


function createEventOnServer(vdate, vtime, vhours, vcolour, vtitle, vlocation, vnotes, taskID) {
    vtitle = vtitle.replace(/&/g,'%26');
    $.ajax({
        type: "POST",
        url:  "search/ajax2/createEventOnServer/?" + getString,
        data: "vdate=" + vdate + "&vtime=" + vtime + "&vhours=" + vhours + "&vcolour=" + vcolour + "&vtitle=" + vtitle + "&vlocation=" + vlocation + "&vnotes=" + vnotes + "&taskID=" + taskID + '&type=list&cid=' + cid,
        success: function (msg) {
            var exploded = msg.split(',');
            if (exploded[0] == 'hideDialogs') {
                jGrowl("Clashes");
                hideDialogs();
                html = exploded[1];
            } else if (exploded[0] == 'createEvent') {
                createEvent(exploded[1], vdate, vtime, vhours, vcolour, vtitle, vlocation, vnotes, exploded[2]);
            }
            saveStop();
        }
    });
}

function checkForEventEntityPage(vid) {
    $.ajax({
        type: "POST",
        url:  "search/ajax2/checkForEventEntityPage/",
        data: "vid=" + vid,
        success: function (msg) {
          jsonObj = eval('(' + msg + ')');
          if(jsonObj.entityPage == "no") {
            $('#displayCalendarEntityCreationURL').html("None");
            return true;
          }
          var entityPageUrl = '' + base + 'search/entity/' + jsonObj.entityPageId + '';
          if(allowEdit) {
            var fullEntityPageUrl = '<a href="' + entityPageUrl + '" target="_blank">'+ jsonObj.entityPageTitle +'</a>';
            $('#displayCalendarEntityCreationURL').html(fullEntityPageUrl);
          } else {
            hideDialogs();
            window.open(entityPageUrl);
            return false;
          }
        }
    });
}

function checkForAttachmentsView(vid) {
    $.ajax({
        type: "POST",
        url:  "search/ajax2/checkForAttachmentsView/",
        data: "vid=" + vid,
        success: function (msg) {
            $('#displayEventAttachments').html(msg);
        }
    });
}


function checkForAttachments(vid) {
    $.ajax({
        type: "POST",
        url:  "search/ajax2/checkForAttachments/",
        data: "vid=" + vid,
        success: function (msg) {
            $('#eventAttachments').html(msg);
        }
    });
}


function editMonthEventProperties(de, id, title, location, notes, colour, attendees, date, time, duration, private1, createEntityEvent1) {
   title = title.replace(/&/g,'%26');
    $.ajax({
        type: "POST",
        url:  "search/ajax2/editMonthEventProperties/",
        data: "de=" + de + "&id=" + id + "&title=" + title + "&location=" + location + "&notes=" + notes + "&colour=" + colour + "&attendees=" + attendees + "&date=" + date + "&time=" + time + "&duration=" + duration + '&cid=' + cid + '&private=' + private1 + '&createEntityEvent=' + createEntityEvent1,
        success: function (msg) {
            if (msg == '200') {
                jGrowl('no clashes');
            } else {
                jGrowl('There are clashes. Please amend or cancel (esc).');
            }
            editSuccess(de);
        }
    });
}


function editListEventProperties(xid, title, location, notes, colour, date, time, duration) {
    title = title.replace(/&/g,'%26');
    $.ajax({
        type: "POST",
        url:  "search/ajax2/editMonthEventProperties/",
        data: "xid=" + xid + "&title=" + title + "&location=" + location + "&notes=" + notes + "&colour=" + colour + "&date=" + date + "&time=" + time + "&duration=" + duration + '&cid=' + cid,
        success: function (msg) {
            if (msg == 'updated') {
                editSuccess(xid, title, location, notes, colour, date, time, duration);
            } else {
                jGrowl(msg);
            }
        }
    });
}


function xdeleteEvent(de) {
    $.ajax({
        type: "POST",
        url:  "search/ajax2/deleteEvent/",
        data: "de=" + de,
        success: function (msg) {
            jGrowl('Deleted');
        }
    });
}


function attendeeSearch(terms) {
    $.ajax({
        type: "POST",
        url:  "search/ajax2/attendeeSearch/",
        data: "terms=" + terms,
        success: function (msg) {
            if (msg == 'short') {
                jGrowl('Search-terms too short');
            } else if (msg == '404') {
                jGrowl('No Results');
            } else {
                var exploded = msg.split(',');
                jGrowl(exploded[0] + ' Results Returned');
                atArray(exploded[1]);
            }
        }
    });
}
