var errors = new Array();

function $(elementid)
{
	return document.getElementById(elementid);
}

function AppendValidation(fieldid, errorhndl, minlength, maxlength, regularex)
{
	var field = document.getElementById(fieldid);
	
	field.onkeyup = function()
	{
		if (field.value.length == 0)
		{
			errorhndl(fieldid, "EMPTY");
			return;
		}
		
		if (minlength != null && field.value.length < minlength)
		{
			errorhndl(fieldid, "OVERMIN");
			return;
		}
		
		if (maxlength != null && field.value.length > maxlength)
		{
			errorhndl(fieldid, "OVERMAX");
			return;
		}
		
		if (regularex != null && field.value.match(regularex) == null)
		{
			errorhndl(fieldid, "NOTMATCH");
			return;
		}
		
		errorhndl(fieldid, "OK");
	}

	if (field.value != null)
	{
		field.onkeyup();
	}
}

function AppendValidationStandart(fieldid, statusid , minlength, maxlength, regularex, tip)
{
	var errorhndl = function ErrorHandler(field, errorstate)
	{

	errors[fieldid] = errorstate;
	
	var status = document.getElementById(statusid);
	switch (errorstate)
	{
		case "OK":
			status.innerHTML = "";
			document.getElementById(field).className = "input-ok";
			break;
		
		case "EMPTY":
			status.innerHTML = "";
			document.getElementById(field).className = "input-error";
			break;
		
		case "OVERMIN":
			status.innerHTML = "Длина меньше допустимого";
			document.getElementById(field).className = "input-error";
			break;
		
		case "OVERMAX":
			status.innerHTML = "Длина больше допустимого";
			document.getElementById(field).className = "input-error";
			break;
		
		case "NOTMATCH":
			status.innerHTML = "Не соответствует формату (" + tip + ")";
			document.getElementById(field).className = "input-error";
			break;
	}
	
	}
	
	AppendValidation(fieldid, errorhndl, minlength, maxlength, regularex);
}

function SwitchVisibility(elementid)
{
	var element = document.getElementById(elementid);
	
	if (element.style.display != "block")
	{
		element.style.display = "block";
	}
	else
	{
		element.style.display = "none";
	}
}

function CheckSubmit()
{
	var ok = true;

	for (error in errors)
	{
		if (errors[error] != "OK")
		ok = false;
	}

	if (!ok)
	{
		if (errors['authorfield'] == "OK" && errors['emailfield'] == "OK" && errors['websitefield'] == "EMPTY")
		ok = true;
	}

	if (ok && $("messagefield").value.length == 0)
	{
		ok = false;
	}

	if (!ok)
	$("overallstatus").innerHTML = "Проверьте правильность ввода всех данных";

	if (ok)
	{
		var v_elm = document.createElement("input");
		v_elm.type = "hidden";
		v_elm.name = "catcha_me";	
		v_elm.value = location.href;
	
		$("submitform").appendChild(v_elm);
	}

	return ok;
}

function ShowCommentForm(boxid, commnum)
{
	var form = $('submitform');
	var formcomm = $('submitformsubmitid');
	var box = $(boxid);
	
	box.appendChild(form);
	form.style.display = "block";
	
	//form.style.borderLeft = "";
	
	formcomm.value = commnum;
}

function SwitchFly(sender, www, email)
{
	if (!sender || document.all)
	{
		sender = window.event;
	}
	
	var fly = document.getElementById("flytext");
	
	if (fly.style.display != "block")
	{
		fly.style.display = "block";
		fly.style.top = sender.clientX + "px";
		fly.style.left = sender.clientY + "px";
	}
	else
	{
		fly.style.display = "none";
	}
}

function AddImageChange(elementid, oldimg, newimg)
{
	var element = $(elementid);
	var link = $(elementid + "_LINK");
	
	//Parents
	var par  = link.parentNode;
	var par2 = element.parentNode.parentNode;
	
	par.onmouseover = function()
	{
		element.src = newimg;
		link.style.color = "#000000";
	}
	
	par2.onmouseover = par.onmouseover;
	
	par.onmouseout = function()
	{
		element.src = oldimg;
		link.style.color = "#888888";
	}
	
	par2.onmouseout = par.onmouseout;
}

function GenerateMailLink(linkid, zone, name, server)
{
	var mfunc = function()
	{
		var link = $(linkid);
		link.href = "mailto:" + name + "@" + server + "." + zone;
		link.innerHTML = "написать письмо";
	}
	
	setTimeout(mfunc, 1000);
}

function BuildDiagram(elementid, basicwidth,  values, prepend, callback)
{
	//Получаем элементы и создаём переменные
	var element = document.getElementById(elementid);
	var i = 0, state = {sum: 0, current: 0, max: 0, widths: 0, increments: 0, indicators: Array(), summarize: Array()};
	
	//Устанавливаем базовую длину элемента
	element.style.width = basicwidth + "px";
	
	//Получаем максимальное значение и сумму всех значений
	for (i = 0; i < values.length; i++)
	{
		state.sum += values[i].value;
		
		if (values[i].value > state.max)
		state.max = values[i].value;
	}
	
	if (state.max < basicwidth / 2 && values.length > 2)
	{
		basicwidth *= 2;
	}
	
	if (values.length == 1)
	{
		basicwidth -= 15;
	}
	
	//Сбрасываем переменную-счётчик
	i = 0;
	
	//Проходимся по значениям и отображаем элементы
	for (i = 0; i < values.length; i++)
	{
		//Создаём элементы
		var indicator   = document.createElement("div");
		var indicator_i = document.createElement("div");
		var indicator_text = document.createElement("div");
		
		//Вычисляем текущее значение текущего элемента
		state.current = (values[i].value / state.sum);
			
		//Устанавливаем стили и настройки элементов
		indicator.className = "element";
		indicator_i.className = "element-inline";
		indicator_text.className = "element-text";
		indicator.style.width = (state.current * basicwidth) + "px";
		
		//Устанавливаем идентификаторы элементов
		indicator_i.id = "ind_val_" + elementid + "_" + i;
		indicator.id = "nat_" + indicator_i.id;
		indicator_text.id = "text_" + indicator_i.id;
		
		//Если это максимальное значение, создаём
		if (state.max == values[i].value)
		indicator_i.className = "element-inline element-active";
		
		//Текст элемента
		//indicator_text.innerHTML = values[i].title + " (" + (state.current*100).toString().substr(0,4) + "%)";
		indicator_text.innerHTML = values[i].title + " (" + prepend + values[i].value + ")";
		
		//Добавляем элементы в контейнер
		indicator.appendChild(indicator_i);
		element.appendChild(indicator_text);
		element.appendChild(indicator);
		
		//Сохраняем каждый идентификатор и суммаризационные значения
		state.indicators[i] = indicator_i.id;
		state.summarize[i] = parseInt((state.current*100).toString().substr(0,4));
	}

	callback();

	/*
	//Устанавливаем новые переменные
	var i = 0;

	//Функция для повторных действий
	var increment_fnc = function()
	{
		//Если это не последний элемент
		if (i != state.indicators.length)
		{
			//Если длина не равна 100 процентам
			if (state.widths <= 100)
			{
				//document.getElementById("nat_" + state.indicators[i]).style.display = "block";
				//document.getElementById("text_" + state.indicators[i]).style.display = "block";
				document.getElementById("nat_" + state.indicators[i]).style.visibility = "visible";
				document.getElementById("text_" + state.indicators[i]).style.visibility = "visible";
			
				//Увеличиваем длину элемента
				document.getElementById(state.indicators[i]).style.width = state.widths + "%";
				state.widths += 4;
			
			}
			else
			{
				//В противном случае, переходим к следующему элементу и обнуляем счётчик длины
				i++;
				state.widths = 0;
			}
		
		}
		else
		{
			clearInterval(state.increments); //В противном случае, очищаем счётчик
			callback();
		}
	}
	
	//Запускаем нашу функцию
	state.increments = setInterval(increment_fnc, 10);*/
}

function BuildDiagramElastic(elementid, basicwidth, values, callback)
{
	//Получаем элементы и создаём переменные
	var element = document.getElementById(elementid);
	var i = 0, state = {sum: 0, max: 0, current: 0};
	
	//Создаём таблицу и строки
	var table = 
	{
		root: document.createElement("table"),
		rows:
		{
			up:     document.createElement("tr"),
			center: document.createElement("tr"),
			down:   document.createElement("tr")
		}
	};
	
	//Определяем зависимости элементов
	table.root.appendChild(table.rows.up);
	table.root.appendChild(table.rows.center);
	table.root.appendChild(table.rows.down);	
	
	//Включаем нашу таблицу в элемент контейнер
	element.appendChild(table.root);
	
	//Устанавливаем базовую длину элемента
	//Устанавливаем стили элементов и добавляем элементы
	element.style.width = basicwidth + "px";
	table.root.className = "elastic-container";

	
	//Получаем максимальное значение и сумму всех значений
	for (i = 0; i < values.length; i++)
	{
		state.sum += values[i].value;
		
		if (values[i].value > state.max)
		state.max = values[i].value;
	}

	//Проходимся по значениям и отображаем элементы
	for (i = 0; i < values.length; i++)
	{
		//Создаём элементы
		var cells =
		{
			up: document.createElement("td"),
			center: document.createElement("td"),
			down: document.createElement("td")
		};

	    var text_element = document.createElement("div");
		
		//Определяем зависимости элементов
		table.rows.center.appendChild(cells.center);
		table.rows.up.appendChild(cells.up);
		table.rows.down.appendChild(cells.down);
		
		//Устанавливаем стили элемента	
		cells.up.className = "up";
		cells.down.className = "up";
		text_element.className = "marker";
		
		//Устанавливаем текст
		text_element.innerHTML = "<nobr>" + values[i].title + " (" + values[i].value  + ")</nobr>";  
		
		if (i % 2 == 0)
		{
			cells.up.appendChild(text_element);
			cells.up.className += " active";
		}
		else
		{
			cells.down.appendChild(text_element);
			cells.down.className += " active";
		}
		
		//Вычисляем текущее значение текущего элемента
		state.current = (values[i].value / state.sum);
		
		//Устанавливаем это значение
		cells.center.style.width = (state.current * basicwidth) + "px";
		
	}
	
	//IE Fix
	element.innerHTML = element.innerHTML;
	
}

function ActivateRedButton()
{
	var cover = ShowCover(), content = "", redvalue = 10, redinterval = false;
	
	cover.style.background = "#000";
	
	content = "<table class=\"centered-table\" height=\"100%\" width=\"100%\"><tr><td style=\"text-align:center;\" width=\"100%\" height=\"100%\">";
	content += "<span style=\"font-size: 120px; position: relative;\" id=\"counter\">10</span>";
	content += "</td></tr></table>";

	cover.innerHTML = content;
	
	var fnc_red = function()
	{		
		if (redvalue <= 0)
		{
			setTimeout(fnc_des, 500);
			clearInterval(redinterval); 
			redvalue = "0.0000000";
		}
		
		if (redvalue > 7)
		{
			$("counter").style.color = "#0a0";
			$("counter").style.left = (Math.random()*10) + "px";
		}
		else if (redvalue > 3)
		{
			$("counter").style.color = "#fffaaa";
			$("counter").style.left = (Math.random()*20) + "px";
		}
		else if (redvalue > 2)
		{
			$("counter").style.color = "#ff0000";
			
			$("counter").style.left = (Math.random()*40) + "px";
		}
		else
		{
			$("counter").style.left = (Math.random()*50) + "px";
		}
		
		
		$("counter").innerHTML = redvalue.toString().substr(0, 4);
		
		redvalue -= 0.015;
	}
	
	var fnc_des = function()
	{
		
		content = "<table class=\"centered-table\" height=\"100%\" width=\"100%\"><tr><td style=\"text-align:center;\" width=\"100%\" height=\"100%\">";
		content += "<span style=\"font-size: 80px\"><span style=\"color: #444\">Web Zine</span> Create.Web</span>";
		//content += "<br /> <span style=\"font-size: 50px\">Redirection...</span>";
		content += "</td></tr></table>";
		
		cover.innerHTML = content;		
		location.href = "http://web-zine.org/";
	}
	
	redinterval = setInterval(fnc_red, 10)
}

function ShowCover()
{
	var cover = document.createElement("div");
	cover.id = "cover";
	
	//SetOpacity(cover, 0);
	
	document.documentElement.lastChild.appendChild(cover);

	window.onscroll = function()
	{
		var currentY = (window.scrollY) ? window.scrollY : document.documentElement.scrollTop ? 
								 document.documentElement.scrollTop : document.body.scrollTop;
		
		var currentX = (window.scrollX) ? window.scrollX : document.documentElement.scrollLeft ? 
								 document.documentElement.scrollLeft : document.body.scrollLeft;
		
		cover.style.top = currentY + "px";
		cover.style.left = currentX + "px";
 	}
 	
 	var currentY = (window.scrollY) ? window.scrollY : document.documentElement.scrollTop ? 
								 document.documentElement.scrollTop : document.body.scrollTop;
		
	var currentX = (window.scrollX) ? window.scrollX : document.documentElement.scrollLeft ? 
								 document.documentElement.scrollLeft : document.body.scrollLeft;
		
	cover.style.top = currentY + "px";
	cover.style.left = currentX + "px";
	
	//ChangeOpacity(cover, 100, 1000, 10, false, new Date(), 0);
 	
 	return cover;
}

function HideCover()
{
	var cover = document.getElementById("cover");
	
	window.onscroll = false;
	
	document.documentElement.lastChild.removeChild(cover);
	
	return true;
}

function SetOpacity(element, opacity) 
{
		if(navigator.userAgent.indexOf('MSIE') > -1) 
		{
			element.style.zoom = 1;
			element.style.filter = 'alpha(opacity=' + opacity + ')';
		}
		else
			element.style.opacity = opacity/100;
			
}

function ChangeOpacity(element, opacity, fadetime, interval, callback, /* internal -> */ startTime, startOpac) 
{
		if(!startTime) 
		{
			//if(!interval) interval = 20;
			//startOpac = Opacity.Get(element);
			startTime = new Date();
		}
		
		var elapsed = new Date().getTime() - startTime.getTime();
		var perc = elapsed / fadetime;

		if(perc >= 1) 
		{
			SetOpacity(element, opacity);
			if(callback) callback();
			return;
		}
		
		var opac = startOpac + Math.round(perc * (opacity - startOpac));
		SetOpacity(element, opac);
		setTimeout(function() { ChangeOpacity(element, opacity, fadetime, interval, callback, startTime, startOpac); }, interval);
}

function SetCookie (name, value, expires, path, domain, secure) 
{
      document.cookie = name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}

function GetCookie(name)
{
	var cookie = " " + document.cookie;
	var search = " " + name + "=";
	var setStr = null;
	var offset = 0;
	var end = 0;
	if (cookie.length > 0) {
		offset = cookie.indexOf(search);
		if (offset != -1) {
			offset += search.length;
			end = cookie.indexOf(";", offset)
			if (end == -1) {
				end = cookie.length;
			}
			setStr = unescape(cookie.substring(offset, end));
		}
	}
	return(setStr);
}

function CreateTextMask(elementid, masktext)
{
	var element = document.getElementById(elementid);
	
	element.value = masktext;
	
	element.onfocus = function()
	{
		if (element.value == masktext)
		{
			element.className = "maskable-false";
			element.value = "";
		}
	}
	
	element.onblur = function()
	{
		if (element.value.length == 0)
		{
			element.className = "maskable-true";
			element.value = masktext;
		}
	}
}

function RandomizeColor()
{
	
}

