// JavaScript Document
// Файл содержит скрипты для main.xsl


// Объект XMLHttpRequest (или, сокращенно, XHR) дает возможность браузеру делать HTTP-запросы
// к серверу без перезагрузки страницы.  Несмотря на слово XML в названии, XMLHttpRequest может 
// работать с данными в любом текстовом формате, и даже c бинарными данными. 
// Объект XMLHttp создавался с целью дать в руки разработчикам инструмент запуска запросов HTTP из 
// любого места в приложении. По замыслу создателей эти запросы должны были возвращать документы 
// в формате XML; таким образом, объект XMLHttp представляет простой способ доступа к информации, 
// заключенной в документах XML. Поскольку XMLHttp фактически явялется элементом правления ActiveX,
// он мог применяться не только на web страницах, но и в обычных настольных приложениях Windows,
// однако в сети его популярность выросла гораздо быстрее. 
// Подметив это обстоятельство, раработчики Mozilla воспроизвели функциональность XMLHttp в своем браузере Firefox
// Прежде чем с объектом XMLHttp можно будет работать, его, понятное дело, надо создать. VAdim.

function createXMLHttp() {
 if( typeof XMLHttpRequest!='undefined'	)
   //      if( typeof window.ActiveXObject == 'undefined'	) 	
   {
   // для браузеров аля Mozilla
   // alert("XMLHttpRequest library for mozilla!");
    return new XMLHttpRequest();
   }
   else
   { // для Internet Explorer (all versions)
     var aVersions = ["MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0",
                    "MSXML2.XMLHttp","Microsoft.XMLHttp"];
     for (var i = 0; i < aVersions.length; i++) 
     {
       try 
       { //
         //alert("XMLHttpRequest attapmt "+i);		
         var oXmlHttp = new ActiveXObject(aVersions[i]);
         // alert(aVersions[i]); 
         return oXmlHttp;
       }
       catch (oError) 
       { 
       /* поскольку это элемент управления ActiveX, любая ошибка создания объекта будет
        возбуждать исключительную ситуацию, а это означает что попытки создания
        объекта необходимо предпринимать внутри конструкции try...catch.
        В данном случае, если обнаружена ошибка, мы
        ничего не делаем, создать объект с данной версией компонента не удалось.
       */
       }
     }
     alert (" Can not create XMLHttp. Невозможно создать объект XMLHttp.");
     return null;
  }
}
// *************************************************
// Обьект xmlDOMTree() это DOM дерево полученное из XML файла или строки

function xmlDOMTree()
{
// *************************************************
 this.xmlAsString=function()
 {
  return MakeTextStringFromXML(this.xml);
 }		
 // *************************************************
 this.createXml=function()
 {
  var myXmlText="<?xml version='1.0'?><tmp></tmp>";
  //Explorer
  if (window.ActiveXObject)
  {
   this.xml=new ActiveXObject("Microsoft.XMLDOM");
   this.xml.async=false;
   this.xml.loadXML(myXmlText);
   if (this.xml.parseError.errorCode !=0) { alert("VA! Error loading Simple XML string " + this.parseError.reason); return null; }
  }
  //Opera, Mozilla, Firefox
  else
  {
   var xmlParser=new DOMParser();
   try { this.xml=xmlParser.parseFromString(myXmlText,"text/xml"); } 
   catch (e) {alert("VA! Errror - parse XML from string in Mazilla "+e.message);return null;}	

   if (this.xml.documentElement.tagName.toUpperCase() == 'PARSEERROR') 
   { alert("VA! Error loading Simple XML string  in xmlParser.parseFromString - Mazilla");
	 return  null;
   }			  
  }
  return 1;
 }
// *************************************************
// *************************************************
 this.xml=null;
 this.xsl=null;
}
// *************************************************	
// Запрос xmlhttp регулярно отчитывается о своем состоянии через вызов функции xmlhttp.onreadystatechange.
// Состояние под номером 4 означает конец выполнения (получен ответ), поэтому функция-обработчик при каждом вызове 
// проверяет - не настало ли это состояние.
// Свойство status содержит код статуса HTTP, передаваемое в ответа, а свойство statusText - текст описание статуса 
// (например "ОК" или "Not found"). Эти два метода позволяют убедиться, что получены именно те данные,
// которые вы запрашивали, или сообщить пользователю о возникшей ошибке:		
// Для HTTP-запросов - статусный код ответа сервера: 200 - OK, 404 - Not Found, и т.п. 
// Браузер Internet Explorer может также присвоить status код ошибки WinInet, например 12029 для ошибки "cannot connect".

function serveXMLLHttpRequest(xmlTree,oXMLHttp,oTimeOut)
{
 if(oXMLHttp.readyState!=4){return;}
 clearTimeout(oTimeOut) // очистить таймаут при наступлении readyState 4
 if (oXMLHttp.status == 200) 
 {
   if (xmlTree== null) {return;}
   // alert(" Poimali "+oXMLHttp.statusText+" oXMLHttp.status "+ oXMLHttp.status+ " Отправляли  URL?param ");			
   var xmlText=oXMLHttp.responseText;
   //Explorer
   if (window.ActiveXObject)
   {
	  xmlTree.xml=new ActiveXObject("Microsoft.XMLDOM");
	  xmlTree.xml.async="false";
	  xmlTree.xml.loadXML(xmlText);
   }	
   //Opera, Mozilla, Firefox
   else
   {
      var xmlParser=new DOMParser();
      try { xmlTree.xml=xmlParser.parseFromString(xmlText,"text/xml"); } 
      catch (e) { alert("VA! Parse XML from string Error - Mazilla XMLHttp "+e.message);  return null;}	
      if (xmlTree.xml.documentElement.tagName.toUpperCase() == 'PARSEERROR')
			    { alert("VA! Errror - parse XML from string in Mazilla Serve XMLHttp. tagName = parsererror "+" xmlText= "+xmlText); return  null; }		
       if (xmlTree.xml.documentElement.tagName == 'VA_ERROR')	{ alert("VA! Server operation Errror msg = "+xmlText); return  null; }
   }	
 }
 else
 {
    // вызвать обработчик ошибки с текстом ответа					 
    alert("VA! Server ansver status ="+myXMLHttp.status+" is not OK status text is "+myXMLHttp.statusText);	
	return null;
 }
}
// *************************************************	
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

function sendAjaxRequestAndGetAnswer(url,parameters,RequestText,AnswerDomTree,FlagSync,FlagBinData) {
		
 myXMLHttp = createXMLHttp();
 // Установка обработчика запроса  serveXMLLHttpRequest(xmlTree,myXMLHttp) 
 // Запрос xmlhttp регулярно отчитывается о своем состоянии через вызов функции xmlhttp.onreadystatechange.
 // Состояние под номером 4 означает конец выполнения (получен ответ), поэтому функция-обработчик при каждом вызове 
 // проверяет - не настало ли это состояние.
 if (typeof window.ActiveXObject != 'undefined' ) 
 {
   // alert(" sendXMLDataToServerAndLoadXMLDataAnswer Start "+url+"?"+parameters+'\n'+" DATA ="+data);				
   myXMLHttp.onreadystatechange = function() { serveXMLLHttpRequest(AnswerDomTree,myXMLHttp,timeout); }
 }
 else
 {
   //alert("Mazilla sendXMLDataToServerAndLoadXMLDataAnswer Start "+url+"?"+parameters+'\n'+" DATA ="+data);							
   myXMLHttp.onload = function() { serveXMLLHttpRequest(AnswerDomTree,myXMLHttp,timeout);	}             																						
 }
 // Таймаут 50 секунд
 var timeout = setTimeout( function(){ myXMLHttp.abort(); alert(" VA! XMLHttpRequest process - Time over") }, 50000);
 if (RequestText != "")
 {
   // false запретить продолжение работы скриптов до полной загрузки данных с сервера 		
   myXMLHttp.open( "POST", url+"?"+parameters, FlagSync );
   myXMLHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
   myXMLHttp.setRequestHeader("Content-length", RequestText.length);
   myXMLHttp.setRequestHeader("Connection", "close");				 
   // data=encodeURIComponent(data);
   myXMLHttp.send(RequestText);		 
 }
 else 
 { 
   myXMLHttp.open( "GET", url+"?"+parameters, FlagSync ); 
   myXMLHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
   myXMLHttp.setRequestHeader("Connection", "close");				 		 
   myXMLHttp.send(null);
 }
 // Таймаут 50 секунд
 // var  timeout=null;
 // var timeout = setTimeout( function(){ myXMLHttp.abort(); alert(" VA! XMLHttpRequest process - Time over") }, 50000);
}
// *************************************************		
// *************************************************
// Простейшая модель документа XML - это представление в виде дерева.
// Вожно понимать, что HTML страница - это тоже XML данные
// Браузеры для работы с HTML имеют большие возможности, чем
// предусмотрено стандартом W3C по DOM (Document Object Model - level 1)для XML 
// Интерфейс Node соответствует абстрактному узлу дерева XML- или HTML-документа. 
// Для работы с XML документом стандартом W3C по DOM для обьекта Node не предусмтрено
// свойство Node.xml - которое для EI6 возвращает весь код XML данного узла и всех
// его потомков с аттрибутами и т.д и т.п. в виде строки, что весьма удобно для
// работы с XMLHttpRequest.
// Короче для работы с FireFox и т.д. нужен аналог. Vadim.
// Данная версия поддерживает не все типы узлов

function MakeTextStringFromXML(objNode) {
 var CurrentString='';
 var intCount=0;
 var intNode=0;
 var objAttrList=null;
 
 // не открываем открывающий Tag для узлов типа Document; 
 // if (objNode.nodeType == 9) { CurrentString = CurrentString;}
 // открываем открывающий Tag для узлов типа Element;
 if (objNode.nodeType == 1) { CurrentString = CurrentString+ "<"+ objNode.nodeName;}
 // открываем открывающий Tag для узла типа PROCESSING INSTRUCTION добавляем имя
 if (objNode.nodeType == 7) { CurrentString = CurrentString+"<?"+ objNode.nodeName; }
	
 // добавляем значения атрибутов
 objAttrList = objNode.attributes;
 if (objAttrList != null)
 {
  intCount = objAttrList.length;
	if (intCount >0)
	{
	 for (intAttr =0; intAttr < intCount; intAttr++)
	 {
		 CurrentString = CurrentString+ " "+objAttrList.item(intAttr).nodeName+'= "'+objAttrList.item(intAttr).nodeValue+'"';
	 }
	}
 }
 // закрываем открывающий Tag для узлов типа Element;	
 if (objNode.nodeType == 1) { CurrentString = CurrentString+ ">";}
 // закрываем открывающий Tag для узлов типа PROCESSING INSTRUCTION 
 if (objNode.nodeType == 7) { CurrentString = CurrentString+ "?>";  } 
 
 // для узла типа текст добавляем сам текст
 if (objNode.nodeType == 3) { CurrentString = CurrentString+ objNode.nodeValue; }

 // обработка потомков, идем вглубь дерева
 intCount=objNode.childNodes.length;
 if (intCount > 0)
 {
	 for (intNode = 0; intNode < intCount; intNode++)
	 {
		 // всех потомков рекурсивно вставляем в CurrentString
		CurrentString = CurrentString+ MakeTextStringFromXML(objNode.childNodes.item(intNode));
	 }
 }

 // Close Tag
 if (objNode.nodeType == 1)  { CurrentString = CurrentString+ "</"+ objNode.nodeName+">";  }
 return CurrentString;
}


// **************************	
function isSilverlightInstalled() {
  var isSilverlightInstalled = false;
  try {
    try {
      var slc = new ActiveXObject('AgControl.AgControl');
      isSilverlightInstalled = true;
    } catch (e) {
        if ( navigator.plugins["Silverlight Plug-In"] ) {
        isSilverlightInstalled = true;
      }
    }
  }
  catch (e){}
  return isSilverlightInstalled;
}

// **************************	
function detectFlash(version) 
{ 
 if(navigator.plugins && navigator.plugins.length)
 { 
   var plugin = navigator.plugins["Shockwave Flash"]; 
   if (plugin == undefined){ return false; }
// If a plugin is found, the code still needs to check for the installed version. This is 
// achieved by retrieving the third item in the plugin's description property and checking it against the passed version parameter:

 var ver = navigator.plugins["Shockwave Flash"].description.split(" ")[2]; 
 return (Number(ver) >= Number(version))

//  Next, the script checks for the plugin in Internet Explorer. In JavaScript, it achieves this
//  by trying to create a new Flash ActiveX object with the passed version. If JavaScript is unable to
// create the object, it will throw an exception, which is why the entire expression must be enclosed inside a try-catch block:

 } 
 else if (ie && typeof (ActiveXObject) == "function") 
 {   
 try {  var flash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + version);  return true; } 
 catch(e) { return false; } 
 }
}

// **************************	
function DoPicZoom(picNum)
{
 var strSrc=pictures[picNum];
 var strAlt=pictures[picNum];
 var mediaSrc=mediaFiles[picNum];
 var mediaDscr=mediaDescr[picNum]; 
 
 visibilityManager("off");

 document.getElementById('alles').style.visibility = "hidden";
 document.getElementById('photo-place').style.visibility = "visible";
 document.getElementById('photo-place').style.left=10;
 document.getElementById('photo-place').style.top=10;

 if (mediaDscr == "")  { mediaDscr=strSrc; }

 document.getElementById('photo-place').innerHTML = "<table  border=1  align='center' cellpadding=0 cellspacing=0 border=0 ><tr><td><a href=# onclick='DoPicHide(); return false'><img alt='"+mediaDscr+"' src=" + strSrc + " border=1 ></a></td></tr><tr><td align=center><font color=#000000 face='Geneva, Tahoma, Verdana, Arial, sans-serif' size=2>" + mediaDscr + "</font></td></tr><tr><td></br>Чтобы вернуться в основной просмотр, кликните мышкой на картинке</br>.</td></tr></table>";

}
// **************************	

function DoPicHide()
{
 document.getElementById('alles').style.visibility = "visible";
 document.getElementById('photo-place').innerHTML = "";
 document.getElementById('photo-place').style.visibility = "hidden";
 visibilityManager("auto");
}
// **************************	
function visibilityManager(parOnOffAuto)
{
 if (parOnOffAuto == "off" )
 {
  if (document.all) { document.all['PicRefForwardId'].style.visibility="hidden";}
  else { if (document.getElementById) document.getElementById('PicRefForwardId').style.visibility="hidden";}

  if (document.all) { document.all['PicRefBackId'].style.visibility="hidden";}
  else { if (document.getElementById) document.getElementById('PicRefBackId').style.visibility="hidden"; }
  return;
 }

 if (parOnOffAuto == "on" )
 {
 if (document.all) { document.all['PicRefForwardId'].style.visibility="visible";}
 else { if (document.getElementById) document.getElementById('PicRefForwardId').style.visibility="visible"; }
 if (document.all) { document.all['PicRefBackId'].style.visibility="visible";}
 else { if (document.getElementById) document.getElementById('PicRefBackId').style.visibility="visible"; }
 return;
 }

 if ( currentPicture < (pictures.length-1))
 {
  if (document.all) { document.all['PicRefForwardId'].style.visibility="visible";}
  else { if (document.getElementById) document.getElementById('PicRefForwardId').style.visibility="visible"; }
 }
 else
 {
  if (document.all) { document.all['PicRefForwardId'].style.visibility="hidden";}
  else { if (document.getElementById) document.getElementById('PicRefForwardId').style.visibility="hidden";}
 }
  
 if ( currentPicture > 0)
 {
  if (document.all) { document.all['PicRefBackId'].style.visibility="visible";}
  else { if (document.getElementById) document.getElementById('PicRefBackId').style.visibility="visible"; }							
 }
 else 
 {
  if (document.all) { document.all['PicRefBackId'].style.visibility="hidden";}
  else { if (document.getElementById) document.getElementById('PicRefBackId').style.visibility="hidden"; }
 }	 
}
						
// **************************	
function MaxWidthPicForBlockCalculator()
{
 // расчет максимальной ширины одной иконки	
 for (i=0; i < pictures.length; i++)
 {
  // урезание в максимальный размер маленьких картинок по ширине - рабочее
  /*
  if 	(widthes[i] > MaxBlockPicWidth) 
  {
  k= widthes[i] / MaxBlockPicWidth;
  Blwidthes[i]=MaxBlockPicWidth;
  Blheightes[i]=Math.floor(heightes[i] / k);
  } 
  */
  if (heightes[i] > MaxBlockPicHeight) 
  {
   k= heightes[i] / MaxBlockPicHeight;
   Blheightes[i]=MaxBlockPicHeight;
   Blwidthes[i]=Math.floor(widthes[i] / k);
  }
	// К вопросу о типах данных Java Script
	// преобразуем к численному типу Blwidthes[i]=Math.floor(Blwidthes[i])
	// разрыв мозга от проблем со слабо-типизированными данными
	// FireFox, IE тоже самое 
	// массивы были проинициализированы численными значениями в виде строк
	// некоторые элементы массива пребразованию в Integer не подверглись
	// см. if (heightes[i] > MaxBlockPicHeight), при некоторых данных
	// TmpWMax- оказался тоже строкой, поэтому TmpWMax +3 если TmpWMax="88"+3=883
	// хотя всё равно не понятно до конца почему так, но след строка решила
	// проблему для FireFox и IE, что говорит о странностях Java Script,
	// а не об ошиках в браузере
  // конкретно см.	Init_Show_Pic() 
	// blockSize=(TotalSpaceWidth / (MaxWidthPicForBlock+3)) 
	// MaxWidthPicForBlock+3 превращался в из 88+3 в 883
	// стоит повнимательней почитать про типы данных

  // почитал : В выражениях, соединяющих числовые и строковые значения операцией +, 
	// JavaScript преобразует числа в строки, например:
	// x = "Ответ равен " + 21  // возвращает "Ответ равен 21"
  // y = 21 + "  - вот ответ" // возвращает "21 - вот ответ"
  // В остальных случаях JavaScript пытается преобразовать строку в число, например:
  //   a = "21" - 1 // возвращает 20
  //   b = "21" + 1 // возвращает 211 
	// хочется верить, у разработчиков Java Script, были серьёзные причины так сделать. 
	else Blwidthes[i]=Math.floor(Blwidthes[i]);
 } 	
 var TmpWMax=0; 
 var TmpHMax=0;  
 for (i=0; i < pictures.length; i++)
 {
  if (TmpWMax < Blwidthes[i] )  { TmpWMax = Blwidthes[i];}
  if (TmpHMax < Blheightes[i] ) { TmpHMax = Blheightes[i];}	
 }
 return Math.floor(TmpWMax);
}
// **************************							
function setupBlockOfPictures()
{		
var BlockElement=document.getElementById("placeForPicturesBlock");				
								
 if (blockOffset > currentPicture)
  if ((blockOffset-blockSize) < 0 ){  blockOffset=0 }
  else { blockOffset=blockOffset-blockSize;}
					  
 if ( currentPicture > (blockOffset+blockSize-1)) 
 { 
  if ((blockOffset+(2*blockSize)) > pictures.length-1) {blockOffset=pictures.length-blockSize;}
  else {blockOffset=currentPicture;}
 }
							
 for (i=0; i < blockSize; i++)
 {
  CurrentPicWidth=Blwidthes[blockOffset+i];
  CurrentPicHeight=Blheightes[blockOffset+i];
							
  // урезание в максимальный размер маленьких картинок по ширине - рабочее
  /*
  if 	(CurrentPicWidth > MaxBlockPicWidth) 
  {
  k= CurrentPicWidth / MaxBlockPicWidth;
  CurrentPicWidth=MaxBlockPicWidth;
  CurrentPicHeight=CurrentPicHeight / k;
  } 
  */
  if (CurrentPicHeight > MaxBlockPicHeight) 
  {
   k= heightes[blockOffset+i] / MaxBlockPicHeight;
   CurrentPicHeight=MaxBlockPicHeight;
   CurrentPicWidth=widthes[blockOffset+i] / k;
  }
  BlockElement.childNodes.item(i).childNodes.item(0).setAttribute("src",pictures[blockOffset+i]);
  BlockElement.childNodes.item(i).childNodes.item(0).setAttribute("width",CurrentPicWidth);	
  BlockElement.childNodes.item(i).childNodes.item(0).setAttribute("height",CurrentPicHeight);
  BlockElement.childNodes.item(i).childNodes.item(0).setAttribute("alt",pictures[blockOffset+i]);	
  BlockElement.childNodes.item(i).childNodes.item(0).setAttribute("hspace",3);	

  // Вариант показа полной картинки с использованием слоев

  var j=i+blockOffset;
  BlockElement.childNodes.item(i).setAttribute("href","javascript: DoPicZoom("+j+")");
  //  BlockElement.childNodes.item(i).setAttribute("onclick","javascript: DoPicZoom("+j+"); return false;");
	
  // Вариант с открытием нового окна. При этом состояние окна с катинками сбрасывается
  // BlockElement.childNodes.item(i).setAttribute("href",pictures[blockOffset+i]);  
  
  if ((blockOffset+i) == currentPicture) {BlockElement.childNodes.item(i).childNodes.item(0).setAttribute("border","1");}
  else BlockElement.childNodes.item(i).childNodes.item(0).setAttribute("border","0");
 }
}
						
// **************************	
// **************************	
// **************************						
function setupCurrentPicAndAdjustSize()
{

 var strSrc=pictures[currentPicture];
 var strAlt=pictures[currentPicture];
 var mediaSrc=mediaFiles[currentPicture];
 var mediaDscr=mediaDescr[currentPicture];


 // Устанавливаем имя файла для сохранения пользователем.
 document.getElementById("PicDownLaodId").removeAttribute("href");
 if (String(mediaSrc) == "") document.getElementById("PicDownLaodId").setAttribute("href","?download=media&download-file="+strSrc);
 else document.getElementById("PicDownLaodId").setAttribute("href","?download=media&download-file="+mediaSrc);
 
 mediaSrc=String(mediaSrc);	 	 
 mediaSrc=mediaSrc.toUpperCase();
 
 CurrentPicWidth=Number(widthes[currentPicture]);
 CurrentPicHeight=Number(heightes[currentPicture]);

 if (CurrentPicHeight > MaxPicHeight) 
 {
  k= heightes[currentPicture] / MaxPicHeight;
  CurrentPicHeight=MaxPicHeight;
  CurrentPicWidth=Math.floor(widthes[currentPicture] / k);
//alert( "H1 ="+CurrentPicHeight+" W1= "+CurrentPicWidth );

 }

 // Урезние в максимальный размер основной картинки по ширине 
 // если после урезания по высоте ширина больше допустимой
 if 	(CurrentPicWidth > MaxPicWidth) 
 {
  k= CurrentPicWidth / MaxPicWidth;
  CurrentPicWidth=MaxPicWidth;
  CurrentPicHeight=Math.floor(CurrentPicHeight / k);
//alert( "H2="+CurrentPicHeight+" W2= "+CurrentPicWidth );

 } 
 
 CurrentPicWidth=Number(CurrentPicWidth);
 CurrentPicHeight=Number(CurrentPicHeight);

 // Зачистка TDPlaceForMedia
 var tmpEl=document.getElementById("TDPlaceForMedia");
 while (tmpEl.childNodes.length > 0) {tmpEl.removeChild(tmpEl.lastChild); }
 

 var tmpEl=document.getElementById("PlaceForImageDescription");
 while (tmpEl.childNodes.length > 0) {tmpEl.removeChild(tmpEl.lastChild); } 
 if (( String(mediaDscr) != "") && (mediaSrc.indexOf(".HTML") == -1))
 {
  tmpEl=document.createTextNode(mediaDscr);	
  document.getElementById("PlaceForImageDescription").appendChild(tmpEl); 
 }
 
 
 if ((mediaSrc == "") || ( mediaSrc.indexOf(".JPG") >=0) || ( mediaSrc.indexOf(".GIF") >=0))
 {
  // Установка ссылки на картинку, которая откроется в отдельном окне
  tmpEl=document.createElement("A");	
  tmpEl.setAttribute("id","PlaceForMiddleSizeImage");
  tmpEl.setAttribute("href","javascript:GoToPlayMedia();");
  document.getElementById("TDPlaceForMedia").appendChild(tmpEl); 

  var img=document.createElement("img");
  img.setAttribute("src",pictures[currentPicture]);
  img.setAttribute("width",String(CurrentPicWidth));
  img.setAttribute("height",String(CurrentPicHeight));
  img.setAttribute("border",0);	

  // if (mediaSrc == "") img.setAttribute("src",pictures[currentPicture]);	
  // else { img.setAttribute("src", mediaSrc); img.setAttribute("height",MaxPicHeight);}
	
	
  //var j=(TotalSpaceWidth-CurrentPicWidth)/2;
  //img.setAttribute("hspace",j);	
  document.getElementById("PlaceForMiddleSizeImage").appendChild(img);
  return;
 }
 
 // проверка является ли media file файлом HTML
 if (mediaSrc.indexOf(".HTML") >=0) 
 {
 if (window.ActiveXObject)
	{
	 // Для Explorer	
     var a = document.createElement('a');
     a.innerHTML = '<iframe src="'+mediaSrc+'" WIDTH="100%"  HEIGHT="'+MaxPicHeight+'" >'+'</iframe>';	
     document.getElementById("TDPlaceForMedia").appendChild(a);
	}
	else
	{
     tmpEl=document.createElement("IFRAME");	
     tmpEl.setAttribute("SRC",mediaSrc);
     tmpEl.setAttribute("SCROLLING","yes");	
     tmpEl.setAttribute("WIDTH","100%");	
     tmpEl.setAttribute("HEIGHT",MaxPicHeight);		
     document.getElementById("TDPlaceForMedia").appendChild(tmpEl); 
	}
  return;	
 }

 // проверка является ли media file файлом для Flash
 if ((mediaSrc.indexOf(".FLV") >=0) || (mediaSrc.indexOf(".MP4") >=0) ||   
       (mediaSrc.indexOf(".MP3") >=0) || (mediaSrc.indexOf(".AAC") >=0)) 
 {
  if (window.ActiveXObject)
	{
	 // Для Explorer
   var s1 = new SWFObject('player-viral.swf','player','320','240','9');
   s1.addParam('allowfullscreen','true');
   s1.addParam('allowscriptaccess','always');
   // "&logo="+strSrc
   s1.addParam('flashvars','file='+mediaSrc+"&autostart=false"+"&controlbar=over"+"&image="+strSrc+"&description="+mediaDscr);
   s1.write('TDPlaceForMedia');
	 return;
	}
	else
	{
    /* Рабочая версия для библиотеки flowplayer-3.0.7.
    var myPlayer=document.createElement("A");
    myPlayer.setAttribute("id","player");	
    myPlayer.setAttribute("href",mediaSrc);				
    myPlayer.setAttribute("style","display:block;width:400px;height:300px");	
    document.getElementById("PlaceForMiddleSizeImage").appendChild(myPlayer);
		flowplayer("player", "flowplayer-3.0.7.swf");
		*/
     /*
		objEL.setAttribute("type","application/x-shockwave-flash");	
		objEL.setAttribute("data","uflvplayer_500x375.swf");		
    objEL.setAttribute("width",320);
    objEL.setAttribute("height",240);	
		
		 var paramEl_01=document.createElement("param");
     paramEl_01.setAttribute("name","allowScriptAccess");
		 paramEl_01.setAttribute("value","always");
		 
		 var paramEl_02=document.createElement("param");
     paramEl_02.setAttribute("name","movie");
		 paramEl_02.setAttribute("value","uflvplayer_500x375.swf");
		 
		 var paramEl_03=document.createElement("param");
     paramEl_03.setAttribute("name","FlashVars");
		 paramEl_03.setAttribute("value","way=http://www."+
            window.location.hostname+mediaSrc+"&amp;"+
			      "swf=uflvplayer_500x375.swf&amp;"+
            "w=320&amp;h=240&amp;"+
            "pic=http://www."+window.location.hostname+strSrc+"&amp;"+
            "autoplay=1&amp;"+
            // autoplay=1 автозапуск ??????
            // "replay=1&amp;"+
            "tools=2&amp;"+
            // tools=1 кнопки управления всегда
            "skin=white&amp;"+
            "volume=70&amp;"+
            "q=&amp;"+
            "comment=HALLLO HHAALLOO");
		 
		 objEL.appendChild(paramEl_01);		 
		 objEL.appendChild(paramEl_02);		 
		 objEL.appendChild(paramEl_03);		 		 
		 document.getElementById("PlaceForMiddleSizeImage").appendChild(objEL);
	*/

  

  var s1 = new SWFObject('player-viral.swf','player','320','240','9');
  s1.addParam('allowfullscreen','true');
  s1.addParam('allowscriptaccess','always');
  // "&logo="+strSrc
  s1.addParam('flashvars','file='+mediaSrc+
							            "&autostart=false"+
													"&controlbar=over"+
													"&image="+strSrc+
													"&description="+mediaDscr);

  // FireFox выдает: Предупреждение: Ожидалось «:», но найдено «undefined».  Потерянное объявление. посмотреть
  s1.write('TDPlaceForMedia');
	return;
	}
 }

 if ((mediaSrc.indexOf(".WMV") >=0) || (mediaSrc.indexOf(".WMA") >=0))
 {
  if ( isSilverlightInstalled()) 
   {
    var elm = document.getElementById("TDPlaceForMedia");
    var src = 'wmvplayer.xaml';
    var cfg = { file: mediaSrc, width:'320', height:'240', autostart : 'false',image : "http://www."+window.location.hostname+strSrc 
		};
		
    var ply = new jeroenwijering.Player(elm,src,cfg);
    return;
		
		/*
		<object height="250" width="280" data="data:application/x-silverlight," type="application/x-silverlight">
    <param value="#0173e0" name="background"/>
    <param value="/jw/embed/wmvplayer.xaml" name="source"/>
    <param value="false" name="windowless"/>
    <param value="__slEvent1" name="onLoad"/>
		</object>
		*/
		
   }
   else
	 {
   // предложем один раз скачать Silverlight
	 if (SilverLightAnouns == false)
	  {
     if    (window.confirm("Рекомендуем установить MS Silverlight для стабильного"+
													" воспроизведения .WMV и .WMA файлов. Скачать?" )) 
			       {Silverlight.getSilverlight("1.0"); SilverLightAnouns=true;}
		 else {SilverLightAnouns=true;}
		}
	 }
 }

    

	  // неизвестное расширенме


/*
<OBJECT ID="Player1" width="320" height="63" src="SOME URL.avi" CLASSID="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" standby="Loading Microsoft Windows Media Player components...">
                  <PARAM NAME="URL" VALUE="SOME URL.avi">
                  <PARAM NAME="width" VALUE="320">
                  <PARAM NAME="height" VALUE="63">
                  <PARAM NAME="stretchToFit" VALUE="1">
                  <PARAM NAME="ShowControls" VALUE="1">
                  <PARAM NAME="ShowTracker" VALUE="1">
                  <PARAM NAME="ShowStatusBar" VALUE="1">
                  <PARAM NAME="CurrentPosition" VALUE="1900"> <!--с какой секунды начинать воспроизведение-->
                  <PARAM NAME="AutoStart" Value="0"><!--ждать нажатие наplay -->
                  <EMBED id="Player1" name="Player1" src="SOME URL.avi" type="application/x-mplayer2" pluginspage="http://www.microsoft.com/Windows/Downloads/Contents/Products/MediaPlayer/" ShowControls="1" ShowTracker="1" ShowStatusBar="1" VideoBorder3D="0" VideoBorderWidth="0" width="320" height="63" AutoStart="0" AnimationAtStart="1" TransparentAtStart="1" uiMode="none" StretchToFit="1" CurrentPosition="1900"></embed>
                  </OBJECT>
*/



	// медиа файл есть, но не для Flash. Попробуем старую EMBED.
  var emb=document.createElement("EMBED");
  var j=(TotalSpaceWidth-350)/2;
  // objEL.setAttribute("hspace",'"'+j+"'");	
  // objEL.setAttribute("autostart","true");	

  emb.setAttribute("src","."+mediaSrc);	
  emb.setAttribute("type","application/x-mplayer2");		
  emb.setAttribute("AutoStart",0);
  emb.setAttribute("AnimationAtStart",1);	
  emb.setAttribute("TransparentAtStart",1);		
  emb.setAttribute("StretchToFit",1);			
  emb.setAttribute("uiMode","none");	
  emb.setAttribute("width",320);	
  emb.setAttribute("height",250);
  emb.setAttribute("VideoBorder3D",0);	
  emb.setAttribute("VideoBorderWidth",0);	
  emb.setAttribute("ShowTracker",1);		
  emb.setAttribute("ShowStatusBar",0);	
  emb.setAttribute("ShowControls",1);		

  // objEL.appendChild(emb);
  document.getElementById("TDPlaceForMedia").appendChild(emb);
}
// **************************
function setPictureSign()
{
 // NumberOfPicText.nodeValue=" "+(currentPicture+1)+"/"+pictures.length+ " ";
}

// **************************						
function Next_Pic()
{
 if ( currentPicture < (pictures.length-1)) { currentPicture++;}
 setupCurrentPicAndAdjustSize();						
 setPictureSign();	
 setupBlockOfPictures();									
 visibilityManager("auto")
}

// **************************						
function Prev_Pic()
{
 if ( currentPicture>0)  { currentPicture--; }
 setupCurrentPicAndAdjustSize();
 setPictureSign();		
 setupBlockOfPictures();		
 visibilityManager("auto")						
}	
// **************************	
function GoToPlayMedia()
{
  DoPicZoom(currentPicture);
}	

// ***********************************
// ***********************************
function ChangeVisMediaRef()
{
 // document.getElementById('all-media-details').innerHTML= "";		
 var tmpEl=null;
 if (document.getElementById("all-media-details") != null)
 {
  tmpEl=document.getElementById("all-media-details");
  while (tmpEl.childNodes.length > 0) {tmpEl.removeChild(tmpEl.lastChild); }
 }
}
// ***********************************		
function Init_Show_Pic()
{

 if ( pictures.length == 0) {return;}
 // Стартовая часть скрипта при загрузке страницы 
 NumberOfPicText=document.createTextNode("");	 
 var tmpInsertNode=document.getElementById("PlaceForPicCounter");
 tmpInsertNode.parentNode.insertBefore(NumberOfPicText,tmpInsertNode);

 MaxWidthPicForBlock=MaxWidthPicForBlockCalculator();
 
 if ( ((MaxWidthPicForBlock+3)* blockSize) > TotalSpaceWidth) 
 {
	// см. К вопросу о типах данных Java Script 
  blockSize=(TotalSpaceWidth / (MaxWidthPicForBlock+3));
  blockSize=Math.floor(blockSize); 
 }

if (blockSize > pictures.length) {blockSize=pictures.length;}
 for (i=1; i <= blockSize ; i++)
 {
  var aref=document.createElement("A");
  var img=document.createElement("IMG");
  aref.appendChild(img);
  document.getElementById("placeForPicturesBlock").appendChild(aref);
 }
 setupBlockOfPictures();
						
 if(pictures.length > 1)
 {
  document.getElementById("PicRefForwardId").setAttribute("href","javascript:Next_Pic()");
  document.getElementById("PicRefBackId").setAttribute("href","javascript:Prev_Pic()");
  // Не могу заставить работать это в FireFox  button=document.createElement("A") 
  // var button=document.createElement("A");
  // button.setAttribute("href","javascript:Next()");
  // button.innerText=' » '; эта строка не исполняется в FireFox
	//    познее выяснил, что innerHTML= работает везде, но уже сделал по другому
  // document.getElementById("placeForPictureChangeButton").appendChild(button);
 }

  setupCurrentPicAndAdjustSize();
  setPictureSign();
  visibilityManager();

}

// **************************						
function Send_Registration_Form()
{

  if (!document.createElement) return; // not supported
  var form=document.getElementById("UserRegistrationForm");

  var   u_name=document.getElementById("user-name-id").value;
  var   u_email=document.getElementById("user-email-id").value;
  var   u_pass_01=document.getElementById("user-pass-01-id").value;
  var   u_pass_02=document.getElementById("user-pass-02-id").value;
  var   u_tel=document.getElementById("user-tel-id").value;
  var   u_addr=document.getElementById("user-addr-id").value;
  var   u_manager_email=document.getElementById("user-manager-email-id").value;
  var   u_company_name=document.getElementById("user-company-name-id").value;

  var tmpStr="<?xml version='1.0' encoding='utf-8'?>"+"<user>"+
          "<name>"+u_name+"</name>"+
          "<email>"+u_email+"</email>"+
          "<pass>"+u_pass_01+"</pass>"+
          "<cvt-email>"+u_manager_email+"</cvt-email>"+
          "<tel>"+u_tel+"</tel>"+
          "<delivery-address>"+u_addr+"</delivery-address>"+
          "<company-name>"+u_company_name+"</company-name>"+
          "</user>";

  if  (u_name == "") { alert("Вы забыли ввести своё имя"); return; }
  if  ((u_email == "") || (u_email.indexOf("@") == -1) || (u_email.indexOf(".") == -1) ){ alert("Вы ввели не корректный Ваш E-mail"); return; }
  if  ((u_pass_01 != u_pass_02) || (u_pass_01 == "") ){ alert("Первичный и повторный ввод пароля не совпадают или не введены"); return; }
  if  ((u_manager_email == "") || (u_manager_email.indexOf("@") == -1) || (u_manager_email.indexOf(".") == -1) ){ alert("Не корректный E-mail менеджера >>"+u_manager_email); return; }

  sendAjaxRequestAndGetAnswer('uc-processor.php','AddUser','xml='+encodeURIComponent(tmpStr),ServerAnsverReport,false,false);

  if  (ServerAnsverReport.xml.getElementsByTagName("VA_STATUS") != null)
  {
     if (ServerAnsverReport.xml.getElementsByTagName("VA_STATUS").item(0).firstChild.nodeValue == "OK") 
            alert(" Регистрация прошла успешно."); 
     else   alert(" Ошибка при регистрации >> "+ ServerAnsverReport.xml.getElementsByTagName("VA_STATUS").item(0).firstChild.nodeValue); 

  }

}	
// **************************						
function Check_Auth_Form()
{
alert(document.cookie);
}
// ************************************************************************
// ** Start *** Набор функций для работы с корзиной с использованием Cookie 
function createCookie(name, value, days)
{
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
    }
  else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}
// **************************	
function readCookie(name)
{
  var ca = document.cookie.split(';');
  var nameEQ = name + "=";
  for(var i=0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1, c.length); //delete spaces
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
    }
  return null;
}
// **************************	
function eraseCookie(name)
{
  createCookie(name, "", -1);
}
// **************************	
function Set_GoodID_In_Cookie(GoodID,Qty)
{
var offset = 0;
if ( readCookie("GoodsInBasket") == null ) createCookie("GoodsInBasket", "", 1);
var CurGoodsStr=readCookie("GoodsInBasket");
eraseCookie("GoodsInBasket");
if (CurGoodsStr == null) CurGoodsStr="";

offset = CurGoodsStr.indexOf("["+GoodID);
if (offset != -1) { CurGoodsStr = CurGoodsStr.substr(0,offset)+CurGoodsStr.substr(CurGoodsStr.indexOf("]", offset+1)+1); }
createCookie("GoodsInBasket", "["+GoodID+"."+Qty+"]"+CurGoodsStr, 1);
}
// **************************	
function Del_GoodID_From_Cookie(GoodID)
{
var offset = 0;
if ( readCookie("GoodsInBasket") == null ) createCookie("GoodsInBasket", "", 1);
var CurGoodsStr=readCookie("GoodsInBasket");
eraseCookie("GoodsInBasket");

offset = CurGoodsStr.indexOf("["+GoodID);
if (offset != -1) { CurGoodsStr = CurGoodsStr.substr(0,offset)+CurGoodsStr.substr(CurGoodsStr.indexOf("]", offset+1)+1); }
createCookie("GoodsInBasket", CurGoodsStr, 1);
}
// **************************	
function Get_Max_Position_ID_From_Cookie()
{

if ( readCookie("GoodsInBasket") == null ) return 0;
var CurGoodsStr=readCookie("GoodsInBasket");
var Max_Position=0;
var offset = 0;

if (CurGoodsStr.length > 0) {
  offset = CurGoodsStr.indexOf("]");
  while  (offset != -1) 
  {
    offset = CurGoodsStr.indexOf("]", offset+1);
    Max_Position = Max_Position +1;
  }
}
return(Max_Position);
}
// **************************	
function Get_GoodID_From_Cookie_By_Number(Position)
{
var MaxPos=Get_Max_Position_ID_From_Cookie();
if (Position > MaxPos) { return 0; }
if (Position <= 0) { return 0; }
if ( readCookie("GoodsInBasket") == null ) { return 0; }
var CurGoodsStr=readCookie("GoodsInBasket");

var i = 1;
while ( i <= Position) { CurGoodsStr = CurGoodsStr.substring(CurGoodsStr.indexOf("[")+1); i=i+1; }
CurGoodsStr = CurGoodsStr.substring(0,CurGoodsStr.indexOf("."));   
return Number(CurGoodsStr);
}
// **************************	
function Get_Good_Qty_From_Cookie_By_Number(Position)
{
var MaxPos=Get_Max_Position_ID_From_Cookie();
if (Position > MaxPos) { return 0; }
if (Position <= 0) { return 0; }
if ( readCookie("GoodsInBasket") == null ) { return 0; }
var CurGoodsStr=readCookie("GoodsInBasket");

var i = 1;
while ( i <= Position) { CurGoodsStr = CurGoodsStr.substring(CurGoodsStr.indexOf("[")+1); i=i+1; }
CurGoodsStr = CurGoodsStr.substring(CurGoodsStr.indexOf(".")+1,CurGoodsStr.indexOf("]"));   
return Number(CurGoodsStr);
}
// **************************	
function Get_Good_Qty_From_Cookie_By_GoodID(GoodID)
{
var Good_Qty=0;
var offset = 0; 
if ( readCookie("GoodsInBasket") == null ) { return 0; }
var CurGoodsStr=readCookie("GoodsInBasket");
offset = CurGoodsStr.indexOf("["+GoodID);
// alert("Offset="+offset);
if (offset == -1) { return 0; }
CurGoodsStr = CurGoodsStr.substring(offset,CurGoodsStr.indexOf("]", offset+1)); 
CurGoodsStr = CurGoodsStr.substr(CurGoodsStr.indexOf(".")+1); 
// alert("My Str="+CurGoodsStr);
return Number(CurGoodsStr);
}
// ** End *** Набор функций для работы с корзиной с использованием Cookie 
// **************************						
function Add_Good_To_Basket(GoodID)
{
var BasketCounter=0;
var tmpGoodQty=0;

if (navigator.cookieEnabled == false) { alert(" Чтобы работать с корзиной разрешите использовать Cookie в браузере");  return; }
tmpGoodQty=Number(Get_Good_Qty_From_Cookie_By_GoodID(GoodID));
Set_GoodID_In_Cookie(GoodID,tmpGoodQty+1);
// Get_Max_Position_ID_From_Cookie();
// eraseCookie("GoodsInBasket");
// alert(" XXXXX "+document.cookie+" Gid1 ="+Get_GoodID_From_Cookie_By_Number(1)+"  << Qty1="+Get_Good_Qty_From_Cookie_By_Number(1));
location.assign("?basket");
}
// **************************	
function Show_Basket()
{
// alert(document.cookie);
}

// **************************	
function  Delete_Good_From_Basket(GoodID)
{
Del_GoodID_From_Cookie(GoodID);
location.assign("?basket");
}
// ***********************************
function Change_Good_Qty_In_Basket(GoodID)
{
var tmpID="GIB"+GoodID;
var tmpInputEl=null;
var tmpGoodQty=0;
if (document.getElementById) { tmpInputEl=document.getElementById(tmpID);  }
if (tmpInputEl == null) { alert(" Элемент Input c ID="+tmpID+" не найден");  return; }

tmpGoodQty= Number(tmpInputEl.value);
if (tmpGoodQty == NaN) { alert (" Количество товара должно быть числом >> "+tmpInputEl.value); location.assign("?basket"); return; }
if (tmpGoodQty <= 0) { alert (" Количество товара должно быть положительным числом >> "+tmpInputEl.value); location.assign("?basket"); return; }

Set_GoodID_In_Cookie(GoodID,tmpGoodQty);
location.assign("?basket");
}
// ***********************************
// Максимальные размеры картинок
// Самая начальная инициализация данных для скриптов
// и определение переменных

var MaxPicWidth=450;
var MaxPicHeight=250;
var MaxBlockPicWidth=70;
var MaxBlockPicHeight=70;
var MaxWidthPicForBlock=0;
var TotalSpaceWidth=600;
						
var CurrentPicWidth=350;
var CurrentPicHeight=250;
var k=1;
var blockOffset=0;
var curBlockPos=0;
var blockSize=10;
var i=0;
var currentPicture = 0;
					 
var pictures=new Array();
var widthes=new Array();
var heightes=new Array();
var Blwidthes=new Array();
var Blheightes=new Array();
var mediaFiles=new Array();
var mediaDescr=new Array();

var NumberOfPicText=null;
var SilverLightAnouns=false;


var RegisteredUsersTree=new xmlDOMTree();
var ServerAnsverReport=new xmlDOMTree();

// ***********************************						
