var m_a = "@";
var gm_p = "mailto:";
var elems = new Array();
var can_drag = false;
var drag_y = 0;
var drag_delta = 0;
var marker_height = 0;
var scroll_height = 0;
var marker = false;
var content = false;
var path = {lang: 0, country: 0, city: 0};
var data = new Array();
var postinit = true;

function elem(id)
{
    if(elems[id] == undefined)
        elems[id] = document.getElementById(id);

    return elems[id];
}

function pm(domain, name)
{
    document.write(name + m_a + domain + ".ru");
}

function gm(domain, name)
{
    document.location.href = gm_p + name + m_a + domain + ".ru";

    return false;
}

function get_width(oElem)
{
    return Number(oElem.clientWidth > 0 ? oElem.clientWidth : oElem.offsetWidth);
}

function get_height(oElem)
{
    return Number(oElem.clientHeight > 0 ? oElem.clientHeight : oElem.offsetHeight);
}

function find_parent(name, oElem)
{
	while(oElem && oElem.nodeName != name)
	{
		oElem = oElem.parentNode;
	}

	return oElem;
}

function current_tag(oElem, prev)
{
	return (oElem.nodeType != 1 ? (prev ? oElem.previousSibling : oElem.nextSibling) : oElem);
}

function next_tag(oElem)
{
	oElem = current_tag(oElem);

	if(oElem) oElem = current_tag(oElem.nextSibling);

	return oElem;
}

function Tabsheet() {}

Tabsheet.oTabs = new Array();

Tabsheet.init = function (id, tabSel) {

    var oTab = elem(id);
    var size = Tabsheet.oTabs.length;

    if(tabSel == undefined) tabSel = 0;

    Tabsheet.oTabs[size] = new Tabsheet(id);

    for(var i = 0, len = oTab.childNodes.length, tab = 0; i < len; i++)
    {
        oChild = oTab.childNodes[i];

        if(oChild.nodeType == 1 && oChild.nodeName == "DT")
        {
            if((tab++) == tabSel)
                Tabsheet.select(oChild, true);

            if(!oChild.onclick)
                oChild.onclick = Tabsheet.oTabs[size].select;
        }
    }
}

Tabsheet.select = function (oTab, selected) {

    var style = (selected ? "selected" : "");

    var oDL = find_parent("DL", oTab);

    for(var i = 0, len = oDL.childNodes.length; i < len; i++)
    {
        var oNextTab = oDL.childNodes[i];

        if(oNextTab.nodeType == 1)
            oNextTab.className = "";
    }

    oTab.className = style;
    next_tag(oTab).className = style;

    if(postinit === false)
    {
        var map = document.getElementById("map");

        map.style.display = "block";
        map.parentNode.style.padding = "15px";
        postinit = true;

        change(elem("fage"), "");
    }
}

Tabsheet.prototype = {

    select : function () {

        Tabsheet.select(this, true);
    }
}

function menu()
{
	for(var i = 0, len = elem("picbar").childNodes.length; i < len; i++)
	{
		var oTD = elem("picbar").childNodes[i];

		if(oTD.nodeType == 1 && oTD.nodeName == "TD")
		{
			oTD.id = "pbt" + i;
			oTD.onmouseover = menu_show;
			oTD.onmouseout = menu_show;
		}
	}
}

function menu_show(e)
{
	e = (!e ? window.event.srcElement : e.target);

	if(e.nodeType != 1 || e.className != "bg")
	{
		e = find_parent("TD", e);
        e = current_tag(e.childNodes[0]);
	}

    var className = e.className.toString();

    e.className = (className.search(/ selected/) == -1 ? className + " selected" : className.replace(/ selected/, ""));
}

function country_select(id)
{
    XMLRequest.send("/country.php?idcountry=" + id, list_load);

    return false;
}

function done()
{
    var query = "/programs/";
    var i = 0;

    for(var k in path)
    {
        query += (i++ > 0 ? "&" : "?") + k + "=" + path[k];
    }

    document.location.href = query;

    return false;
}

function map_block()
{
    elem("preloader").style.display = "block";
    elem("preloader").style.width = get_width(document.getElementById("map")).toString() + "px";
}

function map_unblock()
{
    elem("preloader").style.display = "none";
}

function change(oElem, id)
{
    map_block();

    for(var i = 0, root = oElem.parentNode.parentNode, len = root.childNodes.length; i < len; i++)
    {
        if(root.childNodes[i].nodeType == 1)
            root.childNodes[i].className = "";
    }

    oElem = oElem.parentNode;
    oElem.className = "selected";

    var name = oElem.parentNode.id;

    path[name] = id;

    if(name == "city")
    {
        done();

        return false;
    }
    else if(name == "age")
    {
        path["lang"] = 0;
        path["country"] = 0;
        path["city"] = 0;
    }
    else if(name == "lang")
    {
        path["country"] = 0;
        path["city"] = 0;
    }

    var query = "";

    for(var k in path) query += "&" + k + "=" + path[k];

    XMLRequest.send("/data.php?name=" + name + query, data_load);

    return false;
}

function data_load(text)
{
    eval(text);

    if(name == "country")
    {
        redraw_list("city");

        if(path["lang"] == 0) redraw_list("lang");
    }
    else if(name == "lang")
    {
        if(path["lang"] == 0) redraw_list("lang");

        redraw_list("country");
        redraw_list("city");
    }
    else if(name == "age")
    {
        redraw_list("lang");
        redraw_list("country");
        redraw_list("city");
    }

    map_unblock();
}

function redraw_list(name)
{
    var root = elem(name);

    if(!root) return;

    for(var i = root.childNodes.length - 1; i >= 0; i--)
    {
        root.removeChild(root.childNodes[i]);
    }

    var len = data[name].length;

    if(len > 0)
    {
        for(var i = 0, len = data[name].length, first = false; i < len; i += 2)
        {
            var oDiv = document.createElement("DIV");
            oDiv.innerHTML = '<a href="?' + name + '=' + data[name][i] + '" onclick="return change(this, ' + data[name][i] + ')">' + data[name][i + 1] + '</a>';

            if(!first)
            {
                oDiv.className = "selected";
                first = true;
            }

            root.appendChild(oDiv);
        }
    }
    else if(name == "city" && path["country"] == 0)
    {
        root.innerHTML = 'Выберите страну';
    }
    else
    {
        root.innerHTML = 'Информации не найдено';
    }

    init(name + "list");
}

function init(name)
{
	var root = elem(name);
	var marker = false;
	var f_height = 0;
	var c_height = 0;

	for(var i = 0, len = root.childNodes.length; i < len; i++)
	{
		if(root.childNodes[i].nodeType == 1)
		{
			switch(root.childNodes[i].className)
			{
				case "scroll": root.childNodes[i].style.display = "block";
                               marker = current_tag(root.childNodes[i].childNodes[0]); break;
				case "list": f_height = root.childNodes[i].clientHeight;
					  content = current_tag(root.childNodes[i].childNodes[0]);
					  c_height = content.offsetHeight;
			}
		}
	}

	if(marker === false) return false;

	var height = Math.round(f_height * 100 / c_height);

    height = f_height * (height / 100);

	if(height > f_height)
    {
        height = f_height;
        marker.parentNode.style.display = "none";
    }

	marker.onmousedown = drag;
	marker.style.top = "0px";
	marker.style.height = height + "px";
}

function mouse_y(e)
{
	return (e.pageY ? e.pageY : (e.clientY ? e.clientY + document.documentElement.scrollTop + document.body.scrollTop : 0));
}

function drag(e)
{
	if(!e)
	{
		e = window.event;
		marker = e.srcElement;
	}
	else marker = e.target;

	marker_height = marker.clientHeight;

	var oParent = marker.parentNode;

	if(!oParent) return false;

	scroll_height = oParent.clientHeight;

	oParent = oParent.parentNode;

	if(!oParent) return false;

	for(var i = 0, len = oParent.childNodes.length; i < len; i++)
	{
		if(oParent.childNodes[i].nodeType == 1 && oParent.childNodes[i].className == "list")
            content = current_tag(oParent.childNodes[i].childNodes[0]);
    }

	drag_y = mouse_y(e) - parseInt(marker.style.top);
	drag_delta = content.offsetHeight / scroll_height;
	can_drag = true;
}

function scroll_drop(e)
{
	can_drag = false;
}

function scroll_move(e)
{
	if(can_drag)
	{
		reposit(mouse_y((!e ? window.event : e)) - drag_y);
	}

	return false;
}

function reposit(y)
{
	if((y <= scroll_height - marker_height) && (y >= 0))
	{
		marker.style.top = y + "px";
	}
	else if(y > scroll_height - marker_height)
	{
		marker.style.top = scroll_height - marker_height + "px";
	}
	else
	{
		marker.style.top = "0px";
	}

	content.style.marginTop = Math.round(parseInt(marker.style.top)  * drag_delta * (-1)) + "px";
}

function pageinit()
{
    var URL = document.location.href.toString().split('/');

    Tabsheet.init("tabs1");

    document.onmouseup = scroll_drop;
    document.onmousemove = scroll_move;

    if(URL.length > 4)
    {
        var map = document.getElementById("map");

        map.style.display = "none";
        map.parentNode.style.padding = "5px";

        postinit = false;
    }
    else
    {
        change(elem("fage"), "");
    }

    menu();
}

function onhitchanged(response)
{
    document.getElementById('hitkursind').innerHTML = response;

    var favprog = document.getElementById("favprog");

    if(favprog)
    {
        favprog.innerHTML = "Программа добавлена в мой список";
        favprog.onclick = null;
        favprog.href = "/mylist/";
    }
}

