/*
Config generator code
together with qlcvar.js
made by Lashknife <lashknife@gmail.com>
"Learn from this document, do not copy it!"
*/

var cfgtablist = new Array("player","hud","graphics","soundnet","controls1","controls2","weapons","advweap","chat","generate");
function cfg_showTab(aobj,aleft) {
	//alert(aleft);
	if (boxscroller.status == false) {
		for (var i = 0; i < cfgtablist.length; i++) {
			if (aobj.id.substr(8) == cfgtablist[i]) {
				aobj.className = "active";
				aobj.blur();
				if (BrowserDetect.browser == "Firefox") {
					$("#cfg-boxes").css({ left:aleft + "px" });
				} else {
					boxscroller.scrollTo(aleft);
				}
			} else {
				$("#cfg-tab-" + cfgtablist[i]).removeClass("active");
			}
		}
	}
	cfg_activeColorField = "";
	return false;
}


function getOffset(o){
	for(var r = {x: o.offsetLeft, y: o.offsetTop, h: o.offsetHeight, w: o.offsetWidth}; o = o.offsetParent; r.x += o.offsetLeft, r.y += o.offsetTop);
	return r;
}

var boxscroller;

/* player */
// some paths
var cfg_bodyLGpath = "/source/images/models/player/body_lg/";
var cfg_iconLGpath = "/source/images/models/player/icon_lg/";
var cfg_iconXLpath = "/source/images/models/player/icon_xl/";

// model
function cfg_modelPreview(s) {
	var choice = s.options[s.selectedIndex].value;
	document.getElementById("cfg_modelpreview").src = choice==""?"":(cfg_bodyLGpath + choice.toLowerCase() + ".png");
}

function cfg_initModels() {
	loadPlayerList("model");
	loadPlayerList("cg_forceteammodel_choice");
	loadPlayerList("cg_forceenemymodel_choice");
	loadPlayerList("cg_forceredteammodel_choice");
	loadPlayerList("cg_forceblueteammodel_choice");
}

// focussing colorpicker on an input field.
var cfg_activeColorField = "";
function cfg_addColor(c) {
	//blur();
	var colorToAdd = "";
	switch (c) {
		case "red" : colorToAdd = "^1"; break;
		case "green" : colorToAdd = "^2"; break;
		case "yellow" : colorToAdd = "^3"; break;
		case "blue" : colorToAdd = "^4"; break;
		case "cyan" : colorToAdd = "^5"; break;
		case "magenta" : colorToAdd = "^6"; break;
		case "white" : colorToAdd = "^7"; break;
		case "black" : colorToAdd = "^^8"; break;
		default : return false; break;
	}
	var fieldToColor;
	if (cfg_activeColorField != "") {
		fieldToColor = document.getElementById(cfg_activeColorField);
	} else {
		return false;
	}
	fieldToColor.focus();
	if (document.selection && BrowserDetect.browser != "Opera") { // IE only
		var sel = document.selection.createRange();
		sel.text = colorToAdd;
	} else {
		fieldToColor.value = fieldToColor.value.substr(0,fieldToColor.selectionStart) + colorToAdd + fieldToColor.value.substr(fieldToColor.selectionStart);
	}
	return false;
}
function cfg_setACF(field) { // cfg_setActiveColorField (focus color picker on a particular field)
	cfg_activeColorField = field;
}
/* hud */
var activeCrosshairColor = 0;
var activeCrosshair = 0;
var colors = new Array("transparent","red","lime","yellow","blue","cyan","magenta","white","black");
var xhaircolors = new Array("transparent","red","yellow","lime","cyan","blue","magenta","white"); // Xhair colors are different coded than regular naming/chat colors !!!!!
function cfg_setCrosshair(choice) {
	$("#cfg_crosshair_" + activeCrosshair).css({ backgroundColor:colors[0] });
	activeCrosshair = choice;
	$("#cfg_crosshair_" + choice).css({ backgroundColor:xhaircolors[activeCrosshairColor] });
	$("#cfg_crosshairs img").removeClass("active");
	$("#cfg_crosshair_" + choice).addClass("active");
	$("#cg_drawcrosshair").val(choice);
}
function cfg_setCrosshairColor(choice) {
	activeCrosshairColor = choice;
	$(".cfg_ci img").css({ visibility: "hidden" });
	$("#cfg_ci_" + choice + " img").css({ visibility: "visible" });
	$("#cg_crosshaircolor").val(choice);
	$("#cfg_crosshair_" + activeCrosshair).css({ backgroundColor:xhaircolors[choice] });
}
function cfg_showCI(choice) {
	if (activeCrosshairColor != choice) {
		$("#cfg_ci_" + choice + " img").css({ visibility:"visible" });
	}
}
function cfg_hideCI(choice) {
	if (activeCrosshairColor != choice) {
		$("#cfg_ci_" + choice + " img").css({ visibility:"hidden" });
	}
}
/* graphics */
function cfg_setRmode(s) {
	var currentvalue = s.options[s.selectedIndex].value;
	$("#cfg_r_mode").css({ display: (currentvalue == -1?"block":"none") });
}
/* controls */
function cfg_invertMouse(box) {
	if (box.checked) {
		cfgmpitchslider.setScale(-0.001);
	} else {
		cfgmpitchslider.setScale(0.001);
	}
}
function bind_toggle_general(box) {
	var isEnabled = !box.checked;
	$("#bind_menu").attr("disabled",isEnabled);
	$("#bind_console").attr("disabled",isEnabled);
	$("#bind_scores").attr("disabled",isEnabled);
	$("#bind_vote_yes").attr("disabled",isEnabled);
	$("#bind_vote_no").attr("disabled",isEnabled);
	$("#bind_readyup").attr("disabled",isEnabled);
}
function toggleDemoScript(box) {
	var isAuto = box.checked;
	$("#cfg_demotogglerow").css("display",isAuto?"":"none");
	$("#cfg_manualdemostart").css("display",isAuto?"none":"");
	$("#cfg_manualdemostop").css("display",isAuto?"none":"");
}
function toggleBothScreenshots(box) {
	$("#bind_screenshotjpeg").attr("disabled",box.checked);
}
function init_controls() {
	// disable general bind block
	$("#bind_toggle_edit").attr("checked",false);
	$("#bind_menu").attr("disabled",true);
	$("#bind_console").attr("disabled",true);
	$("#bind_scores").attr("disabled",true);
	$("#bind_vote_yes").attr("disabled",true);
	$("#bind_vote_no").attr("disabled",true);
	$("#bind_readyup").attr("disabled",true);
	// hide demotogglerow
	$("#cfg_demotoggle").attr("checked",false);
	$("#cfg_demotogglerow").css("display","none");
}

function cfg_viewWeaponStyle(choice) {
	val = $("#" + choice).val();
	$("#weaponpreviewbox img").attr("src","/source/images/cfgpreview/" + choice + val + "_thumb.jpg");
	$("#weaponpreviewbox img").attr("alt",choice + " " + val);
	$("#weaponpreviewbox img")[0].onclick = function () {
		window.open("/source/images/cfgpreview/" + choice + val + ".jpg");
	}
}

/* WEAPONS */
function cfg_initWeaponBinds() {
	for (var i = 1; i < 10; i++) {
		$("#bind_weapon" + i + "_bind1").val("");
		$("#bind_weapon" + i + "_bind2").val(i);
	}
	for (var i = 11; i < 14; i++) {
		$("#bind_weapon" + i + "_bind1").val("");
		$("#bind_weapon" + i + "_bind2").val("");
	}
}
function advweap(box) {
	$("#advweapset").css("visibility",box.checked?"visible":"hidden");
	var tdlist = document.getElementById("weapontable").getElementsByTagName("td");
	if (box.checked) {
		for (var i = 0; i < tdlist.length; i++) {
			if (tdlist[i].className.indexOf("advweap") != -1) {
				tdlist[i].style.visibility = "visible";
			}
		}
	} else {
		for (var i = 0; i < tdlist.length; i++) {
			if (tdlist[i].className.indexOf("advweap") != -1) {
				tdlist[i].style.visibility = "hidden";
			}
		}
	}
}

/* chat */
function cfg_emptyCustomChat() {
	if (confirm("Are you sure?")) {
		var i = 1;
		do {
			$("#bind_chat" + i + "_bind").val("");
			$("#cfg_chat" + i + "_msg").val("");
			$("#cfg_chat" + i + "_teamonly").attr("checked",false);
			i++;
		} while (i < 20);
	}
}
/* generate */
var cfg_commentsInPreview = false;
function togglePreviewComments(box) {
	cfg_commentsInPreview = box.checked;
}
var cfg_extractPart = "";
function cfg_extract(choice) {
	cfg_extractPart = choice;
	$("#cfgfilename").val(choice);
	$("#cfgfileext").val("cfg");
}
function cset(str,mode) {
	var returnstring = "\nset " + str + " ";
	switch (mode) {
		case 't' : returnstring += "\"" + $("#" + str).val() + "\""; break;
		case 'b' : returnstring += $("#" + str).attr("checked")?"\"1\"":"\"0\""; break;		
		case 's' : returnstring += "\"" + $("#"+ str + " option:selected").val() + "\""; break;
		case 'model' : returnstring += "\"" + cmodel(str) + "\""; break;
		default: returnstring += "\"\""; break;
	}
	returnstring += cip(str);
	return returnstring;
}
function cseta(str,mode) {
	var returnstring = "\nseta " + str + " ";
	switch (mode) {
		case 't' : returnstring += "\"" + $("#" + str).val() + "\""; break;
		case 'b' : returnstring += $("#" + str).attr("checked")?"\"1\"":"\"0\""; break;		
		case 's' : returnstring += "\"" + $("#"+ str + " option:selected").val() + "\""; break;
		case 'model' : returnstring += "\"" + cmodel(str) + "\""; break;
		default: returnstring += "\"\""; break;
	}
	returnstring += cip(str);
	return returnstring;
}
function cmodel(str) {
	if (str == "model") {
		return $("#"+ str + " option:selected").val().replace(/_/,"/").toLowerCase();
	} else if (str == "cg_forceteammodel") {
		if ($("#cg_forceteammodel").attr("checked")) {
			return $("#cg_forceteammodel_choice option:selected").val().replace(/_/,"/").toLowerCase();
		} else {
			return "";
		}
	} else if (str == "cg_forceenemymodel") {
		if ($("#cg_forceenemymodel").attr("checked")) {
			return $("#cg_forceenemymodel_choice option:selected").val().replace(/_/,"/").toLowerCase();
		} else {
			return "";
		}
	} else if (str == "cg_forceredteammodel") {
		if ($("#cg_forceredteammodel").attr("checked")) {
			return $("#cg_forceredteammodel_choice option:selected").val().replace(/_/,"/").toLowerCase();
		} else {
			return "";
		}
	} else if (str == "cg_forceblueteammodel") {
		if ($("#cg_forceblueteammodel").attr("checked")) {
			return $("#cg_forceblueteammodel_choice option:selected").val().replace(/_/,"/").toLowerCase();
		} else {
			return "";
		}
	} else {
		return "";
	}
}
function cbind(str) {
	var returnstring = "";
	if ($("#bind_" + str).val() != "") {
		returnstring = "\nbind \"" + $("#bind_" + str).val() + "\" \"";
		switch(str) {
				case "screenshot" : returnstring += ($("#bind_screenshotjpeg").attr("checked")?"screenshotjpeg":bindlist[str].command); break;
				default: returnstring += bindlist[str].command; break;
		}
		returnstring += "\"" + cip(str);
	}
	return returnstring;
}
function cip(str) {
	if (cfg_commentsInPreview) {
		returnstring = "\t// ";
		if (cvarlist[str]) {
			return returnstring + cvarlist[str].explanation;
		} else if (cmdlist[str]) {
			return returnstring + cmdlist[str].explanation;
		} else if (bindlist[str]) {
			return returnstring + bindlist[str].explanation;
		} else {
			return "";
		}
	} else {
		return "";
	}
}
function cchat(c) {
	var returnstring = "";
	if ($("#bind_chat" + c + "_bind").val() != "" && $("#cfg_chat" + c + "_msg").val() != "") {
		returnstring = "\nbind \"" + $("#bind_chat" + c + "_bind").val() + "\" \"say" + ($("#cfg_chat" + c + "_teamonly").attr("checked")?"_team":"") + " " + $("#cfg_chat" + c + "_msg").val() + "\"";
	}
	return returnstring;
}
function cweapon(c) {
	var returnstring = "";
	if ($("#bind_weapon" + c + "_bind1").val() != "") {
		returnstring += "\nbind " + $("#bind_weapon" + c + "_bind1").val() + " \"weapon " + c + "\"";
		if (cfg_commentsInPreview) {
			returnstring += "\t// " + weaplist[c].explanation;
		}
	}
	if ($("#bind_weapon" + c + "_bind2").val() != "") {
		returnstring += "\nbind " + $("#bind_weapon" + c + "_bind2").val() + " \"weapon " + c + "\"";
		if (cfg_commentsInPreview) {
			returnstring += "\t// " + weaplist[c].explanation;
		}
	}
	return returnstring;
}
function cfgUpdate() {
	var pa = document.getElementById("cfgpreview"); // preview textarea field
	pa.disabled = true;
	pa.value = "// Generated by the Holysh1t online Quake Live generator";
	pa.value += "\n// Visit www.holysh1t.net and join #holysh1t and #qlpickup.eu on irc!";
	pa.value += "\n// Please send any comments to Lashknife <lashknife@gmail.com>";
	pa.value += "\n// ==================================================================";
	// player
	if (cfg_extractPart == "autoexec") {
		pa.value += "\n\n// PLAYER\n// ++++++";
		pa.value += cset("name",'t');
		pa.value += cset("clan",'t');
		pa.value += cset("sex",'s');
		pa.value += cset("model",'model');
		pa.value += cset("cg_forceteammodel",'model');
		pa.value += cset("cg_forceenemymodel",'model');
		pa.value += cset("cg_forceredteammodel",'model');
		pa.value += cset("cg_forceblueteammodel",'model');
	}
	// hud
	if (cfg_extractPart == "autoexec") {
		pa.value += "\n\n// HUD\n// +++";
		pa.value += cset("cg_drawcrosshair",'t');
		pa.value += cset("cg_crosshaircolor",'t');
		pa.value += cset("cg_crosshairsize",'t');
		pa.value += cset("cg_crosshairhealth",'b');
		pa.value += cset("cg_crosshairpulse",'b');
		pa.value += cset("cg_drawcrosshairnames",'b');
		pa.value += cset("cg_kickscale",'b');
		pa.value += cset("cg_bob",'b');
		pa.value += cset("cg_fov",'t');
		pa.value += cset("cg_zoomfov",'t');
		pa.value += cset("cg_drawfps",'b');
		pa.value += cset("cg_drawtimer",'b');
		pa.value += cset("cg_leveltimerdirection",'s');
		pa.value += cset("cg_lagometer",'s');
		pa.value += cset("cg_draw3dicons",'b');
		pa.value += cset("cg_drawteamoverlay",'b');
		pa.value += cset("cg_selfonteamoverlay",'b');
		pa.value += cset("cg_drawfriend",'b');
		pa.value += cset("cg_drawattacker",'b');
		pa.value += cset("ui_bigfont",'t');
		pa.value += cset("ui_smallfont",'t');
		pa.value += cset("cl_demorecordmessage",'b');
	}
	// graphics
	if (cfg_extractPart == "autoexec" || cfg_extractPart == "graphics") {
		pa.value += "\n\n// GRAPHICS\n// ++++++++";
		pa.value += cset("r_mode",'s');
		if ($("#r_mode option:selected").val() == -1) {
			pa.value += cset("r_customwidth",'t');
			pa.value += cset("r_customheight",'t');
		}
		pa.value += cset("r_fullscreen",'b');
		pa.value += cset("com_maxfps",'t');
		pa.value += cset("r_displayrefresh",'t');
		pa.value += cset("r_swapinterval",'b');
		pa.value += cset("r_dynamiclight",'b');
		pa.value += cset("r_vertexlight",'b');
		pa.value += cset("r_enablepostprocess",'b');
		pa.value += cset("r_picmip",'s');
		pa.value += cset("r_overbrightbits",'s');
		pa.value += cset("r_mapoverbrightbits",'s');
		pa.value += cset("r_gamma",'t');
		pa.value += cset("r_fullbright",'b');
		pa.value += cset("r_fastsky",'b');
		pa.value += cset("r_lodbias",'s');
		pa.value += cset("cg_shadows",'b');
		pa.value += cset("r_subdivisions",'t');
		pa.value += cset("cg_simpleitems",'b');
		pa.value += cset("cg_marks",'b');
		pa.value += cset("cg_brasstime",'t');
		pa.value += cset("cg_noprojectiletrail",'b');
	}
	// sound
	if (cfg_extractPart == "autoexec") {
		pa.value += "\n\n// SOUND\n// +++++";
		pa.value += cset("s_volume",'t');
		pa.value += cset("s_musicvolume",'t');
		pa.value += cset("s_doppler",'b');
		pa.value += cset("s_ambient",'b');
		pa.value += cset("cg_chatbeep",'b');
		pa.value += cset("cg_teamchatbeep",'b');
	}
	// net
	if (cfg_extractPart == "autoexec") {
		pa.value += "\n\n// NET\n// +++";
		pa.value += cset("rate",'t');
		pa.value += cset("cl_maxpackets",'t');
		pa.value += cset("cg_smoothclients",'b');
		pa.value += cset("cl_packetdup",'s');
		pa.value += cset("cg_predictitems",'b');
		pa.value += cset("cg_predictlocalrailshots",'b');
	}
	// controls
	if (cfg_extractPart == "autoexec" || cfg_extractPart == "binds") {
		pa.value += "\n\n// CONTROLS\n// ++++++++";
		pa.value += cset("in_mouse",'s');
		pa.value += cset("sensitivity",'t');
		pa.value += cset("cl_mouseaccel",'t');
		//pa.value += cset("cl_mousesenscap",'t');
		pa.value += cset("m_yaw",'t');
		pa.value += cset("m_pitch",'t');
		pa.value += "\n//Binds:";
		if ($("#unbindall").attr("checked")) {
			pa.value += "\nunbindall " + cip("unbindall");
		}
		pa.value += cbind("menu");
		pa.value += cbind("console");
		pa.value += cbind("scores");
		pa.value += cbind("vote_yes");
		pa.value += cbind("vote_no");
		pa.value += cbind("readyup");
		if (!$("#bind_screenshotboth").attr("checked")) {
			pa.value += cbind("screenshot");
		}
		if (!$("#cfg_demotoggle").attr("checked")) { // individual start/stop recording binds
			pa.value += cbind("start_record");
			pa.value += cbind("stop_record");
		}
		pa.value += cbind("fire");
		pa.value += cbind("zoom");
		pa.value += cbind("previous_weapon");
		pa.value += cbind("next_weapon");
		pa.value += cbind("use");
		pa.value += cbind("dropweapon");
		pa.value += cbind("dropflag");
		pa.value += cbind("timein");
		pa.value += cbind("timeout");
		pa.value += cbind("forward");
		pa.value += cbind("back");
		pa.value += cbind("moveleft");
		pa.value += cbind("moveright");
		pa.value += cbind("moveup");
		pa.value += cbind("movedown");
		pa.value += cbind("speed");
		pa.value += cbind("say");
		pa.value += cbind("say_team");
		pa.value += cbind("chat");
		pa.value += cbind("taunt");
		pa.value += cbind("team_red");
		pa.value += cbind("team_blue");
		pa.value += cbind("spectate");
		pa.value += cbind("sizedown");
		pa.value += cbind("sizeup");
		pa.value += cbind("quit");
		pa.value += cbind("ragequit");
	}
	// weapons
	if (cfg_extractPart == "autoexec") {
		pa.value += "\n\n// WEAPONS\n// +++++++";
		pa.value += cset("cg_drawgun",'s');
		pa.value += cset("cg_gunx",'t');
		pa.value += cset("cg_guny",'t');
		pa.value += cset("cg_gunz",'t');
		pa.value += cset("cg_newweaponbar",'s');
		pa.value += cset("cg_switchonempty",'b');
		pa.value += cset("cg_autoswitch",'b');
		pa.value += cset("cg_railtrailtime",'t');
		pa.value += cset("color1",'s');
		pa.value += cset("color2",'s');
		pa.value += cset("cg_oldrail",'s');
		pa.value += cset("r_railwidth",'t');
		pa.value += cset("r_railcorewidth",'t');
		pa.value += cset("r_railsegmentlength",'t');
		pa.value += cset("cg_oldplasma",'s');
		pa.value += cset("cg_oldrocket",'s');
		pa.value += cset("cg_truelightning",'t');
	}
	if (cfg_extractPart == "autoexec" || cfg_extractPart == "binds") {
		if (!$("#cfg_advancedweaponcontrols").attr("checked")) {
			for (var i = 1; i < 14; i++) { // custom weapon binds
				if (i != 10) {
					pa.value += cweapon(i);
				}
			}
		} else {
			pa.value += "\n//See script section for advanced weapon controls";
		}
	}
	// chat
	if (cfg_extractPart == "autoexec"  || cfg_extractPart == "chat") {
		pa.value += "\n\n// CHAT\n// ++++";
		for (var i = 1; i <= 20; i++) {
				pa.value += cchat(i);
		}
	}
	// scripts
	if (cfg_extractPart == "autoexec" || cfg_extractPart == "binds") {
		pa.value += "\n\n// SCRIPTS\n// +++++++";
		if ($("#cfg_demotoggle").attr("checked")) {
			pa.value += "\n// " + scripts['toggledemo'].comment;
			pa.value += "\n" + scripts['toggledemo'].code.replace(/#key#/,$("#bind_toggle_record").val());
		}
		if ($("#cfg_advancedweaponcontrols").attr("checked")) {
			pa.value += "\n// " + scripts['advancedweapon'].comment;
			pa.value += scripts['advancedweapon'].code(); // weapon script requires a function call
		}
		if ($("#bind_screenshotboth").attr("checked")) {
			pa.value += "\n// " + scripts['screenshotboth'].comment;
			pa.value += "\n" + scripts['screenshotboth'].code.replace(/#key#/,$("#bind_screenshot").val());
		}
	}
	// some general settins
	if (cfg_extractPart == "autoexec") {
		pa.value += "\n\n// GENERAL\n// +++++++";
		pa.value += cset("cl_contimestamps",'s');
		pa.value += cset("cg_followkiller",'b');
		pa.value += cset("cg_followpowerup",'s');
		pa.value += cset("cg_autoaction",'s');
		pa.value += cseta("com_allowconsole",'b');
		//pa.value += "\nseta com_allowconsole \"1\"" + (cfg_commentsInPreview?"\t// allows opening console without ctrl+alt":"");
		pa.value += "\nvid_restart" + (cfg_commentsInPreview?"\t\t\t// Restart video rendering system to apply graphical settings":"");
	}
	pa.disabled = false;
}

/* init cvar */
function initCvars() { // load a default value set
	// PLAYER
	$("#name").val("");
	$("#clan").val("");
	$("#sex").attr("selectedIndex",0); // male
	$("#com_allowconsole").attr("checked",true);
	$("#cl_contimestamps").attr("selectedIndex",0);
	$("#cg_followkiller").attr("checked",true);
	$("#cg_followpowerup").attr("selectedIndex",2);
	$("#model").attr("selectedIndex",72); // sarge
	cfg_modelPreview($("#model")[0]);
	$("#cg_forceteammodel_choice").attr("selectedIndex",72); // sarge
	$("#cg_forceteammodel").attr("checked",false);
	$("#cg_forceenemymodel_choice").attr("selectedIndex",41); // keel bright
	$("#cg_forceenemymodel").attr("checked",true);
	$("#cg_forceredteammodel_choice").attr("selectedIndex",72); // sarge
	$("#cg_forceredteammodel").attr("checked",false);
	$("#cg_forceblueteammodel_choice").attr("selectedIndex",72); // sarge
	$("#cg_forceblueteammodel").attr("checked",false);
	// HUD
	cfg_setCrosshair(5); // default crosshair = 5
	cfg_setCrosshairColor(7); // default color = white
	$("#cg_crosshairsize").val("32");
	$("#cg_crosshairhealth").attr("checked",false);
	$("#cg_crosshairpulse").attr("checked",false);
	$("#cg_drawcrosshairnames").attr("checked",true); // names above crosshair
	$("#cg_kickscale").attr("checked",false);
	$("#cg_bob").attr("checked",false);
	$("#cg_fov").val("105");
	$("#cg_zoomfov").val("40");
	$("#cg_drawfps").attr("checked",true);
	$("#cg_drawtimer").attr("checked",true);
	$("#cg_leveltimerdirection").attr("selectedIndex",0); // counting up
	$("#cg_lagometer").attr("selectedIndex",2);
	$("#cg_draw3dicons").attr("checked",true);
	$("#cg_drawteamoverlay").attr("checked",true);
	$("#cg_selfonteamoverlay").attr("checked",false);
	$("#cg_drawfriend").attr("checked",true); // triangles above teammates heads
	$("#cg_drawattacker").attr("checked",false);
	$("#ui_bigfont").val("0.4");
	$("#ui_smallfont").val("0.25");
	$("#cl_demorecordmessage").attr("checked",true);
	// GRAPHICS
	$("#r_mode").attr("selectedIndex",0);
	$("#r_customwidth").val("");
	$("#r_customheight").val("");
	$("#r_fullscreen").attr("checked",true);
	$("#com_maxfps").val("125");
	$("#r_displayrefresh").val("60");
	$("#r_swapinterval").attr("checked",false);
	$("#r_dynamiclight").attr("checked",true);
	$("#r_vertexlight").attr("checked",false);
	$("#r_enablepostprocess").attr("checked",true);
	$("#r_picmip").attr("selectedIndex",0);
	$("#r_overbrightbits").attr("selectedIndex",1);
	$("#r_mapoverbrightbits").attr("selectedIndex",2);
	cfggammaslider.startAt(10);
	$("#r_fullbright").attr("checked",false);
	$("#r_fastsky").attr("checked",false);
	$("#r_lodbias").attr("selectedIndex",2);
	$("#cg_shadows").attr("checked",true);
	$("#r_subdivisions").val("4");
	$("#cg_simpleitems").attr("checked",false);
	$("#cg_marks").attr("checked",true);
	$("#cg_brasstime").val("2500");
	$("#cg_noprojectiletrail").attr("checked",false);
	// SOUND
	cfgvolumeslider.startAt(75);
	cfgmusicvolumeslider.startAt(0);
	$("#s_doppler").attr("checked",true);
	$("#s_ambient").attr("checked",true);
	$("#cg_chatbeep").attr("checked",true);
	$("#cg_teamchatbeep").attr("checked",true);
	// NET
	$("#rate").val(25000);
	$("#cl_maxpackets").val(125);
	$("#cg_smoothclients").attr("checked",false);
	$("#cl_packetdup").attr("selectedIndex",1);
	$("#cg_predictitems").attr("checked",false);
	$("#cg_predictlocalrailshots").attr("checked",false);
	// CONTROLS
	$("#in_mouse").attr("selectedIndex",2);
	cfgsensitivityslider.startAt(50);
	cfgmouseaccelslider.startAt(0);
	//cfgmousesenscapslider.startAt(0);
	cfgmyawslider.startAt(22);
	cfgmpitchslider.startAt(22);
	$("#cfg_m_pitch_invert").attr("checked",false);
	cfg_invertMouse($("#cfg_m_pitch_invert")[0]);
	$("#unbindall").attr("checked",false);
	$("#bind_toggle_edit").attr("checked",false);
	//$("#bind_menu").val("escape");
	doManualBind("esc","menu");
	//$("#bind_console").val("`");
	doManualBind("backquote","console");
	//$("#bind_scores").val("tab");
	doManualBind("tab","scores");
	//$("#bind_vote_yes").val("f1");
	doManualBind("f1","vote_yes");
	//$("#bind_vote_no").val("f2");
	doManualBind("f2","vote_no");
	//$("#bind_readyup").val("f3");
	doManualBind("f3","readyup");
	//$("#bind_fire").val("mouse1");
	doManualBind("mouse1","fire");
	//$("#bind_zoom").val("mouse2");
	doManualBind("mouse2","zoom");
	//$("#bind_previous_weapon").val("mwheeldown");
	doManualBind("mwheeldown","previous_weapon");
	//$("#bind_next_weapon").val("mwheelup");
	doManualBind("mwheelup","next_weapon");
	//$("#bind_use").val("mouse3");
	doManualBind("mouse3","use");
	$("#bind_dropweapon").val("");
	$("#bind_dropflag").val("");
	$("#bind_timein").val("");
	$("#bind_timeout").val("");
	//$("#bind_screenshot").val("f11");
	doManualBind("f11","screenshot");
	$("#bind_screenshotjpeg").attr("checked",true);
	$("#bind_screenshotboth").attr("checked",false);
	toggleBothScreenshots($("#bind_screenshotboth")[0]);
	$("#cfg_demotoggle").attr("checked",false);
	$("#bind_toggle_record").val("");
	//$("#bind_start_record").val("f4");
	doManualBind("f4","start_record");
	//$("#bind_stop_record").val("f5");
	doManualBind("f5","stop_record");
	$("#cg_autoaction").attr("selectedIndex",0);
	//$("#bind_forward").val("w");
	doManualBind("w","forward");
	//$("#bind_back").val("s");
	doManualBind("s","back");
	//$("#bind_moveleft").val("a");
	doManualBind("a","moveleft");
	//$("#bind_moveright").val("d");
	doManualBind("d","moveright");
	//$("#bind_moveup").val("space");
	doManualBind("space","moveup");
	//$("#bind_movedown").val("c");
	doManualBind("c","movedown");
	//$("#bind_speed").val("shift");
	doManualBind("lshift","speed");
	//$("#bind_say").val("t");
	doManualBind("t","say");
	//$("#bind_say_team").val("y");
	doManualBind("y","say_team");
	//$("#bind_chat").val("h");
	doManualBind("h","chat");
	$("#bind_taunt").val("");
	$("#bind_team_red").val("");
	$("#bind_team_blue").val("");
	$("#bind_spectate").val("");
	//$("#bind_sizedown").val("-");
	doManualBind("minus","sizedown");
	//$("#bind_sizeup").val("=");
	doManualBind("equals","sizeup");
	$("#bind_quit").val("");
	$("#bind_ragequit").val("");
	$("#winkey_disable").attr("checked",false);
	// WEAPONS
	$("#cg_drawgun").attr("selectedIndex",1);
	$("#cg_gunx").val("0");
	$("#cg_guny").val("0");
	$("#cg_gunz").val("0");
	$("#cg_newweaponbar").attr("selectedIndex",0);
	$("#cg_switchonempty").attr("checked",true);
	$("#cg_autoswitch").attr("checked",true);
	$("#cg_railtrailtime").val("400");
	$("#color1").attr("selectedIndex",0);
	$("#color2").attr("selectedIndex",0);
	$("#cg_oldrail").attr("selectedIndex",0);
	$("#r_railwidth").val("16");
	$("#r_railcorewidth").val("6");
	$("#r_railsegmentlength").val("32");
	$("#cg_oldplasma").attr("selectedIndex",0);
	$("#cg_oldrocket").attr("selectedIndex",0);
	cfgtruelgslider.startAt(75);
	$("#cfg_advancedweaponcontrols").attr("checked",false);
	var cfgnumbers = new Array("null","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen"); // weapon reference in words.
	for (var i = 1; i < 14; i++) {
		if (i != 10) { // no weapon 10 so skip it
			$("#bind_weapon" + i + "_bind1").val("");
			if (i < 10) {
				//$("#bind_weapon" + i + "_bind2").val(i);
				doManualBind(cfgnumbers[i],"weapon" + i + "_bind2");
			} else {
				$("#bind_weapon" + i + "_bind2").val("");
			}
			$("#cfg_weapon" + i + "_crosshair").attr("selectedIndex",0);
			$("#cfg_weapon" + i + "_crosshairsize").val("");
			$("#cfg_weapon" + i + "_sensitivity").val("");
			$("#cfg_weapon" + i + "_drawgun").attr("selectedIndex",0);
			$("#cfg_weapon" + i + "_zoomfov").val("");
		}		
	}
	// CHAT
	for (var i = 1; i <= 20; i++) {
		$("bind_chat" + i + "_bind").val("");
		$("cfg_chat" + i + "_msg").val("");
		$("cfg_chat" + i + "_teamonly").attr("checked",false);
	}
	// GENERATE
	$("#cfg_commentsinpreview").attr("checked",true);
	cfg_commentsInPreview = true;
	$("#cfgpreview").val("");
	
	$("#cfgfilename_autoexec").attr("checked",true);
	cfg_extract('autoexec');
}

/* SLIDERS */
var cfgvolumeslider, cfgmusicvolumeslider, cfgsensitivityslider, cfgmouseaccelslider, cfgmpitchslider, cfgmyawslider, cfgtruelgslider;
var mX, mY;

function Slider(obj,target) {
	this.obj = obj;
	this.target = target;
	this.minimum = 0;
	this.maximum = 100;
	this.scale = 1;
	this.start = 0;
	this.awake = false;
	this.cX = 0;

	this.startAt = function (startpos) {
		if (startpos < this.minimum || startpos > this.maximum) {
			alert("This value lies outside the slider's boundaries. It will not show a correct slider position for the current value!\nThe next time you slide, your manually set value will be ignored and the new value will represent the slider's position!");
		} else {
			this.start = startpos;
			this.obj.style.left = (startpos - this.minimum) + "px";
			if (this.target != "") {
				document.getElementById(this.target).value = this.start * this.scale;
			}
		}
		
	}
	this.setScale = function (scale) {
		this.scale = scale;
		if (this.target != "") {
			var targetvalue = "" + (this.start * this.scale);
			document.getElementById(this.target).value = targetvalue.substr(0,this.scale.toString().length);
		}
	}
	this.setMinimum = function (minimum) {
		this.minimum = minimum;
		document.getElementById(this.obj.id.split("indicator")[0] + "slider").style.width = (this.maximum - this.minimum + 10) + "px";
	}
	this.setMaximum = function (maximum) {
		this.maximum = maximum;
		document.getElementById(this.obj.id.split("indicator")[0] + "slider").style.width = (this.maximum - this.minimum + 10) + "px";
	}
	this.wakeup = function () {
		this.awake = true;
		this.cX = mX; // set where the slider is clicked to know reference to mouse cursor coordinate
		this.obj.blur();
	}
	this.sleep = function () {
		this.awake = false;
		this.start = parseInt(this.obj.offsetLeft);
		this.obj.blur();
	}
	this.slide = function () {
		var delta = mX - this.cX + this.start;
		if (delta < 0) {
			delta = 0;
		} else if (delta > this.maximum - this.minimum) {
			delta = this.maximum - this.minimum;
		}
		var targetvalue = "" + ((delta+this.minimum) * this.scale);
		document.getElementById(this.target).value = targetvalue.substr(0,this.scale.toString().length);
		this.obj.style.left = delta + "px";
 	}
	this.obj.onmousedown = bind(this,this.wakeup);
	this.obj.onmouseup = bind(this,this.sleep);
}

function initSliders() {
	document.onmousemove = execMouse;
	
	cfgvolumeindicator = document.getElementById("cfg_volumeindicator");
	cfgvolumeslider = new Slider(cfgvolumeindicator,"s_volume");
	cfgvolumeslider.startAt(75);
	cfgvolumeslider.setScale(0.01);
	document.getElementById("cfg_volumeslider").onmouseout = bind(cfgvolumeslider,cfgvolumeslider.sleep);
	
	cfgmusicvolumeindicator = document.getElementById("cfg_musicvolumeindicator");
	cfgmusicvolumeslider = new Slider(cfgmusicvolumeindicator,"s_musicvolume");
	cfgmusicvolumeslider.startAt(0);
	cfgmusicvolumeslider.setScale(0.01);
	document.getElementById("cfg_musicvolumeslider").onmouseout = bind(cfgmusicvolumeslider,cfgmusicvolumeslider.sleep);
	
	cfgsensitivityindicator = document.getElementById("cfg_sensitivityindicator");
	cfgsensitivityslider = new Slider(cfgsensitivityindicator,"sensitivity");
	cfgsensitivityslider.startAt(50);
	cfgsensitivityslider.setScale(0.1);
	document.getElementById("cfg_sensitivityslider").onmouseout = bind(cfgsensitivityslider,cfgsensitivityslider.sleep);
	
	cfgmouseaccelindicator = document.getElementById("cfg_mouseaccelindicator");
	cfgmouseaccelslider = new Slider(cfgmouseaccelindicator,"cl_mouseaccel");
	cfgmouseaccelslider.startAt(0);
	cfgmouseaccelslider.setScale(0.1);
	document.getElementById("cfg_mouseaccelslider").onmouseout = bind(cfgmouseaccelslider,cfgmouseaccelslider.sleep);
	
	cfgmousesenscapindicator = document.getElementById("cfg_mousesenscapindicator");
	cfgmousesenscapslider = new Slider(cfgmousesenscapindicator,"cl_mousesenscap");
	cfgmousesenscapslider.startAt(0);
	cfgmousesenscapslider.setScale(0.1);
	document.getElementById("cfg_mousesenscapslider").onmouseout = bind(cfgmousesenscapslider,cfgmousesenscapslider.sleep);
	
	cfgmyawindicator = document.getElementById("cfg_myawindicator");
	cfgmyawslider = new Slider(cfgmyawindicator,"m_yaw");
	cfgmyawslider.setMaximum(50);
	cfgmyawslider.startAt(22);
	cfgmyawslider.setScale(0.001);
	document.getElementById("cfg_myawslider").onmouseout = bind(cfgmyawslider,cfgmyawslider.sleep);

	cfgmpitchindicator = document.getElementById("cfg_mpitchindicator");
	cfgmpitchslider = new Slider(cfgmpitchindicator,"m_pitch");
	cfgmpitchslider.setMaximum(50);
	cfgmpitchslider.startAt(22);
	cfgmpitchslider.setScale(0.001);
	document.getElementById("cfg_mpitchslider").onmouseout = bind(cfgmpitchslider,cfgmpitchslider.sleep);
	
	cfgtruelgindicator = document.getElementById("cfg_truelgindicator");
	cfgtruelgslider = new Slider(cfgtruelgindicator,"cg_truelightning");
	cfgtruelgslider.setMaximum(100);
	cfgtruelgslider.startAt(75);
	cfgtruelgslider.setScale(0.01);
	document.getElementById("cfg_truelgslider").onmouseout = bind(cfgtruelgslider,cfgtruelgslider.sleep);
	
	cfggammaindicator = document.getElementById("cfg_gammaindicator");
	cfggammaslider = new Slider(cfggammaindicator,"r_gamma");
	cfggammaslider.setMinimum(5);
	cfggammaslider.setMaximum(40);
	cfggammaslider.startAt(10);
	cfggammaslider.setScale(0.1);
	document.getElementById("cfg_gammaslider").onmouseout = bind(cfggammaslider,cfggammaslider.sleep);
}

// what to do when the mouse moves...
function execMouse(e) {
	// get active mouseposition
	var e = e ? e : event;
	mX = (e.pageX || e.clientX);
	mY = (e.pageY || e.clientY);
	
	// see what objectives need mouse interactions
	if (cfgvolumeslider.awake == true) {
		cfgvolumeslider.slide();
	}
	if (cfgmusicvolumeslider.awake == true) {
		cfgmusicvolumeslider.slide();
	}
	if (cfgsensitivityslider.awake == true) {
		cfgsensitivityslider.slide();
	}
	if (cfgmouseaccelslider.awake == true) {
		cfgmouseaccelslider.slide();
	}
	if (cfgmousesenscapslider.awake == true) {
		cfgmousesenscapslider.slide();
	}
	if (cfgmyawslider.awake == true) {
		cfgmyawslider.slide();
	}
	if (cfgmpitchslider.awake == true) {
		cfgmpitchslider.slide();
	}
	if (cfgtruelgslider.awake == true) {
		cfgtruelgslider.slide();
	}
	if (cfggammaslider.awake == true) {
		cfggammaslider.slide();
	}
}

// INIT
$(document).ready(function() {
	cfg_initModels();
	initSliders();
	loadTitles();
	
	// init crosshair
	cfg_setCrosshair(5);
	cfg_setCrosshairColor(7);
	
	init_controls();
	cfg_initWeaponBinds();
	initCvars();
	boxscroller = new DivScroller("cfg-boxes");
	$("#cfg-tab-player").addClass("active");
	//window.setTimeout("boxscroller.tabVisi(0)",500);
});