//var IDValute=1; // 0 - ?, 1 - USD, 2 - RUR
//var DollarRateValueMax=1; // курс пересчета
var USD="у.е.";
var RUR="руб.";

//var price="";
//var quan="";
//var sum="";
//var myTmp="";
//var GoodsValute="";
var ArrGoods = new Array();	// массив товаров
var ArrCurrentFieldValuePairs = new Array();	// массив текущих значений расширенных свойств


// получает цену в валюте ОТЛИЧНОЙ от текущей!
function convert(Price)
{	
	if (IDValute==2) // RUR -> USD
		return normalize(Price/DollarRateValueMax) + " " + USD;
	else	 // USD -> RUR
		return normalize(Price*DollarRateValueMax) + " " + RUR;
}

// получает цену в указанной валюте по (цене и ее валюте)
function GetPriceInValute(Price, PriceValute)
{	if (IDValute==2 && PriceValute!="RUR" && PriceValute!="RU") // текущая валюта = RUR, а цена в USD
	{	return normalize(Price*DollarRateValueMax);
	} else if (IDValute<2 && (PriceValute=="RUR" || PriceValute=="RU"))	// текущая валюта = USD, а цена в RUR
	{	return normalize(Price/DollarRateValueMax);
	}
	if (IDValute==2)	 // текущая валюта = RUR
		return Price;
	else		// текущая валюта = USD
		return Price;
}

// вызывается при смене значения расширенного свойства
function goodsitemChanged(GoodsIDstr, FieldIDstr)
{
	var myField=document.forms.namedItem("goodsForm"+GoodsIDstr).elements.namedItem("idg"+GoodsIDstr+"_f"+FieldIDstr);
	if (myField!=null)
	{	if (myField.value=="0")
		{	alert("Выберите ненулевое значение!");
			//return false;
		}
	} else
	{	alert("Не найден элемент формы по name=" + "idg"+GoodsIDstr+"_f"+FieldIDstr);
		//return false;
	}
	return CalculatePriceForCurrentConfiguration(GoodsIDstr, GetCurrentConfigurationID(GoodsIDstr));
}

// вычистяет и записывает куда надо цену товара исходя из его текущей конфигурации
// конфигурация определяется по совокупности значений расширенных свойств
function CalculatePriceForCurrentConfiguration(GoodsIDstr, ConfigID)
{
//alert("CalculatePriceForCurrentConfiguration");
	var price = "0";
	var currency = "у.е.";
	var i, idCfg;
	var idGood=-1;
	for (i=0; i<ArrGoods.length; i++)
	{
		if (ArrGoods[i].GoodsID==GoodsIDstr)
		{	idGood=i;
			break;
		}
	}
	if (ConfigID<1)
		price = 0;
	else if (idGood>=0) 	// // нашли товар => пройдемся по всем его конфигурациям и найдем-таки эту хренову цену!!!
	{
		i = false;
		for (idCfg=0; idCfg<ArrGoods[idGood].ArrayConfig.length; idCfg++) // идем по всем конфигурациям товара
		{	// для каждой конфигурации проверяем ВСЕ прописанные в ней значения расширенных свойств
			if (ArrGoods[idGood].ArrayConfig[idCfg].ConfigID == ConfigID)
			{
				i=true;
				break;
			}
		}
		if (i)	// нашли конфигурацию!
		{
			price = ArrGoods[idGood].ArrayConfig[idCfg].Price1;
		}
	}

	var myPrice=document.getElementById("price"+GoodsIDstr);
	if (myPrice!=null)
	{	
		if (price>0) {
			//myPrice.innerText="Цена: "+GetPriceInValute(price,GoodsValute)+" "+(IDValute==2 ? RUR : USD)+" ("+convert(GetPriceInValute(price,GoodsValute))+")";
			myPrice.innerHTML="<b>Цена: <font>"+GetPriceInValute(price,GoodsValute)+"</font> "+(IDValute==2 ? RUR : USD)+"</b> ("+convert(GetPriceInValute(price,GoodsValute))+")";
		}
		else
		{	if (ConfigID==-1) {
				//myPrice.innerText="Не все поля характеристик указаны. Для определения цены заполните все поля!";
				myPrice.innerHTML="<font>Не все поля характеристик указаны. Для определения цены заполните все поля!</font>";
			}
			else if (ConfigID==0)
			{
				if (!AutoCreateCfgFlag || idGood<0) // по-старинке, если нет такой конфигурации, то нельзя ее положить в корзину
				{	
					//myPrice.innerText="Нет в наличии такой конфигурации!";
					myPrice.innerHTML="<font>Нет в наличии такой конфигурации!</font>";
				} 
				else  // по-новому, если нет такой конфигурации, то кладем ее в корзину с ценой по умолчанию (из GoodsInfo)
				{
					price = ArrGoods[idGood].DefPrice1; // берем цену по умолчанию!
					myPrice.innerHTML="<font><b>Выбранная конфигурация не определена!</b></font><br> Базовая цена: "+GetPriceInValute(price,GoodsValute)+" "+(IDValute==2 ? RUR : USD)+" ("+convert(GetPriceInValute(price,GoodsValute))+")";
				}
			}
		}
	}
	var myBasket=document.getElementById("basket"+GoodsIDstr);
	if (myBasket!=null)
	{	if (price>0)
			myBasket.style.visibility = "visible";
		else
			myBasket.style.visibility = "hidden";
	}
	// тут надо перебрать все расширенные свойства данного товара и посмотреть цену
	return true;
}

// получить ID текущей конфигурации по выбранным Select'ам!
function GetCurrentConfigurationID(GoodsIDstr)
{
	// надо ловить все idg#IDGOOD#_f	- и брать их значения для нахождения idg#IDGOOD#_f#IDFIELD#
		//<input type="hidden" name="idg#IDGOOD#_f" value="#IDFIELD#" />
		//<select name="idg#IDGOOD#_f#IDFIELD#" STYLE="width:120" onChange="goodsitemChanged('#IDGOOD#','#IDFIELD#');">
		//	<option value="0" STYLE="color:gray">--- Выберите ---</option>
		//	<xsl:apply-templates select="row" />
		//</select>
	var myColl, i, myOb, undef, idGood, idCfg, indexCfg, matchCfg;
	matchCfg=false;
	idCfg = 0;
	indexCfg = 0;
	undef = 0;
	ArrCurrentFieldValuePairs.length = 0;
// сначала заполним все значения полей расширенных свойств из формочки

	myColl = document.forms.namedItem("goodsForm"+GoodsIDstr).elements.namedItem("idg"+GoodsIDstr+"_f");
	if (myColl.length == null)	// только 1 элемент
	{	// анализируем forms.value
		myOb = document.forms.namedItem("goodsForm"+GoodsIDstr).elements.namedItem("idg"+GoodsIDstr+"_f"+myColl.value);
		if (myOb!=null)
		{
			ArrCurrentFieldValuePairs[ArrCurrentFieldValuePairs.length] = new FieldValuePairObj(myColl.value, myOb.value);
			if (myOb.value == 0)
				undef++;
		}
		else
		{
			ArrCurrentFieldValuePairs[ArrCurrentFieldValuePairs.length] = new FieldValuePairObj(myColl.value, 0);
			undef++;
		}
		ArrCurrentFieldValuePairs.length++;
	}
	else	// вернулся массив элементов
	{
		for (i=0; i<myColl.length; i++)
		{
			myOb = document.forms.namedItem("goodsForm"+GoodsIDstr).elements.namedItem("idg"+GoodsIDstr+"_f"+myColl[i].value);
			if (myOb!=null)
			{	ArrCurrentFieldValuePairs[ArrCurrentFieldValuePairs.length] = new FieldValuePairObj(myColl[i].value, myOb.value);
//alert("Имеем: " + myColl[i].value + ", " + myOb.value);
				if (myOb.value == 0)
					undef++;
			}
			else
			{	ArrCurrentFieldValuePairs[ArrCurrentFieldValuePairs.length] = new FieldValuePairObj(myColl[i].value, 0);
				undef++;
			}
			//ArrCurrentFieldValuePairs.length++;	// выполняется автоматически!!!
		}
	}
	if (undef>0)
		return -1;
	//alert("ArrCurrentFieldValuePairs.length = "+ArrCurrentFieldValuePairs.length);
// все значения в ArrCurrentFieldValuePairs - сопоставим их с какой-нть конфигурацией текущего товара!
	i=false;
	for (idGood=0; idGood<ArrGoods.length; idGood++)
	{
		if (ArrGoods[idGood].GoodsID==GoodsIDstr)
		{	i=true;
			break;
		}
	}
	if (i)	// нашли товар => пройдемся по всем его конфигурациям
	{
		for (indexCfg=0; indexCfg<ArrGoods[idGood].ArrayConfig.length; indexCfg++) // идем по всем конфигурациям товара
		{	// для каждой конфигурации проверяем ВСЕ прописанные в ней значения расширенных свойств
			matchCfg=true;
			idCfg = ArrGoods[idGood].ArrayConfig[indexCfg].ConfigID;
//alert("indexCfg = " + indexCfg + ", ArrCurrentFieldValuePairs.length = " + ArrCurrentFieldValuePairs.length);
			for (i=0; i<ArrGoods[idGood].ArrayConfig[indexCfg].ArrayFieldsValues.length; i++) // идем по всем парам расширенных свойств (ID, значение)
			{
//alert("В конфигурации: пара["+i+"]: (" + ArrGoods[idGood].ArrayConfig[indexCfg].ArrayFieldsValues[i].FieldID + ", " + ArrGoods[idGood].ArrayConfig[indexCfg].ArrayFieldsValues[i].ValueID + ")");

				
				for (j=0; j<ArrCurrentFieldValuePairs.length; j++)	// пройдемся по всем заданным в настоящее время расшир.свойствам
				{

//alert("Текущая пара["+j+"]: (" + ArrCurrentFieldValuePairs[j].FieldID + ", " + ArrCurrentFieldValuePairs[j].ValueID + ")");
					
					if (ArrCurrentFieldValuePairs[j].FieldID==ArrGoods[idGood].ArrayConfig[indexCfg].ArrayFieldsValues[i].FieldID)
					{
						if (ArrCurrentFieldValuePairs[j].ValueID!=ArrGoods[idGood].ArrayConfig[indexCfg].ArrayFieldsValues[i].ValueID)
						{	matchCfg=false;
//alert("НЕТ СООТВЕТСТВИЯ");
							break;
						} else
							break;
					}
				}
				if (matchCfg==false)
					break;
			}
			if (matchCfg==true)
				break;
		}
	}
	if (matchCfg==true && idCfg>0)
		return idCfg;
	else
		return 0;
}


// объект-описание товара
function GoodsItemObj(GoodsIDStr, Price1Str, Price2Str, Price3Str, Price4Str)
{
	this.GoodsID = GoodsIDStr;	// GoodsID
	this.DefPrice1 = Price1Str;
	this.DefPrice2 = Price2Str;
	this.DefPrice3 = Price3Str;
	this.DefPrice4 = Price4Str;
	this.ArrayConfig = new Array();	// массив конфигураций - объектов ConfigObj()
	this.AddConfig=AddConfig;	// определили метод AddConfig - добавляет конфигурацию к товару
}//end class

// функция добавления конфигурации
function AddConfig(myConfigObj)
{
	this.ArrayConfig[this.ArrayConfig.length] = myConfigObj;
}

function ConfigObj(ConfigIDStr){
	this.ConfigID = ConfigIDStr;	// идентификатор конфигурации - должен быть > 0
	// цены конфигурации
	this.Currency = "USD"; // USD или RUR
	this.Price1 = 0;
	this.Price2 = 0;
	this.Price3 = 0;
	this.Price4 = 0;
	// пары значений расширенных свойств конфигурации
	this.ArrayFieldsValues = new Array(); // массив содержит пары (имя,значение) - объекты FieldValuePair
	this.AddFieldValuePair = AddFieldValuePair;
}//end class

// добавляет в конфигурацию FieldValuePairObj
function AddFieldValuePair(myFieldValuePairObj)
{
	this.ArrayFieldsValues[this.ArrayFieldsValues.length] = myFieldValuePairObj;
}

function FieldValuePairObj(FieldIDStr, ValueIDStr){
	this.FieldID=FieldIDStr;
	this.ValueID=ValueIDStr;
}//end class

// конфигурации - определения классов !!!
