var img_dir = "templates/blackgold/img/";
var page_capacity = 50;
var page_separate_after = 3;
var page_surroundings = 2;
function _sort(a, b) {
    var a = a[0];
    var b = b[0];
    var _a = (a + '').replace(/,/, '.');
    var _b = (b + '').replace(/,/, '.');
    if (parseFloat(_a) && parseFloat(_b)) return sort_numbers(parseFloat(_a), parseFloat(_b));
    else return sort_insensitive(a, b);
}
function sort_numbers(a, b) {return a - b;}
function sort_insensitive(a, b) {
    var anew = a.toLowerCase();
    var bnew = b.toLowerCase();
    if (anew < bnew) return -1;
    if (anew > bnew) return 1;
    return 0;
}
function getConcatenedTextContent(node) {
    var _result = "";
    if (node == null) {
        return _result;
    }
    var childrens = node.childNodes;
    var i = 0;
    while (i < childrens.length) {
        var child = childrens.item(i);
        switch (child.nodeType) {
            case 1: case 5:
                _result += getConcatenedTextContent(child);
                break;
            case 3: case 2: case 4:
                _result += child.nodeValue;
                break;
            case 6: case 7: case 8: case 9: case 10: case 11: case 12: 
			    break;
        }
        i++;
    }
    return _result;
}
function sort(e) {
    var el = window.event ? window.event.srcElement : e.currentTarget;
    while (el.tagName.toLowerCase() != "td") el = el.parentNode;
    var a = new Array();
    var name = el.lastChild.nodeValue;
    var dad = el.parentNode;
    var table = dad.parentNode.parentNode;
    var up = table.up;
    var node, arrow, curcol;
    for (var i = 0; (node = dad.getElementsByTagName("td").item(i)); i++) {
        if (node.lastChild.nodeValue == name){
            curcol = i;
            if (node.className == "curcol"){
                arrow = node.firstChild;
                table.up = Number(!up);
            }else{
                node.className = "curcol";
                arrow = node.insertBefore(document.createElement("img"),node.firstChild);
                table.up = 0;
            }
            arrow.src = img_dir + table.up + ".gif";
            arrow.alt = "^";
			arrow.height = 8;
			arrow.width = 13;
        }else{
            if (node.className == "curcol"){
                node.className = "";
                if (node.firstChild) node.removeChild(node.firstChild);
            }
        }
    }
    var tbody = table.getElementsByTagName("tbody").item(0);
    for (var i = 0; (node = tbody.getElementsByTagName("tr").item(i)); i++) {
        a[i] = new Array();
        a[i][0] = getConcatenedTextContent(node.getElementsByTagName("td").item(curcol));
        a[i][1] = getConcatenedTextContent(node.getElementsByTagName("td").item(1));
        a[i][2] = getConcatenedTextContent(node.getElementsByTagName("td").item(0));
        a[i][3] = node;
    }
    a.sort(_sort);
    if (table.up) a.reverse();
	HidePage();
    for (var i = 0; i < a.length; i++) tbody.appendChild(a[i][3]);
	UpdatePage(Previous);
}
var Previous = 0;
var Separated = 0;
function init(e) {
    if (!document.getElementsByTagName) return;
	for (var i = page_capacity; (tr_row = (document.getElementsByTagName("tbody").item(0)).getElementsByTagName("tr").item(i)); i++) {
		tr_row.style.display = "none";
	}
	if (document.getElementById) var links = document.getElementById("links");
	else var links = document.all["links"];
	if (i == 0) {
		links.innerHTML = "Приносим свои извинения. Данный сервис сейчас недоступен.";
		return;
	}
	for (var j = 1; j <= Math.round((i/page_capacity)+0.49); j++) {
		links.innerHTML += '<a href="javascript:SelectPage('+j+');">'+j+'</a>';
	}
	links.getElementsByTagName('a').item(0).className = "currentPage";
	if (Math.round((i/page_capacity)+0.49) > page_separate_after) {
		Separated = 1;
		for (var j = page_surroundings; j < (Math.round((i/page_capacity)+0.49)-1); j++) {
			links.getElementsByTagName('a').item(j).style.display = "none";
		}
		links.getElementsByTagName('a').item(j).outerHTML = '<span> ... </span>' + links.getElementsByTagName('a').item(j).outerHTML;
	}
	Previous = 1;
    for (var j = 0; (thead = document.getElementsByTagName("thead").item(j)); j++) {
        var node;
        for (var i = 0; (node = thead.getElementsByTagName("td").item(i)); i++) {
			if (node.className != "fixed") {
				if (node.addEventListener) node.addEventListener("click", sort, false);
				else if (node.attachEvent) node.attachEvent("onclick", sort);
				node.title = "";				
			}
        }
        thead.parentNode.up = 0;
        
        if (typeof(initial_sort_id) != "undefined"){
            td_for_event = thead.getElementsByTagName("td").item(initial_sort_id);
            if (document.createEvent){
                var evt = document.createEvent("MouseEvents");
                evt.initMouseEvent("click", false, false, window, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, td_for_event);
                td_for_event.dispatchEvent(evt);
            } else if (td_for_event.fireEvent) td_for_event.fireEvent("onclick");
            if (typeof(initial_sort_up) != "undefined" && initial_sort_up){
                if (td_for_event.dispatchEvent) td_for_event.dispatchEvent(evt);
                else if (td_for_event.fireEvent) td_for_event.fireEvent("onclick");
            }
        }
    }
}
function HidePage() {
	for (var i = (Previous-1)*page_capacity; i < (Previous*page_capacity); i++) {
		var tr_row = (document.getElementsByTagName("tbody").item(0)).getElementsByTagName("tr").item(i);
		if (tr_row) tr_row.style.display = "none";
	}
}
function UpdatePage(num) {
	for (var i = (num-1)*page_capacity; i < (num*page_capacity); i++) {
		var tr_row = (document.getElementsByTagName("tbody").item(0)).getElementsByTagName("tr").item(i);
		if (tr_row) tr_row.style.display = "";
	}		
}
function SelectPage(num) {
   if (num == Previous) return;
   
	for (var i = (Previous-1)*page_capacity; i < (Previous*page_capacity); i++) {
		var tr_row = (document.getElementsByTagName("tbody").item(0)).getElementsByTagName("tr").item(i);
		if (tr_row) tr_row.style.display = "none";
	}
	for (var i = (num-1)*page_capacity; i < (num*page_capacity); i++) {
		var tr_row = (document.getElementsByTagName("tbody").item(0)).getElementsByTagName("tr").item(i);
		if (tr_row) tr_row.style.display = "";
	}
	if (document.getElementById) var links = document.getElementById("links");
	else var links = document.all["links"];	
	links.getElementsByTagName('a').item(Previous-1).className = "";
	links.getElementsByTagName('a').item(num-1).className = "currentPage";
	Previous = num;
	if (Separated == 1) {
		for (var i = 0; i <= links.getElementsByTagName('a').length-1; i++) {
			if (links.getElementsByTagName('a').item(i).style)
			 links.getElementsByTagName('a').item(i).style.display = "";
		}
		while (links.getElementsByTagName('span').length > 0) {
			links.removeChild(links.getElementsByTagName('span').item(0));
		}
		if ((num-page_surroundings)>1) {
			for (var i = 1; i <= (num-page_surroundings)-1; i++) {
				links.getElementsByTagName('a').item(i).style.display = "none";
			}
			links.getElementsByTagName('a').item(0).outerHTML += '<span> ... </span>';
		}
		if ((num+page_surroundings)<links.getElementsByTagName('a').length) {
			for (var i = (num+page_surroundings)-1; i <= links.getElementsByTagName('a').length-2; i++) {
				links.getElementsByTagName('a').item(i).style.display = "none";
			}
			links.getElementsByTagName('a').item(links.getElementsByTagName('a').length-1).outerHTML = '<span> ... </span>' + links.getElementsByTagName('a').item(links.getElementsByTagName('a').length-1).outerHTML;
		}
	}
}
var root = window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null;
if (root){
    if (root.addEventListener) root.addEventListener("load", init, false);
    else if (root.attachEvent) root.attachEvent("onload", init);
}
