//TODO: Get rid of copy/paste
var g_strCatalogPrefix;
g_strCatalogPrefix = "/catalog";

var g_filterDocument;

function getAjax() {
    if (document.all){
        return new ActiveXObject("Microsoft.XMLHTTP");
    } else {
        return new XMLHttpRequest();
    }
}

function getRootNode( domDocument){
    var nodes = domDocument.childNodes;
    var nLength = nodes.length;
    
    for(var i = 0; i < nLength; i++) {
        if (nodes[i].tagName == "root") {
            return nodes[i];
        }
    }
}


function clearElement(el) {
if (! el) {
return;
}
    for(var i = 0; i < el.options.length; i++) {
        el.remove(0);
    }   
}

function getItems(strItemLatinName) {
  return getXml(g_strCatalogPrefix + "/xml.catalog/" + strItemLatinName);
}

function getItemsFull() {
  var nodes =  getXml(g_strCatalogPrefix + "/fullxml.catalog/");
  var l = nodes.length;
  var i;
  for(i = 0; i < l; i++) {
    if (nodes[i].tagName == 'menu') {
        return nodes[i].childNodes;
    }
  }
}

function getXml(strUrl) {
   var ajax = getAjax();
  ajax.open("GET", strUrl, false);
  ajax.send(null);
  var domDocument = ajax.responseXML;   
  return getRootNode(domDocument).childNodes; 
}

function fillMamontMenu() {
    //TODO: Copy/paste
    var ul = $('li.top ul.sub')[0];
	//var menuSiteMap = document.getElementById('sitemapCatalog');
    if (ul == null) {
    return;
    }
    var nodes = getItems("root");
    for(var i = 0; i < nodes.length; i++) {
        var item = nodes[i];
        if (item.tagName != "item") {
            continue;
        }
        ul.appendChild(generateLi(item));

		//if (menuSiteMap)
		//{
		    //menuSiteMap.appendChild(generateLi(item));
		//}
    }
}

function fill404Menu() {
    var menuSiteMap = document.getElementById('sitemapCatalog');
    var menuSiteMapFull = document.getElementById('sitemapCatalogFull');
    if (! menuSiteMap) {
        return;
    }
    var nodes = getItemsFull();
    fill404MenuLevel(1, nodes, menuSiteMap, menuSiteMapFull);
}

function fill404MenuLevel(nLevel, nodes, menuSiteMap, menuSiteMapFull) {
     for(var i = 0; i < nodes.length; i++) {
        var item = nodes[i];
        if (item.tagName != "item") {
            continue;
        }
        
        if (nLevel == 2) {
            menuSiteMap.appendChild(generateLi(item));
        }
        
        var li = document.createElement('li');
        menuSiteMapFull.appendChild(li);
        var ul = generateUl(item);
        li.appendChild(ul);
        
        fill404MenuLevel(nLevel + 1, item.childNodes, menuSiteMap, ul);
     }
}

function generateLi(item) 
{
    return generateCatalogElement("li", item);    
}

function generateCatalogElement(strTag, item) {
    var elem = document.createElement(strTag);
    var a = document.createElement("a");
    a.appendChild(document.createTextNode(item.getAttribute("locname")));
    a.setAttribute("href", g_strCatalogPrefix + "/category.catalog/" + item.getAttribute("latname"));
    elem.appendChild(a);
	return elem;
}

function generateUl(item) 
{
   return generateCatalogElement("ul", item);
}

function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			if (oldonload) {
				oldonload();
			}
			func();
		}
	}
}

function trim(str) {
    return str.replace(/(^\s+)|(\s+$)/g, "");
}


function checkOrder() {
    var items = $('.validate');
    var l = items.length;
    for (var i = 0; i < l; i++) {
        if (trim(items[i].value) == "") {
            alert("Ð?Ðµ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ñ‹ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ñ‹Ðµ Ð¿Ð¾Ð»Ñ?");
            return false;
        }
    }
    return true;
}

function getFilter() {
   var ajax = getAjax();
  ajax.open("GET", g_strCatalogPrefix + "/filter.xml", false);
  ajax.send(null);
  var domDocument = ajax.responseXML;   
  return getRootNode(domDocument).childNodes; 
}

function fillFilter() {
	g_filterDocument = getFilter();
	fillCategories();
	categoryChanged();

}

function fillCategories() {
	var l = g_filterDocument.length;
	var catSelect = document.getElementById("Category");
	if (! catSelect) {
	return;
	}
	clearElement(catSelect);
	for (var i = 0; i < l; i++)
	{
		var cat = g_filterDocument[i];
		if (cat.tagName != "type")
		{
			continue;
		}

		var option = document.createElement("option");
		option.setAttribute("value", cat.getAttribute("code"));
		option.appendChild(document.createTextNode(cat.getAttribute("name")));
		catSelect.appendChild(option);	
	}
}

function categoryChanged() {
	var catSelect = document.getElementById("Category");
	if (! catSelect) {
	return;
	}
	var strCurrentCat =  catSelect.options[catSelect.selectedIndex].value;
	clearConditions();
	fillConditions(strCurrentCat);
}

function fillConditions(strCurrentCat) {
	var l = g_filterDocument.length;
	for (var i = 0; i < l; i++) {
		var cat = g_filterDocument[i];
		if (cat.tagName == "type" && cat.getAttribute("code") == strCurrentCat)
		{
			fillProperties(cat.childNodes);
		}
	}
}

function fillProperties(arrProperties) {
	var l = arrProperties.length;
	for (var i = 0; i < l; i++) {
		var prop = arrProperties[i];
		if (prop.tagName == "property")
		{
			var selectProp = document.createElement("select");
			fillSelectWithOpts(selectProp, prop.childNodes);
			addProp(selectProp, prop);
		}
	}
}

function fillSelectWithOpts(selectPropElement, values) {
	var l = values.length;
	for (var i = 0; i < l; i++) {
		var val = values[i];
		if (val.tagName != "value")
		{
			continue;
		}
		var opt = document.createElement("option");
		opt.appendChild(document.createTextNode(val.getAttribute('name')));

		if (val.getAttribute('type') == "string")
		{
			opt.setAttribute('value', val.getAttribute('value'))
		} else {
			opt.setAttribute('value', val.getAttribute('from') + ":" + val.getAttribute('to'))
		}
		selectPropElement.appendChild(opt);
	}
}

function addProp(selectPropElement, prop) {
	var strId = "propIdFor" + prop.getAttribute('code');
	var dl = document.getElementById('filterDl');
	var label = document.createElement("label");
	label.appendChild(document.createTextNode(prop.getAttribute('name')));
	label.setAttribute('for', strId);
	selectPropElement.setAttribute('id', strId);
	selectPropElement.setAttribute('name', prop.getAttribute('code'));
	var dt = document.createElement("dt");
	var dd = document.createElement("dd");

	dt.appendChild(label);
	dd.appendChild(selectPropElement);
	dl.appendChild(dt);
	dl.appendChild(dd);
}


function clearConditions() {
	var dl = document.getElementById('filterDl');
	var elems = dl.childNodes;
	var l = elems.length;
	for( i = 0; i < l; i++) {
		var child = elems[i];
		if (! child)
		{
			return;
		}		
		if (child.tagName != undefined  && child.className == "untouchable")
		{
			continue;
		}
		dl.removeChild(child);
		i--;
	}
}

function activateTab(strTab) {
    var tabs = $('div.tabs');
    var l = tabs.length;
	for( i = 0; i < l; i++) {
	    var tab = tabs[i];
	    if (! tab) {
	        continue;
	    }
	    tab.style.display = 'none';
	}
	
	var tabHeads = $('ul.modelParNav li');
	var l = tabHeads.length;
	for( i = 0; i < l; i++) {
	    var tabh = tabHeads[i];
	    if (! tabh) {
	        continue;
	    }
	    tabh.className = '';
	}
	
	document.getElementById(strTab).style.display = 'block';
	document.getElementById(strTab + '-head').className = 'curr';
}

function showBigImage(strImage) {
    document.getElementById('main_product_image').src = strImage;
}

function addQueryIfSearch(link, strLatName, strPage) {
	var ar = document.location.href.split("?");
	if (ar.length > 1)
	{
		link.href = "/catalog/mfilter.catalog/page" + strPage +  "?" + ar[1];
	} 
}

function showMapStyle(tab, strType) {
    tab.className = 'curr';
    if (strType == 'full') {
        document.getElementById('shortMapTab').className = '';
        document.getElementById('shortMapBlock').style.display = 'none';
        document.getElementById('fullMapBlock').style.display = 'block';
    } else {
        document.getElementById('fullMapTab').className = '';
        document.getElementById('fullMapBlock').style.display = 'none';
        document.getElementById('shortMapBlock').style.display = 'block';
    }
}

//////////
addLoadEvent(fillMamontMenu);
addLoadEvent(fill404Menu);
addLoadEvent(fillFilter);
