//var IDValute=1; // 0 - ?, 1 - USD, 2 - RUR
var DollarRateValueMax=2; // курс пересчета
var USD="у.е.";
var RUR="грн.";

//var price="";
//var quan="";
//var sum="";
//var myTmp="";
//var GoodsValute="";
var ArrGoods = new Array();	// массив товаров
var ArrCurrentFieldValuePairs = new Array();	// массив текущих значений расширенных свойств




function g_sort(template_filename,idc,stype,s_name,s_name_sort){
	document.write("<a href='"+template_filename+"idc="+idc+"&stype="+stype+"' title='Сортировать по "+s_name_sort+"'>"+s_name+"</a>");
}

// получает цену в валюте ОТЛИЧНОЙ от текущей!
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.getElementById("idg"+GoodsIDstr+"_f"+FieldIDstr);
	if (myField!=null)
	{	if (myField.value=="0")
		{	alert("Выберите ненулевое значение!");
			//return false;
		}
	} else
	{	alert("Не найден элемент формы по id=" + "idg"+GoodsIDstr+"_f"+FieldIDstr);
		//return false;
	}
	return CalculatePriceForCurrentConfiguration(GoodsIDstr, GetCurrentConfigurationID(GoodsIDstr));
}

// вычистяет и записывает куда надо цену товара исходя из его текущей конфигурации
// конфигурация определяется по совокупности значений расширенных свойств
function CalculatePriceForCurrentConfiguration(GoodsIDstr, ConfigID)
{

	var price = "0";
	var price2 = "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;
			price2 = ArrGoods[idGood].ArrayConfig[idCfg].Price2;
		}
	}

	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))+")";
//			myPrice.innerHTML="Цена 1: <b>"+GetPriceInValute(price,GoodsValute)+" "+(IDValute==2 ? RUR : USD)+"</b>";
			myPrice.innerHTML="<p style='margin: 0; padding: 0;'>Цена: <nobr><b>"+GetPriceInValute(price,GoodsValute)+" "+(IDValute==2 ? RUR : USD)+"</b></nobr></p>Спец цена: <nobr><b>"+GetPriceInValute(price2,GoodsValute)+" "+(IDValute==2 ? RUR : USD)+"</b></nobr>";
		}
		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="<table border=0 cellspacing=0 cellpadding=0><tr valign=top><td><font color=red><b>Выбранного размера нет вналичии</b></font><br></div></td></tr></table>";
				}
			}
		}
	}
	var myBasket=document.getElementById("basket"+GoodsIDstr);
		if (myBasket!=null)
	{	if (price>0)
			myBasket.style.visibility = "hidden";
		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["goodsForm"+GoodsIDstr].elements["idg"+GoodsIDstr+"_f"];

	if (myColl.length == null)	// только 1 элемент
	{	// анализируем forms.value
		myOb = document.Form("goodsForm"+GoodsIDstr).item("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++)
		{
if (myColl[i].value != 0 ){ //27.06.07
			myOb = document.forms["goodsForm"+GoodsIDstr].elements["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++;	// выполняется автоматически!!!
}//27.06.07
		}
	}

	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.ArrayExtFields = new Array();	// массив расширенных свойств - объектов ExtFieldObj()
	this.AddExtField=AddExtField;	// определили метод AddConfig - добавляет конфигурацию к товару
	this.ArrayConfig = new Array();	// массив конфигураций - объектов ConfigObj()
	this.AddConfig=AddConfig;	// определили метод AddConfig - добавляет конфигурацию к товару
}//end class

// функция добавления расширенного свойства
function AddExtField(myExtFieldObj)
{
	this.ArrayExtFields[this.ArrayExtFields.length] = myExtFieldObj;
}

// функция добавления конфигурации
function AddConfig(myConfigObj)
{
	this.ArrayConfig[this.ArrayConfig.length] = myConfigObj;
}

function ConfigObj(ConfigIDStr){
	this.ConfigID = ConfigIDStr;	// идентификатор конфигурации - должен быть > 0
	// цены конфигурации
	this.Currency = "USD"; // USD или RUR
	this.Characteristic = "";	// название конфигурации из 1С
	this.Remainder = 0;	// остаток товара в характеристике
	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

// конфигурации - определения классов !!!

//////////////////////////////////////////////////////////////////////////////////////////
//////////////		описание карточки товара при выборе конфигураций	//////////////////
//////////////////////////////////////////////////////////////////////////////////////////

// объект представляющий расширенное свойство
function ExtFieldObj(FieldIDStr, NameStr){
	this.FieldID=FieldIDStr;	// идентификатор расширенного свойства
	this.Name=NameStr;	// название свойства
	this.ArrayExtFieldsValues = new Array(); // массив содержит значения свойства - объекты ExtFieldValueObj
	this.AddFieldValue = AddFieldValue;
}//end class

// добавляет в массив значений расширенного свойства значение ExtFieldValueObj
function AddFieldValue(myExtFieldValueObj)
{
	this.ArrayExtFieldsValues[this.ArrayExtFieldsValues.length] = myExtFieldValueObj;
}

// объект представляющий ЗНАЧЕНИЕ расширенного свойства
function ExtFieldValueObj(ValueIDStr, ValueStr){
	this.ValueID=ValueIDStr;	// идентификатор значения свойства
	this.Value=ValueStr;	// само значение свойства
}//end class

// вызывается при смене значения селекта конфигурации
function goodsCfgChanged(GoodsIDstr)
{	var ConfigID=0;
	var myField=document.getElementById("idg"+GoodsIDstr+"_cfg");
	if (myField==null)
	{	alert("Не найден элемент формы по id=" + "idg" + GoodsIDstr + "_cfg");
		//return false;
	}
	ConfigID = get_selected(myField);
	if (ConfigID=="0")
	{	alert("Выберите конфигурацию!");
		//return false;
	}
	return SetPriceAndFieldsForConfiguration(GoodsIDstr, ConfigID);
}

// вычистяет и записывает куда надо цену товара исходя из его текущей конфигурации
// конфигурация определяется по совокупности значений расширенных свойств
function SetPriceAndFieldsForConfiguration(GoodsIDstr, ConfigID)
{
	var price = "0";
	var price2 = "0";
	var currency = "у.е.";
	var i, HiddenFieldObj;
	var curCfg = GetConfigObj(GoodsIDstr, ConfigID);
	if (ConfigID<1)
		price = 0;
	// установим все хидден-поля для корректного определения конфигурации движком
	if (curCfg!=null)
	{
		price = curCfg.Price1;
		price2 = curCfg.Price2;
		for (i=0; i<curCfg.ArrayFieldsValues.length; i++)
		{
			HiddenFieldObj = document.getElementById("idg"+GoodsIDstr+"_f"+curCfg.ArrayFieldsValues[i].FieldID);
			if (HiddenFieldObj!=null)	// нашил поле
			{
				HiddenFieldObj.value = curCfg.ArrayFieldsValues[i].ValueID;
				//alert("Name=" + HiddenFieldObj.name + ", Value=" + HiddenFieldObj.value);
			}
		}
	}
	// покажем или спрачем цену
	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))+")";
//			myPrice.innerHTML="Цена 1: <b>"+GetPriceInValute(price,GoodsValute)+" "+(IDValute==2 ? RUR : USD)+"</b>";
		
					if (specid == "5" || specid == "6"){ myPrice.innerHTML="<p style='margin: 0; padding: 0;'>Цена: <nobr><b><STRIKE>"+GetPriceInValute(price,GoodsValute)+" "+(IDValute==2 ? RUR : USD)+"</STRIKE></b></nobr></p>Спец цена: <nobr><b>"+GetPriceInValute(price2,GoodsValute)+" "+(IDValute==2 ? RUR : USD)+"</b></nobr>";
			}
			else { 
				myPrice.innerHTML="<p style='margin: 0; padding: 0;'>Цена: <nobr><b>"+GetPriceInValute(price,GoodsValute)+" "+(IDValute==2 ? RUR : USD)+"</b></nobr></p>Спец цена: <nobr><b>"+GetPriceInValute(price2,GoodsValute)+" "+(IDValute==2 ? RUR : USD)+"</b></nobr>";
		}
		}
		else
		{
			myPrice.innerHTML="<font>Выберите конфигурацию!</font>";
		}
	}
	// покажем или спрачем корзину
	var myBasket=document.getElementById("basket"+GoodsIDstr);
	if (myBasket!=null)
	{	if (price>0)
			myBasket.style.visibility = "hidden";
		else
			myBasket.style.visibility = "hidden";
	}
	return true;
} // SetPriceAndFieldsForConfiguration


// находим объект товара
function GetGoodsObj(GoodsIDstr)
{
	var i;
	var curGoods = null;
	for (i=0; i<ArrGoods.length; i++)
	{
		if (ArrGoods[i].GoodsID==GoodsIDstr)
		{	curGoods = ArrGoods[i];
			break;
		}
	}
	return curGoods;
} // GetGoodsObj

// находим объект конфигурации
function GetConfigObj(GoodsIDstr, ConfigID)
{
	var i, idCfg, HiddenFieldObj;
	var curGoods = GetGoodsObj(GoodsIDstr);
	var curCfg = null;
	if (curGoods!=null) 	// нашли товар => пройдемся по всем его конфигурациям и найдем нужную
	{
		i = false;
		for (idCfg=0; idCfg<curGoods.ArrayConfig.length; idCfg++) // идем по всем конфигурациям товара
		{	// для каждой конфигурации проверяем ВСЕ прописанные в ней значения расширенных свойств
			if (curGoods.ArrayConfig[idCfg].ConfigID == ConfigID)
			{
				curCfg = curGoods.ArrayConfig[idCfg];
				i=true;
				break;
			}
		}
	}
	return curCfg;
} // GetConfigObj

// получаем значение расширенного свойства из объекта ExtFieldObj по ValueID
function GetFieldValueByValueID(myExtFieldObj, ValueID)
{
	var i;
	var res="";
	for (i=0; i<myExtFieldObj.ArrayExtFieldsValues.length; i++)
	{
		if (myExtFieldObj.ArrayExtFieldsValues[i].ValueID == ValueID)
		{
			res = myExtFieldObj.ArrayExtFieldsValues[i].Value;
			break;
		}
	}
	return res;
}

// получаем название конфигурации для вывода на страницу
function GetName4Config(GoodsIDstr, ConfigID)
{
	var ConfigName="", st;
	var ConfigNameSuffix="";
	var i, j, HiddenFieldObj;
	var curGoods = GetGoodsObj(GoodsIDstr);
	var curCfg = GetConfigObj(GoodsIDstr, ConfigID);
	if (curCfg!=null)	// нашли конфигурацию -> пройдемся по всем полям с типом 50 и составим по ним название!
	{
		for (i=0; i<curCfg.ArrayFieldsValues.length; i++)
		{
			HiddenFieldObj = document.getElementById("idg"+GoodsIDstr+"_f"+curCfg.ArrayFieldsValues[i].FieldID);
			if (HiddenFieldObj!=null)	// нашли поле, значит это свойство имеет тип 50!
			{
				for (j=0; j<curGoods.ArrayExtFields.length; j++)
				{
					if (curGoods.ArrayExtFields[j].FieldID == curCfg.ArrayFieldsValues[i].FieldID)
					{
						st = curGoods.ArrayExtFields[j].Name + ": " + GetFieldValueByValueID(curGoods.ArrayExtFields[j], curCfg.ArrayFieldsValues[i].ValueID);
						break;
					}
				}
				if (ConfigName=="")
					ConfigName = st;
				else
					ConfigName = "; " + st;
			}

			if (curCfg.ArrayFieldsValues[i].FieldID==28)	// Наличие
			{
				ConfigNameSuffix="";
				if (curCfg.ArrayFieldsValues[i].ValueID==193)	// В наличии
				{
					if (curCfg.Remainder<=0)
						ConfigNameSuffix="-1";	// не отображать конфигурацию
				}
				else if (curCfg.ArrayFieldsValues[i].ValueID==194)	// Под заказ
				{
					ConfigNameSuffix = " (Под заказ)";
				}
				else if (curCfg.ArrayFieldsValues[i].ValueID==195)	// Не ожидается
				{
					if (curCfg.Remainder<=0)
						ConfigNameSuffix="-1";	// не отображать конфигурацию
				}
				else if (curCfg.ArrayFieldsValues[i].ValueID==196)	// Ожидается
				{
					ConfigNameSuffix = " (Ожидается)";
				}
				else if (curCfg.ArrayFieldsValues[i].ValueID==867)	// Нет
				{
					if (curCfg.Remainder<=0)
						ConfigNameSuffix="-1";	// не отображать конфигурацию
				}
			}
		}
	}
	if (ConfigNameSuffix=="-1")
		return "";	// возвращаем пустое имя, чтобы конфигурация не добавилась в селект
	else
		return ConfigName+ConfigNameSuffix;
}

// проверка того, что указанная конфигурация (ConfigID) товара (GoodsID) есть в наличии
// т.е. есть пара (28, 193)
function IsConfigAvailabilе(GoodsID, ConfigID){
	var cfg = GetConfigObj(GoodsID, ConfigID);
	if (cfg==null)
		return false;
	var IsAvailable = false;
	for (i=0; i<cfg.ArrayFieldsValues.length; i++) // идем по всем парам расширенных свойств (FieldID, ValueID)
	{
		if (cfg.ArrayFieldsValues[i].FieldID==28 && cfg.ArrayFieldsValues[i].ValueID==193)	// FieldID==28 - это свойство наличие
		{
			IsAvailable = false;
			break;
		}
	}
	return IsAvailable;
}

// проверка того, что указанная конфигурация (ConfigID) товара (GoodsID) есть в наличии
// т.е. есть пара (28, 193)
function GetAvailabilеValueID4Config(GoodsID, ConfigID){
	var cfg = GetConfigObj(GoodsID, ConfigID);
	if (cfg==null)
		return null;
	for (i=0; i<cfg.ArrayFieldsValues.length; i++) // идем по всем парам расширенных свойств (FieldID, ValueID)
	{
		if (cfg.ArrayFieldsValues[i].FieldID==28)	// FieldID==28 - это свойство наличие
		{
			return cfg.ArrayFieldsValues[i].ValueID;
		}
	}
	return null;
}

function AddConfigInSelect(oSelect, MyValue, MyText){
	if (MyText!="")
		AddInSelect(oSelect,MyValue,MyText);
}
