function gid(id) {
	return document.getElementById(id);
}


function toggle_visibility(id) {
	var eid = $('#' + id);

	eid.fadeToggle(500);
}

function toggle_td_vis(id) {
	var eid = $('#' + id);

	eid.toggle();
}

function bb_player_insert(world) {
	insertBBcode('message', '[player='+world+']', '[/player]');
	if (worldscount > 1) {
		toggle_visibility('bb_player');
	}
	return;
}

function bb_gang_insert(world) {
	insertBBcode('message', '[gang='+world+']', '[/gang]');
	if (worldscount > 1) {
		toggle_visibility('bb_gang');
	}
	return;
}

function insertBBcode(textareaID, startTag, endTag) {
		var input = gid(textareaID);
		input.focus();

		if(typeof document.selection != 'undefined') {
			var range = document.selection.createRange();
			var insText = range.text;
			range.text = startTag + insText + endTag;

			range = document.selection.createRange();
			if (insText.length == 0) {
				range.move('character', -endTag.length);
			} else {
				range.moveStart('character', startTag.length + insText.length + endTag.length);
			}
			range.select();
		}

		else if(typeof input.selectionStart != 'undefined') {
			var start = input.selectionStart;
			var end = input.selectionEnd;
			var insText = input.value.substring(start, end);
			input.value = input.value.substr(0, start) + startTag + insText + endTag + input.value.substr(end);

			var pos;
			if (insText.length == 0) {
				pos = start + startTag.length;
			} else {
				pos = start + startTag.length + insText.length + endTag.length;
			}
			input.selectionStart = pos;
			input.selectionEnd = pos;
		}
}

function bb_color_picker_gencaller(fn,arg) {
	var f = function () {
		fn(arg);
	};
	return f;
}

function bb_color_set_color(col) {
	var g = gid("bb_color_picker_preview");
	var inp = gid("bb_color_picker_tx");
	g.style.color = "rgb("+col[0]+","+col[1]+","+col[2]+")";
	var rr = col[0].toString(16);
	var gg = col[1].toString(16);
	var bb = col[2].toString(16);
	rr = rr.length<2?"0"+rr:rr;
	gg = gg.length<2?"0"+gg:gg;
	bb = bb.length<2?"0"+bb:bb;
	inp.value = "#"+rr+gg+bb;
}

function bb_color_pick_color(colordiv) {
	var col = colordiv.rgb;
	
	for (var l=0;l<6;l++) {
		for (var h=1;h<6;h++) {
			var cell = gid("bb_color_picker_"+h+l);
			if (!cell) alert("bb_color_picker_"+h+l);
			var ll = l/3.0;
			var hh = h/4.5;
			hh=Math.pow(hh,.5);
			var light = Math.max(0,(255*ll-255));
			var r = Math.floor(Math.max(0,Math.min(255, (col[0]*ll*hh + 255*(1-hh)) + light)));
			var g = Math.floor(Math.max(0,Math.min(255, (col[1]*ll*hh + 255*(1-hh)) + light)));
			var b = Math.floor(Math.max(0,Math.min(255, (col[2]*ll*hh + 255*(1-hh)) + light)));
			cell.style.backgroundColor = "rgb("+r+","+g+","+b+")";
			cell.rgb = [r,g,b];
			cell.onclick = bb_color_picker_gencaller(bb_color_set_color,[r,g,b]);
		}
	}
}

function bb_color_picker_textchange() {
	var inp = gid("bb_color_picker_tx");
	var g = gid("bb_color_picker_preview");
	try {
		g.style.color = inp.value;
	} catch (e) {
		/*no error report if user types wrong code*/
	}
}

function bb_color_picker_toggle(assign) {
	var inp = gid("bb_color_picker_tx");
	inp.onkeyup  = bb_color_picker_textchange;
	if (assign) {
		insertBBcode('message', '[color='+inp.value+']', '[/color]');
		toggle_visibility('bb_color_picker');
		return;
	}
	var colors = [gid("bb_color_picker_c0"),gid("bb_color_picker_c1"),gid("bb_color_picker_c2"),gid("bb_color_picker_c3"),gid("bb_color_picker_c4"),gid("bb_color_picker_c5")];
	colors[0].rgb = [255,0,0];
	colors[1].rgb = [255,255,0];
	colors[2].rgb = [0,255,0];
	colors[3].rgb = [0,255,255];
	colors[4].rgb = [0,0,255];
	colors[5].rgb = [255,0,255];
	for (i=0;i<=5;i++) {
		colors[i].onclick = bb_color_picker_gencaller(bb_color_pick_color,colors[i]);
	}
	bb_color_pick_color(colors[0]);
	toggle_visibility('bb_color_picker');
}

function smilie(thesmilie) {
	var input = gid("message");
	input.value += thesmilie+" ";
	input.focus();
	toggle_visibility('bb_smiles');
}

function msg_limit(obj, limit, counterId) {
	if (counterId == 'undefined' || !counterId) {
		counterId = 'count';
	}
	if (obj.value.length > limit) {
	  obj.value = obj.value.substr(0,limit);
	}
	gid(counterId).innerHTML = limit - obj.value.length;
}

function toggle_spoiler(ref) {
	var display_value = ref.parentNode.getElementsByTagName('div')[0].getElementsByTagName('span')[0].style.display;
	if(display_value == 'none'){
		ref.parentNode.getElementsByTagName('div')[0].getElementsByTagName('span')[0].style.display = 'block';
	}
	else {
		ref.parentNode.getElementsByTagName('div')[0].getElementsByTagName('span')[0].style.display = 'none';
	}
}

function toggle_urlbox(burl) {
	var re_prefix = new RegExp('^http://(.*)');
	var re_local = new RegExp('^http://.*(?!/)' + hostname + '(.*)');
	if(burl.indexOf('http://') == -1 && ( burl.indexOf('index.php') == 0 || burl.indexOf('kamp.php') == 0 ))
		burl = 'http://' + document.domain + '/' + burl;
	if(burl.indexOf('http://') == -1 && ( burl.indexOf('/index.php') == 0 || burl.indexOf('/kamp.php') == 0 ))
		burl = 'http://' + document.domain + burl;
	if (re_prefix.test(burl) == false)
	{
		burl = 'http://' + burl;
	}
	if (re_local.test(burl) == true)
	{
		window.location = burl;
		return false;
	}
	var element = document.getElementById('urlbox');
	if(element.style.display == 'block')
		element.style.display = 'none';
	else
		element.style.display = 'block';
	document.getElementById('urlbox').innerHTML = '<p>' + str_link_warning + '</p><p><a href="' + burl + '" onClick="toggle_urlbox(\'' + burl + '\')" target="_blank">' + burl + '</a></p><p>[<a href="' + burl + '" onClick="toggle_urlbox(\'' + burl + '\')" target="_blank">' + str_btn_continue + '</a>] &nbsp; &nbsp; [<a href="javascript:toggle_urlbox(\'' + burl + '\')">' + str_btn_cancel + '</a>]</p>';
}

$(function(){
	$('a[href]').each(function(){
		for(gm in allSubDomains) {
			if(!allSubDomains.hasOwnProperty(gm))
				continue;
			if($(this).attr('href').indexOf("toggle_urlbox('http://" + allSubDomains[gm] + '.' + realDomain) > -1) {
				$(this).attr('href', $(this).attr('href').replace(allSubDomains[gm], thisSubDomain))
				$(this).html($(this).html().replace(allSubDomains[gm], thisSubDomain));
			}
		}
	});
});

