var weekdayz = new Array();
var masEvents = new Array();
var showLimits = {day:null, weekFrom:null, weekTill:null, monthFrom:null, monthTill:null };

var drager = null;
var mycache = {ids:new Array(), days:new Array(), repeats:new Array(), d:new Array(), w:new Array(), m:new Array(), exclusions:new Array()};
var mycache_c;
var eventsChanged = true;
var minEventPos, maxEventPos;
var more_dates = new Array();
var shownfetch=0;
var cSt=0;
var cEn=0;
var indrag=false;
var WorkAreaHorCursor, WorkAreaVertCursor, WorkAreaScrolledHorCursor, EndScrolledHorColumn;

function documentOnClickHandler(evt) {
	var tgt = window.event ? window.event.srcElement : evt.target;
	var monthsList = $("monthsList");
	var edit_form = $("edit_form");
	if (!monthsList.hidden && !(tgt.id == "monthsList" || tgt.id == "middleTdSelector" || tgt.id == "MonthSelector" || tgt.id == "imgSelector")){
		var middleTdSelector = $("middleTdSelector");
		monthsList.style.display = 'none';
		monthsList.hidden = true;
		middleTdSelector.className = 'middleTdSelector';
	}
}

function gotcha(ev) {
	area.pres = false;
	area.skip = false;
	eventOff("mouseup",gotcha,true);
	ev.cancelBubble=true;

	var cal_id = isplit(pickobj.obj.id);
	var calendar = mycache.ids[cal_id.id]['calendar_id'];
	if (!indrag) {
		pickobj.obj.style.display="block";
		zb=coordss(ev,pickobj.obj,pickobj.md,pickobj.ad,mybox,0);/*!!!*/
		if ((Math.abs(inipos.x-zb.x)<3)&&(Math.abs(inipos.y-zb.y)<3)) {
			choose(ev,pickobj.obj);
		}
	}
}

function choose(ev,div) {
	var iddata = isplit(div.id);
	var tfDateObj, ttDateObj;
	var excluded = false;
	if (mycache.exclusions[iddata.id_original] != undefined) {
		var evlink = mycache.exclusions[iddata.id_original];
		tfDateObj = evlink.event_timefrom;
		ttDateObj = evlink.event_timetill;
		excluded = true;
	} else {
		var evlink = mycache.ids[iddata.id];
		if (evlink.event_repeats == 1 && mycache.repeats[iddata.id_original]) {
			tfDateObj = mycache.repeats[iddata.id_original]["event_timefrom"];
			ttDateObj = mycache.repeats[iddata.id_original]["event_timetill"];
		} else {
			tfDateObj = evlink["event_timefrom"];
			ttDateObj = evlink["event_timetill"];
		};
	};

	var tf = gtime(tfDateObj); 
	var tt = gtime(ttDateObj,24);

	if(setcache['timeformat'] == 1) {
		var chour_f	= tfDateObj.getHours();
		var cmin_f	= tfDateObj.getMinutes();
		var chour_t	= ttDateObj.getHours();
		var cmin_t	= ttDateObj.getMinutes();
		var time_format_from = ((chour_f<12) ? "AM" : "PM");
		var time_format_till = ((chour_t<12) ? "AM" : "PM");

		if (chour_f==0) chour_f	=12;
		if (chour_t==0) chour_t	=12;
		if (chour_f>12) chour_f	-=12;
		if (chour_t>12) chour_t	-=12;

		tf.time = ((chour_f == 0)? '12' : chour_f) + ((cmin_f == 0) ? ' ' : ':'+ cmin_f + ' ') + time_format_from;
		tt.time = ((chour_t == 0)? '12' : chour_t) + ((cmin_t == 0) ? ' ' : ':'+ cmin_t + ' ') + time_format_till;
	};

	var editevent_form_data = {
		subject 	: evlink["event_name"],
		timeFrom	: tf.time,
		timeTill	: tt.time,
		fullFromDate: tfDateObj,
		fullTillDate: ttDateObj,
		description	: evlink["event_text"],
		event_id	: iddata.id_original,
		calendar_id : evlink['calendar_id'],
		excluded	: excluded
	};
	EventForm.ShowEventForm(editevent_form_data);
	if (ev != null) ev.cancelBubble = true;
}

function showfetch() {
	if ($('mfet')) {
		hidefetch();
		return;
	};
	hidefetch();
	var date_full_id = String(this.id);
	var id_data = date_full_id.split("_");
	var date_id = Number(id_data[1]);
	var mdata = more_dates[date_id]; //global array  = ['date'] = array(id1, id2, ... , idn)
	var mlen = mdata.length;
	var more_link_x = parseToNumber(this.offsetLeft);
	var more_link_y = parseToNumber(this.offsetTop);
	var more_link_w = parseToNumber(this.offsetWidth);
	var month_area = $("area_2_month");
	var month_area_height = parseToNumber(month_area.offsetHeight);
	var month_area_width = parseToNumber(month_area.offsetWidth);
	var cell_width = Math.floor(month_area_width/7);
	var showbox = boxcalc(3,1);
	var showwid = 1.5*cell_width;
	var showhei = mlen*13+1; 

	var more_block = document.createElement("div");
	var showmax = 3 * Math.floor(month_area_height/6);
	if (showhei>showmax) {
		showhei = showmax;
		more_block.style.overflowY = 'scroll';
	};
	var showtop = showbox.top + more_link_y +2;
	var showleft = showbox.left + more_link_x + more_link_w + 2;
	var showover = showtop + showhei - (month_area_height + showbox.top);
	if (showover > 0) showtop -= showover;

	more_block.style.top = showtop+"px";
	more_block.style.left = showleft+"px";
	more_block.style.width = showwid+"px";
	more_block.style.height = showhei+"px";  
	more_block.id = 'mfet';
	more_block.className = 'event_select_box';

	var stx = "", mtitl;

	for (var i in mdata) {
		var event_name = "";
		var event_id = mdata[i];
		var real_event = split_event_id(event_id);
		if (mycache.exclusions[event_id] != undefined) {
			var event_data = mycache.exclusions[event_id];
		} else {
			var event_data = mycache.ids[real_event.id];
		};
		event_name = event_data['event_name'];
		stx += "\n"+event_name; 
		var calendar_data = mycache_c.calendars[event_data['calendar_id']];

		var event_link = document.createElement('span');
		event_link.className = 'event_element_select_box';

		if (calendar_data['publication_level'] == 2) {
			event_link.style.color = getNumberOfColor(15);
		} else {
			event_link.style.color = getNumberOfColor(calendar_data['calendar_color']);
			event_link.onmouseover = function() { this.style.textDecoration='underline'; };
			event_link.onmouseout = function() { this.style.textDecoration='none'; };
			event_link.onmousedown = function(ev) {
				drag2start(ev,this);
				return false;
			};
		};
		
		event_link.unselectable = "on";
		event_link.id = "event_"+event_id+"_0_3_"+event_data["event_allday"];
		var mtf = gtime(event_data["event_timefrom"]);
		var mtt = gtime(event_data["event_timetill"],24);
		
		if (event_data['event_allday']==0) {
			mtitl = mtf.utime+' - '+mtt.utime+', '+mtf.udate;
		} else { 
			var mtr = range8(mtf.to8,mtt.to8)+1; 
			if (mtr==1) {
				mtitl=mtf.udate;
			} else {
				mtitl=mtf.udate+' - '+mtt.udate+' ('+mtr+' days)';
			}
		};
		event_link.title = mtitl;
		event_link.appendChild(document.createTextNode(event_name));
		event_link.style.MozUserSelect='none';
		event_link.style.KhtmlUserSelect='event_link.style.';
		event_link.style.userSelect='none';
		more_block.appendChild(event_link);
		more_block.appendChild(document.createElement("br"));
	};
	var close_btn = document.createElement("img");
	close_btn.src = './calendar/skins/calendar/close-popup.png';
	close_btn.className = 'close_more_list';
	more_block.onclick = hidefetch;
	more_block.appendChild(close_btn);

	document.body.appendChild(more_block);
	shownfetch = 2;
}

function drag2start(ev,obj) {
	indrag=true;
	evobj = obj;
	var idd = evobj.id;
	var modez=isplit(idd);
	vMid = modez.id_original; /*global*/ //vMmd=Number(modez.mode)+1; vMad=modez.allday; 
	if (mycache.exclusions[vMid] != undefined) {
		evlink = mycache.exclusions[vMid];
	} else {
		evlink = mycache.ids[modez.id]; /*global*/
	};
	var myname = evlink['event_name'];
	var mybox = boxcalc(3,0);
	stc = coordss(ev,evobj,3,0,mybox,0); /*global*/
	stx = stc.x; /* is global? */
	sty = stc.y;
	dragon=0;
	var calendar_data = mycache_c.calendars[evlink['calendar_id']];
	if (calendar_data != undefined) {
		if (calendar_data['publication_level'] == 1) {
			eventOn("mouseup",drag2done,true);
		};
	};
	document.onselectstart = function() {return false;};
	document.onselect = function() {return false;};
}

function drag2done() {
	eventOff("mouseup",drag2done,true);
	document.onselectstart = function() {};
	document.onselect = function() {};
	if (dragon==0) {
		hidefetch();
		choose(null,evobj);
	};
	indrag=false;
}

/*----------------make caches-----------------------*/
function cacheLoadCalendar() {
	ShowInfo(Lang.InfoLoading);
	var color = new Array();
	var calendar_cache = new Array();
	var res = '';
	var req = getXMLHTTPRequest();
	var url = processing_url+'?action=get_calendar&nocache=' + Math.random();
	if (req)
	{
		try {
			req.open('GET', url, false);
			req.send(null);
			res = req.responseText;
		} catch(e) { }

		var calendar = res.parseJSON();
		if (!servErr(calendar,Lang.ErrorLoadCalendar)) {
			var calendar_id = calendar["calendar_id"];
			color[calendar["calendar_color"]] = calendar["calendar_color"];
			calendar_cache[calendar_id] = calendar;
		}
	};
	HideInfo();

	return {calendars:calendar_cache, clr: color };
}

/*----------------//make caches-----------------------*/



function render_event(event_id, viewMode, invis) {
	event_id = String(event_id);
	var eventPosData, evData, timefrom, timetill;
	if (viewMode == 0) {
		evData = mycache.d[event_id];
	} else if (viewMode == 1) {
		evData = mycache.w[event_id];
	} else {
		evData = mycache.m[event_id];
	};
	eventPosData = copyar(evData);
	if (eventPosData == undefined) return;
	var real_event = split_event_id(event_id);

	if (mycache.exclusions[event_id] != undefined) {
		var eventTextData = mycache.exclusions[event_id];
		timefrom = eventTextData.event_timefrom;
		timetill = eventTextData.event_timetill;
	} else {
		var eventTextData = mycache.ids[real_event.id];
		if (eventTextData == undefined) return;
		if (real_event.repeat != 0) {
			var repeatData = mycache.repeats[event_id];
			timefrom = repeatData.event_timefrom;
			timetill = repeatData.event_timetill;
		} else {
			timefrom = eventTextData.event_timefrom;
			timetill = eventTextData.event_timetill;
		};
	};

	if (invis==undefined) invis=false;
	var eventsChanged = true;

	var keepon=true;
	var j=0, tdl;
	do {
		if (tdl=$("event_"+event_id+"_"+j+"_"+viewMode+"_0")) { 
			var pNod=tdl.parentNode;
			pNod.removeChild(tdl); 
			j++;
		} else if (tdl=$("event_"+event_id+"_"+j+"_"+viewMode+"_1")) {
			var pNod=tdl.parentNode;
			pNod.removeChild(tdl); 
			j++;
		} else keepon=false;
	} while (keepon);

	var allspan = $('allspan');
	var common_id = '';
	for (var j in eventPosData) {
		if ((eventPosData[j]!=null)&&(eventPosData[j]!=undefined)) {
			common_id = event_id+"_"+j+"_"+viewMode+"_"+eventTextData["event_allday"];
			mixid = "event_"+common_id;
			var evitem = eventPosData[j];
			if (evitem == null) { 
				var event_div = document.createElement('div');
				event_div.id = mixid;
				allspan.appendChild(event_div);
			} else {
				var calendar_public_level = null;
				if (typeof(mycache_c.calendars[eventTextData['calendar_id']]) != "undefined") {
					calendar_public_level = mycache_c.calendars[eventTextData['calendar_id']]['publication_level'];
				};

				var visib="visible";
				if (viewMode == 2) visib="hidden";
				var ari = evitem.arrindex;
				var alld = 1;
				if (ari<0) { ari=0; alld=0; };
				var arsuf = ["","_left","_right","_both"][ari];

				var div1 = document.createElement('div');
				div1.id = mixid;
				div1.className="event";
				div1.style.marginTop=evitem.divOff+"px";
				if (invis) div1.style.display="none";

				if (calendar_public_level==1) {
					div1.onmouseout = mouse0;
					div1.onmouseover = mouse1;
					div1.style.cursor = "pointer";
				} else {
					div1.style.cursor = "default";
				};

				div1.style.width=evitem.divWidth + '%';
				div1.style.left=evitem.divLeft + '%';
				div1.style.top=evitem.divTop;

				var div2 = document.createElement('div');
				div2.className=(ari?("a"+arsuf+" a"):"a");

				var div3 = document.createElement('div');
				div3.className=(ari?("b"+arsuf+" b"):"b");

				div1.appendChild(div2);
				div1.appendChild(div3);

				var div4 = document.createElement('div'); /* global */
				div4.className="event_middle";
				div4.style.height=evitem.divHeight;

				if (calendar_public_level == 1) {
					div4.onmousedown = function(ev) {invoke(ev,this); return false;};
					div4.onmouseup=function(ev) { area.skip = false; };
				};

				div4.id = 'mid_' + common_id;

				var div5 = document.createElement('div');
				div5.className="event_text"+arsuf;

				var div6 = document.createElement('div');
				div6.className=(ari?("time time"+arsuf):"time"); 
				div6.id = 'time_'+common_id;

				var divtit=eventTextData["event_name"];
				var titl = "";
				if (ari<=0) {
					var tfDateObj = timefrom;
					var ttDateObj = timetill;
					var tf=gtime(tfDateObj);
					var tt=gtime(ttDateObj,24);
					if(setcache['timeformat'] == 2) titl=tf.time+' - '+tt.time;
					if(setcache['timeformat'] == 1)
					{ 
						var chour_f = tfDateObj.getHours();
						var cmin_f = tfDateObj.getMinutes();
						var chour_t = ttDateObj.getHours();
						var cmin_t = ttDateObj.getMinutes();
						tf = ((chour_f  == 0)? '12' : ((chour_f > 12)? chour_f -12 : chour_f)) + ((cmin_f == 0) ? ' ' : ':'+ cmin_f + ' ') + ((chour_f <12) ? "AM" : "PM");
						tt = ((chour_t  == 0)? '12' : ((chour_t > 12)? chour_t -12 : chour_t)) + ((cmin_t == 0) ? ' ' : ':'+ cmin_t + ' ') + ((chour_t <12) ? "AM" : "PM");
						titl = tf +' - '+ tt;
					};
					if (alld) titl=" "; else divtit="["+titl+"] "+divtit;
					var tex1 = document.createTextNode(titl);
					div6.appendChild(tex1);
				};

				var div7 = document.createElement('div');
				div7.className=(ari?("text text"+arsuf):"text");

				if (calendar_public_level != 2) {
					var tex3=document.createTextNode(eventTextData["event_name"]);
					div7.appendChild(tex3);
				};
				div5.appendChild(div6);
				div5.appendChild(div7);
				div4.appendChild(div5);
				div1.appendChild(div4);
				var div8=document.createElement("DIV");
				div8.id = 'c_'+common_id;
				div8.className = (ari?("b"+arsuf+" b"):"b");

				div1.appendChild(div8); 
				var div9 = document.createElement("DIV");
				div9.className=(ari?("a"+arsuf+" a"):"a");
				div9.id = 'a_' + common_id;

				div1.appendChild(div9); 
				if (calendar_public_level == 2) {
					div1.title = titl;
				} else {
					div1.title=divtit;
				};
				$(evitem.dom).appendChild(div1);
			}
		}
	}
}

function getSettingsParametr() {
	if (setcache != undefined) {
		return convertObjectVariablesToTheirTypes(setcache);
	};
}

/*----------------build calendar-----------------------*/
function render_calendar()
{ 
	mycache_c = cacheLoadCalendar(mydate,false);

	if (typeof(mycache_c.calendars) != "undefined"){
		for (var i in mycache_c.calendars)
		{
			var calendar = mycache_c.calendars[i];
			if (calendar['publication_level'] == 2) {
				renderContainerForEvent(calendar['calendar_id'], '15');
			} else {
				renderContainerForEvent(calendar['calendar_id'], calendar['calendar_color']);
			}
		}
	}
}


function render_show_calendar(parent, calendar)
{
	var idc = calendar['calendar_id'];
	var color = calendar['calendar_color'];
	var conteiner = document.createElement('div');
	if (calendar['publication_level'] == 2) {
		conteiner.className = "eventcontainer_15";
	} else {
		conteiner.className = "eventcontainer_"+calendar['calendar_color'];
	};

	var contSubject = document.createElement('div');
	contSubject.className = 'event';
	contSubject.style.cursor = "default";
	var div1 = document.createElement('div');
	div1.className = 'a';
	var div2 = document.createElement('div');
	div2.className = 'b';
	var div3 = document.createElement('div');
	div3.className = 'event_middle';

	var div31 = document.createElement('div');
	div31.className = 'calendar_text';

	var divText = document.createElement('div');
	divText.className = 'text';
	divText.innerHTML = HtmlEncode(calendar['calendar_name']);
	div31.appendChild(divText);

	div3.appendChild(div31);
	var div4 = document.createElement('div');
	div4.className = 'b';
	var div5 = document.createElement('div');
	div5.className = 'a';
	contSubject.appendChild(div1);
	contSubject.appendChild(div2);
	contSubject.appendChild(div3);
	contSubject.appendChild(div4);
	contSubject.appendChild(div5);

	conteiner.appendChild(contSubject);

	parent.appendChild(conteiner);
}