function loadXMLString(txt) {
	try // Internet Explorer
	{
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async = "false";
		xmlDoc.loadXML(txt);
		return xmlDoc;
	} catch (e) {
		try // Firefox, Mozilla, Opera, etc.
		{
			parser = new DOMParser();
			xmlDoc = parser.parseFromString(txt, "text/xml");
			return xmlDoc;
		} catch (e) {
			alert(e.message);
		}
	}
	return null;
}

function getXmlHttpObject() {
	if (window.XMLHttpRequest) {
		// code for IE7+, Firefox, Chrome, Opera, Safari
		return new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		// code for IE6, IE5
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		alert("Your browser does not support XMLHTTP!");
		return null;
	}
}

function ajaxRequest(url) {
	var xmlHttp = getXmlHttpObject();
	if (xmlHttp != null) {
		xmlHttp.onreadystatechange = function() {
			if (xmlHttp.readyState == 4) {
				if (xmlHttp.status == 200) {
					// alert('Answer1: ' + xmlHttp.responseText);
				}
			}
		}

		// alert('Asking: ' + url);
		xmlHttp.open("GET", url, true);
		xmlHttp.send(null);
	}
}

function ajaxSelectRequest(url, selectObjectId) {
	var xmlHttp = getXmlHttpObject();
	if (xmlHttp != null) {
		xmlHttp.onreadystatechange = function() {
			if (xmlHttp.readyState == 4) {
				//			if (xmlHttp.status == 200) {

				responseXML = xmlHttp.responseText;
				// alert('Answer: ' + responseXML);

				var xmlDoc = loadXMLString(responseXML);

				option = xmlDoc.getElementsByTagName("option");
				selectObject = document.getElementById(selectObjectId);

				removeOptions(selectObject);
				if (option.length > 0) {
					selectObject.disabled = null;
				} else {
					selectObject.disabled = "disabled";
				}

				for (i = 0; i < option.length; i++) {
					var optionObject = document.createElement('option');
					optionObject.text = option[i].childNodes[0].nodeValue;
					optionObject.value = option[i].getAttribute("value");

					try {
						selectObject.add(optionObject, null);
					} catch (ex) {
						selectObject.add(optionObject); // IE only
					}
				}
				//			}
			}
		}

		//	alert('Asking: ' + url);
		xmlHttp.open("GET", url, true);
		xmlHttp.send(null);
	}
}

function removeOptions(selectObject) {
	for (i = selectObject.options.length - 1; i >= 0; i--) {
		selectObject.remove(i);
	}
}

function ajaxInnerHtmlRequest(url, htmlObjectId) {
	var xmlHttp = getXmlHttpObject();
	if (xmlHttp != null) {
		xmlHttp.onreadystatechange = function() {
			if (xmlHttp.readyState == 4) {

				//				alert('Answer2: ' + xmlHttp.responseText);
				document.getElementById(htmlObjectId).innerHTML = xmlHttp.responseText;
			}
		}

		//	alert('Asking: ' + url);
		xmlHttp.open("GET", url, true);
		xmlHttp.send(null);
	}
}

// search functions
function selectBrandAction() {
	brandValue = document.getElementById('brand').value;
	ajaxSelectRequest('ajax.php?module=brand&brandId=' + brandValue, 'model');

	var yearRange = document.getElementById('yearRange');
	removeOptions(yearRange);
	yearRange.disabled = "disabled";

	var type = document.getElementById('type');
	removeOptions(type);
	type.disabled = "disabled";
}

function selectModelAction() {
	modelValue = document.getElementById('model').value;
	ajaxSelectRequest('ajax.php?module=brand&modelId=' + modelValue,
			'yearRange');

	var type = document.getElementById('type');
	removeOptions(type);
	type.disabled = "disabled";
}

function selectYearRangeAction() {
	ajaxSelectRequest('ajax.php?module=brand&yearRangeId=' + document
			.getElementById('yearRange').value, 'type');
}

function selectCategoryAction() {
	ajaxSelectRequest('ajax.php?module=category&categoryId=' + document
			.getElementById('category').value, 'subCategory');
}

//product list
function getProductListAjaxParams() {
	linkParams = '';

	jsListType = document.getElementById('listType');
	if (jsListType != null) {
		linkParams += '&listType=' + jsListType.value;
	}

	jsListSortBy = document.getElementById('listSortBy');
	if (jsListSortBy != null) {
		linkParams += '&listSortBy=' + jsListSortBy.value;
	}

	jsListSortDir = document.getElementById('listSortDir');
	if (jsListSortDir != null) {
		linkParams += '&listSortDir=' + jsListSortDir.value;
	}

	jsListTab = document.getElementById('listTab');
	if (jsListTab != null) {
		linkParams += '&listTab=' + jsListTab.value;
	}

	jsListPageNo = document.getElementById('listPageNo');
	if (jsListPageNo != null) {
		linkParams += '&listPageNo=' + jsListPageNo.value;
	}

	jsCategoryId = document.getElementById('categoryId');
	if (jsCategoryId != null) {
		linkParams += '&categoryId=' + jsCategoryId.value;
	}

	jsSubCategoryId = document.getElementById('subCategoryId');
	if (jsSubCategoryId != null) {
		linkParams += '&subCategoryId=' + jsSubCategoryId.value;
	}

	jsProducerId = document.getElementById('producerId');
	if (jsProducerId != null) {
		linkParams += '&producerId=' + jsProducerId.value;
	}

	jsBrandId = document.getElementById('brandId');
	if (jsBrandId != null) {
		linkParams += '&brandId=' + jsBrandId.value;
	}

	jsModelId = document.getElementById('modelId');
	if (jsModelId != null) {
		linkParams += '&modelId=' + jsModelId.value;
	}

	jsYearRangeId = document.getElementById('yearRangeId');
	if (jsYearRangeId != null) {
		linkParams += '&yearRangeId=' + jsYearRangeId.value;
	}

	jsTypeId = document.getElementById('typeId');
	if (jsTypeId != null) {
		linkParams += '&typeId=' + jsTypeId.value;
	}

	jsListSearchText = document.getElementById('listSearchText');
	if (jsListSearchText != null) {
		linkParams += '&searchText=' + jsListSearchText.value;
	}

	return linkParams;
}

function getProductList(mainModule) {
	var link = 'ajax.php?module=productList&mainModule=' + mainModule
			+ '&moduleListType='
			+ document.getElementById('moduleListType').value
			+ getProductListAjaxParams();
	ajaxInnerHtmlRequest(link, 'productList');
}

function refreshProductList() {
	ajaxInnerHtmlRequest('ajax.php?module=productList&moduleListType='
			+ document.getElementById('moduleListType').value
			+ getProductListAjaxParams(), 'productList');
}

function changleListType(listType) {
	document.getElementById('listType').value = listType;
//	document.getElementById('listPageNo').value = 0;
	refreshProductList();
}

function changleListTab(listTab) {
	document.getElementById('listTab').value = listTab;
	document.getElementById('listPageNo').value = 0;
	refreshProductList();
}

function changeListSortBy(sortBy, sortDir) {
	document.getElementById('listSortBy').value = sortBy;
	document.getElementById('listSortDir').value = sortDir;
	refreshProductList();
}

function changeListPageNo(pageNo) {
	document.getElementById('listPageNo').value = pageNo;
	refreshProductList();
}

// basket
function addToBasket(productId) {
	ajaxInnerHtmlRequest(
			'ajax.php?module=basket&action=add&productId=' + productId,
			'basketTop');
	showElement('basketAddConfirm');
	setTimeout("hideElement('basketAddConfirm')", 3000);
}

function refreshBasket() {
	ajaxInnerHtmlRequest('ajax.php?module=basket&action=refresh', 'basketTop');
}

// notepad
function addToNotepad(productId) {
	ajaxRequest('ajax.php?module=notepad&action=add&productId=' + productId);
	showElement('notepadAddConfirm');
	setTimeout("hideElement('notepadAddConfirm')", 3000);
}
function removeFromNotepad(productId) {
	ajaxRequest('ajax.php?module=notepad&action=remove&productId=' + productId);
}

//product
function sendTellFriendForm() {
	var link = 'ajax.php?module=product&save=1&page=tellFriend&pseudonim='
			+ document.getElementById('pseudonim').value + '&idProduktu='
			+ document.getElementById('idProduktu').value + '&email='
			+ document.getElementById('email').value + '&tekst='
			+ document.getElementById('tekst').value;
	ajaxInnerHtmlRequest(link, 'powiadom_znajomego');
}

//main
function sendAskForm() {
	var link = 'ajax.php?module=main&save=1&page=ask&pseudonim='
			+ document.getElementById('pseudonim').value + '&phone='
			+ document.getElementById('phone').value + '&email='
			+ document.getElementById('email').value + '&question='
			+ document.getElementById('question').value;
	ajaxInnerHtmlRequest(link, 'zadaj_pytanie');
}

// other
function hideElement(pElementId) {
	document.getElementById(pElementId).style.display = 'none';
	document.getElementById('addConfirmBg').style.display = 'none';
}
function showElement(pElementId) {
	document.getElementById('addConfirmBg').style.display = 'block';
	document.getElementById(pElementId).style.display = 'block';
}

