function createR()
{
	var ro;
	var browser = navigator.appName;
	if (browser == "Microsoft Internet Explorer")
	{
		ro = new ActiveXObject("Microsoft.XMLHTTP");
	}
	else
	{
		ro = new XMLHttpRequest();
	}

	return ro;
}

var http = createR();
var lang = null;
var calendarDays = new Array ();
var monthNames = new Array ('januar', 'februar', 'marec', 'april', 'maj', 'junij', 'julij', 'avgust', 'september', 'oktober', 'november', 'december');
var activeProgressBar = null;
var bookmarkNodeOpen = null;
var bookmarkSectionNodeOpen = null;
var currentlyPlayingTimer = 10000; // 10 seconds between checks

function sndReq (action, data)
{
	http.open ('get', '/inc/rpc.php?action=' + action + '&data=' + data);
	http.onreadystatechange = handleResponse;
	http.send(null);
}

function handleResponse ()
{
	if (http.readyState == 4)
	{
		if (http.status == 200)
		{
			var response = http.responseText;
			var update = new Array();

			if ((response.indexOf('||') != -1))
			{
				update = response.split ('||');
				if (update[0] == 'currentlyPlaying')
				{
					var el = document.getElementById ('nextSong');
					el.innerHTML = update[1];
				}
				else if (update[0] == 'poll')
				{
					var el = document.getElementById ('pollFrame');

					DLwrapper = document.createElement ("DL");
					DLwrapper.className = "poll-resuts";

					el.appendChild (DLwrapper);

					list = update[1].split ('|');
					var sum = 0;

					for (var n = 0; n < list.length; n++)
					{
						tmp = list[n].split ('::');
						DTwrapper = document.createElement("DT");
						DTContent = document.createTextNode(tmp[1]);
						DTwrapper.appendChild(DTContent);

						DDwrapper = document.createElement("DD");
						barImg = document.createElement("IMG");
						barImg.src = '/dsg/bgr/poll-bar.gif';
						barImg.id = 'pollBar' + n;
						barImg.height = 10;

						percentSpan = document.createElement("SPAN");
						percentSpan.id = 'pollPer' + n;
						percentSpan.innerHTML = '&nbsp;0%';

						DDwrapper.appendChild(barImg);
						DDwrapper.appendChild(percentSpan);

						DLwrapper.appendChild(DTwrapper);
						DLwrapper.appendChild(DDwrapper);
						sum+= parseInt (tmp[2]);
						pollArr[n] = tmp[2];
					}

					totals = document.createElement("SMALL");
					totals.innerHTML = '(Skupaj vseh glasov: ' + sum + ')';

					el.removeChild (document.getElementById('pollLoader'));
					el.appendChild (totals);

					for (var n in pollArr)
					{
						pollArr[n] = Math.round ((pollArr[n] / sum) * 100);
					}

					slideVote (0);
				}
				else if (update[0] == 'calendar')
				{
					calendarDays = new Array ();
					list = update[1].split ('|');
					try
					{
						tmp = list[5].split ('::');
						for (var n = 0; n < tmp.length; n++)
						{
							calendarDays[tmp[n]] = tmp[n];
						}
					}
					catch (e)
					{
						tmp = null;
					}
					buildCalendar(list[0], list[1], list[2], list[3], list[4]);
				}
				else if(update[0] == 'paging'){
					buildPaging();
				}
			}
			//else if((response.charAt(0) == '*')){
			/*else{
				buildPaging();
			}*/
		}
		else
		{
			alert ('PriÄąÄ„lo je do napake. Poskusite znova.');
		}
	}

	if (activeProgressBar != null)
	{
		activeProgressBar.style.display = 'none';
		activeProgressBar = null;
	}
}

function padDigits (n, totalDigits)
{
	n = n.toString();
	var pd = '';
	if (totalDigits > n.length)
	{
		for (icnt = 0; icnt < (totalDigits-n.length); icnt++)
		{
			pd += '0';
		}
	}

	return pd + n;
}

function getFormData (obj)
{
	getstr = '';

	if (obj.childNodes.length)
	{
		for (var i=0; i < obj.childNodes.length; i++)
		{
/*
			if (!confirm (obj.childNodes[i].tagName + ', value: ' + obj.childNodes[i].innerHTML))
			{
				return false;
			}
*/
			if (obj.childNodes[i].tagName == "INPUT")
			{
				//	TEXT
				if (obj.childNodes[i].type == "text")
				{
					getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
				}

				//	HIDDEN
				if (obj.childNodes[i].type == "hidden")
				{
					getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
				}

				//	CHECKBOX
				if (obj.childNodes[i].type == "checkbox")
				{
					if (obj.childNodes[i].checked)
					{
						getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
					}
					else
					{
						getstr += obj.childNodes[i].name + "=&";
					}
				}

				//	RADIO
				if (obj.childNodes[i].type == "radio")
				{
					if (obj.childNodes[i].checked)
					{
						getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
					}
				}
			} else if (obj.childNodes[i].tagName == "SELECT")
			{
				var sel = obj.childNodes[i];
				getstr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
			} else if (obj.childNodes[i].tagName == "TEXTAREA")
			{
				getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
			}
			else if (obj.childNodes[i].tagName != 'undefined')
			{
				getstr+= getFormData (obj.childNodes[i]);
			}
		}
	}

	return getstr;
}

function get (action, obj)
{
	var getstr = "form&" + getFormData (obj);

	sndReq (action, getstr);
}

//	CALENDAR
function getCalendar (type, day, month, year)
{
	activeProgressBar = document.getElementById ('calendarProgress');
	activeProgressBar.style.display = 'block';

	//	date init
	var dateObj	= new Date ();
	dataDay	= (day) ? day : dateObj.getDay ();
	dataMonth	= (month) ? month : dateObj.getMonth ();
	dataYear	= (year) ? year : dateObj.getFullYear ();

	sndReq ('calendar', type + '&day=' + dataDay + '&month=' + dataMonth + '&year=' + dataYear);
}

function buildCalendar (type, day, month, year, minDate)
{
	var daysInMonth = new Array(31, ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	date = new Date (year, month - 1, 1);
	dateNow = new Date ();

	dateFirst = (date.getDay () == 0) ? 7 : date.getDay ();
	rows = Math.ceil ((dateFirst + daysInMonth[month - 1] - 1) / 7);

	//	Earliest date
	mdTmp = new Array ();
	try
	{
		mdTmp = minDate.split ('-');
	}
	catch (e)
	{
		mdTmp[0] = dateNow.getFullYear();
		mdTmp[1] = padDigits (parseInt (dateNow.getMonth()) + 1, 2);
		mdTmp[2] = padDigits (parseInt (dateNow.getDate ()), 2);

		minDate = mdTmp[0] + '-' + mdTmp[1] + '-' + mdTmp[2];
	}

	var el = document.getElementById ('calendar_' + type);


	if (el.rows.length)
	{
		cnt = el.rows.length;
		for (i = 1; i <= cnt; i++)
		{
			el.deleteRow(0);
		}
	}

	cntCells = 1;
	cntDays = 1;

	for (i = 1; i <= rows; i++)
	{
		row = el.insertRow(i - 1);
		for (j = 1; j <= 7; j++)
		{
			cell = row.insertCell(j - 1);
		
			//	mark the weekends
			cell.className = (j > 5) ? 'weekend' : '';

			//	fill the day
			if (cntCells >= dateFirst && cntDays <= daysInMonth[month - 1])
			{
				if (calendarDays[cntDays])
				{
					cellA = document.createElement("A");
					cellA.href = '/novice/?date=' + year + '-' + padDigits (month, 2) + '-' + padDigits (cntDays, 2);
					cellA.setAttribute ('title', cntDays + '.' + month + '.' + year);
					cellA.innerHTML = cntDays;
					cell.appendChild (cellA);

					if (day == cntDays)
					{
						cellA.className = 'sel';
					}

					if (cntDays == dateNow.getDate () && month == (dateNow.getMonth () + 1) && year == dateNow.getFullYear ())
					{
						cellA.className = cellA.className + ' today';
					}
				} else {
					cell.innerHTML = cntDays;
				}
				cntDays++;
			} else {
				cell.className = 'empty';
				cell.innerHTML = '&nbsp;';
			}

			cntCells++;
		}
	}

	//	year selector
	yearPrev = (checkValidCalendarDate (minDate, (parseInt (year) - 1) + '-' + padDigits (month, 2) + '-' + padDigits (day, 2), true)) ? parseInt (year) - 1 : year;
	document.getElementById ('calendar' + type + 'YearPrev').onclick = function () {getCalendar (type, day, month, yearPrev); return false;};

	yearNext = (checkValidCalendarDate (minDate, (parseInt (year) + 1) + '-' + padDigits (month, 2) + '-' + padDigits (day, 2), true)) ? parseInt (year) + 1 : year;
	document.getElementById ('calendar' + type + 'YearNext').onclick = function () {getCalendar (type, day, month, yearNext); return false;};

	//	month selector
	if (month == 1) {
		if (checkValidCalendarDate (minDate, (parseInt (year) - 1) + '-12-' + padDigits (day, 2), true))
		{
			document.getElementById ('calendar' + type + 'MonthPrev').onclick = function () {getCalendar (type, day, 12, (parseInt (year) - 1)); return false;};
		} else {
			document.getElementById ('calendar' + type + 'MonthPrev').onclick = function () {getCalendar (type, day, month, year); return false;};
		}

		monthNext = (checkValidCalendarDate (minDate, year + '-' + padDigits (parseInt (month) + 1, 2) + '-' + padDigits (day, 2), true)) ? parseInt (month) + 1 : month;
		document.getElementById ('calendar' + type + 'MonthNext').onclick = function () {getCalendar (type, day, monthNext, year); return false;};
	} else if (month == 12) {
		if (checkValidCalendarDate (minDate, year + '-11-' + padDigits (day, 2), true))
		{
			document.getElementById ('calendar' + type + 'MonthPrev').onclick = function () {getCalendar (type, day, 11, year); return false;};
		} else {
			document.getElementById ('calendar' + type + 'MonthPrev').onclick = function () {getCalendar (type, day, month, year); return false;};
		}

		yearNext2 = (checkValidCalendarDate (minDate, (parseInt (year) + 1) + '-01-' + padDigits (day, 2), true)) ? parseInt(year) + 1 : year;
		document.getElementById ('calendar' + type + 'MonthNext').onclick = function () {getCalendar (type, day, 1, yearNext2); return false;};
	} else {
		if (checkValidCalendarDate (minDate, year + '-' + padDigits (parseInt (month) - 1, 2) + '-' + padDigits (day, 2), true))
		{
			document.getElementById ('calendar' + type + 'MonthPrev').onclick = function () {getCalendar (type, day, (parseInt(month) - 1), year); return false;};
		} else {
			document.getElementById ('calendar' + type + 'MonthPrev').onclick = function () {getCalendar (type, day, month, year); return false;};
		}

		monthNext2 = (checkValidCalendarDate (minDate, year + '-' + padDigits (parseInt (month) + 1, 2) + '-' + padDigits (day, 2), true)) ? parseInt(month) + 1 : month;
		document.getElementById ('calendar' + type + 'MonthNext').onclick = function () {getCalendar (type, day, monthNext2, year); return false;};
	}

	document.getElementById ('calendar' + type + 'Month').value = month;
	document.getElementById ('calendar' + type + 'Year').value = year;
	document.getElementById ('calendar' + type + 'TitleYear').innerHTML = year;
	document.getElementById ('calendar' + type + 'TitleMonth').innerHTML = monthNames[month - 1];
}

function checkValidCalendarDate (dateLimit, dateCheck, noFuture)
{
	dateLimit = dateLimit.replace (/\-/gi, '');
	dateCheck = dateCheck.replace (/\-/gi, '');

	dateLimit = dateLimit.substring (0,6);
	dateCheck = dateCheck.substring (0,6);

	if (parseInt (dateLimit) <= parseInt (dateCheck))
	{
		if (noFuture)
		{
			dateNowObj = new Date ();
			dateNowStr = dateNowObj.getFullYear() + '' + padDigits (dateNowObj.getMonth() + 1, 2);

			if (parseInt (dateCheck) > parseInt (dateNowStr))
			{
				return false;
			}
		}
	} else {
		return false;
	}

	return true;
}

//	PLUGINS	//

var pollArr = new Array ();

function castVote (vote_id, formObj)
{

	var elements = formObj.elements['pollRadio'];
	var selOption = null;

	for (var cnt = 0; cnt < elements.length; cnt++)
	{
		if (elements[cnt].checked) selOption = elements[cnt].value;
	}

	if (selOption)
	{
		var el = document.getElementById ('pollFrame');
		el.removeChild(document.getElementById('pollForm'));

		loader = document.createElement("DIV");
		loader.id = "pollLoader";
		loaderContent = document.createTextNode("Glasovanje...");
		loader.appendChild(loaderContent);
		el.appendChild(loader);
		sndReq ('poll', selOption);
	}
}

function slideVote (percent)
{
	percent = percent/1 + 2;
	for (var n in pollArr)
	{
		if (pollArr[n] >= percent)
		{
			var el = document.getElementById ('pollBar' + n);
			var el2 = document.getElementById ('pollPer' + n);
			el.style.width = Math.max (1, Math.round (percent/100 * 140)) + 'px';
			el2.innerHTML = '&nbsp;' + percent + '%';
		}
	}

	if (percent < 100) setTimeout ('slideVote("' + percent + '")', 5);
}

function addComment ()
{
	var el = document.getElementById ('reply');
	el.style.display = "block";
}

//	BOOKMARKS
function addBookmark (obj)
{
	get ('bookmark', obj);
}

function removeBookmark (bmId)
{
	if (confirm ('Ste prepriÄŹĹĽËť?ani da ÄąĹľelite zbrisati shranjeni ÄŹĹĽËť?lanek?'))
	{
		sndReq ('bookmarkDelete', bmId);
	}
}

function editBookmark (bmId)
{
	sndReq ('bookmarkEdit', bmId);
}

function updateBookmark (bmId)
{
	var bmEl = document.getElementById ('bookmarkEdit_' + bmId);
	var bmSel = document.getElementById ('bookmarkEditSelect_' + bmId);
	newSection = bmSel.options[bmSel.selectedIndex].value;

	sndReq ('bookmarkUpdate', newSection + '&bookmarkId=' + bmId);
}

function editBookmarkSection (bmsId)
{
	var bmsEl = document.getElementById ('bookmarkSectionTitle_' + bmsId);

	if (bookmarkNodeOpen != null)
	{
		tmpEl = document.getElementById (bookmarkNodeOpen);
		tmpEl.parentNode.removeChild (tmpEl);
		bookmarkNodeOpen = null;
	}

	if (bookmarkSectionNodeOpen != null)
	{
		eltmp = document.getElementById ('bookmarkSectionInput_' + bookmarkSectionNodeOpen);
		tmp = eltmp.value;
		eltmp.parentNode.removeChild (eltmp);
		document.getElementById ('bookmarkSectionTitle_' + bookmarkSectionNodeOpen).innerHTML = tmp;
		bookmarkSectionNodeOpen = null;
	}

	bmsDiv = document.createElement ('div');
	bmsDiv.id = 'bookmarkSectionEdit_' + bmsId;
	bmsDiv.className = 'editSectionLine';

	bmsDL = document.createElement ("dl");
	bmsDiv.appendChild (bmsDL);

	bmsInput = document.createElement ('input');
	bmsInput.value = bmsEl.innerHTML;
	bmsInput.id = 'bookmarkSectionInput_' + bmsId;

	bmsDD = document.createElement ("dt");
	bmsDD.appendChild (bmsInput);
	bmsDL.appendChild (bmsDD);

	bookmarkSectionNodeOpen = bmsId;

	bmsA = document.createElement ('a');
	bmsImg = document.createElement ('img')
	bmsImg.src = "/dsg/sl/buttons/osvezi.gif";
	bmsA.appendChild (bmsImg);
	bmsA.href = 'javascript:void(0);';
	bmsA.onclick = function () {updateBookmarkSection (bmsId);};

	bmsDD = document.createElement ("DD");
	bmsDD.appendChild (bmsA);
	bmsDL.appendChild (bmsDD);

	bmsEl.innerHTML = '';
//	bmsEl.appendChild(bmsInput);
//	bmsEl.appendChild(bmsA);
	bmsEl.appendChild (bmsDiv);
}

function updateBookmarkSection (bmsId)
{
	var bmsEl = document.getElementById ('bookmarkSectionInput_' + bmsId);

	sndReq ('bookmarkSectionUpdate', bmsEl.value + '&bookmarkSectionId=' + bmsId);
}

function removeBookmarkSection (bmsId)
{
	if (confirm ('Zraven bodo zbrisani vsi shranjeni ÄŹĹĽËť?lanki, ki jih imate v tej kategoriji. Sure?'))
	{
		sndReq ('bookmarkSectionDelete', bmsId);
	}
}

function addBookmarkSection ()
{
	var el = document.getElementById ('bookmarkSectionNew');
	if (el.value.length > 0)
	{
		sndReq ('bookmarkSectionNew', el.value);
	}
	else
	{
		alert ('Vnesti morate ime kategorije.');
		el.focus();
	}
}

//	RADAR
function addRadar (radarId)
{
	sndReq ('radar', radarId);
}

function delRadar (radarId)
{
	if (confirm ('ÄąËťelite zbrisat to besedo?'))
	{
		sndReq ('delRadar', radarId);
	}
}

//	JOKE
function addJoke (obj)
{
	var error = false;

	if (document.getElementById ('jokeNewTitle').value.length == 0)
		error = true;

	if (document.getElementById ('jokeNewSection').value == 0)
		error = true;

	if (document.getElementById ('jokeNewContent').value.length == 0)
		error = true;

	if (error)
	{
		displayMessage ('Izpolnite vsa polja', false);
	}
	else
	{
		get ('joke', obj);
	}
}

//	RATING
function doRate (section, id, rate)
{
	for (i = 1; i <= 5; i++)
	{
		el = document.getElementById ('rating_' + section + '_' + id + '_' + i);
		if (i <= rate)
		{
			el.src = '/dsg/star_on.gif';
		}
		else
		{
			el.src = '/dsg/star_off.gif';
		}
	}
}

function restoreRate (section, id, remove)
{
	score = document.getElementById ('rating_' + section + '_' + id + '_score').value;

	for (i = 1; i <= 5; i++)
	{
		el = document.getElementById ('rating_' + section + '_' + id + '_' + i);
		if (i <= score)
		{
			el.src = '/dsg/star_on.gif';
		}
		else
		{
			el.src = '/dsg/star_off.gif';
		}

		if (remove == 1)
		{
			el.onmouseover = '';	//	IE
			el.onclick = '';	//	IE
			el.removeAttribute('onmouseover');
			el.removeAttribute('onclick');
		}
	}

}

function voteRate (section, id, rate)
{
	sndReq ('rate_' + section, id + '_' + rate);
}

//	PAGING

function getPages (date, page, exception)
{
	//alert ('type: paging');
	/*alert ('date:' +date);
	alert ('page:' +page);
	alert ('exception:' +exception);*/

	//sndReq ('paging', date + '&page=' + page + '&exception=' +exception);
	//sndReq ('calendar', 'paging');
	sndReq ('calendar', 'paging');
}

function buildPaging(){
	alert ('buildPaging');
}

//	Currently playing module
function currentlyPlayingGet ()
{
	sndReq ('currentlyPlaying');
	setTimeout ('currentlyPlayingGet()', currentlyPlayingTimer);
}

function currentlyPlayingInit ()
{
	if (document.getElementById ('nextSong'))
	{
		currentlyPlayingGet();
	}
}

//	Weeksong
function weeksongVote (formObj)
{
	for (i = 1; i<= document.getElementById ('nocat').value; i++)
	{
		selOption = null;
		var elements = formObj.elements['cat_' + i];
		for (var cnt = 0; cnt < elements.length; cnt++)
		{
			if (elements[cnt].checked) selOption = elements[cnt].value;
		}

		if (selOption == null)
		{
			document.getElementById ('weeksongPollError').style.visibility = 'visible';
			return false;
		}
	}

	return true;
}
