/* getElementsByClassName */
  Array_filter = function(arr, fun /*, thisp*/)
  {
    var len = arr.length;
    if (typeof fun != "function")
      throw new TypeError();

    var res = new Array();
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in arr)
      {
        var val = arr[i]; // in case fun mutates this
        if (fun.call(thisp, val, i, arr))
          res.push(val);
      }
    }

    return res;
  };


function getElementsByClassName(strClass, strTag, objContElm) {
	var arr = new Array();
	objContElm = objContElm || document;
	strTag = strTag || "*";
	if (document.getElementsByClassName) {
		arr = objContElm.getElementsByClassName(strClass);
		if (strTag != '*') {
			arr=Array_filter(arr, function(elem) {
				return elem.nodeName == strTag;
			});
		}
	} else {
		var objColl = objContElm.getElementsByTagName(strTag);
		if (!objColl.length &&  strTag == "*" &&  objContElm.all) objColl = objContElm.all;
		var delim = strClass.indexOf('|') != -1  ? '|' : ' ';
		var arrClass = strClass.split(delim);
		for (var i = 0, j = objColl.length; i < j; i++) {
			var arrObjClass = objColl[i].className.split(' ');
			if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
			var c = 0;
			comparisonLoop:
			for (var k = 0, l = arrObjClass.length; k < l; k++) {
				for (var m = 0, n = arrClass.length; m < n; m++) {
					if (arrClass[m] == arrObjClass[k]) c++;
					if (( delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
						arr.push(objColl[i]);
						break comparisonLoop;
					}
				}
			}
		}
	}
	return arr;
}
/* /getElementsByClassName */

function addClass(new_class, elem) {
	var class_str = elem.className;
	class_str = class_str.replace(/\s+/g, ' ');
	var class_str_new = '' + class_str + ' ' + new_class;
	elem.className = class_str_new;
}

function removeClass(subj_class, elem) {
	var class_str = elem.className;
	var classes_new_str;
	if (subj_class == elem.className) {
		classes_new_str = '';
	} else {
			class_str = class_str.replace(/\s+/g, ' ');
		var classes = class_str.split(' ');
		var classes_count = classes.length;
		var classes_new = new Array();
		for (var i = 0; i < classes_count; i++) {
			if (classes[i] != subj_class) {
				classes_new[classes_new.length] = classes[i];
			}
		}
		classes_new_str = classes_new.join(' ');
	}
	elem.className = classes_new_str;
}

// возвращает непосредственные (!) дочерние узлы элемента elem с именем тега tagName
function getChildNodesByName(elem, tagName) {
	// получаем все непосредственные дочерние узлы элемента
	var nodes = elem.childNodes;
	// создаём пустой массив для непосредственных дочерних элементов
	var result = new Array();
	// перебираем непосредственные дочерние узлы и фильтруем по переданному tagName
	for (var i = nodes.length - 1; i >= 0; i--) {
		if (nodes[i].nodeName == tagName) {
			result[result.length] = nodes[i];
		}
	}
	if (!result.length) {
		result = null;
	}
	return result;
}

function switchTab(flag) {
	// находим все наборы вкладок
	var tab_sets = getElementsByClassName('tariffs', 'div');
	if(tab_sets)
	{
		// определяем общее количество наборов вкладок на странице
		var tab_sets_count = tab_sets.length;
		// создаём нужные переменные
		var nav, content, nav_nodes, nav_nodes_count, content_nodes, content_nodes_count, items_count, cur_nav_item, cur_content_item;
		// создаём пустой массив для элементов навигации отдельно взятого набора вкладок
		var nav_items = new Array();
		// создаём пустой массив элементов контента отдельно взятого набора вкладок
		var content_items = new Array();
		// перебираем все наборы вкладок
		for (var i = 0; i < tab_sets_count; i++) {
			// очищаем массив элементов навигации
			nav_items.splice(0, nav_items.length);
			// очищаем массив элементов контента
			content_items.splice(0, nav_items.length);
			// находим общий блок навигации внутри текущего набора вкладок
			nav = getElementsByClassName('nav', 'ul', tab_sets[i]);
			nav = nav[0];
			// находим общий блок контента внутри текущего набора вкладок
			content = getElementsByClassName('content', 'ul', tab_sets[i]);
			content = content[0];


			// получаем все непосредственные дочерние узлы блока навигации
			nav_items = getChildNodesByName(nav, 'LI');
			// перебираем непосредственные дочерние узлы блока навигации и удаляем у них класс cur
			for (var j = nav_items.length - 1; j >= 0; j--) {
				removeClass('cur', nav_items[j]);
			}
			// получаем все непосредственные дочерние узлы блока контента
			content_items = getChildNodesByName(content, 'LI');
			// перебираем непосредственные дочерние узлы блока контента и удаляем у них класс cur
			for (var j = content_items.length; j >= 0; j--) {
				if (content_items[j]) {
					removeClass('cur', content_items[j]);
				}
			}

			// получаем список элементов навигации, содержащий только один элемент, соответствующий флагу, переданному функции
			var cur_nav_items = getElementsByClassName('tariff_' + flag, 'li', nav);
			// если есть хотя бы один элемент навигации
			if (cur_nav_items.length) {
				// получаем элемент навигации, соответствующий флагу, переданному функции
				cur_nav_item = cur_nav_items[0];
//alert(cur_nav_item);
				// добавляем ему класс cur (делаем активным)
				addClass('cur', cur_nav_item);
			}
			// получаем список элементов контента, содержащий только один элемент, соответствующий флагу, переданному функции
			var cur_content_items = getElementsByClassName('tariff_' + flag, 'li', content);
			// если есть хотя бы один элемент контента
			if (cur_content_items.length) {
				// получаем элемент контента, соответствующий флагу, переданному функции
				cur_content_item = cur_content_items[0];
				// добавляем ему класс cur (делаем активным)
				addClass('cur', cur_content_item);
			}
		}
	
	}
	// находим выпадающий список выбора города
	var frmSelectCity_city = document.getElementById('frmSelectCity_city');
	// если он существует
	if (frmSelectCity_city) {
		// устанавливаем его значение равным переданному функции флагу
		document.getElementById('frmSelectCity_city').value = flag;
	}

	// устанавливаем текущий город
	setCity(flag);
	return false;
}

function switchMaterialsListTab(lnk) {
	var tab_set = lnk.parentNode.parentNode.parentNode;
	var url_params = lnk.href.split('?')[1].split('&');
	var url_params_count = url_params.length;
	var pubid;
	for (var i = 0; i < url_params_count; i++) {
		if (url_params[i].split('=')[0] == 'PubID') {
			pubid = url_params[i].split('=')[1];
			break;
		}
	}
	var nav, content, nav_nodes, nav_nodes_count, content_nodes, content_nodes_count, items_count, cur_nav_item, cur_content_item;
	var nav_items = new Array();
	var content_items = new Array();
	nav = getElementsByClassName('nav', 'ul', tab_set);
	nav = nav[0];
	content = getElementsByClassName('content', 'ul', tab_set);
	content = content[0];
	nav_nodes = nav.childNodes;
	nav_nodes_count = nav_nodes.length;
	content_nodes = content.childNodes;
	content_nodes_count = content_nodes.length;
	for (var j = 0; j < nav_nodes_count; j++) {
		if (nav_nodes[j].nodeName == 'LI') {
			nav_items[nav_items.length] = nav_nodes[j];
		}
	}
	for (var j = 0; j < content_nodes_count; j++) {
		if (content_nodes[j].nodeName == 'LI') {
			content_items[content_items.length] = content_nodes[j];
		}
	}
	items_count = nav_items.length;
	for (var j = 0; j < items_count; j++) {
		removeClass('cur', nav_items[j]);
		removeClass('cur', content_items[j]);
	}

	cur_nav_item = getElementsByClassName('item_' + pubid, 'li', nav)[0];
	cur_content_item = getElementsByClassName('item_' + pubid, 'li', content)[0];

	addClass('cur', cur_nav_item);
	addClass('cur', cur_content_item);
	return false;
}

// вызываем после загрузки страницы для восстановления города из Cookie вне зависимости от кэширования
function restoreCity() {
	// получаем текущий флаг, записанный в Cookie

	var flag = getCookie('CITYCOOK');
	// если переменная флага отсутствует или равна false (0)
	if (!flag) {
		// устанавливаем её равной 1
		flag = 5;
	}
	// переключаем все вкладки на город, соответствующий флагу из Cookie
	switchTab(flag);
	
}

// Возвращает значение параметра pname в пути url
function getUrlParam(url, pname) {
	var url_segments = url.split('?');
	var url_params = url_segments[1].split('&');
	var url_params_count = url_params.length;
	var result;
	for (var i = 0; i < url_params_count; i++) {
		if (url_params[i].split('=')[0] == pname) {
			result = url_params[i].split('=')[1];
			break;
		}
	}
}

// возвращает часть пути url до знака вопроса (т. е. в общем случае шаблон)
function getUrlTemplate(url) {
	var url_segments = url.split('?');
	var tpl = url_segments[0];
	return tpl;
}

// устанавливает город в Cookie на соответствующий переданному флагу и перенаправляет на страницу с картой этого города/области
function switchMap(city) {
	setCity(city);
	var params;
	var section = arguments[1];
	var tpl = getUrlTemplate(window.location.href);
	if (section) {
		target_url = tpl + '' + section + '/';
	} else {
		target_url = tpl;
	}
	window.location.href = target_url;
}