﻿//Default event handler for CalendarView and CalendarEventBarView
GoogleEditor = function(view, eventbar) {
    this.Calendars = '';
    this.EditUrl = '';
    this.DispUrl = '';
    this.ViewUrl = '';
    this.SiteRoot = '';
    this.EditText = 'edit event details';
    this.DeleteText = 'Delete';
    this.WhatText = 'What';
    this.DeleteWarning = 'Do you really want to delete this item?';
    this.CalendarText = 'Calendar';
    this.CreateEventText = 'Create Event';
    this.ResourcesFolder = '/';
    this.Uid = '';

    if (view) {
        view.add_itemUpdating(Function.createDelegate(this, this.OnItemUpdating));
        view.add_itemCreated(Function.createDelegate(this, this.OnItemCreated));
    }
    if (eventbar) {
        eventbar.add_itemUpdating(Function.createDelegate(this, this.OnItemUpdating));
        eventbar.add_itemCreated(Function.createDelegate(this, this.OnItemCreated));
    }
    Virto_WGoogEditor.push(this);
}

GoogleEditor.prototype.InitEditor = function() {

    if (this._editor == null || this._editor == 'undefined') {
        var d = document.createElement("DIV");
        d.id = "myGoogleEditor" + this.Uid;
        d.style.position = 'absolute';
        d.style.width = "300px";
        d.style.height = "180px";
        d.style.display = "none";

        d.style.zIndex = "155";
        d.style.fontFamily = "Arial, Sans-Serif";
        d.style.lineHeight = "12pt";
        d.style.fontSize = "14px"; 
        d.innerHTML += '<img src="' + this.ResourcesFolder + 'iw_nw.png" width="25px" height="25px" />';
        d.innerHTML += '<div style="position:absolute; top:0px; left:25px; border-top: solid 1px rgb(171,171,171); height:25px; width: 252px; background-color:#fff;"></div>';
        d.innerHTML += '<img src="' + this.ResourcesFolder + 'iw_ne.png" width="25px" height="25px" style="position:absolute; left:276px; top:0px;" />';
        d.innerHTML += '<div id="leftstick' + this.Uid + '" style="position:absolute; height:101px; left:0px; top:25px; width:25px; border-left:solid 1px rgb(171,171,171); background-color:#fff;"></div>'
        d.innerHTML += '<div id="rightstick' + this.Uid + '" style="position:absolute; height:101px; left:276px; top:25px; width:25px; background-color:#fff; border-right:solid 1px rgb(171,171,171);"></div>';
        d.innerHTML += '<img id="picsw' + this.Uid + '" src="' + this.ResourcesFolder + 'iw_sw.png" width="25px" height="25px" style="position:absolute; left:0px; top:125px;" />';
        d.innerHTML += '<div id="divbot' + this.Uid + '" style="position:absolute; top:126px; left:25px; border-bottom: solid 1px rgb(171,171,171); height:25px;background-color:#fff; width: 252px;"></div>';
        d.innerHTML += '<div id="showareadiv' + this.Uid + '" style="position:absolute; top:25px; left:25px; height:100px;background-color:#fff; width: 251px;"></div>';
        d.innerHTML += '<img id="picse' + this.Uid + '" src="' + this.ResourcesFolder + 'iw_se.png" width="25px" height="25px" style="position:absolute; left:276px; top:125px;" />';
        d.innerHTML += '<img src="' + this.ResourcesFolder + 'close.gif" style="position:absolute; top:5px; left:270px;" id="imClose' + this.Uid + '" />';
        d.innerHTML += '<div id="divEditor' + this.Uid + '" style="position:absolute; left:10px; top:25px; padding-top:5px;">' + this.WhatText + ':&nbsp;<div style="overflow:auto; width:210px; position:absolute; top:0px; left:45px;"><input type="text" id="tbTitle' + this.Uid + '" style="width:200px;" /></div></div>';
        d.innerHTML += '<div id="divCalendars' + this.Uid + '" style="position:absolute; left:10px; top:85px; padding-top:5px;">' + this.CalendarText + ':&nbsp;<div style="overflow:auto; width:160px; position:absolute; top:0px; left:75px;padding-top:3px;"><select type="text" id="selVCalendar' + this.Uid + '" style="width:150px;" /></div></div>';
        d.innerHTML += '<div id="divTitle' + this.Uid + '" style="position:absolute; left:10px; top:25px; width:281px;height:34px; overflow-y:auto; font-family: arial, sans-serif; font-weight:700; color:#2952A3;"></div>';
        d.innerHTML += '<div id="divDates' + this.Uid + '" style="position:absolute; left:10px; top:65px;width:281px;">';
        d.innerHTML += '<div id="lbDelete' + this.Uid + '" style="position:absolute; left:10px; top:90px;">[<font style="color:blue; cursor:pointer;"><u>' + this.DeleteText + '</u></font>]</div>';
        d.innerHTML += '<div id="divSep' + this.Uid + '" style="position:absolute; left:10px; top:110px; height:3px; border-top:solid 1px #2952A3; width:281px;"></div>'
        d.innerHTML += '<input type="button" id="btnCreate' + this.Uid + '" style="position:absolute; left:10px; top:115px; width:110px;" value="' + this.CreateEventText + '" />'
        d.innerHTML += '<div id="lbEdit' + this.Uid + '" style="position:absolute; left:10px; top:115px;"><font style="color:blue; cursor:pointer;"><a id="hlEditEvent' + this.Uid + '">' + this.EditText + '&gt;&gt;</a></font></div>';

        document.body.appendChild(d);
        this._iTitle = $get("tbTitle" + this.Uid);
        this._divTitle = $get("divTitle" + this.Uid);
        this._divEditor = $get("divEditor" + this.Uid);
        this._divCalendars = $get("divCalendars" + this.Uid);
        this._selCalendars = $get("selVCalendar" + this.Uid);
        this._db = $get("lbDelete" + this.Uid);
        this._cb = $get("imClose" + this.Uid);
        this._btnCreate = $get("btnCreate" + this.Uid);
        this._divSep = $get("divSep" + this.Uid);
        this._divEdit = $get("lbEdit" + this.Uid);
        this._hlEditEvent = $get("hlEditEvent" + this.Uid);

        if (this.Calendars) {
            for (i = 0; i < this.Calendars.Settings.length; i++) {
                if (this.Calendars.Settings[i].DataSource.DataSourceParams &&
					(typeof (this.Calendars.Settings[i].DataSource.DataSourceParams["SqlPKField"]) == "undefined" ||
						this.Calendars.Settings[i].DataSource.DataSourceParams["SqlPKField"].toString() != "") &&
        			(this.Calendars.Settings[i].DataSource.DataSourceParams["Enabled"] &&
	        			this.Calendars.Settings[i].DataSource.DataSourceParams["Enabled"].toString().toLowerCase() == "true" ||
        				!this.Calendars.Settings[i].DataSource.DataSourceParams["Enabled"])) {
                    var elOptNew = document.createElement('option');
                    elOptNew.text = this.Calendars.Settings[i].DataSource.Name;
                    elOptNew.value = this.Calendars.Settings[i].DataSource.ID;
                    var elSel = document.getElementById('selectX');
                    try {
                        this._selCalendars.add(elOptNew, null); // standards compliant; doesn't work in IE
                    }
                    catch (ex) {
                        this._selCalendars.add(elOptNew); // IE only
                    }
                }
            }
        }

        //this._iDescription = $get("tbDescription");
        this._dates = $get("divDates" + this.Uid);
        $addHandler(this._cb, 'click', Function.createDelegate(this, this.CloseEditor));
        $addHandler(this._db, 'click', Function.createDelegate(this, this.DeleteItem));
        $addHandler(this._btnCreate, 'click', Function.createDelegate(this, this.CreateItem));
        $addHandler(this._hlEditEvent, 'click', Function.createDelegate(this, this.LinkClick));
        $addHandler(document, 'keyup', Function.createDelegate(this, this.OnEscape));

        this._editor = d;
        this._itemUid = null;
        this._itemTitle = null;
        this._itemStartDate = null;
        this._itemEndDate = null;
        this._itemDescription = null;
        this._itemIsAllDay = null;
        this._itemExtensions = null;
        this._itemsManager = null;
    }
}

GoogleEditor.prototype.LinkClick = function() {

	this.InitEditor();
	if (this._iTitle != null && this._hlEditEvent != null) {
		if (this._iTitle.value.length > 0) {
			this._hlEditEvent.href = this._hlEditEvent.href + "&Title=" + this._iTitle.value
		}
	}
}

GoogleEditor.prototype.OnItemCreated = function(sender, args) {
	this.InitEditor();

	this._editor.style.display = "block";
	
	var dh = 0;
	var dh1 = 0;
	if (document.documentElement && document.documentElement.scrollHeight > document.documentElement.clientHeight)
		dh1 = document.documentElement.scrollTop;
	var dh2 = 0;
	if (document.body && document.body.scrollTop && document.body.scrollTop > 0)
		dh2 = document.body.scrollTop;
	if (dh1 > 0 && dh1 > dh2)
		dh = dh1;
	if (dh2 > 0 && dh2 > dh1)
		dh = dh2;

	if (args.MouseEvent.clientY - 75 > 0)
		this._editor.style.top = args.MouseEvent.clientY - 75 + dh + "px";
	else
		this._editor.style.top = "0px";
	if (args.MouseEvent.clientX - 150 > 0)
		this._editor.style.left = args.MouseEvent.clientX - 150 + "px";
	else
		this._editor.style.left = "0px";
	this._divEditor.style.display = "block";

	this._divCalendars.style.display = "none";
	if (this.Calendars) {
		if (this.Calendars.Settings.length > 1) {
			this._divCalendars.style.display = "block";
		}
	}

	this._divTitle.style.display = "none";
	this._iTitle.value = "";
	this._iTitle.focus();
	this._divEditor.style.top = "60px";
	this._db.style.display = "none";
	this._divSep.style.display = "none";
	this._btnCreate.style.display = "block";
	this._dates.style.top = "20px";
	this._divEdit.style.left = "110px";
	this._divEdit.style.display = "none";
	var sd = args.StartDate;
	var ed = args.EndDate;
	if (ed.getSeconds() == 59)
		ed = new Date(ed.getTime() + 1 * 1000);

	this._dates.style.fontSize = "12px";
	if (sd.getDate() == ed.getDate() && sd.getMonth() == ed.getMonth() && sd.getFullYear() == ed.getFullYear()) {
		this._dates.innerHTML = "<b>" + sd.localeFormat("d") + ", " + sd.localeFormat("t") + " - " + ed.localeFormat("t") + "</b>";
	}
	else {
		this._dates.innerHTML = "<b>" + sd.localeFormat("d") + ", " + sd.localeFormat("t") + " - " + ed.localeFormat("d") + ", " + ed.localeFormat("t") + "</b>";
	}
	this._itemTitle = "";
	this._itemStartDate = args.StartDate;
	this._itemEndDate = ed; //args.EndDate;
	this._itemDescription = "";
	this._itemIsAllDay = args.IsAllDay;
	this._itemExtensions = args.Extensions;
	this._calendarExtensions = args.CalendarExtension;
	this._itemsManager = args.ItemsManager;

	this._divSep.style.top = "110px";
	this._db.style.top = "90px";
	this._divEdit.style.top = "115px";
	var sw = $get("picsw" + this.Uid);
	if (sw)
		sw.style.top = "125px";
	var se = $get("picse" + this.Uid);
	if (se)
		se.style.top = "125px";
	var divbot = $get("divbot" + this.Uid);
	if (divbot)
		divbot.style.top = "125px";
	var showareadiv = $get("showareadiv" + this.Uid);
	if (showareadiv)
		showareadiv.style.height = "100px";
    var d = $get("myGoogleEditor" + this.Uid);
	if (d)
		d.style.height = "180px";
	var leftstick = $get("leftstick" + this.Uid);
	if (leftstick)
		leftstick.style.height = "101px";
	var rightstick = $get("rightstick" + this.Uid);
	if (rightstick)
		rightstick.style.height = "101px";
	if (this.EditUrl == "") {
		this._hlEditEvent.style.display = "none";
	}
	else {
		this._hlEditEvent.style.display = "block";
		this._hlEditEvent.href = this.EditUrl + "?ID=" + args.Uid + "&Source=" + window.location;
	}

	var sm = sd.getMonth() + 1;
	var em = ed.getMonth() + 1;
	var s = "StartDate=" + sm + "\/" + sd.getDate() + "\/" + sd.getFullYear() + " " + sd.getHours() + ":" + sd.getMinutes();
	var e = "&EndDate=" + em + "\/" + ed.getDate() + "\/" + ed.getFullYear() + " " + ed.getHours() + ":" + ed.getMinutes();
	var ad = "&IsAllDay=" + this._itemIsAllDay.toString();
	this._hlEditEvent.href += s + e + ad;
	if (this._selCalendars.length == 0)
		this._editor.style.display = "none";

	//multisource
	if (args.SourceUid) {
		this._selCalendars.value = args.SourceUid;
	}
}

GoogleEditor.prototype.CreateItem = function() {
	this.InitEditor();
	if (this._editor.style.display == 'block') {
		if (this._iTitle.value.trim == "")
			this._itemTitle = "&nbsp;"
		else
			this._itemTitle = this._iTitle.value;

		var cal = this.FindCalendar(this._selCalendars.value);
		if (cal != null)
			this._itemsManager.CreateItem(this._itemTitle, this._itemStartDate, this._itemEndDate, "&nbsp;", this._itemIsAllDay, cal.DataSource.ID, this._calendarExtensions);

		this.CloseEditor();
		this._itemUid = null;
		this._itemTitle = null;
		this._itemStartDate = null;
		this._itemEndDate = null;
		this._itemDescription = null;
		this._itemIsAllDay = null;
		this._itemExtensions = null;
		this._itemsManager = null;
	}
}


GoogleEditor.prototype.OnItemUpdating = function(sender, args) {
	this.InitEditor();

	if (sender.get_ActionName() == "") {
		var cl = this.FindCalendar(args.Extensions.ID);
		if (cl != null) {
			this.EditUrl = cl.EditFormUrl;
			this.DispUrl = cl.DispFormUrl;
			this._itemExtensions = cl.DataSource;
		}

		var dh = 0;
		var dh1 = 0;
		if (document.documentElement && document.documentElement.scrollHeight > document.documentElement.clientHeight)
			dh1 = document.documentElement.scrollTop;
		var dh2 = 0;
		if (document.body && document.body.scrollTop && document.body.scrollTop > 0)
			dh2 = document.body.scrollTop;
		if (dh1 > 0 && dh1 > dh2)
			dh = dh1;
		if (dh2 > 0 && dh2 > dh1)
			dh = dh2;
			
		this._editor.style.display = "block";
		if (args.MouseEvent.clientY - 75 > 0)
			this._editor.style.top = args.MouseEvent.clientY - 75 + dh + "px";
		else
			this._editor.style.top = "0px";
		if (args.MouseEvent.clientX - 150 > 0)
			this._editor.style.left = args.MouseEvent.clientX - 150 + "px";
		else
			this._editor.style.left = "0px";

		this._divCalendars.style.display = "none";
		this._divEditor.style.display = "none";

		this._divTitle.style.display = "block";
		this._dates.style.top = "65px";
		this._btnCreate.style.display = "none";
		this._db.style.display = "block";
		if (args.Extensions.DataSourceParams["Notmove"])
			this._db.style.display = "none";
		this._divSep.style.display = "block";
		this._divEdit.style.display = "block";
		this._divEdit.style.left = "10px";
		if (args.Title.trim() != "&nbsp;") {
			this._divTitle.innerHTML = args.Title;
			this._divTitle.title = args.Title;
		}
		else
			this._divTitle.innerHTML = "(No Subject)";
		var sd = args.StartDate;
		var ed = args.EndDate;
		this._dates.style.fontSize = "12px";

		if (sd.getDate() == ed.getDate() && sd.getMonth() == ed.getMonth() && sd.getFullYear() == ed.getFullYear()) {
			this._dates.innerHTML = "<b>" + sd.localeFormat("d") + ", " + sd.localeFormat("t") + " - " + ed.localeFormat("t") + "</b>";
		}
		else {
			this._dates.innerHTML = "<b>" + sd.localeFormat("d") + ", " + sd.localeFormat("t") + " - " + ed.localeFormat("d") + ", " + ed.localeFormat("t") + "</b>";
		}

		if (args.Extensions.DataSourceParams["TooltipField"]) {
			var str = args.Extensions.DataSourceParams["TooltipField"].toString();
			if (str.trim() != "&nbsp;")
				this._dates.innerHTML += "<br />" + str;
		}

		var idelta = this._dates.clientHeight - 16;
		if (idelta > 0) {
			this._divSep.style.top = (110 + idelta).toString() + "px";
			this._db.style.top = (90 + idelta).toString() + "px";
			this._divEdit.style.top = (115 + idelta).toString() + "px";
			var sw = $get("picsw" + this.Uid);
			if (sw)
				sw.style.top = (125 + idelta).toString() + "px";
            var se = $get("picse" + this.Uid);
			if (se)
				se.style.top = (125 + idelta).toString() + "px";
            var divbot = $get("divbot" + this.Uid);
			if (divbot)
				divbot.style.top = (125 + idelta).toString() + "px";
            var showareadiv = $get("showareadiv" + this.Uid);
			if (showareadiv)
				showareadiv.style.height = (100 + idelta).toString() + "px";
            var d = $get("myGoogleEditor" + this.Uid);
			if (d)
				d.style.height = (180 + idelta).toString() + "px";
            var leftstick = $get("leftstick" + this.Uid);
			if (leftstick)
				leftstick.style.height = (101 + idelta).toString() + "px";
            var rightstick = $get("rightstick" + this.Uid);
			if (rightstick)
				rightstick.style.height = (101 + idelta).toString() + "px";
		}
		else {
			this._divSep.style.top = "110px";
			this._db.style.top = "90px";
			this._divEdit.style.top = "115px";
			var sw = $get("picsw" + this.Uid);
			if (sw)
				sw.style.top = "125px";
            var se = $get("picse" + this.Uid);
			if (se)
				se.style.top = "125px";
            var divbot = $get("divbot" + this.Uid);
			if (divbot)
				divbot.style.top = "125px";
            var showareadiv = $get("showareadiv" + this.Uid);
			if (showareadiv)
				showareadiv.style.height = "100px";
            var d = $get("myGoogleEditor" + this.Uid);
			if (d)
				d.style.height = "180px";
            var leftstick = $get("leftstick" + this.Uid);
			if (leftstick)
				leftstick.style.height = "101px";
            var rightstick = $get("rightstick" + this.Uid);
			if (rightstick)
				rightstick.style.height = "101px";
		}
		this._itemUid = args.Uid;
		if (this.EditUrl == "") {
			this._hlEditEvent.style.display = "none";
		}
		else {
			this._hlEditEvent.style.display = "block";
			this._hlEditEvent.href = this.EditUrl + "?ID=" + args.Uid + "&Source=" + window.location;
		}

		this._itemTitle = args.Title;
		this._itemStartDate = args.StartDate;
		this._itemEndDate = args.EndDate;
		this._itemDescription = args.Description;
		this._itemIsAllDay = args.IsAllDay;
		this._itemExtensions = args.Extensions;
		this._itemsManager = args.ItemsManager;
	}
}

GoogleEditor.prototype.DeleteItem = function() {
	if (this._editor.style.display == 'block') {
		if (confirm(this.DeleteWarning)) {
			this._itemsManager.DeleteItem(this._itemUid, this._itemExtensions);
			this.CloseEditor();
			this._itemUid = null;
			this._itemTitle = null;
			this._itemStartDate = null;
			this._itemEndDate = null;
			this._itemDescription = null;
			this._itemIsAllDay = null;
			this._itemExtensions = null;
			this._itemsManager = null;
		}
	}
}


GoogleEditor.prototype.CloseEditor = function() {
	if (this._editor && this._editor.style.display == "block") {
		this._editor.style.display = "none";
		this._iTitle.value = "";
		this._dates.innerHTML = "";
	}
}

GoogleEditor.prototype.FindCalendar = function(id) {
	if (this.Calendars) {
		for (i = 0; i < this.Calendars.Settings.length; i++) {
			if (this.Calendars.Settings[i].DataSource) {
				if (this.Calendars.Settings[i].DataSource.ID == id) {
					return this.Calendars.Settings[i];
				}
			}
		}
	}
}

GoogleEditor.prototype.OnEscape = function(evnt) {
	if (evnt.keyCode == 27 && this._editor.style.display != "none")
		this.CloseEditor();
	if (this._editor.style.display == 'block' && evnt.keyCode == 13 && this._divTitle.style.display == "none")
		this.CreateItem();
}

GoogleEditor.prototype.ResizeBalloon = function() {
	var idelta = this._dates.clientHeight - 16;
	if (idelta > 0) {
		this._divSep.style.top = (110 + idelta).toString() + "px";
		this._db.style.top = (90 + idelta).toString() + "px";
		this._divEdit.style.top = (115 + idelta).toString() + "px";
		var sw = $get("picsw" + this.Uid);
		if (sw)
			sw.style.top = (125 + idelta).toString() + "px";        var se = $get("picse" + this.Uid);
		if (se)
			se.style.top = (125 + idelta).toString() + "px";        var divbot = $get("divbot" + this.Uid);
		if (divbot)
			divbot.style.top = (125 + idelta).toString() + "px";        var showareadiv = $get("showareadiv" + this.Uid);
		if (showareadiv)
			showareadiv.style.height = (100 + idelta).toString() + "px";
        var d = $get("myGoogleEditor" + this.Uid);
		if (d)
			d.style.height = (180 + idelta).toString() + "px";        var leftstick = $get("leftstick" + this.Uid);
		if (leftstick)
			leftstick.style.height = (101 + idelta).toString() + "px";        var rightstick = $get("rightstick" + this.Uid);
		if (rightstick)
			rightstick.style.height = (101 + idelta).toString() + "px";
	}
	else {
		this._divSep.style.top = "110px";
		this._db.style.top = "90px";
		this._divEdit.style.top = "115px";
		var sw = $get("picsw" + this.Uid);
		if (sw)
			sw.style.top = "125px";        var se = $get("picse" + this.Uid);
		if (se)
			se.style.top = "125px";
		var divbot = $get("divbot" + this.Uid);
		if (divbot)
			divbot.style.top = "125px";
		var showareadiv = $get("showareadiv" + this.Uid);
		if (showareadiv)
			showareadiv.style.height = "100px";        var d = $get("myGoogleEditor" + this.Uid);
		if (d)
			d.style.height = "180px";
		var leftstick = $get("leftstick" + this.Uid);
		if (leftstick)
			leftstick.style.height = "101px";        var rightstick = $get("rightstick" + this.Uid);
		if (rightstick)
			rightstick.style.height = "101px";
	}
}

var Virto_WGoogEditor = [];
function Virto_WGoogEditor_Resize() {
	for (var i = 0; i < Virto_WGoogEditor.length; i++) {
		Virto_WGoogEditor[i].ResizeBalloon();
	}
}
