function AddItem(objSource, objTarget) {
	var objSource = document.getElementById(objSource);
	var list = document.getElementById(objTarget).options;
	
	if(objSource.value.length > 0){
		for (i=0; i<list.length; i++) {
			if (list[i].text.toLowerCase() == objSource.value.toLowerCase()) {
				alert("The item '" + objSource.value + "' already exists in the list.");
				objSource.value = "";
				return false;
			}
		}
		
		var option = new Option(objSource.value, objSource.value);
		list[list.length] = option;
		
		objSource.value = "";
		
		GenerateSnippet();
	}
}

function RemoveItem(strTarget) {
	var objTarget = document.getElementById(strTarget);
	var list = objTarget.options;
	
	for (i=0; i<list.length; i++) {
		if (list[i].text == objTarget.value) {
			list[i] = null;
			break;
		}
	}
	
	GenerateSnippet();
}

function ClearItems(strTarget) {
	while(document.getElementById(strTarget).options.length > 0) {
		document.getElementById(strTarget).options[0] = null;
	}
	
	GenerateSnippet();
}

function SetNumber(strTarget, intNumber, bolFixed){
	var objElement = document.getElementById(strTarget);
	var aryLimits = objElement.alt.split(",");
	aryLimits[0] = Number(aryLimits[0]);
	aryLimits[1] = Number(aryLimits[1]);
	
	if(bolFixed){
		objElement.value = intNumber;
	}else{
		objElement.value = Number(objElement.value) + intNumber;
	}
	
	if(objElement.value < aryLimits[0]){
		objElement.value = aryLimits[0];
	}else if(objElement.value > aryLimits[1]){
		objElement.value = aryLimits[1];
	}
	
	GenerateSnippet();
}

function GenerateSnippet(){
	strSnippet = strDumpSnippet;
		
	var strTemp;
	var objElement;
	
	strSnippet = strSnippet.replace(/\t/g, "");
	
	var aryVars = new Array(
		"txtiTitle",
		"cmbType",
		"cmbFormat",
		"txtiMinTagLength",
		"txtiMinTagAmount",
		"cmbWindow",
		"txtiBackground",
		"cmbMaxTagAmount",
		"cmbMaxLinkAmount",
		"cmbLanguage",
		"txtiFontColor_Index",
		"txtiFontColor_Label",
		"cmbDebug",
		"txtiID",
		"cmbAnimation",
		"txtiFillRanking"
	);
	
	for(c=0;c<aryVars.length;c++){
		objElement = document.getElementById(aryVars[c]);
		var strValue = "";
		
		switch(aryVars[c]){
			case "cmbLanguage":
				if(objElement.value != ""){
					strValue = 'u8tagger_Language = "' + objElement.value + '";\n';
				}
				break;
			default:
				strValue = objElement.value;
		}
		strSnippet = strSnippet.replace(new RegExp("%" + aryVars[c] + "%", "g"), strValue);
	}
	
	aryList = document.getElementById("lstSites").options;
	strTemp = "";
	if(aryList.length > 0){
		strTemp += 'u8tagger_Site = "';
	
		for (c=0; c<aryList.length; c++) {
			strTemp += aryList[c].text;
			
			if(c < aryList.length - 1){
				strTemp += "&site=";
			}
		}
		
		strTemp += '";\n';
	}
	strSnippet = strSnippet.replace(new RegExp("%lstSites%", "g"), strTemp);
	
	var aryLists = new Array(
		new Array("lstExclusions", "ExcludedTags"),
		new Array("lstFills", "FillTags")
	);
	
	for(c1=0;c1<aryLists.length;c1++){
		var strList = aryLists[c1][0];
		
		aryList = document.getElementById(strList).options;
		
		strTemp = 'u8tagger_' + aryLists[c1][1] + ' = new Array(\n';												 
		for (c2=0; c2<aryList.length; c2++) {
			strTemp += '"' + aryList[c2].text + '"';
			
			if(c2 < aryList.length - 1){
				strTemp += ",";
			}
			
			strTemp += "\n";
		}		
		strTemp += ');\n';
		
		if(aryList.length == 0){
			eval(strTemp);
			strTemp = "";
		}
		
		strSnippet = strSnippet.replace(new RegExp("%" + strList + "%", "g"), strTemp);
	}
	
	var strPrefix = document.getElementById("txtaPrefix").value;
	var strSuffix = document.getElementById("txtaSuffix").value;
	
	strPrefix = strPrefix.replace(/\t/g, "");
	strSuffix = strSuffix.replace(/\t/g, "");
	
	strTemp = "";
	if(document.getElementById("cmbDebug").value == "true"){
		strTemp = "&debug=true";
	}
	strPrefix = strPrefix.replace(new RegExp("%cmbDebug%", "g"), strTemp);
	strPrefix = strPrefix.replace(new RegExp("%txtiU8key%", "g"), document.getElementById("txtiU8key").value);
	
	document.getElementById("txtaSnippet").value = strPrefix + strSnippet + strSuffix;
	
	ValidateKey();
	GenerateEmbed();
	EvalSnippet();
}

function GenerateEmbed(){
	var strEmbed = strDumpEmbed;
	
	strEmbed = strEmbed.replace(/\t/g, "");
	strEmbed = strEmbed.replace(new RegExp("%txtiID%", "g"), strWidgetId);
	strEmbed = strEmbed.replace(new RegExp("%cmbEmbed%", "g"), document.getElementById("cmbEmbed").value);
	document.getElementById("txtaEmbed").value = strEmbed;	
}

var strWidgetId;
function Main(){
	strWidgetId = document.getElementById("txtiID").value;
	
	SetAdvanced();
	DumpSnippet();
}

function RenameID(){
	var objElement = document.getElementById(strWidgetId);
	strWidgetId = document.getElementById("txtiID").value;
	objElement.id = strWidgetId;
	
	GenerateSnippet();
}

var strDumpSnippet = "";
var strDumpEmbed = "";
function DumpSnippet(){
	strDumpSnippet = document.getElementById("txtaSnippet").value;
	strDumpEmbed = document.getElementById("txtaEmbed").value;
	
	GenerateSnippet();
}

function SelectText(strElementId){
	var objElement = document.getElementById(strElementId);
	
	if(!objElement.disabled){
		objElement.focus();
		objElement.select();
	}
}

function EvalSnippet(){				
	eval(strSnippet);
	InitWidget(strWidgetId, true);
}

function ReInitWidget(){
	if(confirm("The widget is rebuild automatically after changing values.\nDo you want to re-init the widget anyway?")){
		EvalSnippet();
	}
}

function SetAdvanced(){
	var objElement = document.getElementById("chbAdvanced");
	var bolAdvanced = objElement.checked;
	
	if(bolAdvanced){
		if(!confirm("Advanced settings should only be customized by experienced users.\nDo you want continue?")){
			objElement.checked = false;
			return;
		}
	}
	
	var aryControls = new Array(
		"txtiID",
		"cmbDebug",
		"btnReInit"
	);
	
	for(c=0;c<aryControls.length;c++){
		objElement = document.getElementById(aryControls[c]);
		
		objElement.disabled = !bolAdvanced;
	}
}

var strMore = "&gt;&gt; more";
var strLess = "&lt;&lt; less";
function MoreOrLess(objElement, strElementId){
	var strHeight = "";
	var strClass = "";
	var strVisibility = "";
	
	if(objElement.innerHTML.indexOf(strMore) != -1){
		objElement.innerHTML = strLess;
		strVisibility = "visible";
	}else{
		objElement.innerHTML = strMore;
		strHeight = "130px";
		strClass = "more";
		strVisibility = "hidden";
	}
	
	document.getElementById("fs" + strElementId).style.height = strHeight;
	
	var aryElements = document.getElementsByName("c" + strElementId);
	for(c=0;c<aryElements.length;c++){
		//aryElements[c].className = strClass;
		alert(aryElements[c].style.visibility);
		aryElements[c].style.visibility = strVisibility;
	}
}