function chVal(docont, elem, name, type, stness, priv, alemp, min, max, params) {
  if (!docont) return false;
  var errorMessage = false;
  var showError = false;
  var showWarning = false;
  
  if (!(elem.value == undefined)) val = elem.value;
  else errorMsg = "Не можу перевірити " + name;

  if ((val.length == 0) && (alemp)) return true;
  
  if (type == "email") {
    if (!(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(val))) errorMessage = "Некоректний емейл!"; 
  } else if (type == "text") {
    if ((min) && (smartTrim(val).length < min)) errorMessage = "Введіть текст довжиною не менше " + min + " символів!";
    else if ((max) && (val.length > max)) errorMessage = "Введіть текст довжиною не більше " + max + " символів!";
    else if (params) {
      var rowcnt = countRows(val);
      if (params['minrows'] != undefined) {
        var minrows = parseInt(params['minrows']);
        if (rowcnt < minrows) errorMessage = "Введіть текст не менший ніж " + minrows + " рядків!";
      }
    }
    
  } else if (type == "ctbr") {
    if (!checkContributorName(val, false)) errorMessage = "Введіть коректне ім'я користувача!";
  } else if (type == "spcd") {
    var spsum = -1;
    if (params) {
      if (params['spsum'] != undefined) spsum = params['spsum'];
    }
    sum = 0;
    for (i=0; i<val.length; i++) sum += parseInt(val.substr(i, 1));
    if (sum != spsum)
      errorMessage = "Введіть будь-ласка коректний цифровий код, зображений на малюнку!\n(Відображення малюнків у Вашому браузері мусить бути увімкнене)";
  } else {
    alert("Невідомий тип" + type);
	  return false;
  }

  if (errorMessage) {
    if (stness == 1) showError = true;
    if (stness == 2) {
      if (priv) showWarning = true;
      else showError = true;
    }
    if (stness == 3) showError = true;
  }

  if (showError) {
    alert("Помилка у полі \"" + name + "\"!\n\n" + errorMessage);
    if (elem.focus) elem.focus();
    return false;    
  }

  if (showWarning) {
    if (!confirm("Помилка у полі \"" + name + "\"!\n\n" + errorMessage + "\n\nПродовжити, не зважаючи на помилку?")) {
      if (elem.focus) elem.focus();
      return false;
    }
  }

  return true;
}

function countRows(val) {
  if (val.length == 0) return 0;
  var rc = 1;
  var ind = -1;
  for (var i=0; i<1000; i++) {
    ind = val.indexOf("\n", ind+1);
    if (ind == -1) break;
    rc++;
  }
  return rc;
}

function smartTrim(val) {
  return val.replace(/^[\r\n ]+/, "").replace(/[\r\n ]+$/, "");
}


function checkYear(d) {
  if ((d.length == 0) || /^[1-2][0-9]{3}$/.test(d)) return true;
  return false;
}

function trim_spaces(str) {
  var d = str;
  while (d[0] == ' ') {
	  d=d.substr(1);
	  if (d.length == 0) break;
  }
  if (d.length == 0) return d;
  while (d[d.length-1] == ' ') {
	  d=d.substr(0, d.length-1);
	  if (d.length == 0) break;
  }
  return d;
}

function replaceCyr(src) {
  // Hack for Opera...
	var cyrillicSmall = "\u0430\u0431\u0432\u0433\u0434\u0435\u0454\u0436\u0437\u0438\u0456\u0457\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044e\u044f\u044c\u044d\u044b\u044a"; // "абвгдеєжзиіїйклмнопрстуфхцчшщюяьэыъ";
	var cyrillicLarge = "\u0410\u0411\u0412\u0413\u0414\u0415\u0404\u0416\u0417\u0418\u0406\u0407\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042e\u042f\u042c\u042d\u042b\u042a"; // "АБВГДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЮЯЬЭЫЪ";
	var res = "";
	var character;
	for (var i=0; i<src.length; i++) {
	  character = src.substring(i, i+1);
	  if (cyrillicSmall.indexOf(character) != -1) res = res + "a";
	  else if (cyrillicLarge.indexOf(character) != -1) res = res + "A";
	  else res = res + character;
	}
	return res;
}

function checkFirstLastName(name, empty_allowed) {
	var temp = replaceCyr(name);
	if ((name.length==0)&& empty_allowed) return true;
	if ((name.length<2) && (!empty_allowed)) return false;
	if (!(/^[A-Z]?[a-z]{1,14}([\s\-]?[A-Z]?[a-z]{1,14})?([\s\-]?[A-Z]?[a-z]{1,14})?$/.test(temp))) return false;
	if (temp.length>20) return false;
	if (/\d/.test(temp)) return false;
	return true;
}

function checkLogName(name, empty_allowed) {
	var temp = replaceCyr(name);
	if ((name.length<2) && (!empty_allowed)) return false;
	if (!(/^[a-zA-Z][a-zA-Z\-\d_\' \.]{1,19}$/.test(temp))) return false;
  if (/(\.| |\-|\'|_){2,}/.test(temp)) return false;
	// if (!(/^[A-Za-z]{1}[a-z\d_]{1,14}([\-]?[A-Z]?[a-z\d_]{1,14})?([\-]?[A-Z]?[a-z\d_]{1,14})?$/.test(temp))) return false;
	if (temp.length>20) return false;
	return true;
}

function checkContributorName(name, empty_allowed) {
	if (checkFirstLastName(name, empty_allowed)) return true;
	if (checkLogName(name, empty_allowed)) return true;
	return false;
}

function new_window(address, name, w, h) {
	ww = ((w == null) || (w == undefined))?600:w;
	hh = ((h == null) || (h == undefined))?600:h;
	window.open(address, name, 'alwaysRaised=yes, menubar=no, toolbar=no, resizable=no, scrollbars=yes, width=' + ww + ', height=' + hh + ', screenX=100, screenY=100, dependent=yes');
}

function confirmDelObject(url, type, name) {
  if (confirm('Ви справді хочете стерти ' + type + ' \'' + name + "\'?\r\n УВАГА! Уся пов'язана інформація та файли будуть видалені !"))
    window.open(url, 'delete', 'menubar=no, toolbar=no, width=200, height=100, dependent=yes');
}

function checkSPCode1(d, correct) {
  if (d.length == 0) return false;
  sum = 0;
  for (i=0; i<d.length; i++) sum += parseInt(d.substr(i, 1));
  if (sum != correct) return false;
  return true;
}

/* Modified to support Opera */
function bookmarksite(title,url){
	if (window.sidebar) // firefox
		window.sidebar.addPanel(title, url, "");
	else if(window.opera && window.print){ // opera
		var elem = document.createElement('a');
		elem.setAttribute('href',url);
		elem.setAttribute('title',title);
		elem.setAttribute('rel','sidebar');
		elem.click();
	} 
	else if(document.all)// ie
		window.external.AddFavorite(url, title);
}

function createRequest() {
  var request = false;
  try {
      request = new XMLHttpRequest();
  } catch (trymicrosoft) {
    try {
      request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (othermicrosoft) {
      try {
        request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (failed) {
        request = false;
      }
    }
  }
  return request;
}

function hideshow(id, b) {
  var el = document.getElementById(id);
  if (el) {
    var v = el.style.display;
    if (v != "none") {
      el.style.display = "none";
      b.innerHTML = "[показати]";
    } else {
      el.style.display = "block";
      b.innerHTML = "[сховати]";
    }
  }
}

var activeInputId = null, activeSelection = null;

function tbRaiseButton() {
	this.className = "tbButtonRised";
}

function tbFadeButton() {
	this.className = "tbButtonActive";
}

function tbPressButton() {
	this.className = "tbButtonPressed";
}

function tbClickButton() {
	obj = document.getElementById(this.iname);
	if (activeInputId != this.iname) return;
	tbDoAction(obj, this.actionname)
	this.className = "tbButtonActive";
}

var tbIsIE = false;
var lreq = false;

function tbDoAction(obj, actionname) {
  if (document.selection) tbIsIE = true;
  if (actionname == "p") tbMakeTag(obj, "<p>", "");
  if (actionname == "ul") tbMakeTag(obj, "<ul>", "</ul>");
  if (actionname == "ol") tbMakeTag(obj, "<ol>", "</ol>");
  if (actionname == "b") tbMakeTag(obj, "<b>", "</b>");
  if (actionname == "sb") tbMakeTag(obj, "[b]", "[/b]", false);
  if (actionname == "i") tbMakeTag(obj, "<i>", "</i>");
  if (actionname == "str") tbMakeTag(obj, "<strong>", "</strong>");
	if (actionname == "si") tbMakeTag(obj, "[i]", "[/i]", false);
	if (actionname == "u") tbMakeTag(obj, "<u>", "</u>");
	if (actionname == "su") tbMakeTag(obj, "[u]", "[/u]");
	if (actionname == "pre") tbMakeTag(obj, "<pre>", "</pre>");
	if (actionname == "spre") tbMakeTag(obj, "[pre]", "[/pre]");
	if (actionname == "main") tbMakeTag(obj, "[mainpage]", "[/mainpage]");
	if (actionname == "br") tbMakeTag(obj, "", "<br>");
	if (actionname == "hr") tbMakeTag(obj, "", "<hr>");
	if (actionname == "ei-smile") tbMakeTag(obj, "", " :-) ");
	if (actionname == "ei-wink") tbMakeTag(obj, "", " ;-) ");
	if (actionname == "ei-laugh") tbMakeTag(obj, "", " :-D ");
	if (actionname == "ei-rofl") tbMakeTag(obj, "", " :-))) ");
	if (actionname == "ei-tongue") tbMakeTag(obj, "", " :-P ");
	if (actionname == "ei-wow") tbMakeTag(obj, "", " :wow: ");
	if (actionname == "ei-cool") tbMakeTag(obj, "", " :cool: ");
	if (actionname == "ei-sad") tbMakeTag(obj, "", " :-( ");
	if (actionname == "ei-cry") tbMakeTag(obj, "", " :'-( ");
	if (actionname == "ei-sceptic") tbMakeTag(obj, "", " :-/ ");
	if (actionname == "ei-silent") tbMakeTag(obj, "", " :-| ");
	if (actionname == "ei-shout") tbMakeTag(obj, "", " :shout: ");
	if (actionname == "ei-blush") tbMakeTag(obj, "", " :blush: ");

	if (actionname == "t") {
		var rowCount = prompt("Кількість рядків (1-5)", "1");
		if (rowCount == null) return;
		if (!((rowCount >=1) || (rowCount<=5))) rowCount = 1;
		var colCount = prompt("Кількість стовпців (1-5)", "1");
		if (colCount == null) return;
		if (!((colCount >=1) || (colCount<=5))) colCount = 1;
		var tableContents = "<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\r\n";
		for (i=0; i<rowCount; i++) {
			tableContents += "<tr>\r\n";
			for (j=0; j<colCount; j++) {
				tableContents += "<td> </td>\r\n";
			}
			tableContents += "</tr>\r\n";
		}
		tableContents += "</table>\r\n";
		tbMakeTag(obj, "", tableContents);
	}
	if (actionname == "a") {
		var selection = tbGetSel(obj);
		if ((selection.substring(0,3) == "www") || (selection.substring(0,4) == "http")) {
			tag1 = "<a href=\"";
			tag2 = "\" target=\"_blank\"></a>";
		} else {
			tag1 = "<a href=\"\" target=\"_blank\">";
			tag2 = "</a>";
		}
		tbMakeTag(obj, tag1, tag2);
	}
	if (actionname.length == 3) {
		var selection = tbGetSel(obj);
		var digits = "0123456789";
		var type = -1;
		var tag1 = "", tag2 = "";
		if (actionname == "sng") type="song";
		if (actionname == "psn") type="person";
		if (actionname == "usr") type="user";
		if (actionname == "art") type="article";
		if (actionname == "cal") type="calendar";
		if (actionname == "for") type="ftopic";
		if (type != -1) {
			if (digits.indexOf(selection.substring(0,1)) > -1) {
				tag1 = "[obj id=";
				tag2 = " type=" + type + "]-[/obj]";
			} else {
				tag1 = "[obj id= type=" + type + "]";
				tag2 = "[/obj]";
			}
			tbMakeTag(obj, tag1, tag2);
		}
	}
	if (actionname == "snglst") {
		var selection = tbGetSel(obj);
		var tag1 = "", tag2 = "";
		if ((selection.length > 0) && (/^[0-9]+(\,[0-9]+)+$/.test(selection))) {
			tag1 = "[songlist]";
			tag2 = "[/songlist]";
		} else if ((selection.length > 0) && (/^[0-9]+$/.test(selection))) {
			tag1 = "[songlist grp=\"";
			tag2 = "\"]-[/songlist]";
		} else {
			tag1 = "[songlist]";
			tag2 = "-[/songlist]";
		}
		tbMakeTag(obj, tag1, tag2);
	}
	if (actionname == "im") {
		var selection = tbGetSel(obj);
		if (selection.length > 0) {
			tag1 = "<img src=\"";
			tag2 = "\" border=\"0\" hspace=\"10\" align=\"left\">";
		} else {
			tag1 = "<img src=\"\" border=\"0\" hspace=\"10\" align=\"left\">";
			tag2 = "";
		}
		tbMakeTag(obj, tag1, tag2);
	}
	if (actionname == "ya") {
		if (tbAuthUserLink) tbMakeTag(obj, tbAuthUserLink, "");
	}
  if (actionname == "clrtxt") {
    clrtxt(obj);
  }
  if (actionname == "psna") {
    var input = tbGetSel(obj);
    lreq = createRequest();
    var url = "/async.php?code=120&input=" + input;
    lreq.open("GET", url, true);
    lreq.onreadystatechange = personIdArrived;
    lreq.send(null);
  }
}

function personIdArrived() {
  try {
    if (lreq.readyState == 4) {
      if (lreq.status == 200) {
        var t = lreq.responseText;
        if (t.substring(0, 2) == -1) alert("Нічого не знайдено");
        else if (t.substring(0, 4) == "many") alert("Багатозначність");
        else {
          var id = t.substring(0, t.indexOf("==="));
          if (confirm("Знайдено: " + t.substring(t.indexOf("===") + 3))) {
            // var input = tbGetSel(obj);
            tag1 = "[obj id=" + id + " type=person]";
				    tag2 = "[/obj]";
            tbMakeTag(obj, tag1, tag2);
          } 
        }
      }
    }
  } catch (e) {
    alert(e);
  }
}

function tbMakeNewSelection(val, tag1, tag2) {
  if ((tag1 == "<ul>") || (tag1 == "<ol>")) {
    if (val.length == 0) return tag1 + "\r\n<li>\r\n<\li>\r\n" + tag2;
    else {
      var parts = val.split(/[\r\n]+/);
      var res = tag1 + "\r\n";
      for(i=0; i<parts.length; i++) {
        res = res + "<li>" + parts[i] + "\r\n";
      }
      res = res + tag2;
      return res;
    }
  }
  return tag1 + val + tag2;
}

function tbMakeTag(obj, tag1, tag2, aEmpty) {
	if (aEmpty == undefined) allowEmpty = true;
	else allowEmpty = aEmpty;
	if (tbIsIE) {
		// obj.focus();
		if (activeSelection) {
		  sel = activeSelection;
		} else return;
		try {
			if (checkMetaTags) {
				if (!allowEmpty) {
					if (sel.text.length == 0) {
						alert("Має бути виділений текст...");
						return;
					}
				}
			}
		} catch (e) {}
		// var pos = obj.scrollTop;
		sel.text = tbMakeNewSelection(sel.text, tag1, tag2);
		// obj.scrollTop = pos;
		return;
	} else {
		var selectionEmpty = false;
		var val = obj.value;
		var posShift = tag1.length + tag2.length;

		var ss = obj.selectionStart;
		var se = obj.selectionEnd;

		if (ss == se) selectionEmpty = true;
		try {
			if (checkMetaTags) {
				if (!allowEmpty) {
					if (selectionEmpty) {
						alert("Має бути виділений текст...");
						return;
					}
				}
			}
		} catch (e) {}
		
		val = val.substring(0, ss) + tbMakeNewSelection(val.substring(ss, se), tag1, tag2) + val.substring(se);
		var pos = obj.scrollTop;
		obj.value = val;
		obj.scrollTop = pos;

		obj.setSelectionRange(se + posShift, se + posShift);

		obj.focus();
	}
}

function tbGetSel(obj) {
  if (tbIsIE) {
    if (activeSelection) return activeSelection.text;
    return "";
  }
  return obj.value.substring(obj.selectionStart, obj.selectionEnd);
}

function clrtxt(obj) {
  var v = obj.value;
  v = v.replace(/(\r?\n) +/g, "$1");
  v = v.replace(/^[\r\n ]+/g, "");
  v = v.replace(/ +(\r?\n)/g, "$1");
  v = v.replace(/[\r\n ]+$/g, "");
  v = v.replace(/(\r?\n){3,5}/g, "$1$1");
  v = v.replace(/ +(\,|\?|\.|\!|\:)/g, "$1");
  v = v.replace(/(\,){2,5}/g, "$1");
  v = v.replace(/(\?){2,5}/g, "$1");
  v = v.replace(/(\!){2,5}/g, "$1");
  v = v.replace(/(\:){2,5}/g, "$1");
  v = v.replace(/(\-){2,5}/g, "$1");
  v = v.replace(/( ){2,5}/g, "$1");
  v = v.replace(/i/g, "і");
  // v = v.replace(/(\,|\?|\!|\:|\-| ){2,3}/g, "$1");
  obj.value = v;
}

function saveSelection() {
  try {
    activeSelection = document.selection.createRange();
  } catch (e) {}
}

var tbHints = {};
tbHints["p"] = "Абзац. Встановіть курсор на початку абзаца та клацніть.";
tbHints["b"] = tbHints["sb"] = "Потовщений шрифт. Виділіть текст та клацніть.";
tbHints["str"] = "<strong>. Виділіть текст та клацніть.";
tbHints["i"] = tbHints["si"] = "Похилий шрифт. Виділіть текст та клацніть.";
tbHints["pre"] = tbHints["spre"] = "Текст з форматуванням (для внесення акордів).\r\nВиділіть та клацніть.";
tbHints["ul"] = "Ненумерований список.\r\nВиділіть кілька (непорожніх!) рядків і клацніть.";
tbHints["ol"] = "Нумерований список.\r\nВиділіть кілька (непорожніх!) рядків і клацніть.";
tbHints["u"] = tbHints["su"] = "Підкреслений шрифт. Виділіть текст та клацніть.";
tbHints["br"] = "Нова стрічка";
tbHints["t"] = "Таблиця";
tbHints["im"] = "Малюнок";
tbHints["hr"] = "Розділювач (горизонтальна лінія)";
tbHints["a"] = "Гіпер посилання";
tbHints["ya"] = "Я";
tbHints["sng"] = "Посилання на пісню";
tbHints["snglst"] = "Список пісень";
tbHints["psn"] = "Посилання на персону (вписати номер вручну)\r\nВиділіть ім'я чи назву та клацніть";
tbHints["psna"] = "Посилання на персону з пошуком (автоматичний лінк)\r\nВиділіть ім'я чи назву та клацніть";
tbHints["art"] = "Посилання на статтю";
tbHints["cal"] = "Посилання на календар";
tbHints["usr"] = "Посилання на користувача";
tbHints["main"] = "Посилання на головну сторінку";
tbHints["for"] = "Посилання тему форуму";
tbHints["clrtxt"] = "Прочистка тексту. НЕ використовувати, коли є акорди!!!";

function tbDrawToolBar(tbname, tbbuttons, iname, width) {

	var buttonslist = tbbuttons.split(";");
	document.write("<div style=\"padding-left:3px; text-align:left; width:" + width + "px\" name=\"" + tbname + "\" id=\"" + tbname + "\">");

	for (i=0; i<buttonslist.length; i++) {
		var button_name = buttonslist[i];
		//if (!tbAuthUserLink && (button_name == "ya")) continue;
		var element_name = tbname + "_" + button_name;

		if (button_name.substring(0, 3) == 'ei-') {
			document.write("<span class='tbButtonActive' name='" + element_name + "' id='" + element_name + "'><span class='icon-tb " + button_name + "'></span></span>");
		} else if (button_name == "sep") {
			document.write("&nbsp;");
		} else {
			document.write("<span class='tbButtonActive' name='" + element_name + "' id='" + element_name + "'><span class='icon-tb tb-" + button_name + "'></span></span>");
		}

		elem = document.getElementById(element_name);


		if (button_name == "hnd") continue;
		if (!elem) continue;

		

		elem.onmouseover = tbRaiseButton;
		elem.onmouseout = tbFadeButton;
		elem.onmousedown = tbPressButton;
		elem.onmouseup = tbClickButton;
		elem.iname = iname;
		elem.actionname = button_name;

		if (tbHints[button_name]) {
			elem.title=tbHints[button_name];
		}

		if (button_name.substring(0, 3) == 'ei-') {
			elem.title="Клацніть";
		}
	}

	document.write("</div>");
  tb_elem = document.getElementById(tbname);
  // tb_elem.style.margin = "100px";
}

function tbDrawGuestToolBar(tbname, iname, width) {
	tbDrawToolBar(tbname, "sb;si;su;sep;spre;sep;ei-smile;ei-laugh;ei-rofl;ei-wink;ei-tongue;sep;ei-wow;ei-cool;sep;ei-sad;ei-sceptic;ei-silent;ei-cry;sep;ei-blush;ei-shout", iname, width);
}

function voteComm(id, code) {
  if (auth) $('#c' + id + '_votes').load(root_dir + 'async.php?code=' + code + '&id=' + id);
  else alert('Голосування доступне лише зареєстрованим користувачам.\r\nСпочатку увійдіть на сайт під свом емейлом та паролем.');
}