var length_max = new Array(0, 12.516, 3.2203, 2.0701, 0.34925);
function _replace(p, q, n) {
    if ($(p + "_old").value != q) {
		var _p = $(p + "_old").value;
        $(p + "_old").value = q;
        
        var styled = false;
        if (q != "") {
			styled = true;
		} else {
			q = p;
		}

		// Update letters in solution text
		var symbols = document.getElementsByName("_" + p);
		for (i = 0; i < symbols.length; i++) {
			symbols.item(i).innerHTML = q;
			if (styled) {
                symbols.item(i).style.fontWeight = "bold";
                symbols.item(i).style.color = "#000000";
			} else {
                symbols.item(i).style.fontWeight = "";
                symbols.item(i).style.color = "";
			}
		}
	}
	
	// Solution text
	var map = new Array();
	var string = "";
 	symbols = $("c").select("[class='symbol']");
 	for (i = 0; i < symbols.length; i++) {
		string += symbols[i].innerHTML;
	}
	
	// Update graphs
	var v = substr_count(string, q);
	var f = (Math.round((v / total_characters) * 1000) / 10);
	var letters = document.getElementsByName(q + "_graph");
	for (i = 0; i < letters.length; i++) {
		if (letters.item(i).className == "horizontal") {
			letters.item(i).style.width = Math.round(f / length_max[1] * 50) + "px";
		} else {
			var h = Math.round(f / 12.516 * 18);
			letters.item(i).style.height = h + "px";
			letters.item(i).style.marginTop = (18 - h) + "px";
		}
	}
	
	if (_p != "") {
        var v = substr_count(string, _p);
		var f = (Math.round((v / total_characters) * 1000) / 10);
		var letters = document.getElementsByName(_p + "_graph");
		for (i = 0; i < letters.length; i++) {
			if (letters.item(i).className == "horizontal") {
				letters.item(i).style.width = Math.round(f / length_max[1] * 50) + "px";
			} else {
				var h = Math.round(f / 12.516 * 18);
				letters.item(i).style.height = h + "px";
				letters.item(i).style.marginTop = (18 - h) + "px";
			}
		}
	}
	
	// Update frequencies
	for (i = 0; i < strings.length; i++) {
    	var s = strings[i];
		if (substr_count(s, q) > 0 || (_p != "" && substr_count(s, _p) > 0)) {
			var v = substr_count(string, s);
			var f = (Math.round((v / (total_characters - s.length + 1)) * 1000) / 10);
			$(s + "_value").value = v;
			$(s + "_text").innerHTML = v + " / " + f + "%";
			if (s.length > 1) {
                $(s + "_graph").style.width = Math.round(f / length_max[s.length] * 50) + "px";
			}
		}
	}
}

function toggleSpace(obj) {
    if (obj.style.marginRight == "7px") {
    	obj.style.marginRight = "0px";
	} else {
		obj.style.marginRight = "7px";
	}
}

function substr_count(haystack, needle) {
	var c = 0;
	var limit = haystack.length - needle.length + 1;
	for (var i = 0; i < limit; i++) {
		if (needle == haystack.substr(i, needle.length)) {
			c++;
		}
	}
	return c;
}
