
function charA()
{
	document.write('&#64;');
}

function hideShowMove(ref, posId, xoff, yoff)
{
	var r = document.getElementById(ref);
	var p = document.getElementById(posId);

	if(r.style.display == 'none')
	{
		var x=0,y=0;
		while(p != null)
		{
			x += p.offsetLeft;
			y += p.offsetTop;
			p  = p.offsetParent;
		}
		r.style.top  = (y+yoff)+'px';
		r.style.left = (x+xoff)+'px';
		r.style.display = 'block';
	}
	else r.style.display = 'none';

}

/***********************************************************************
	Show album
 ***********************************************************************/

var imgArray = new Array();	
var date = new Date();
var index;
var pointer;
var pImg;

function addImage(img_x, img_y, img_url, th_url, full_url, text)
{
	imgArray.push(new Array(img_x, img_y, img_url, th_url, full_url, text));
}

function showThumbs()
{
	document.getElementById('album-thumb').style.display = 'block';
	document.getElementById('album-image').style.display = 'none';
	thumbnavUpdate();
}

function nextThumb()
{
	if( index*9 < imgArray.length )
	{
		pointer[index % 3].style.display = 'none';		
		pointer[(index+1) % 3].style.display = 'block';		
		pointer[(index-1) % 3].innerHTML = htmltext(index+2);
		index++;
		thumbnavUpdate();
	}
}

function prevThumb()
{
	if( index > 1 )
	{
		pointer[index % 3].style.display = 'none';		
		pointer[(index-1) % 3].style.display = 'block';		
		pointer[(index+1) % 3].innerHTML = htmltext(index-2);
		index--;		
		thumbnavUpdate();
	}
}

function changeThumbs(idx)
{
	index = ((idx-1)*9 > imgArray.length || idx < 1) ? 1 : idx;

	pointer[0].innerHTML = htmltext((index-1) % 3);
	pointer[1].innerHTML = htmltext((index+0) % 3);
	pointer[2].innerHTML = htmltext((index+1) % 3);
	
	pointer[1].style.display = 'block';
	thumbnavUpdate();
}

function htmltext(idx)
{
	var t = '';
	
	if(idx > 0)
	{
		t = '<table id="thumbtable" cellpadding="0" cellspacing="0" border="0"><tr>';
		for(var i=0; i < 9 && (idx-1)*9 + i < imgArray.length; i++)
		{
			t += '<td><img onclick="showImage('+((idx-1)*9 + i)+');" src="' + imgArray[(idx-1)*9 + i][3] + '" /></td>'

			if(i%3 == 2 && i < 8)
				t += '</tr><tr>';
		}
		t += '</tr></table>';
	}
	return t;
}

function thumbnavUpdate()
{
	var ll = null, rl = null, max = index*9;
	
	if(index>1) ll = function(){prevThumb();};
	if(index*9 < imgArray.length) { rl = function(){nextThumb();}; } else { max = imgArray.length; }

	navUpdate(ll, 'Visar bilder ' + (index*9 - 8) + '-' + max + ' av ' + imgArray.length, rl);	
}

function navUpdate(leftlink, text, rightlink)
{
	var pp = document.getElementById('album-nav-prev');
	var pt = document.getElementById('album-nav-text');
	var pn = document.getElementById('album-nav-next');	

	pp.onclick=leftlink;
	pn.onclick=rightlink;

	pp.style.visibility = leftlink  == null ? "hidden" : "visible";
	pn.style.visibility = rightlink == null ? "hidden" : "visible";

	pt.innerHTML = text;
}

function changeImage(idx,i)
{
	for(var j = -1; j < 2; j++)
	{
		if(0 <= idx+j && idx+j < imgArray.length)
		{
			pImg[(idx+j) % 3].style.display = j == 0 ? 'block':'none';
			if(i == j)
			{
				pImg[(idx+i) % 3].innerHTML = '<img class="album-image" onclick="showThumbs();" src="'+imgArray[idx+i][2]+'" alt="" width="'+imgArray[idx+i][0]+'" height="'+imgArray[idx+i][1]+'" />';
			}			
		}
	}
	updateImage(idx);
}

function showImage(idx)
{
	document.getElementById('album-thumb').style.display = 'none';
	document.getElementById('album-image').style.display = 'block';

	pImg[0].style.display = pImg[1].style.display = pImg[2].style.display = 'none';

	for(var i = -1; i < 2; i++)
	{		
		if(0 <= idx+i && idx+i < imgArray.length)
		{
			pImg[(idx+i) % 3].style.display = i == 0 ? 'block':'none';
			pImg[(idx+i) % 3].innerHTML = '<img class="album-image" onclick="showThumbs();" src="'+imgArray[idx+i][2]+'" alt="" width="'+imgArray[idx+i][0]+'" height="'+imgArray[idx+i][1]+'" />';			
		}
	}
	updateImage(idx);
}

function updateImage(idx)
{
	if(0 <= idx && idx < imgArray.length)
	{
		// Update thumbs if nessecary
		var newIndex = Math.floor(idx/9) + 1;
		if(index < newIndex)		nextThumb();
		else if(index > newIndex)	prevThumb();

		var p, ll=null, rl=null;

		// Update navigation table
		if(idx > 0) ll = function(){changeImage(idx-1,-1);};
		if(idx < imgArray.length - 1) rl = function(){changeImage(idx+1,1);};
		navUpdate(ll, 'Visar bild ' + (idx+1) + ' av ' + imgArray.length, rl);

		// update comment
		p = document.getElementById('album-image-comment');
		if(imgArray[idx][5].length > 0)
		{
			p.style.display = 'block';
			p.innerHTML = imgArray[idx][5];
		} else {
			p.style.display = 'none';
			p.innerHTML = '';
		}

		// update fullsize link
		p = document.getElementById('album-image-fullsize');
		if(imgArray[idx][4] != null)
		{
			p.style.display = 'inline';
			p.href = imgArray[idx][4];
		} else {
			p.style.display = 'none';
			p.href = null;
		}
	}
}

function initAlbum()
{
	pointer = new Array
	(
		document.getElementById('album-thumb-d1'),
		document.getElementById('album-thumb-d2'),
		document.getElementById('album-thumb-d3')
	);

	pImg = new Array
	(
		document.getElementById('album-image-d1'),
		document.getElementById('album-image-d2'),
		document.getElementById('album-image-d3')
	);

	// Generate thumb table
	if(imgArray.length > 0)
	{
		changeThumbs(1);
		showThumbs();
	}
	else navUpdate(null, 'Detta album innehåller inga bilder.', null)
}

/***********************************************************************
	Import image
 ***********************************************************************/

var xmlHttp;
var files;
var processing;
var pageID;
var dateObject = new Date();

function importImage_changeColumn(radio,c)
{
	if( c >= 4 && c <= 7)
	{
		var t = document.getElementById('importImage-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 = radio.checked;
			}
		}

		if( c > 4 )
			radio.checked = false;

		radio.blur();
	}
}

function importImages()
{
	var t = document.getElementById('importImage-table');
	files = new Array();

	for(var i = t.rows.length - 2; i > 0 ; i--)
	{
		// 7 ignore, 4 fullsize, 5 import, 6 delete, 0 filename

		if(t.rows[i].cells[7].firstChild.checked == false)
		{
			files.push(Array(
				i, // rownumber
				t.rows[i].cells[0].innerHTML, // filename
				t.rows[i].cells[4].firstChild.checked, // fullsize
				t.rows[i].cells[5].firstChild.checked // import
			));
		}
	}
	pageID = document.getElementById('pid').value;
	
	var button = document.getElementById('importImage-submit');
	button.blur();
	button.disabled = true;	

	document.getElementById('importImage-cancel').style.visibility = 'hidden';	

	importImage_setNextWait();
	importImage();
}


function importImage()
{
	xmlHttp = GetXmlHttpObject();
	if (xmlHttp != null && files.length > 0)
	{
		processing = files.pop();
		
		var url = 'http://www.tabykonfirmand.nu/action/ajax/importImg.php';
		url += '?pid=' + pageID;
		url += '&image=' + processing[1];
		url += '&fullsize=' + (processing[2] ? 1 : 0);
		url += '&do=' + (processing[3] ? 'import' : 'delete');
		url += '&t=' + dateObject.getTime();
		
		xmlHttp.onreadystatechange = stateChanged;
		xmlHttp.open("GET",url,true);
		xmlHttp.send(null);
	}
	else
	{
		document.getElementById('importImage-submit').disabled = false;
		document.getElementById('importImage-cancel').style.visibility = 'visible';
		
		if(files.length == 0) alert('Importeringen är klar!');
	}
}

function stateChanged()
{
	if (xmlHttp.readyState == 4)
	{

		var t = document.getElementById('importImage-table');		
		var tr = t.rows[processing[0]];
		
		if(xmlHttp.responseText == '1')
		{
			// success, disable
			for(var i=4; i < 8; i++)
			{
				tr.cells[i].firstChild.checked  = false;
				tr.cells[i].firstChild.disabled = true;
			}
			tr.cells[7].firstChild.checked  = true;
			tr.cells[0].style.backgroundImage = "url('img/import-success.gif')";
		}
		else
		{
			tr.cells[0].style.backgroundImage = "url('img/import-fail.gif')";;
		}

		// Pause, and import next image
		importImage_setNextWait();
		setTimeout('importImage()', files.length == 0 ? 1 : (processing[3] ? 10000 : 1000));
	}
}

function importImage_setNextWait()
{
	if(files.length > 0)
	{
		var t = document.getElementById('importImage-table');		
		var tr = t.rows[files[files.length-1][0]];
		tr.cells[0].style.background = "transparent url('img/import-loading.gif') no-repeat scroll center right";
	}
}

function GetXmlHttpObject()
{
	var xmlHttp = null;
	try
	{
		// Firefox, Opera 8.0+, Safari
		xmlHttp = new XMLHttpRequest();
	}
	catch (e)
	{
		// Internet Explorer
		try
		{
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}

/***********************************************************************
	Edit user
 ***********************************************************************/

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 RADERA sidan?") == true)
	{
	    document.location = url;
	}
}

/***********************************************************************
	Change password
 ***********************************************************************/

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 today  = new Date();
var calendarArray = new Array();

function addCalendar(pid,tableId,descDivId)
{
	calendarArray[pid] = new Array(
		new Array(),
		tableId,
		descDivId,
		new Date(cutHours(today))
	);
}

function addCalEvent(pid,id,start,stop,color,title,text)
{
	if(calendarArray[pid] != null) calendarArray[pid][0].push(new Array(id,title,text,start,stop,color));
}

function initCalendars()
{
	today.setTime(cutHours(today));
	for(x in calendarArray)
	{
		calendarArray[x][1] = document.getElementById(calendarArray[x][1]);
		calendarArray[x][2] = document.getElementById(calendarArray[x][2]);
		updateCalendar(x);
	}
}

function updateCalendar(pid)
{
	var eventArray	= calendarArray[pid][0];
	var tbl			= calendarArray[pid][1];
	var descDiv		= calendarArray[pid][2];
	var calDate		= calendarArray[pid][3];

	var d = new Date(calDate);

	// 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 = d.getWeek();
		for(j = 1; j < 8; j++) // cols
		{
			var cell = tbl.rows[i].cells[j];
			cell.onmouseover = cell.onmouseout = null;

			if(thisMonth == d.getMonth())
			{
				cell.innerHTML = d.getDate();
				
				// search for events..
				e = getEvents(d.getTime(),pid);
				
				if(e.length == 0)
				{
					cn = 'thisMonth';
				}
				else
				{
					cell.onmouseover = function(){displayInfo(this,pid);};
					cell.onmouseout  = function(){mouseOut(pid);};

					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,pid)};
	tbl.rows[0].cells[2].onclick = function(){stepMonth(1,pid)};
}

function getEvents(dst,pid)
{
	var eventArray = calendarArray[pid][0];
	var	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 mouseOut(pid)
{
	calendarArray[pid][2].style.display  = 'none';
}

function displayInfo(td,pid)
{
	var eventArray	= calendarArray[pid][0];
	var tbl			= calendarArray[pid][1];
	var descDiv		= calendarArray[pid][2];
	var calDate		= calendarArray[pid][3];

	var d = new Date(calDate);
	d.setDate(td.innerHTML)
	var e = getEvents(d.getTime(),pid);
	var dateText, st, sp, text, tmp = '';

	for(var i=0; i < e.length; i++)
	{			
		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 += '<p class="title">'+eventArray[e[i]][1]+'</p>';
		tmp += '<p class="date">'+dateText+'</p>';
		tmp += '<p>'+text+'</p>';
	}
	
	if(e.length > 0)
	{
		var x=0,y=0;
		while(td != null)
		{
			x += td.offsetLeft;
			y += td.offsetTop;
			td = td.offsetParent;
		}

		descDiv.style.left		= (x-316)+'px';
		descDiv.style.top		= (y+16)+'px';
		descDiv.innerHTML		= tmp;
		descDiv.style.display	= 'block';	
	}
}

function stepMonth(forward,pid)
{
	var calDate = calendarArray[pid][3];
	
	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);

	updateCalendar(pid);
}

Date.prototype.getWeek = function()
{
	// ISO 8601
	var y = this.getFullYear();
	var m = this.getMonth();
	var d = this.getDate();
	var ms1d = 864e5, ms7d = 7*ms1d;
	var DC3 = Date.UTC(y, m, d+3)/ms1d;
	var AWN = Math.floor(DC3/7);
	var Wyr = new Date(AWN*ms7d).getUTCFullYear();
	return AWN - Math.floor(Date.UTC(Wyr-1,11,31)/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 e = document.getElementById('form_login_e');
	var p = document.getElementById('form_login_p');

	return (e.value != '' && p.value != '');
}

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

/***********************************************************************
	Page nav
 ***********************************************************************/

function pageNav(ref,target,input)
{
	
	var x=0,y=0;
	while(ref != null)
	{
		x  += ref.offsetLeft;
		y  += ref.offsetTop;
		ref = ref.offsetParent;
	}

	var p = document.getElementById(target);

	if(p.style.display != 'block')
	{
		p.style.left	= (x-7)+'px';
		p.style.top		= (y-23)+'px';
		p.style.display	= 'block';

		document.getElementById(input).value = '';
		document.getElementById(input).focus();
	}
	else p.style.display = 'none';
}

function pageChange(input,url,max)
{
	var step = document.getElementById(input).value;
	if(0 < step && step <= max)
	{
		document.location.href=url+(step-1);
	}
	return false;
}

/***********************************************************************
	bbCode Editor
 ***********************************************************************/

function addTag(t)
{
	var ta = document.getElementById('textarea');

	if( document.selection ) // IE Support
	{
		// The current selection
		var range = document.selection.createRange();

		// If user has selected something outeside
		// the textarea	we must select it.	
		if(range.parentElement() != ta)
		{
			ta.focus();
			range = document.selection.createRange();
		}
		
		range.text = toggleTag(range.text,t);
		ta.focus();		
	}
	else if( window.getSelection ) // Firefox
	{
		var txt_before = ta.value.substring(0,ta.selectionStart)
		var txt_select = ta.value.substring(ta.selectionStart,ta.selectionEnd); 	
		var txt_after  = ta.value.substring(ta.selectionEnd,ta.value.length)

		text_select = toggleTag(txt_select,t);

		var p1 = ta.selectionStart
		var p2 = p1 + text_select.length;
			
		ta.value = txt_before + text_select + txt_after;

		ta.setSelectionRange(p1,p2);
		ta.focus();
	}
	else // non compatible
	{
		ta.value += '['+t+'][/'+t+']';
	}
}

function toggleTag(text, t)
{
	re = eval('/\\[\\/?'+t+'\\]/gi'); 

	if(text.match(re))
	{
		return text.replace(re,'');
	}
	else return '['+t+']'+text+'[/'+t+']';
}

/***********************************************************************
	page Editor
 ***********************************************************************/

var divCounter = 0;
var editedElement = null;
var selectedElement = null;
var bbCode = new Array();

function addElement(divClass)
{
	var d = document.getElementById('container');
	var c = document.getElementById('divClear');
	var newdiv = document.createElement('div');
	var divIdName = 'div' + divCounter;
	newdiv.setAttribute('id',divIdName);
	deSelect();
	if(divClass != 'clearBig')
	{
		bbCode[divCounter] = 'Element\nNumber\n'+divCounter;
		newdiv.className = divClass;
		newdiv.innerHTML = '<p>' + bb2html(bbCode[divCounter]) + '</p>';
		newdiv.onclick = function(){ selectElement(divIdName); };
	}
	else
	{
		newdiv.className = divClass;
		newdiv.innerHTML = '<img src="img/delete.gif" onclick="removeElement(\''+divIdName+'\')" alt="" title="Radera radbrytning" />';
		bbCode[divCounter] = '';
	}
	d.insertBefore(newdiv, c);
	divCounter++;
}

function selectElement(refId)
{
	var be = document.getElementById('toolbox-edit');
	var bd = document.getElementById('toolbox-delete');
	var bl = document.getElementById('toolbox-left');
	var br = document.getElementById('toolbox-right');
	var r  = document.getElementById(refId)

	if(r == null)
	{
		selectedElement = null;
	}
	else if(r == selectedElement)
	{
		deSelect();
	}
	else
	{
		// select
		r.style.backgroundColor = '#ccc';

		if(selectedElement != null)
		{
			selectedElement.style.backgroundColor = '#fff';
		}
		selectedElement = r;

		be.style.visibility = 'visible';
		bd.style.visibility = 'visible';
		bl.style.visibility = 'visible';
		br.style.visibility = 'visible';

		be.onclick = function(){   editElement(refId); };
		bd.onclick = function(){ removeElement(refId); };
		bl.onclick = function(){   moveElement(true); };
		br.onclick = function(){   moveElement(false); };
	}
}

function deSelect()
{
	if(selectedElement)
	{
		selectedElement.style.backgroundColor = '#fff';
	}
	selectedElement = null;
	var be = document.getElementById('toolbox-edit');
	var bd = document.getElementById('toolbox-delete');
	var bl = document.getElementById('toolbox-left');
	var br = document.getElementById('toolbox-right');
	be.style.visibility = 'hidden';
	bd.style.visibility = 'hidden';
	bl.style.visibility = 'hidden';
	br.style.visibility = 'hidden';
	be.onclick = null;
	bd.onclick = null;
	bl.onclick = null;
	br.onclick = null;
}

function removeElement(divNum)
{
	deSelect();
	document.getElementById('container').removeChild(document.getElementById(divNum));
}

function editElement(divId)
{
	var le = document.getElementById('layout-editor');
	var te = document.getElementById('text-editor');
	var ta = document.getElementById('textarea');
	var d  = document.getElementById(divId);

	// Setup the width	
	var opt = document.getElementById('toolbar-width').options;
	for(var i=0; i<opt.length; i++) {
		if(d.className == opt[i].value) {
			opt[i].selected = true;
			break;
		}
	}

	selectElement(divId);
	le.style.display = 'none';
	te.style.display = 'block';

	editedElement = d;
	ta.value = bbCode[divId.replace(/div/,'')];
}

function moveElement(left)
{
	if(selectedElement != null)
	{
		var div = document.getElementById('container');
		var p = div.getElementsByTagName('div');
		var s = null;
		var off = left ? -1 : 1;
		for(i=1; i<p.length-1; i++)
		{
			s = p[i+off];
			if(p[i] == selectedElement && (s.id.match(/div[0-9]+/)) )
			{
				if(left) div.insertBefore(p[i], s);					
				else	 div.insertBefore(p[i], s.nextSibling);
				return;
			}
		}
	}
}

function editLayout(save)
{
	var le = document.getElementById('layout-editor');
	var te = document.getElementById('text-editor');
	var ta = document.getElementById('textarea');

	if(save) {
		var n = editedElement.id;
		n = n.replace(/div/,'');
		bbCode[n] = ta.value;

		// Split input into paragraphs		
		editedElement.innerHTML = '';
		ps = ta.value.split(/[\n]{2,}/);

		for(var i=0; i<ps.length; i++)
		{
			editedElement.innerHTML += '<p>' + bb2html(ps[i]) + '</p>';			
		}

		var sel = document.getElementById('toolbar-width');		
		editedElement.className = sel.options[sel.selectedIndex].value;
	}
	
	le.style.display = 'block';
	te.style.display = 'none';
}

function bb2html(bb)
{
	// Linebreaks
	bb = bb.replace(/\r\n|\r|\n/gi, '<br />');

	// [h] [u] [i] [c] tags
	bb = bb.replace(/\[(h|u|i|c)\]/gi, '<span class="$1">');
	bb = bb.replace(/\[\/(h|u|i|c)\]/gi, '</span>');

	// [b] and [/b] for bolding text.
	bb = bb.replace(/\[b\]/gi, '<b>');
	bb = bb.replace(/\[\/b\]/gi, '</b>');

	// [img]image_url[/img]
	bb = bb.replace(/\[img\]([^?].*?)\[\/img\]/gi, '<img src="$1" alt="" />');

	// [url]xxxx://www.domain.com[/url]
	bb = bb.replace(/\[url\]([\w]+?:\/\/[\w#$%&~/.\-;:=,?@\[\]+]*?)\[\/url\]/gi, '<a onclick="return false;" href="$1">$1</a>');

	// [url=xxxx://www.domain.com]Arbitrary text[/url]
	bb = bb.replace(/\[url=([\w]+?:\/\/[\w#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[\/url\]/gi, '<a onclick="return false;" href="$1">$2</a>');

	// [urlnew]xxxx://www.domain.com[/urlnew]
	bb = bb.replace(/\[urlnew\]([\w]+?:\/\/[\w#$%&~/.\-;:=,?@\[\]+]*?)\[\/urlnew\]/gi, '<a onclick="return false;" href="$1" onclick="return false;">$1</a>');

	// [urlnew=xxxx://www.domain.com]Arbitrary text[/urlnew]
	bb = bb.replace(/\[urlnew=([\w]+?:\/\/[\w#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[\/urlnew\]/gi, '<a onclick="return false;" href="$1" onclick="return false;">$2</a>');

	// [img align=]image_url[/img]
	bb = bb.replace(/\[img align=(left|right)\]([^?].*?)\[\/img\]/gi, '<img class="$1" src="$2" alt="" />');

	return bb;
}

function addImageEditor(ref)
{
	var ta = document.getElementById('textarea');
	var txt_insert = '\n[img]'+ref.src+'[/img]\n';

	if( document.selection ) // IE Support
	{
		// The current selection
		ta.focus();
		var range = document.selection.createRange();

		range.collapse();
		range.text = txt_insert;
	}
	else if( window.getSelection ) // Firefox
	{
		var txt_before = ta.value.substring(0,ta.selectionStart)
		var txt_after  = ta.value.substring(ta.selectionStart,ta.value.length)

		var p1 = ta.selectionStart + 1;
		var p2 = p1 + txt_insert.length - 2;

		ta.value = txt_before + txt_insert + txt_after;

		ta.setSelectionRange(p1,p2);
		ta.focus();
	}
	else // non compatible
	{
		ta.value += txt_insert;
	}
}

function imageBrowser(r)
{
	var p = document.getElementById('toolbar-images');
	p.style.display = p.style.display == 'block' ? 'none' : 'block';
	r.style.color   = p.style.display == 'block' ? '#900' : '#000';
}

function updateSummaries()
{
	var e = document.getElementById('toolbar-summaries-form').elements, p;
	var allhidden = true;
	var allCalendarsHidden = true;

	for(var i=0; i<e.length; i++)
	{
		p = document.getElementById(e[i].name.substr(1));

		if(e[i].checked)
		{
			allCalendarsHidden = p.parentNode.id == 'calendarPreview' ? false : allCalendarsHidden;
			p.style.display = 'block';			
			allhidden = false;
		}
		else p.style.display = 'none';
	}
	var s1 = document.getElementById('newsDiv');
	var s2 = document.getElementById('calendarPreview');
	s1.style.display = allhidden		  ? 'none' : 'block';
	s2.style.display = allCalendarsHidden ? 'none' : 'block';
}

function showSummaries(r)
{
	var p = document.getElementById('toolbar-summaries');

	p.style.display = p.style.display == 'block' ? 'none' : 'block';
	r.style.color   = p.style.display == 'block' ? '#900' : '#000';
}

function editorSave()
{
	var divs;
	var text = '';
	var summ_id  = '';
	var summ_sel = '';
	var n;
	var className;
	
	// Get contents from visible divs
	divs = document.getElementById("container").getElementsByTagName("div")
	for(var i=0; i<divs.length; i++)
	{
		if(divs[i].id.match(/div[0-9]+/))
		{
			n = divs[i].id.replace(/div([0-9]+)/,'$1');
			className = divs[i].className == 'clearBig' ? 'clear' : divs[i].className;
			text += '[sec class='+className+']' + bbCode[n] + '[/sec]\n';
		}
	}

	// Get selected summaries
	var e = document.getElementById('toolbar-summaries-form').elements;
	for(var i=0; i<e.length; i++)
	{
		if(e[i].name.match(/_summ[0-9]+/))
		{
			summ_id  += e[i].name.replace(/_summ([0-9]+)/,'$1') + ' ';
			summ_sel +=(e[i].checked ? '1':'0') + ' ';
		}
	}

	// Save values
	document.getElementById("page-editor-form-text").value = text;
	document.getElementById("page-editor-form-summ_id").value = summ_id;
	document.getElementById("page-editor-form-summ_sel").value = summ_sel;
	document.getElementById("page-editor-form").submit();
}

function addEditorSection(className,text)
{
	var d = document.getElementById('container');
	var c = document.getElementById('divClear');
	var newdiv = document.createElement('div');
	var divIdName = 'div' + divCounter;
	
	newdiv.setAttribute('id',divIdName);

	if(className == 'clear')
	{
		newdiv.className = 'clearBig';
		newdiv.innerHTML = '<img src="img/delete.gif" onclick="removeElement(\''+divIdName+'\')" alt="" title="Radera radbrytning" />';
		bbCode[divCounter] = '';
	}
	else
	{
		bbCode[divCounter] = text;
		newdiv.className = className;
		newdiv.onclick = function(){ selectElement(divIdName); };
	
		// Split text into paragraphs		
		var ps = text.split(/[\n]{2,}/);
	
		for(var i=0; i<ps.length; i++)
		{
			newdiv.innerHTML += '<p>' + bb2html(ps[i]) + '</p>';			
		}
	}
	
	d.insertBefore(newdiv, c);
	divCounter++;
}

/***********************************************************************
	Menu setup
 ***********************************************************************/

var selectedMenuItem = null;
var selectedNonMenuItem = null

function menuSelect(r)
{
	if(selectedMenuItem != null)
	{
		selectedMenuItem.style.backgroundColor = 'transparent';
	}
	if(selectedMenuItem == r)
	{
		selectedMenuItem = null;
	}
	else
	{
		selectedMenuItem = r;
		r.style.backgroundColor = '#ccc';
	}
}

function nonMenuSelect(r)
{
	if(selectedNonMenuItem != null)
	{
		selectedNonMenuItem.style.backgroundColor = 'transparent';
	}
	if(selectedNonMenuItem == r)
	{
		selectedNonMenuItem = null;
	}
	else
	{
		selectedNonMenuItem = r;
		r.style.backgroundColor = '#ccc';
	}
}

function menuMoveDown()
{
	var div = selectedMenuItem.parentNode.parentNode;
	if(div != null)
	{
		var p = div.getElementsByTagName("div");
		var prev = null;
		for(i=p.length-1; i>=0; i--)
		{
			if(p[i] == selectedMenuItem.parentNode && prev)
			{
				div.insertBefore(p[i], prev.nextSibling);
				return;
			}
			prev = (div == p[i].parentNode) ? p[i] : prev; 
		}		
	}
}

function menuMoveUp()
{
	var div = selectedMenuItem.parentNode.parentNode;
	if(div != null)
	{
		var p = div.getElementsByTagName("div");
		var prev = null;
		for(i=0; i< p.length; i++)
		{
			if(p[i] == selectedMenuItem.parentNode && prev)
			{
				div.insertBefore(p[i], prev);
				return;
			}
			prev = (div == p[i].parentNode) ? p[i] : prev; 
		}		
	}
}

function menuRemove()
{
	var div = selectedMenuItem.parentNode;
	if(div)
	{
		if(div.getElementsByTagName("div").length == 0)
		{
			document.getElementById('nm' + div.id.substr(1)).style.display = 'block';
			div.parentNode.removeChild(div);
			selectedMenuItem = null;
		}
	}
}

function menuAdd()
{
	if(selectedNonMenuItem)
	{
		if(selectedMenuItem)
		{
			var d = selectedMenuItem.parentNode;
			if(d.parentNode.parentNode.parentNode.id == 'menu-structure')
			{
				d = d.parentNode;
			}
		}
		else
		{
			var d = document.getElementById('menu-structure');
		}
		var div = document.createElement('div');
		var divIdName = 'm' + selectedNonMenuItem.id.substr(2);
		div.setAttribute('id',divIdName);
		div.innerHTML = '<p onclick="menuSelect(this)">'+selectedNonMenuItem.innerHTML+'</p>';
		d.appendChild(div);
		selectedNonMenuItem.style.display = 'none';
		nonMenuSelect(selectedNonMenuItem);
	}
}

function menuSubmit()
{
	var p = null, l, counter = new Array(0,0,0);
	var d = document.getElementById('menu-structure');
	var div = d.getElementsByTagName('div');
	var f = new Array('','','','');
	for(var i=0; i<div.length; i++)
	{
		p = div[i].parentNode;
		l = 0;
		while(p.id != 'menu-structure')
		{
			p = p.parentNode;
			l++;
		}
		counter[l]++;
		if(l <= 1) counter[2] = 0;
		if(l == 0) counter[1] = 0;
		f[0] += div[i].id.substr(1) + ' ';
		f[1] += counter[0] + ' ';
		f[2] += counter[1] + ' ';
		f[3] += counter[2] + ' ';
	}
	document.getElementById('form-id').value	= f[0];
	document.getElementById('form-menu').value	= f[1];
	document.getElementById('form-menus').value	= f[2];
	document.getElementById('form-menuss').value= f[3];
	document.getElementById('form').submit();
}

/***********************************************************************
	Edit album
 ***********************************************************************/

var selectedImg = null;

function imageSelect(r)
{
	var tools = document.getElementById('toolbar-image');
	if(r == selectedImg)
	{
		imageCopyComment(true);
		tools.style.display = 'none';
		r.style.borderColor = '#fff';
		selectedImg = null;
	}
	else
	{
		if(selectedImg)
		{
			imageCopyComment(true);
			selectedImg.style.borderColor = '#fff';
		}
		tools.style.display = 'block';
		r.style.borderColor = '#333';
		selectedImg = r;
		imageCopyComment(false);
		var fs   = document.getElementById('toolbar-image-fullsize');
		var inp1 = document.getElementById(r.id + 'hasFS');
		var inp2 = document.getElementById(r.id + 'savFS');
		if(inp1.value == 1)
		{
			fs.style.visibility = 'visible';
			fs.style.backgroundColor = inp2.value == 1 ? '#ff9' : 'transparent'; 
		}
		else fs.style.visibility = 'hidden';
	}
}

function imageFullSize(save)
{
	if(selectedImg)
	{
		var inp = document.getElementById(selectedImg.id + 'savFS');
		var fs  = document.getElementById('toolbar-image-fullsize');
		if(inp.value == 1)
		{
			inp.value = 0;
			fs.style.backgroundColor = 'transparent';
		}
		else
		{
			inp.value = 1;
			fs.style.backgroundColor = '#ff9';
		}	
	}
}

function imageCopyComment(save)
{
	if(selectedImg)
	{
		var txt = document.getElementById(selectedImg.id + 'txt');
		var inp = document.getElementById('toolbar-image-txt');
		
		if(save) txt.value = inp.value;
		else	 inp.value = txt.value;
	}
}

function imageMove(off)
{
	if(selectedImg != null && off != 0)
	{
		var div = document.getElementById('container');
		var p = div.getElementsByTagName('div');
		for(i=0; i<p.length; i++)
		{
			if(p[i] == selectedImg)
			{
				var steps = Math.abs(off);
				var j = i;
				while(steps > 0)
				{
					j += off > 0 ? 1: -1;
					if(0 <= j && j < p.length-1)
					{
						steps -= p[j].style.display != 'none' ? 1:0; 
					}
					else return;
					if(j == p.length-2) break;
				}
				if(off>0) div.insertBefore(p[i], p[j].nextSibling);					
				else	  div.insertBefore(p[i], p[j]);
				return;
			}
		}
	}
}

function imageDelete()
{
	if(selectedImg)
	{
		selectedImg.style.display = 'none';
		document.getElementById(selectedImg.id+'del').value = 1;
		var div = document.getElementById('container');
		var p = div.getElementsByTagName('div');
		var i, j;
		for(i=0; i<p.length-1; i++)
		{
			if(p[i] == selectedImg) break;
		}
		for(j=i; j<p.length-1; j++)
		{
			if(p[j].style.display != 'none')
			{
				imageSelect(p[j]);
				return;	
			}
		}
		for(j=i; j>=0; j--)
		{
			if(p[j].style.display != 'none')
			{
				imageSelect(p[j]);
				return;	
			}
		}
		imageSelect(selectedImg);
	}
}

function imageSave()
{
	imageCopyComment(true);
	var div = document.getElementById('container');
	var p = div.getElementsByTagName('div');
	var n = 1, i;
	for(i=0; i < p.length-1; i++)
	{
		var pos = document.getElementById(p[i].id+'pos');
		if(p[i].style.display == 'none')
		{
			pos.value = 0;			
		}
		else
		{
			pos.value = n;
			n++;
		}
	}
	document.getElementById('image-form').submit();
}
