var key_enter=0;
var key_spaces=0;
var key_bracket=0;

function onKeyDown(e) {

	if (e.target.type=='textarea') {

		// If empty field
		if (document.getElementById(e.target.id).value=='' || getCharacterBefore(e.target.id,'null',1)=='\n') {

			key_spaces=0;
			key_bracket=0;
			key_enter=1;

			if (document.getElementById(e.target.id).value=='') key_enter=0;
		}

		//alert('Event:'+e.which+' Converted:'+String.fromCharCode(e.which));
		var character = String.fromCharCode(e.which);

		if (e.ctrlKey==true) {

			if (character == 'f' || character == 'F') {
				insertText(e.target.id, '[b]', '[/b]');
				return false;
			}
			if (character == 'k' || character == 'K') {
				insertText(e.target.id, '[i]', '[/i]');
				return false;
			}
			if (character == 'p' || character == 'P') {
				insertText(e.target.id, '[li]', '');
				return false;
			}
			if (character == 's' || character == 'S') {
				insertText(e.target.id, '[source]', '[/source]');
				return false;
			}
			if (character == 'q' || character == 'Q') {
				insertText(e.target.id, '[quote]', '[/quote]');
				return false;
			}
			if (character == 'u' || character == 'U') {
				insertText(e.target.id, '[url=', ']beskrivning[/url]');
				return false;
			}
			if (character == 'b' || character == 'B') {
				insertText(e.target.id, '[img]', '[/img]');
				return false;
			}
			if (character == 'd' || character == 'D') {
				insertText(e.target.id, '[box]', '[/box]');
				return false;
			}
			if (e.which==13) {

				// Only works in forums et cetra.
				if (e.target.id=="body") {
					var f = document.getElementById("form");
					if (f!=null) f.submit();
				}
			}
		}

		if (e.which==13) {

			key_enter=1;
			if (key_bracket==1) key_spaces++;
			key_bracket=0;

			if (key_spaces>0) {
				insertText(e.target.id, '\r\n', '');

				for (i=0; i<key_spaces; i++) {

					insertText(e.target.id, '\t', '');
				}
				e.target.scrollTop+=14;
				return false;
			}
			return true;

		} else if (e.which==32) {

			if (key_enter==1) {
				key_spaces++;
				insertText(e.target.id, '\t', '');
				return false;
			} else {

				var before = getCharacterBefore(e.target.id, 'null', 1);
				if (before=='\t' || before=='\n' || before=='null') {

					insertText(e.target.id, '\t', '');
					return false;
				}
			}

		} else if (e.which==8 && key_enter==1) {

			key_spaces--;
			if (key_spaces<0) key_spaces=0;

		} else if (e.which==8) {

			if (getCharacterBefore(e.target.id, 'null', 2)=='\n') {

				key_enter=1;
			}
		} else {

			key_enter=0;
			key_bracket=0;
			if (character=='{') key_bracket=1;
			if (character=='}' && getCharacterBefore(e.target.id, 'null', 1)=='\t') {

				getCharacterBefore(e.target.id, '', 1);
				if (key_spaces>0) key_spaces--;
				return true;
			}

		}
	}

	return true;
}

function getCharacterBefore(textitem, rep, nr) {

	var myField = document.getElementById(textitem);
	var ret='';

	if (myField.selectionStart || myField.selectionStart == '0') {

		var startPos = myField.selectionStart;
		if (startPos > nr-1) {
			ret = myField.value.substring(startPos-nr, startPos-(nr-1));
			if (rep!='null') {
				myField.value = myField.value.substring(0, startPos-nr) + rep + myField.value.substring(startPos-nr+1, myField.value.length);

				myField.selectionEnd = startPos-nr;
			}
		} else ret='null';
	}
	return ret;
}

function insertText(textitem, myValue, myValue2) {
	var myField = document.getElementById(textitem);
	myField.focus();

	if (myField.selectionStart || myField.selectionStart == '0') {

		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		var scrolltop = myField.scrollTop;
		myField.value = myField.value.substring(0, startPos)
						+ myValue
						+ myField.value.substring(startPos, endPos)
						+ myValue2
						+ myField.value.substring(endPos, myField.value.length);
		myField.selectionStart = endPos + myValue.length + myValue2.length;
		myField.selectionEnd = myField.selectionStart;

		myField.scrollTop = scrolltop;
	} else {

		if (document.selection) {

			var str = document.selection.createRange().text;
			var sel = document.selection.createRange();
			sel.text = myValue + str + myValue2;
		} else {

			myField.value += myValue;
		}
	}
	myField.focus();
	return false;
}

function setfocus() {
	// document.getElementById('onelinerText').focus();
}

function redirect(page) {
	window.location=page;
}

function popUp(page, width, height, resizable) {

	window.open(page, '_blank', 'status = 0, height = '+height+', width = '+width+', resizable = '+resizable);
}

function switchSpan(spanNameSourceID, spanNameDestID) {

	var source = document.getElementById(spanNameSourceID).innerHTML;
	var dest   = document.getElementById(spanNameDestID).innerHTML;

	document.getElementById(spanNameSourceID).innerHTML = dest;
	document.getElementById(spanNameDestID).innerHTML = source;
}

function expandSpan(spanNameSourceID, spanNameDestID, what) {

	var source = document.getElementById(spanNameSourceID);
	var dest   = document.getElementById(spanNameDestID);

	var changeTo=0;

	// Toggle on/off automagicly
	if (what==0) {

		if (dest.innerHTML == '') {

			changeTo = 1;
		} else {

			changeTo = 0;
		}
	} else {

		// Hide
		if (what==1) changeTo=0;

		// Show
		if (what==2) changeTo=1;
	}

	// Set
	if (changeTo==0 && dest.innerHTML!='') {

		// Hide
		source.innerHTML = dest.innerHTML;
		dest.innerHTML = '';
	} else {

		// Show
		if (changeTo==1 && dest.innerHTML=='') {

			dest.innerHTML = source.innerHTML;
			source.innerHTML ='';
		}
	}
}

var ua = navigator.userAgent;
var IE = /msie/i.test( ua );

if (!IE) {
	//document.captureEvents(Event.KEYPRESS);
	document.onkeypress = onKeyDown;
}

var avatarTimer = new Array();
var avatarSize = new Array();
var avatarDirection = new Array();
var sizetable = new Array();

var AvatarSpeed = 3;

function AvatarZoomIn(avatarid) {

	if (avatarDirection[avatarid]!=null) {
		if (avatarDirection[avatarid]==AvatarSpeed) return;
	}
	avatarDirection[avatarid]=AvatarSpeed;

	if (avatarSize[avatarid]==null) {

		avatarSize[avatarid]=24;
	}

	if (avatarTimer[avatarid]!=null) {
		clearInterval(avatarTimer[avatarid]);
	}
	avatarTimer[avatarid] = setInterval('AvatarUpdate('+avatarid+')',10);
}

function AvatarZoomOut(avatarid) {

	if (!avatarDirection[avatarid]) return;

	//if (avatarDirection[avatarid]==-AvatarSpeed) return;
	//if (avatarSize[avatarid]==24) return;

	avatarDirection[avatarid]=-AvatarSpeed;

	clearInterval(avatarTimer[avatarid]);
	avatarTimer[avatarid] = setInterval('AvatarUpdate('+avatarid+')',10);
}

function AvatarUpdate(avatarid) {

	avatarSize[avatarid] = avatarSize[avatarid] + avatarDirection[avatarid];

	if (avatarSize[avatarid]>48) avatarSize[avatarid]=48;
	if (avatarSize[avatarid]<24) avatarSize[avatarid]=24;

	document.images['avatar'+avatarid].width=avatarSize[avatarid];
	document.images['avatar'+avatarid].height=avatarSize[avatarid];

	if (avatarSize[avatarid]==24) {

		document.images['avatar'+avatarid].src=document.getElementById('avatar24x24_'+avatarid).value;
	} else {

		if (avatarSize[avatarid]==48) {

			expandSpan('avatarextra_source'+avatarid, 'avatarextra_dest'+avatarid, 2);
		} else {

			expandSpan('avatarextra_source'+avatarid, 'avatarextra_dest'+avatarid, 1);
		}

		document.images['avatar'+avatarid].src=document.getElementById('avatar48x48_'+avatarid).value;
	}

	if (avatarSize[avatarid]==48 && avatarDirection[avatarid]>0) {

		clearInterval(avatarTimer[avatarid]);
	}
	if (avatarSize[avatarid]==24 && avatarDirection[avatarid]<0) {

		clearInterval(avatarTimer[avatarid]);
	}
}

function changeDays(ident) {

	var daysinmonth= new Array();
	daysinmonth[1]=31;
	daysinmonth[2]=28;
	daysinmonth[3]=31;
	daysinmonth[4]=30;
	daysinmonth[5]=31;
	daysinmonth[6]=30;
	daysinmonth[7]=31;
	daysinmonth[8]=31;
	daysinmonth[9]=30;
	daysinmonth[10]=31;
	daysinmonth[11]=30;
	daysinmonth[12]=31;

	//alert('form:' + document.getElementById(ident + '[year]').options[0].value);

	year = document.getElementById(ident + '[year]').options[document.getElementById(ident + '[year]').selectedIndex].value;
	month = document.getElementById(ident + '[month]').options[document.getElementById(ident + '[month]').selectedIndex].value;

	days = daysinmonth[month];

	// Om februari
	if (month==2) {

		// Ett �r �r skott�r om det �r j�mnt delbart med 4.
		if (year%4 == 0) {

			// Undantag �r �r som �r delbara med 100.
			if (year%100 == 0) {

				// Undantag fr�n undantaget �r �r som �r j�mnt delbara med 400
				// vilka �r skott�r trots att de ocks� �r delbara med 100.
				if (year%400 == 0) {

					days = 29;
				}

			} else {

				days = 29;
			}
		}
	}


	// Set # days
	document.getElementById(ident + '[day]').options.length = days;

	// Set text/values
	for(i = 25; i < days; i++) {
		document.getElementById(ident + '[day]').options[i].text = i+1;
		document.getElementById(ident + '[day]').options[i].value = i+1;
	}

	// alert(year);
}

var infoTimer;
function initInfo() {

	infoTimer = setInterval('infoUpdate()',40);
}

var infoCount=0;
function infoUpdate() {

	for (i=0; i<7; i++) {

		var weight = Math.sin(Math.PI*(infoCount/120));

		document.images['info_width'+i].width=(info_width[i]*weight);
		document.getElementById('info_width_sum'+i).innerHTML = Math.round(info_width_sum[i]*weight);
	}

	if (infoCount==60) clearInterval(infoTimer);
	infoCount++;
}

var psSeconds, psMinutes, psHours, psTimer, autoTimer;

function psInit(hh,mm,ss) {

	psHours = hh;
	psMinutes = mm;
	psSeconds = ss;

	psTimer = setInterval('psUpdate()',1000);
}

function psUpdate() {

	psSeconds++;

	if (psSeconds>59) {

		psSeconds=0;
		psMinutes++;

		if (psMinutes>59) {

			psMinutes=0;
			psHours++;

			if(psHours>23) {

				// Date updates
				psHours=0;
			}
		}
	}
	psUpdatePage();
}

function psClearTimer() {

	clearInterval(psTimer);
}

function psUpdatePage() {

	var hh = new String(psHours);
	if(hh.length < 2) hh = '0' + hh;

	var mm = new String(psMinutes);
	if(mm.length < 2) mm = '0' + mm;

	var ss = new String(psSeconds);
	if(ss.length < 2) ss = '0' + ss;

	if (document.getElementById('tid')) {
		document.getElementById('tid').innerHTML = hh + ':' + mm + ':' + ss;
	}
}

function pluginOpenHeader(key, skinID) {

	expandSpan(('plugin_header_'+key+'_source'), ('plugin_header_'+key+'_dest'), 0);

	icon_left = 'design/skin/'+skinID+'/icon/11x11/arrow_left.png';
	icon_right = 'design/skin/'+skinID+'/icon/11x11/arrow_right.png';

	// Switch
	if (document.getElementById('plugin_header_'+key+'_dest').innerHTML=='') {
		document.images['plugin_open_header_'+key].src=icon_left;
	} else {
		document.images['plugin_open_header_'+key].src=icon_right;
	}
}

function pluginOpenBody(key, skinID) {

	expandSpan(('plugin_body_'+key+'_source'), ('plugin_body_'+key+'_dest'), 0);

	icon_open = 'design/skin/'+skinID+'/icon/11x11/arrow_open.png';
	icon_close = 'design/skin/'+skinID+'/icon/11x11/arrow_close.png';
	open=false;

	// Switch
	if (document.getElementById('plugin_body_'+key+'_dest').innerHTML=='') {
		document.getElementById('pob_'+key).src=icon_open;
		open=true;
	} else {
		document.getElementById('pob_'+key).src=icon_close;
	}

	// Oneliner specific
	if (key=='d') {
		if (open==true) {
			document.getElementById('oneliner_visa').innerHTML="";
			expandSpan('oneliner_source', 'oneliner_dest', 1);
		} else {
			expandSpan('oneliner_source', 'oneliner_dest', 1);
			document.getElementById('oneliner_visa').innerHTML="[visa mer]";
		}
	}


	// Change visibility in this plugin for the user profile
	callServer('enablers/plugin.php?changeVisible='+key);
}

function pluginSwitchAdjust() {

	adjustspan = document.getElementById('plugin_adjust');

	if (adjustspan.innerHTML=='visa') {
		adjustspan.innerHTML = 'dölj';
		callServer('enablers/plugin.php?adjust=1');
	} else {
		adjustspan.innerHTML = 'visa';
		callServer('enablers/plugin.php?adjust=0');
	}

	for (letter=0; letter<50; letter++) {

		span_source = 'plugin_adjust_'+letter;

		span_dest = span_source + '_dest';
		span_source = span_source + '_source';

		if (document.getElementById(span_dest)) {
			expandSpan(span_source, span_dest, 0);
		}
	}

	for (edit=0; edit<50; edit++) {

		span_source = 'edit_adjust_'+edit;

		span_dest = span_source + '_dest';
		span_source = span_source + '_source';

		if (document.getElementById(span_dest)) {
			expandSpan(span_source, span_dest, 0);
		}
	}
}


// ------------------------------------------------------------------------------
// Credz to google (and Chris Justus for examining the google code), without them
// this part would be damn hard to figure out :-)
// ------------------------------------------------------------------------------

function getXMLHTTP(){
	var A=null;
	try {
		A=new ActiveXObject("Msxml2.XMLHTTP")
	} catch(e) {
		try {
			A=new ActiveXObject("Microsoft.XMLHTTP")
		} catch(oc) {
			A=null
		}
	}

	if(!A && typeof XMLHttpRequest != "undefined") {

		A=new XMLHttpRequest()
	}

	return A
}

function delay(gap){ /* gap is in millisecs */
	var then,now;
	then=new Date().getTime();
	now=then;
	while((now-then)<gap) {
		now=new Date().getTime();
	}
}

function callServer(page) {
	var xmlHttp=getXMLHTTP();
	if(xmlHttp){
		xmlHttp.open("GET",page,true);
		xmlHttp.setRequestHeader("Connection", "close");

		xmlHttp.onreadystatechange=function() {
			if(xmlHttp.readyState==4) {
			 	if (xmlHttp.status==200) {
					if (document.getElementById('js_temp')!=null) document.getElementById('js_temp').innerHTML = xmlHttp.responseText;
					eval( xmlHttp.responseText);
				}

				delete xmlHttp;
				xmlHttp=null;
			}
		}
		xmlHttp.send(null)
	}
}

// callServerPost("url", [name1,value1,name2,value2...], 2);
function callServerPost(page, values, numvalues) {
	var xmlHttp=getXMLHTTP();
	if (xmlHttp) {
		xmlHttp.open("POST", page, true);

		xmlHttp.onreadystatechange=function() {
			if(xmlHttp.readyState==4) {
			 	if (xmlHttp.status==200) {
					eval( xmlHttp.responseText);
				}

				delete xmlHttp;
				xmlHttp=null;
			}
		}

		xmlHttp.overrideMimeType('text/html');

		var body = "";
		for (i=0; i<numvalues; i++) {
			body += values[i*2] +"="+ escapeHtml((values[i*2+1])) + "&";
		}

		xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlHttp.setRequestHeader("Content-length", body.length);
		xmlHttp.setRequestHeader("Connection", "close");
		xmlHttp.send(body);
	}
}

function change_oneliner_topic() {
	var span = document.getElementById('oneliner_visa');

	if (span.innerHTML == "[visa mer]") {
		expandSpan('oneliner_source', 'oneliner_dest', 2);
		span.innerHTML = "[fäll ihop]";
	} else {
		expandSpan('oneliner_source', 'oneliner_dest', 1);
		span.innerHTML = "[visa mer]";
	}
}

function updateOneliner() {

}

function updatePM(what) {
	var theone=document.getElementById("my_pm");
	if (theone!=null) theone.innerHTML=what;
}

function updateKeepalive(stringen)  {
	var theone = document.getElementById("keepalive");
	if (theone!=null) theone.innerHTML=stringen;
}

var AU_USER_ICON=0;
var AU_MID=1;
var AU_NOOB=2;
var AU_NAME=3;
var AU_REALNAME=4;
var AU_UPTIME=5;
var AU_AVATAR_SMALL=6;
var AU_AVATAR=7;
var AU_CAN=8;

function updateOnlineusers(contents,v,vMax, i,iMax, tMax) {

	var theone = document.getElementById("online_users_count");
	if (theone!=null) theone.innerHTML=vMax+"/"+tMax;
	var t = "<div class=row>Aktiva just nu</div>"

	t += "<table cellspacing=0>";

	for (a=0; a<2; a++) {

		var u=v;
		var uMax=vMax;

		if (a==1) {

			u = i;
			uMax = iMax;

			if (uMax>0) {
				t+="</table><div class=row>Idle top 3</div><table cellspacing=0>";
			}
		}

		for (b=0; b<uMax; b++) {

			var offset=b*contents;
			var user = "first";
			if (b%2==0) user="second";

			t += "<input type=hidden id=avatar24x24_"+u[offset+AU_MID]+" value="+u[offset+AU_AVATAR_SMALL]+">";
			t += "<input type=hidden id=avatar48x48_"+u[offset+AU_MID]+" value="+u[offset+AU_AVATAR]+">";

			t += "<tr onMouseOver=AvatarZoomIn("+u[offset+AU_MID]+") onMouseOut=AvatarZoomOut("+u[offset+AU_MID]+")><td class="+user+" width=60 align=left><a href=index.php?page=userinfo&memberID="+u[offset+AU_MID]+" alt=\""+u[offset+AU_NAME]+"\" title=\""+u[offset+AU_NAME]+"\"><img name=avatar"+u[offset+AU_MID]+" class=avatar src="+u[offset+AU_AVATAR_SMALL]+" alt=\""+u[offset+AU_NAME]+"\" title=\""+u[offset+AU_NAME]+"\" width=24 height=24></a><br></td>";
			t += "<td class="+user+" width=120>";

			// Public
			var extra_noob = "";
			if (u[offset+AU_NOOB] == 1) extra_noob = "class=noob title='Not verified!'";

			t += "<a "+extra_noob+" href=index.php?page=userinfo&memberID="+u[offset+AU_MID]+">"+u[offset+AU_NAME]+"</a><br>";
			t += u[offset+AU_REALNAME]+"<br>";

			// Hidden
			t += "<span class=hidden id=avatarextra_source"+u[offset+AU_MID]+">";
			t += "Idle: "+u[offset+AU_UPTIME]+"<br>";
			t += "<a href=index.php?page=readpm&action=read&pm="+u[offset+AU_MID]+">skicka pm</a> ";

			if (u[offset+AU_CAN]!="") {

				t+= "<span id=kick_dst_"+u[offset+AU_MID]+"><a href=\"javascript:switchSpan('kick_src_"+u[offset+AU_MID]+"','kick_dst_"+u[offset+AU_MID]+"')\">kicka</a></span><span id=kick_src_"+u[offset+AU_MID]+" class=hidden><a class=warning href=?action=kick&memberID="+u[offset+AU_MID]+">s�ker?</a></span>";
			}

			t += "</span><span id=avatarextra_dest"+u[offset+AU_MID]+"></span>";

			// Public
			t += "</td><td class="+user+" width=10>"+u[offset+AU_USER_ICON]+"</td></tr>";
		}
	}

	t += "</table>";

	theone = document.getElementById("online_users")
	if (theone!=null) theone.innerHTML=t;
}

function autoUpdate() {

	callServer("elfs/elf_keepalive.php?deltatime=20&reset=false");
}

function autoInit() {

	callServer("elfs/elf_keepalive.php?deltatime=0");
	autoTimer = setInterval('autoUpdate()',30000); // Once every 30 secs
}

function updateOneliner(what) {

	var theone = document.getElementById("oneliner");
	if (theone!=null) theone.innerHTML = what;

	var span = document.getElementById('oneliner_visa');
	if (span!=null) span.innerHTML = "[visa mer]";
}

function submitOneliner(e) {

	// Send oneliner
	var text = document.getElementById("onelinerText").value;
	callServer("elfs/elf_addoneliner.php?text="+escape(text));

	delay(200);

	// Update oneliner (and other stuff too)
	callServer("elfs/elf_keepalive.php?deltatime=0");
	if (document.getElementById("keepalive")!=null) document.getElementById("keepalive").innerHTML="00:00";

	// Clear text
	document.getElementById("onelinerText").value="";

	// Don't process form
	return false;
}

var AU_UT_FTID=0;
var AU_UT_ICON=1;
var AU_UT_NAME=2;
var AU_UT_SUBJECT=3;

function updateUnreadThreads(c, v, vMax) {

	var total="<table cellspacing=0 cellpadding=0>";
	var back = "first";
	var date = new Date();

	for (i=0; i<vMax*c; i+=c) {

		var seed = date.getTime();
		var icon = "<a href=index.php?page=forum&seed="+seed+"&forumThreadID="+v[i+AU_UT_FTID]+"#new>"+v[i+AU_UT_ICON]+"</a>";
		var gname = "<b>"+v[i+AU_UT_NAME]+"</b>";
		var link = "<a href=index.php?page=forum&seed="+seed+"&forumThreadID="+v[i+AU_UT_FTID]+"#new>"+v[i+AU_UT_SUBJECT]+"</a>";

		if (back=="first") back="second"; else back="first";

		total += "<tr class="+back+"><td width=175>"+gname+"<br>"+link+"</td><td width=15 valign=top align=right>"+icon+"</td></tr>";
	}

	total += "</table><div width=100% align=right><a href=index.php?page=index&enabler=markread>... markera allt som läst</a></div>";

	var ut = document.getElementById('unread_threads');
	if (ut!=null) ut.innerHTML = total;
}

function updateForumIcons(fgID, ftID,skinID, memberID, memberName) {

	for (a=1; a<4; a++) {
		var fg = document.getElementById('icon_fg'+fgID+'_'+a);
		var ft = document.getElementById('icon_ft'+ftID+'_'+a);
		var ftmid = document.getElementById('icon_ftmid'+ftID+'_'+a);

		if (fg!=null) fg.src='design/skin/'+skinID+'/icon/11x11/mail_new.png';
		if (ft!=null) ft.src='design/skin/'+skinID+'/icon/11x11/mail_new.png';
		if (ftmid!=null) ftmid.innerHTML='<a href=?page=userinfo&memberID='+memberID+'>'+memberName+'</a>';
	}
}

function citera(membername, textid) {

	var text = document.getElementById('forum_body_'+textid).innerHTML;

	document.getElementById('body').value += '[quote]'+'[b]'+membername+' sade:[/b]\n'+text+'[/quote]\n';
}

function escapeHtml(intext) {

	var str = escape(intext);
	str = str.replace(/\+/g,"%2B");
	str = str.replace(/\//g,"%2F");
	str = str.replace(/\?/g,"%3F");
	str = str.replace(/\r/g,"%0A");
	str = str.replace(/\n/g,"%0C");
	str = str.replace(/=/g,"%3D");
	str = str.replace(/&/g,"%26");
	str = str.replace(/@/g,"%40");

	return str;
}

var originalTitle = "Jeff Goldblum är sexig.";

function setTitle(pTitle) {

	originalTitle = pTitle;
}

function setNewItem() {

	document.title = originalTitle + " [NYTT!]";
}

function setMaxWidth(obj, one, two) {

	if (obj.style.maxWidth == one) {

		obj.style.maxWidth = two;
	} else {

		obj.style.maxWidth = one;
	}
}
