// holds an instance of XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();
// holds the remote server address and parameters
var serverAddress = "faq.php";
// variables that establish how often to access the server 
var updateInterval = 1; // how many seconds to wait to get new message
var errorRetryInterval = 30; // seconds to wait after server error
// when set to true, display detailed error messages
var debugMode = true;
// Инициализирую кеш
var cache = new Array();
// id-имя, куда возвращаем ответ
var nid = '';
// Очень временная
var napr = '0';
// bufer slide show
var bss = '';
var SlideShowInterval = 12;	// Интервал слайд шоу в сек
 
// creates an XMLHttpRequest instance
function createXmlHttpRequestObject() 
{ 
  // will store the reference to the XMLHttpRequest object
  var xmlHttp;
  // для использ в т.ч. и IE7 and older  
    xmlHttp = null;
    if (window.XMLHttpRequest) {
        try {
            xmlHttp = new XMLHttpRequest();
        } catch (e){}
    } else if (window.ActiveXObject) {
        try {
            xmlHttp = new ActiveXObject('Msxml2.XMLHTTP');
        } catch (e){
            try {
                xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
            } catch (e){}
        }
    }
  // return the created object or display an error message
  if (!xmlHttp)
    alert("Error creating the XMLHttpRequest object.");
  else 
    return xmlHttp;
}

// function that displays a new message on the page
// ВСЕГДА ВЫВОДИТ В  nid.innerHTML если сложный ответ или в vflue - обработка в getNew !!!!
function display(message)
{  
  	// obtain a reference to the <div> element on the page
  	myDiv = document.getElementById(nid);
    // display message
    myDiv.innerHTML = message;  
}

// function that displays an error message
function displayError($message)
{
  // display error message, with more technical details if debugMode is true
  display("Error retrieving the news message! Will retry in " +
          errorRetryInterval + " seconds. Cache=" + cache.length+ 
          (debugMode ? "<br/>" + $message : ""));
  // restart sequence 
//  setTimeout("process();", errorRetryInterval * 1000);
}

// call server asynchronously
function process(pq){
// pq -  параметр-строка, содержащая параметр action и, если необходимо, другие параметры
// action может быть tema или link, соответсвенно запрос на перечень тем и перечень линков

  // only continue if xmlHttp isn't void  
  if (xmlHttp)
  {
    // помещаю в кеш запрос
	if (!pq) {} 
	else {cache.push(pq);}

   
   // попытаюсь установить соединение с сервером
	if ((xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
			&& cache.length>0)   
    try
    { 

		{
		  // Извлечь из кеша
		  // определяю из сохраненного запроса, куда віводить ответ и оставляю чистій запрос для отправки серверу:	
		  var cacheEl = setKudaOtvet(cache.shift());		  
		  //cacheEl = setKudaOtvet(cacheEl); 
		  // remove this line if you don't like the 'Минуточку...' message
		  //display("Минуточку ...");
		  //alert(serverAddress+"?"+cacheEl);
	      // make asynchronous HTTP request to retrieve new message
	      xmlHttp.open("POST", serverAddress, true);
	      xmlHttp.setRequestHeader("Accept-Charset", "windows-1251"); // ralp add 5 str: 
	      xmlHttp.setRequestHeader("Accept-Language","ru, en");
		  xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
		  
	      xmlHttp.onreadystatechange = handleGettingNews;
	      xmlHttp.send(cacheEl);
	      document.body.style.cursor = "wait";      
        }
    }
    catch(e)
    {	
	  displayError(e.toString());
    }      
  }
}

// function called when the state of the HTTP request changes
function handleGettingNews() 
{
	document.body.style.cursor = "auto";
  // when readyState is 4, we are ready to read the server response
  if (xmlHttp.readyState == 4) 
  {
    // continue only if HTTP status is "OK"
    if (xmlHttp.status == 200) 
    {
      try
      {
        // do something with the response from the server
        getNews();
      }
      catch(e)
      {
        // display error message
        displayError(e.toString());
      }
    } 
    else
    {
      // display error message
      displayError(xmlHttp.statusText);   
    }
  }
}

// handles the response received from the server
function getNews()
{	
  // retrieve the server's response 
  var response = xmlHttp.responseText;
  
  // server error?
  if (response.indexOf("ERRNO") >= 0 
      || response.indexOf("error") >= 0
      || response.length == 0)
    throw(response.length == 0 ? "Server error." : 'qq='+response);

  //alert(nid+' ## '+response);

  if (nid=='ninp')
  {	// Info по фото - сложный ответ

    ObrabotatInfoFoto(response);

  } 
  else if (nid=='saveif')	// как сохранились данные 
  {
    ObrInfoSave(response);
	  
  } else if (nid=='vissh')	// слайд-шоу по альбому
  {
    ObrInfoKslideShow(response);    
    nid = document.getElementById("vimgf");
	  
  } else 
  { // простой ответ
    // display the message
    display(response);
  }
  // restart sequence  
  setTimeout("process();", updateInterval * 100); // Если что есть в кеше - отправить его
}

/// Сохраняет, куда ответ (его id-имя) и возвращает сам запрос к серверу
function setKudaOtvet(q){
	var gq = '';
	var vq = q.split('&');
	var r = "";
	nid = vq[0]; // Сохраняет, куда ответ (его id-имя)
	for (var i=1;i<vq.length;i++)
	  {	  	
	  	gq += r+vq[i];
	  	r = "&";
	  }	
//	  alert("set nid="+nid+"  gq="+gq);
	gq += '&sid='+document.getElementById('sid').value;
	//alert(gq);
	return gq;	// возвращает сам запрос к серверу	
}

function ObrabotatInfoFoto(response)
{ 	
  var inffoto = response.split('|^~^|');
  //Мы с дедулей(подпись), Родные(альбом), На Чапаева()Тема, 0()права, (Примечание)
  
  // nid до сих пор = 'ninp' - туда и выводим подпись
  myDiv = document.getElementById(nid);
  if (response.indexOf("ERRNO") >= 0 
      || response.indexOf("error") >= 0
	  || response.indexOf("Error") >= 0
      || response.length == 0) 
  {	  // пусто, тогда по умолчанию:
  	  myDiv.value = '';
	  myDiv = document.getElementById('nprim');
	  myDiv.value = '';
	  // Размещать ли в интернете
	  myDiv = document.getElementById('view_inet');
	  myDiv.checked = false;  
	  // Поворот фото
	  myDiv = document.getElementById('rote');
	  myDiv.value = 0;

	  myDiv = document.getElementById('dlst_rzd');
	  myDiv.value = 0;
	  myDiv = document.getElementById('dlst_tem');
	  myDiv.value = 0;
	  myDiv = document.getElementById('dlst_prav');
	  myDiv.value = 0;
  } else
  {	// есть данные по фото, вот они:
	  myDiv.value = inffoto[0];
	  // а сюда выводим примечание
	  myDiv = document.getElementById('nprim');
	  myDiv.value = inffoto[4];
	  // Размещать ли в интернете
	  myDiv = document.getElementById('view_inet');
	  myDiv.checked = (inffoto[5]==1);  
	  // Поворот фото
	  myDiv = document.getElementById('rote');
	  myDiv.value = inffoto[6];  
	
	    // организовываю запросы на установку соответсвующих комбобоксов альбому, теме, правам
	  if (!(inffoto[1]=='')) process('dlst_rzd&a=ssa&q='+inffoto[1]); 
	  if (!(inffoto[2]=='')) process('dlst_tem&a=sst&q='+inffoto[2]);
	  if (!(inffoto[3]=='')) process('dlst_prav&a=ssp&q='+inffoto[3]);
  }
}

function ObrInfoSave(response)
{
  if (response.indexOf("saveok")>0) 
  {
    alert(' Данные сохранены!');
	// Перечитать? - пока нет
  } else alert (' Ошибочка при сохранении данных!');
  nid='';
}

/////////////////////////////////////////
/// SlideSwow
function ObrInfoKslideShow(response)
{  // получили ответ, готовим слайд шоу	
	if (response.indexOf("Ничего не нашлось")>0) 
	    {alert("Альбом пуст :(");}
	else { 
		bss = response.split("|^~^|");
		ViewSlideShow();
	}
}
function ViewSlideShow(){
	// Показывает очередную картинку
	if (bss.length>0){
	  var tiss = bss.shift();
	  var ess = tiss.split("^~^");
	  var te=document.getElementById("vimgf");
	  if (ess[0]==0) wi = '660';
	  else wi = '371';
	  //<a href="galery/img_0178.jpg" target="_blank"><img src="galery/img_0178.jpg" width="80" height="60" border="0" alt=""></a>  
	  te.innerHTML = " <a href="+ess[1]+" target=\"_blank\"><img src="+ess[1]+"  width=\""+wi+"px\" height=\"495px\"></a>";
	  if (bss.length>0) ve = '<img src="../pic/ve.gif" width="17" height="17">&nbsp;';
	  else ve = '';
	  var te=document.getElementById("podpf");
	  te.innerHTML = ve + ess[2];
	  setTimeout("ViewSlideShow();", SlideShowInterval * 1000);
	}	
}

/// =====================================================================================================
/// f. обслуживаюие fedit.php

// показывает катинку на большом окне, читает данные по ней из базы
function loaimg(ni,namei)
{
  var reni = ni.src;  // удаляю обработку resize.php-ом
  var wi = '560'; 
  var di = 18;
  if (reni.indexOf("ro=-1")>0) {wi='315'; di=19;} 
  else
    if (reni.indexOf("ro=1")>0) wi='315';
  else wi='560';  
  var renr = reni.substr(reni.indexOf("resize.php?")+di);  
  var te=document.getElementById("vimg");
  te.innerHTML = " <a href=\""+reni+"&type=11\" target=\"_blank\"><img src=\""+reni+"&type=11\"  width=\""+wi+"px\" height=\"420px\"></a>";
  te=document.getElementById("hpf");
  te.value = renr;
  te=document.getElementById("namf");
  te.innerHTML = namei;	//ni.src;
  te=document.getElementById("ninp");
  te.value = '';
  te.focus;
  // далее: формирую параметры запуска асинхронного запроса
  // Первый парам. - id-name куда выводить результат
  // а - действие, vpf - Прочитать данные по фото
  // q - имя файла, при a=vpf  
  process('ninp&a=vpf&q='+namei);
}

/// Запускает процедуры доставки готового списка картинок
function LoadImgesView(){//this.options[this.selectedIndex].value
  // определяю выбранную дату
  var fz = document.getElementById('suo2').value;
  // далее: формирую параметры запуска асинхронного запроса
  // Первый парам. - id-name куда выводить результат
  // а - действие, liv - список img показать
  // q - выбранная дата, при a=liv
  process('lstimg&a=liv&q='+fz);
}

/// Сохранить данные по фото
function SaveInfoFoto() {
	//  читаю данные
	var name_f = document.getElementById('hpf').value; //prvw
	var inet_f = document.getElementById('view_inet').checked;
	var podp_f = document.getElementById('ninp').value;
	var alb_f = document.getElementById('lst_rzd').value;
	var tem_f = document.getElementById('lst_tema').value;
	var pravo_f = document.getElementById('privatnost').value;
	var prim_f = document.getElementById('nprim').value;	
	var rote_f = document.getElementById('rote').value;	
	// устроим проверочку:
	if (alb_f==0) alert('Не выбран альбом. Без этого никак невозвожно. Выберите из списка. Если желаете создать новый альбом - нажмите добавить альбом, где в новом окне введите название нового альбома, нажмите Ок - его название появится в конце списка. Можете его выбрать со списка.');
	else
	if (tem_f==0) alert('Укажите тему в альбоме. Если желаете создать новую тему - нажмите добавить тему, где в новом окне введите название новой темы, нажмите Ок - ее название появится в конце списка. Можете ее выбрать со списка.');
	else
	
 //   alert(name_f+', '+inet_f+', '+podp_f+', '+alb_f+', '+tem_f+', '+pravo_f+', '+prim_f, '+rote_f);	
    // посылаю данные на сохранение
    process('saveif&a=saveif&q='+name_f+'&inet='+inet_f+'&podp='+podp_f+'&alb='+alb_f+'&tem='+tem_f+'&pravo='+pravo_f+'&prim='+prim_f+'&rote='+rote_f);
}

/// открыть диалоговое окно добавления в комбобокс
function openDialogAddCB(patch) { 
var rezult = window.showModalDialog(patch+"utili/dialog_add_cb.html", "","dialogWidth:400px; dialogHeight:220px; center:yes");
return rezult;
}
/////////////////////////////////////////////////////////
/// Обработка просмотра
/// Запускает процедуры доставки готового списка картинок
function LoadAlbTemView() {	
	var fz1 = document.getElementById('lst_rzd').value 
	if (fz1==0) {
		alert('Вы не выбрали альбом');
	} else {
		var fz2 = document.getElementById('lst_tema').value;	
		if (fz2==0) {
		  alert('Вы не выбрали тему');
	    } else {
	    	//alert(fz1+'&t='+fz2);
	    	process('lstvimg&a=livat&q='+fz1+'&t='+fz2);
	    }
	}	
}
// показывает катинку на большом окне, читает данные по ней из базы
function loavimg(ni,namei,ro)
{
  var reni = ni.src;  // удаляю обработку resize.php-ом
  var renr = reni.substr(reni.indexOf("resize.php?f=")+13);  
  var te=document.getElementById("vimgf");
  if (ro==0) wi = '660';
  else wi = '371';
  // alert(ro+'=='+wi);
  //<a href="galery/img_0178.jpg" target="_blank"><img src="galery/img_0178.jpg" width="80" height="60" border="0" alt=""></a>  
  te.innerHTML = " <a href=\""+reni+"&type=11\"  target=\"_blank\"><img src=\""+reni+"&type=11\"  width=\""+wi+"px\" height=\"495px\"></a>";

  // далее: формирую параметры запуска асинхронного запроса
  // Первый парам. - id-name куда выводить результат
  // а - действие, podpis - Прочитать подпись к фото
  // q - имя файла, при a=vpf    
  process('podpf&a=podpisf&q='+namei);
}

function loasid(){
	napr = document.getElementById('sid').value;;
}

function ViewAlbomSlaydShow() {
	// просмотреть выбранный альбом в режиме слайд шоу
	if (document.getElementById("lst_rzd").value==0) alert('Вы не указали, какой альбом будем смотреть.');
	else {
		process('vissh&a=vissh&q='+document.getElementById("lst_rzd").value);
	}
}