﻿function error(msg) {
	var showErrors = true;
	if(showErrors)
		alert(msg);	
}
function checkPositiveValue(fieldElement, errorMsg) {
	var val = fieldElement.value
	var reg = /^\d+$/		
	if(!reg.test(val)) {
		alert(errorMsg);
		fieldElement.focus();
		return false;
	}
	return true;
}
function sendCommand(cartName, command, params, requestUrl, elementId) {
	var form = document.getElementById(cartName);
	if(!form)
		return error("form not found");
	var commandField = document.getElementById(cartName + "CommandName");
	if(!commandField)
		return error("commandField not found");
	var paramsField = document.getElementById(cartName + "Parameters");
	if(!paramsField)
		return error("paramsField not found");
	commandField.value = command;
	paramsField.value = params;
	if(!requestUrl) {
		form.submit();		
	}
	else {
		var request = new Request({
			url : requestUrl,
			data : form,
			onSuccess : function(responseText, responseXML) { OnRequestSuccess(elementId, cartName, responseText, responseXML); },
			onFailure : function(xhr) { OnRequestFailure(elementId, cartName, xhr); }
		});
		ShowWaitInfo(elementId, cartName);
		request.send();
	}
}
function GetOuterCartInfoDivName(cartName) {
	return cartName + "_outerInfoDiv";	
}
function GetInnerCartInfoDivName(cartName) {
	return cartName + "_innerInfoDiv";	
}
function GetWaitCartInfoDivName(cartName) {
	return cartName + "_waitInfoDiv";	
}
function GetElementById(elementId) {
	var result = document.getElementById(elementId);
	return $(result);
}
function HideDivElement(element) {
	element.style.display = 'none';	
}
function ShowDivElement(element, position) {	
	if(position) {
		element.style.position = 'absolute';
		element.position({x : position.left, y : position.top})
	}
	element.style.display = 'block';
}
function ShowCartInfoDiv(elementId, cartName) {
	var outerDiv = GetElementById(GetOuterCartInfoDivName(cartName));
	var element = GetElementById(elementId);
	var position = element.getPosition();
	var size = element.getSize();	
	ShowDivElement(outerDiv, { left : position.x, top : position.y + size.y });
}

function ShowWaitInfo(elementId, cartName) {
	var outerDiv = GetElementById(GetOuterCartInfoDivName(cartName));
	var innerDiv = GetElementById(GetInnerCartInfoDivName(cartName));	
	var waitDiv = GetElementById(GetWaitCartInfoDivName(cartName));	
	if(outerDiv.hideTimerId)
		window.clearTimeout(outerDiv.hideTimerId);	
	ShowDivElement(waitDiv);
	HideDivElement(innerDiv);
	ShowCartInfoDiv(elementId, cartName)
	
	
}
function ShowRequestResult(elementId, cartName, text) {
	var outerDiv = GetElementById(GetOuterCartInfoDivName(cartName));
	var innerDiv = GetElementById(GetInnerCartInfoDivName(cartName));
	var waitDiv = GetElementById(GetWaitCartInfoDivName(cartName));	
	if(outerDiv.hideTimerId)
		window.clearTimeout(outerDiv.hideTimerId);
	innerDiv.innerHTML = text;
	HideDivElement(waitDiv);
	ShowDivElement(innerDiv);
	ShowCartInfoDiv(elementId, cartName);
	outerDiv.hideTimerId = window.setTimeout("HideResultDiv('" + cartName + "')", 3500)
}
function HideResultDiv(cartName) {
	var outerDiv = GetElementById(GetOuterCartInfoDivName(cartName));
	HideDivElement(outerDiv);
	outerDiv.hideTimerId = null;
	
}

function OnRequestSuccess(elementId, cartName, responseText, responseXML) {
	ShowRequestResult(elementId, cartName, responseText);	
}
function OnRequestFailure(elementId, cartName, xhr) {
	ShowRequestResult(elementId, cartName, "Ошибка при добавлении<br/>Попробуйте перезагрузить страницу");
}
function addToCart(cartName, itemId, textFieldId, requestUrl) {	
	var textField = document.getElementById(textFieldId);
	if(!textField)
		return error("textField not found");
	if(!checkPositiveValue(textField, "Количество товара введено некорректно"))
		return;
	var params = "" + itemId + "," + textField.value;
	sendCommand(cartName, "ADD", params, requestUrl, textFieldId);
}
function populateFieldsValue(rootElement, idPrefix, resultArray) {	
	var children = rootElement.childNodes;
	var count = children.length;
	for(var i = 0; i < count; i++) {
		var element = children[i];
		if(element.tagName == 'INPUT' && element.id.indexOf(idPrefix) == 0) {
			if(!checkPositiveValue(element, "Количество товара введено некорректно"))
				return false;
			resultArray.push(element.id.substr(idPrefix.length));
			resultArray.push(element.value);
		}
		else {
			if(!populateFieldsValue(element, idPrefix, resultArray))
				return false;
		}
	}
	return true;
}
function saveCart(cartName, textFieldPrefix) {
	var form = document.getElementById(cartName);
	if(!form)
		return error("form not found");
	var params = [];
	if(populateFieldsValue(form, textFieldPrefix, params))	
		sendCommand(cartName, "SAVE", params.join());
	else
		return false;
}
function clearCart(cartName) {
	sendCommand(cartName, "CLEAR", "");
}
function sendOrder(cartName, requiredFieldNames) {
	var form = document.getElementById(cartName);
	if(!form)
		return error("form not found");
	var count = requiredFieldNames.length;
	for(var i = 0; i < count; i++) {
		var elem = document.getElementById(requiredFieldNames[i]);
		if(!elem)
			return error("element not found");
		if(elem.value == "") {
			alert("Не все обязательные поля заполнены");
			elem.focus();
			return false;
		}	
	}
	sendCommand(cartName, "SEND_ORDER", "");
}
function makeOrder(cartName, textFieldPrefix) {
	var form = document.getElementById(cartName);
	if(!form)
		return error("form not found");
	var params = [];
	if(populateFieldsValue(form, textFieldPrefix, params))	
		sendCommand(cartName, "MAKE_ORDER", params.join());
	else
		return false;
}
function deleteFromCart(cartName, itemId) {
	sendCommand(cartName, "DELETE", itemId);
}
