
// global popupWindow
var win = new PopupWindow('qWindow');


function displayQCalendar(m,y,path,cat)
{
	//alert("d("+m+","+y+","+path+","+cat+")");
	var ran_no=(Math.round((Math.random()*9999)));
	var req = new DataRequestor();
	
	req.setObjToReplace('quickCalendar');
	req.addArg(_GET, "month", m);
	req.addArg(_GET, "year", y);
	req.addArg(_GET, "cat", cat);
	req.addArg(_GET, "ran", ran_no);
	
	if(arguments.length > 4 && arguments[4] != null) req.addArg(_GET, "s", (arguments[4] ? "admin" : "")); // set to true if we're backend
	if(arguments.length > 5 && arguments[5] != null) req.addArg(_GET, "lang", arguments[5]); else if(gebi("lang") != null) req.addArg(_GET, "lang", gebi("lang").value); 
	if(arguments.length > 6 && arguments[6] != null) req.addArg(_GET, "css", arguments[6]); else if(gebi("css") != null) req.addArg(_GET, "css", gebi("css").value);
	if(gebi("mainTmpl") != null) req.addArg(_GET, "mainTmpl", gebi("mainTmpl").value);
	if(gebi("eventTmpl") != null) req.addArg(_GET, "eventTmpl", gebi("eventTmpl").value);
	req.getURL(path);
}

// replaces openEvent()
function openDayEvents(year, month, day, cal) 
{
	//alert("openDayEvents("+year+","+month+","+day+","+cal+")");
	win.x = 0;
	win.y = 0;
	win.offsetX = 0;
	win.offsetY = 0;
	var admin = (arguments.length == 5 ? arguments[4] : 0);
	var req = new DataRequestor();
	req.addArg(_GET, "s", "open");
	req.addArg(_GET, "day", day);
	req.addArg(_GET, "month", month);
	req.addArg(_GET, "year", year);
	req.addArg(_GET, "cat", cal);
	req.addArg(_POST, "admin", (admin ? 1 : 0));
	req.onload = function (data, obj) 
	{
        win = new PopupWindow('qWindow'); 
        if(!admin) win.autoHide();
        win.setSize(200,200);
		center("qWindow");
        win.populate(data);
        win.showPopup("qWindow");
	}
	req.getURL("qcal.php");
	gebi("qWindow").style.display="";
	return false;
}


function openEvent(eventInfo)
{
	gebi("qEvents").innerHTML = decodeURI(eventInfo);
	gebi("qEvents").style.display = "";
	gebi("qEvents").style.visibility = "visible";
	return false;
}

function closeEvent()
{
	if(arguments.length > 0) { arguments[0].style.display = "none"; arguments[0].style.visibility = "hidden"; }
	else if(gebi("qEvents")) { gebi("qEvents").style.display = "none"; gebi("qEvents").style.visibility = "hidden"; }
	if(win) {win.hidePopup(); win.autoHideEnabled = false; };
	return false;
}



function editEvent(id)
{
	var req = new DataRequestor();
	req.addArg(_GET, "s", "edit");
	req.addArg(_POST, "id", id);
	if(gebi("calendar") != null) req.addArg(_GET, "cat", gebi("calendar").value);
	if(gebi("month") != null) req.addArg(_GET, "month", gebi("month").value);
	if(gebi("year") != null) req.addArg(_GET, "year", gebi("year").value);
	req.onload = function (data, obj) 
	{
        win = new PopupWindow('qWindow');
		win.setSize(200,200);
		center("qWindow");
        win.populate(data);
        win.showPopup("qWindow");
	}
	req.getURL("qcal.php");
	return false;
}


function moveEvent(id)
{
	var req = new DataRequestor();
	var action = "move";
	if(arguments.length == 2) action = arguments[1];
	req.addArg(_GET, "s", action);
	req.addArg(_POST, "id", id);
	req.addArg(_POST, "do", action);
	if(gebi("calendar") != null) req.addArg(_GET, "cat", gebi("calendar").value);
	if(gebi("month") != null) req.addArg(_GET, "month", gebi("month").value);
	if(gebi("year") != null) req.addArg(_GET, "year", gebi("year").value);
	req.onload = function (data, obj) 
	{
        win = new PopupWindow('qWindow');
        win.setSize(200,200);
		center("qWindow");
        win.populate(data);
        win.showPopup("qWindow");
	}
	req.getURL("qcal.php");
	return false;
}

function  copyEvent(id)
{
	moveEvent(id, "copy"); 
}


function handleEventAction(action) 
{
	var form = gebi("eventActionForm");
	var j=0;
	var arr= new Array();
	var events = document.getElementsByName("chkboxEvent");
	
	for (i=0;i<events.length;i++)
	{
		if (events[i].checked)
		{
			arr[j] = events[i].value;
			j++;
		}
	}
	
	switch(action) 
	{
		case "move":
		case "copy":
			moveEvent(arr, action);
			break;
			
		case "del":
			delEvent(arr);
			break;
			
		case "export":
			break;
	}
	return false;
}


function delEventSet(id) 
{
	var req = new DataRequestor();
	req.addArg(_GET, "s", "delSet");
	req.addArg(_POST, "id", id);
	req.addArg(_GET, "cat", gebi("select_calendar")[gebi("select_calendar").selectedIndex].value);
	req.onload = function (data, obj) 
	{
		theJSON = eval('(' + data + ')');
		alert(theJSON.message);
		win.hidePopup();
		displayQCalendar(theJSON.month,theJSON.year,"qcal.php",theJSON.cal,true,theJSON.lang,theJSON.css);
	}
	req.getURL("qcal.php");
	return false;
}

function delEvent(id)
{
	var req = new DataRequestor();
	req.addArg(_GET, "s", "del");
	req.addArg(_POST, "id", id);
	req.addArg(_POST, "do", "del");
	req.addArg(_GET, "cat", gebi("select_calendar")[gebi("select_calendar").selectedIndex].value);
	req.addArg(_POST, "cal", gebi("select_calendar")[gebi("select_calendar").selectedIndex].value);
	if(gebi("calendar") != null) req.addArg(_GET, "cat", gebi("calendar").value);
	if(gebi("month") != null) req.addArg(_GET, "month", gebi("month").value);
	if(gebi("year") != null) req.addArg(_GET, "year", gebi("year").value);
	req.onload = function (data, obj) 
	{
		//alert(data);
		theJSON = eval('(' + data + ')');
		alert(theJSON.message);
		win.hidePopup();
		displayQCalendar(theJSON.month,theJSON.year,"qcal.php",theJSON.cal,true,theJSON.lang,theJSON.css);
	}
	req.getURL("qcal.php");
	return false;
}

function addEvent(year, month, day, cal) 
{
	var req = new DataRequestor();
	req.addArg(_GET, "s", "add");
	req.addArg(_GET, "day", day);
	req.addArg(_GET, "month", month);
	req.addArg(_GET, "year", year);
	req.addArg(_GET, "cal", cal);
	req.onload = function (data, obj) 
	{
        win = new PopupWindow('qWindow');
        win.setSize(200,200);
		center("qWindow");
        win.populate(data);
        win.showPopup("qWindow");
	}
	req.getURL("qcal.php");
	return false;
}


function validateForm(form) 
{
	var validator  = new Validator(form);
	 
	validator.addItem("span","req");
	validator.addItem("span","value>0");
	
	validator.addItem("date","req");
	validator.addItem("date","date=YYYY-MM-DD");
	 	
	validator.addItem("time","regexp=^\\s*\\d{1,2}[.:]{1}\\d{2}(\\s*[-]{1}\\s*\\d{1,2}[.:]{1}\\d{2})?\\s*$", "Format: 18:00[-20:00]");
	
	validator.addItem("title","req");
	
	var rc = validator.validate();						
	
	validator.clear();
	
	return rc;
}

function postEvent(action) 
{
	var form = gebi("form_eventForm");

	if(validateForm(form)) 
	{
		var cal = gebi("select_category")[gebi("select_category").selectedIndex].value;
		var req = new DataRequestor();
		req.addArg(_GET, "s", action);
		req.addArg(_GET, "cal", cal);
		req.addArg(_POST, "do", action);
		req.addArg(_POST, "id", gebi("id").value);
		req.addArg(_POST, "setid", gebi("setid").value);
		req.addArg(_POST, "extrainfo", gebi("extrainfo").value);
		req.addArg(_POST, "category", cal);
		req.addArg(_POST, "span", gebi("span").value);
		req.addArg(_POST, "date", gebi("date").value);
		req.addArg(_POST, "time", gebi("time").value);
		req.addArg(_POST, "title", gebi("title").value);
		req.addArg(_POST, "location", gebi("location").value);
		
		if(gebi("wysiwyg_editor") && gebi("wysiwyg_editor").value == "fckeditor") // wysiwyg
		{
			parent.frames[0].FCK.UpdateLinkedField();
		}
		req.addArg(_POST, "description", gebi("description").value);
		
		if(gebi("checkbox_repeat") != null && gebi("checkbox_repeat").checked) 
		{
			req.addArg(_POST, "repeat", gebi("checkbox_repeat").checked);
			req.addArg(_POST, "repeat_interval", gebi("text_repeat_interval").value);
			req.addArg(_POST, "repeat_type", gebi("select_repeat_type")[gebi("select_repeat_type").selectedIndex].value);
			req.addArg(_POST, "repeat_until", gebi("text_recurrenceuntil").value);	
		}
		
		req.onload = function (data, obj) 
		{
			alert(data);
			win.hidePopup();
			displayQCalendar(gebi("month").value,gebi("year").value,"qcal.php",gebi("calendar").value,true,gebi("lang").value,gebi("css").value);
		}
		req.getURL("qcal.php");
	}
	
	return false;
}

function updateEvent() 
{
	return postEvent("update");
}

function updateEventSet() 
{
	return postEvent("update_set");
}

function insertEvent() 
{
	return postEvent("insert");
}

function postMoveEvent(action) 
{
	var req = new DataRequestor();
	req.addArg(_GET, "s", action);
	req.addArg(_POST, "do", action);
	req.addArg(_POST, "id", gebi("id").value);
	req.addArg(_POST, "setid", gebi("setid").value);
	req.addArg(_POST, "cal", gebi("select_category")[gebi("select_category").selectedIndex].value);
	req.addArg(_POST, "events", gebi("events").value);
	
	req.onload = function (data, obj) 
	{
		alert(data);
		win.hidePopup();
		displayQCalendar(gebi("month").value,gebi("year").value,"qcal.php",gebi("calendar").value,true,gebi("lang").value,gebi("css").value);
	}
	req.getURL("qcal.php");

	return false;
}

function doMoveEvent() 
{
	return postMoveEvent("doMove");
}

function doMoveEventSet() 
{
	return postMoveEvent("doMoveSet");
}

function doCopyEvent() 
{
	return postMoveEvent("doCopy");
}

function doCopyEventSet() 
{
	return postMoveEvent("doCopySet");
}

function toggleRepeat() 
{
	gebi('text_recurrenceuntil').disabled = !gebi("checkbox_repeat").checked;
	gebi('text_repeat_interval').disabled = !gebi("checkbox_repeat").checked;
	gebi('select_repeat_type').disabled = !gebi("checkbox_repeat").checked;
}

function selectCalendar(selectObj, m, y, path)
{
	var admin = (arguments.length > 4 ? arguments[4] : false);
	var lang = (arguments.length > 5 ? arguments[5] : null);
	var css = (arguments.length > 6 ? arguments[6] : null);
	return displayQCalendar(m,y,path,selectObj[selectObj.selectedIndex].value, admin, lang, css);
}

function addCalendar()
{
	var req = new DataRequestor();
	var cal = gebi('select_calendar')[gebi('select_calendar').selectedIndex].value;
	
	req.addArg(_GET, "s", "addCal");
	req.addArg(_GET, "cal", cal);
	if(gebi("month") != null) req.addArg(_GET, "month", gebi("month").value);
	if(gebi("year") != null) req.addArg(_GET, "year", gebi("year").value);
	
	req.onload = function (data, obj) 
	{
        win = new PopupWindow('qWindow');
        win.setSize(200,200);
		center("qWindow");
        win.populate(data);
        win.showPopup("qWindow");
	}
	req.getURL("qcal.php");
	return false;
}

function editCalendar()
{
	var req = new DataRequestor();
	var cal = 0
	
	if(arguments.length >= 1) 
	{
		cal = arguments[0];
	}
	else 
	{
		cal = gebi('select_calendar')[gebi('select_calendar').selectedIndex].value;
		if(cal <= 0) 
		{
			alert("Please choose a calendar in the dropdown list.");
		}
	}
	
	if(cal <= 0) 
	{
		return false;
	}
	
	req.addArg(_GET, "s", "editCal");
	req.addArg(_GET, "cal", cal);
	req.addArg(_POST, "id", cal);
	if(gebi("month") != null) req.addArg(_GET, "month", gebi("month").value);
	if(gebi("year") != null) req.addArg(_GET, "year", gebi("year").value);
	
	req.onload = function (data, obj) 
	{
        win = new PopupWindow('qWindow');
        win.setSize(200,200);
		center("qWindow");
        win.populate(data);
        win.showPopup("qWindow");
	}
	req.getURL("qcal.php");
	return false;
}

function updateCalendar() 
{
	var req = new DataRequestor();

	req.addArg(_GET, "s", "updateCal");
	req.addArg(_GET, "cal", gebi("calendar").value);
	req.addArg(_POST, "name", gebi("text_calendar_name").value);
	req.addArg(_POST, "id", gebi("id").value);
	
	req.onload = function (data, obj) 
	{
        alert(data);
		win.hidePopup();
		displayQCalendar(gebi("month").value,gebi("year").value,"qcal.php",gebi("calendar").value,true,gebi("lang").value,gebi("css").value);
	}
	req.getURL("qcal.php");
	
	return false;
}


function insertCalendar() 
{
	var req = new DataRequestor();

	req.addArg(_GET, "s", "newCal");
	req.addArg(_GET, "cal", gebi("calendar").value);
	req.addArg(_POST, "name", gebi("text_calendar_name").value);
	req.onload = function (data, obj) 
	{
        alert(data);
		win.hidePopup();
		displayQCalendar(gebi("month").value,gebi("year").value,"qcal.php",gebi("calendar").value,true,gebi("lang").value,gebi("css").value);
	}
	req.getURL("qcal.php");
	return false;
}

function delCalendar()
{
	var req = new DataRequestor();
	var cal = gebi('calendar').value;
	
	if(cal <= 0) 
	{
		alert("Please choose a calendar in the dropdown list.");
		return false;
	}
	
	req.addArg(_GET, "s", "delCal");
	req.addArg(_GET, "cal", cal);
	req.addArg(_POST, "id", cal);
	
	req.onload = function (data, obj) 
	{
		alert(data);
		win.hidePopup();
		displayQCalendar(gebi("month").value,gebi("year").value,"qcal.php",0,true,gebi("lang").value,gebi("css").value);
	}
	req.getURL("qcal.php");
	return false;
}

function exportCalendar(admin) 
{
	var req = new DataRequestor();
	var cal = 0;
	
	if(arguments.length == 2) 
	{
		cal = arguments[1];
	}
	else if(gebi('select_calendar')) 
	{
		cal = gebi('select_calendar')[gebi('select_calendar').selectedIndex].value;	
	}
		
	req.addArg(_GET, "s", "exportCal");
	req.addArg(_GET, "cal", cal);
	req.addArg(_POST, "id", cal);
	req.addArg(_POST, "admin", (admin ? 1 : 0));
	if(gebi("month") != null) req.addArg(_GET, "month", gebi("month").value);
	if(gebi("year") != null) req.addArg(_GET, "year", gebi("year").value);
	
	req.onload = function (data, obj) 
	{
        win = new PopupWindow('qWindow');
        win.setSize(200,200);
		center("qWindow");
        win.populate(data);
        win.showPopup("qWindow");
	}
	req.getURL("qcal.php");
	return false;
}

function doExport()
{
	var cal = 0;
	
	if(gebi("select_calendar")) 
	{
		cal = gebi("select_calendar")[gebi('select_calendar').selectedIndex].value;	
	}
	else 
	{
		cal = gebi("calendar").value;
	}
	
	var req = new DataRequestor();
	req.addArg(_GET, "s", "doExport");
	req.addArg(_GET, "cal", cal);
	req.addArg(_POST, "id", cal);
	req.addArg(_POST, "fromdate", gebi("fromdate").value);
	req.addArg(_POST, "todate", gebi("todate").value);
	
	req.onload = function (data, obj) 
	{
		theJSON = eval('(' + data + ')');
		window.open('include/inc_module/mod_qcal/inc_act/ical.export.php?format='+theJSON.format+'&dirfile='+theJSON.dirfile, "Export iCal");
		win.hidePopup();
	}
	req.getURL("qcal.php");
	return false;
}

function mark(what) 
{
	var events;
	if(arguments.length == 2) 
	{
		events = document.getElementsByName(arguments[1]);
	}
	else 
	{
		events = document.getElementsByName("chkboxEvent");
	}
	
	for (i=0;i<events.length;i++)
	{
		events[i].checked = (what == "inverse" ? !events[i].checked : what == "none" ? false : true);
	}
}

function getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return {x:scrOfX, y:scrOfY};
}

function center(objName) 
{
	setPos(objName, (screen.width-getElementWidth(objName))/2, (getScrollXY().y+200));
}

function setPos(objName, x, y) 
{
	if (document.getElementById)
	{
		objName = document.getElementById(objName);
		objName.style.left = x + "px";
		objName.style.top = y + "px";
	}
	else if (document.all) 
	{
		objName = document.all[objName];
		objName.style.left = x;
		objName.style.top = y;
	}
	else if (document.layers) 
	{
		objName = document.layers[objName];
		objName.left = x;
		objName.top = y;
	}
}

function getElementWidth(Elem) {
	var elem = gebi(Elem);
	var pos = 0;
	if(elem) pos = elem.offsetWidth;
	return pos;
}

function getElementHeight(Elem) 
{
	var elem = gebi(Elem);
	var pos = 0;
	if(elem) pos = elem.offsetHeight;
	return pos;
}

function gebi(name) 
{
	var elem = null;
	if(document.getElementById) 
	{
		elem = document.getElementById(name);
	} 
	else if (document.all)
	{
		elem = document.all[name];
	}
	else if (document.layers) 
	{
		elem = document.layers[name];
	}
	return elem;
}

