
function charA()
{
	return '@';
}

function userChanged()
{
	var p = new Array();
	
	p.push( document.getElementById('uname'));
	p.push( document.getElementById('uemail'));
	p.push( document.getElementById('uadmin'));
	p.push( document.getElementById('usubmit'));
	p.push( document.getElementById('ureset'));

	if(	p[0].value != p[0].defaultValue ||
		p[1].value != p[1].defaultValue ||
		p[2].checked != p[2].defaultChecked )
	{
		p[3].disabled = false;
		p[4].disabled  = false;
	} else {
		p[3].disabled = true;
		p[4].disabled  = true;
	}
}

/***********************************************************************
	Edit page
************************************************************************/

var disabledOption = new Array();

function selectNextLevel(sel, perm)
{
	if( sel.selectedIndex > 0)
	{
		var disOpt    = sel.options[sel.selectedIndex];
		var disOptIdx = disabledOption.length;
		
		// Check if element is stored in disabledOption-array
		for(var i=0; i < disabledOption.length; i++)
		{
			if(disabledOption[i] == disOpt)
			{
				disOptIdx = i;
				break;
			}
		}

		if(disOpt.disabled == false)
		{
			// get index
			var i = sel.parentNode.parentNode.rowIndex;
			
			// get table
			var t = sel.parentNode.parentNode.parentNode;
		
			var tr  = t.insertRow(i+1);
			var tdl = tr.insertCell(0);
			var tdr = tr.insertCell(1);
		
			tdl.className = 'left';
			tdr.className = 'right';
			tdl.style.fontWeight = 'normal';
		
			tdl.innerHTML = sel.options[sel.selectedIndex].text;
			
			var tS = 'selected="selected" ';
			
			var tmp = '<select name="'+sel.name+'_'+disOpt.value+'" class="text" onchange="selectCheckDelete(this,'+disOptIdx+');">';
			tmp += '<option value="delete">Ta bort</option>';
			tmp += '<option '+(perm == null    ? tS : '')+'value="choose">Välj åtkomst</option>';
			tmp += '<option '+(perm == 'read'  ? tS : '')+'value="read">Läs</option>';
			tmp += '<option '+(perm == 'write' ? tS : '')+'value="write">Skriv</option>';
			tmp += '<option '+(perm == 'edit'  ? tS : '')+'value="edit">Redigering</option></select>';
			tdr.innerHTML = tmp;

			// disable option and save pointer
			disOpt.disabled = true;
			disabledOption[disOptIdx] = disOpt;
		}

		// reset calling select
		sel.options[0].selected = true;
	}
}

function selectCheckDelete(sel, doIdx)
{
	if(sel.selectedIndex == 0)
	{
		disabledOption[doIdx].disabled = false;
		
		// delete row from table
		sel.parentNode.parentNode.parentNode.deleteRow
			(sel.parentNode.parentNode.rowIndex);
	}
}

function addSelectNextLevel(selectName, value, perm)
{
	var sa = document.getElementsByTagName("select");

	//find correct select
	for(var i=0; i < sa.length; i++)
	{
		if(sa[i].name == selectName)
		{
			// find correct option
			for(var j=0; j < sa[i].options.length; j++)
			{
				if( sa[i].options[j].value == value )
				{
					sa[i].options[j].selected = true;
					selectNextLevel(sa[i], perm);
					break;
				}
			}
			break;
		}
	}
}

function confirmDeletePage(url)
{
	if( confirm("Vill du verkligen ta bort denna sida?") == true )
	{
		document.location = url;
	}
}

/***********************************************************************
	Function used when album edited
************************************************************************/

function editAlbum_moveUp(i)
{
	editAlbum_switchImage(i-1,i);
}

function editAlbum_moveDown(i)
{
	editAlbum_switchImage(i,i+1);	
}


function editAlbum_switchImage(i, j)
{
	objI = new Array(
		document.getElementById('pos'+i+'image'),
		document.getElementById('pos'+i+'fullsize'),
		document.getElementById('pos'+i+'delete'),
		document.getElementById('pos'+i+'id')
	);

	objJ = new Array(
		document.getElementById('pos'+j+'image'),
		document.getElementById('pos'+j+'fullsize'),
		document.getElementById('pos'+j+'delete'),
		document.getElementById('pos'+j+'id')
	);	
	
	if(objI[0] != null && objJ[0] != null)
	{
		var tmp;
		
		// switch image
		tmp			= objI[0].src;
		objI[0].src = objJ[0].src;
		objJ[0].src = tmp;

		// switch checkboxes
		for(var x=1; x < 3; x++)
		{
			tmp				= objI[x].checked;
			objI[x].checked = objJ[x].checked;
			objJ[x].checked = tmp;
	
			tmp				 = objI[x].disabled;
			objI[x].disabled = objJ[x].disabled;
			objJ[x].disabled = tmp;
		}
		
		// switch ID
		tmp			  = objI[3].value;
		objI[3].value = objJ[3].value;
		objJ[3].value = tmp;
	}
}

/***********************************************************************
	Function used when password changed
************************************************************************/

function checkPasswordForm(f)
{
	var op  = f.elements[0].value;
	var np1 = f.elements[1].value;
	var np2 = f.elements[2].value;
	
	if(np1 != np2)
	{
		alert('De nya lösenorden stämmer inte överens.');
		return false;
	}
	if(np1.length > 30 || np1.length < 4)
	{
		alert('Det nya lösenordet måste vara mellan 4 och 30 tecken långt.');
		return false;
	}
	if(np1 == op)
	{
		alert('Det nya lösenordet måste skilja sig från det gamla.');
		return false;
	}
	
	return true;
}

/***********************************************************************
	Calendar functions
************************************************************************/

var months = new Array('Januari', 'Februari', 'Mars', 'April', 'Maj', 'Juni', 'Juli', 'Augusti', 'September', 'Oktober', 'November', 'December');
var calDate, today;
var page_id, tbl, descTbl, eventArray = new Array;

function initCalendar(tableId, descTableId, pid)
{
	tbl		= document.getElementById(tableId);
	descTbl	= document.getElementById(descTableId);
	page_id = pid;
		
	today = new Date();
	today.setTime(cutHours(today));
	calDate = new Date(today.getTime());
	
	updateCalendar();
	loadEvent();
}

function updateCalendar()
{
	var d = new Date(calDate.getTime());

	// Set title	
	tbl.rows[0].cells[1].innerHTML = months[d.getMonth()] + ' ' + d.getFullYear();

	var thisMonth = calDate.getMonth();
	var i, j, e, cn,t;
	
	// Get first day of first week in this month
	d.setDate(1);
	d.setTime(d.getTime() - ((d.getDay()+6)%7) * 864e5);

	for(i = 2; i < 8; i++) // rows
	{
		tbl.rows[i].cells[0].innerHTML = getWeek(d);
		for(j = 1; j < 8; j++) // cols
		{
			var cell = tbl.rows[i].cells[j];
			cell.onclick = null;

			if(thisMonth == d.getMonth())
			{
				cell.innerHTML = d.getDate();
				
				// search for events..
				e = getEvents(d.getTime());
				
				if(e.length == 0)
				{
					cn = 'thisMonth';
				}
				else
				{
					cell.onclick = function(){displayInfo(this)}
					
					if(e.length == 1)
					{
						cn = 'event';
						
						var col = eventArray[e[0]][5];
						if(d.getTime() >= today.getTime() &&
							(col == '1' || col == '2' || col == '3'))
						{
							cn += col;
						}						
					}
					else cn = 'events';
				}
				
				if(d.getTime() < today.getTime()) cn += 'Old';
				cell.className = cn;
			}
			else
			{
				cell.innerHTML = '';
				cell.className = 'otherMonth';
			}

			d.setTime(d.getTime() + 864e5 + 72e5); // Step one day + 2hours
			d.setHours(0);
			d.setMinutes(0);
			d.setSeconds(0);
			d.setMilliseconds(0);
		}
	}

	// Activate next, prev links	
	tbl.rows[0].cells[0].onclick = function(){stepMonth(0)};
	tbl.rows[0].cells[2].onclick = function(){stepMonth(1)};
}

function getEvents(dst)
{
	rtn = new Array();
	
	for(var i = 0; i < eventArray.length; i++)
	{
		st  = eventArray[i][3];	// event start
		sp  = eventArray[i][4];	// event stop
		dsp = dst + 864e5 - 1;	// day stop

		if((st >= dst && st <= dsp) || (sp >= dst && sp <= dsp) || (st < dst && sp > dsp))
		{
			rtn.push(i);
		}
	}

	return rtn;
}

function displayInfo(td)
{
	var d = new Date(calDate.getTime());
	d.setDate(td.innerHTML)

	var e = getEvents(d.getTime());

	if(e.length > 0)
	{
		while(descTbl.rows.length > 0) descTbl.deleteRow(0);

		for(var i=0; i < e.length; i++)
		{			
			var x=descTbl.insertRow(0)
			var y=x.insertCell(0)

			var tmp = '', dateText, st, sp, text;
			
			dateText = dateString(eventArray[e[i]][3]);
			
			if(eventArray[e[i]][3] != eventArray[e[i]][4])
			{
				sp = dateString(eventArray[e[i]][4]);
	
				if(cutHours(new Date(eventArray[e[i]][3])) == cutHours(new Date(eventArray[e[i]][4])))
				{
					sp = sp.substr(sp.length-5,sp.length);
					dateText += '-'+sp
				}
				else
				{
					dateText += ' till '+sp
				}
			}
			
			text = eventArray[e[i]][2].replace(/\n/g,'<br />');

			tmp += '<div class="calendarListEvent">'
			tmp += '	<span class="title">'+eventArray[e[i]][1]+'</span>'
			tmp += '	<span class="date">'+dateText+'</span>'
			tmp += '	<span class="text">'+text+'</span>'
			tmp += '</div>'
			
			y.innerHTML = tmp;
		}
	}
}

function loadEvent()
{
	xmlHttp = GetXmlHttpObject();
	if (xmlHttp != null)
	{
		// Disable next, prev buttons
		tbl.rows[0].cells[0].onclick = null;
		tbl.rows[0].cells[2].onclick = null;

		// Get start and stop time of this month
		var d = new Date(), st, sp;
		d.setTime(calDate.getTime());
		d.setDate(1);
		
		st = d.getTime() / 1000;

		if(d.getMonth == 11) {
			d.setMonth(0);
			d.setFullYear(d.getFullYear() + 1);
		} else {
			d.setMonth(d.getMonth() + 1)
		}

		sp = d.getTime()/1000 - 1;

		var url = 'http://www.skutaby.org/action/ajax/calendar.php';
		url += '?pid=' + page_id;
		url += '&st=' + st;
		url += '&sp=' + sp;
		url += '&t=' + dateObject.getTime();

		xmlHttp.onreadystatechange = eventsLoaded;
		xmlHttp.open("GET",url,true);
		xmlHttp.send(null);
	}
}

function eventsLoaded()
{
	if (xmlHttp.readyState == 4)
	{
		var xmlDoc = xmlHttp.responseXML.documentElement;
		var events = xmlDoc.getElementsByTagName('event');
		
		// reset Array
		eventArray = new Array();

		if(events != null)
		{
			for(var i=0; i < events.length; i++)
			{
				eventArray.push(new Array(
					events[i].attributes.getNamedItem("id").value,
					events[i].getElementsByTagName("title")[0].childNodes[0].nodeValue,
					events[i].getElementsByTagName("text" )[0].childNodes[0].nodeValue,
					events[i].getElementsByTagName("start")[0].childNodes[0].nodeValue * 1000,
					events[i].getElementsByTagName("stop" )[0].childNodes[0].nodeValue * 1000,
					events[i].getElementsByTagName("color" )[0].childNodes[0].nodeValue
				));
			}
		}
		updateCalendar();
	}
}

function stepMonth(forward)
{
	var y = calDate.getFullYear();
	var m = calDate.getMonth();
		
	m += (forward == 1 ? 1 : -1);
	
	if(m == 12)
	{
		m = 0;
		y++;
	}
	else if(m == -1)
	{
		m == 11;
		y--;
	}
	
	calDate.setDate(1);
	calDate.setMonth(m);
	calDate.setFullYear(y);
	
	loadEvent();
}

function getWeek(date)
{
	// ISO 8601 WkNo. m = 1..12
	var y = date.getFullYear();
	var m = date.getMonth()+1;
	var d = date.getDate();

	var ms1d = 864e5, ms7d = 7*ms1d;
	var DC3 = Date.UTC(y, m-1, d+3)/ms1d, DoW = 1 + (DC3+7777777)%7;
	var AWN = Math.floor(DC3/7); // an Absolute Week Number
	var Wyr = new Date(AWN*ms7d).getUTCFullYear();
	return AWN - Math.floor(Date.UTC(Wyr, 0, 0)/ms7d);
}

function cutHours(date)
{
	var d = new Date(date.getTime());
	d.setMilliseconds(0);
	d.setSeconds(0);
	d.setMinutes(0);
	d.setHours(0);
	
	return d.getTime();
}

function dateString(timestamp)
{
	var d = new Date();	
	d.setTime(timestamp);
	
	var date = new Array(
		'0'+(d.getMonth() + 1),
		'0'+d.getDate(),
		'0'+d.getHours(),
		'0'+d.getMinutes()
	);

	for(var i = 0; i < date.length; i++)
	  	date[i] = date[i].substr(date[i].length-2,date[i].length);

	return d.getFullYear()+'-'+date[0]+'-'+date[1]+' '+date[2]+':'+date[3];
}

/***********************************************************************
	Send email function
************************************************************************/

function email_select_all(box,table,c)
{
	var t = document.getElementById(table);
	
	for(var i = 1; i < t.rows.length - 1; i++)
	{
		var rb = t.rows[i].cells[c].firstChild

		if(rb.disabled == false)
		{
			rb.checked = box.checked;
		}
	}

	box.blur();
}

/***********************************************************************
	Login form
************************************************************************/

function login_submit()
{
	var f = document.getElementById('form_login');
	
	return (f.elements[0].value != '' && f.elements[1].value != '');
}

function login_link()
{
	if( login_submit() )
	{
		document.getElementById('form_login').submit();
	}
}

