/* Функции для работы с всплывающими сообщениями */
/*
 * Создание выплывающего сообщения
 * Получает параметры: elem - у какого элемента "всплывать"
 * text - какой текст показывать в окне
 * Не работает без getElementPosition()
 * Окно будет неполупрозрачным без setElementOpacity()
 */
function xmlhttp () {
  var http_request = false;
  if (window.XMLHttpRequest){ // not IE 
    http_request = new XMLHttpRequest();
    if(http_request.overrideMimeType) {
      http_request.overrideMimeType('text/xml');
    }
  }
  else if(window.ActiveXObject){ // IE
    try{
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
      try{
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
      }catch(e){}
    }   
  }
  if(!http_request){
    alert('Невозможно создать экземпляр класса XMLHTTP');
    return false;
  }
  return http_request;
}
function popUp(elem, text, checkSize, forconfirm){
	if(checkSize && text.length < 70) return;
	
	if(document.getElementById('popUp')) closePopUp();
	if(text == '') text = "Комментарии отсутствуют";
	var pos = getElementPosition(elem);//определяем координаты "всплытия"
	
	//создание окна
	var message = document.createElement("div");
	message.className = "popUpMessage";
	message.id = "popUp";//ВАЖНО! По этому id находит элемент функция closePopUp()
	message.style.left = pos.left+pos.width/2;
	message.style.top = pos.top+pos.height;
	message.style.position = "absolute";
	
  if (text.length > 60)
	  message.style.width = 240;

	while(getWindowSize().width-parseInt(message.style.width)-parseInt(message.style.left) < 20){
		message.style.width = parseInt(message.style.width)-10;
	}

	//контент окна
	message.innerHTML = text;
	document.getElementsByTagName("body")[0].appendChild(message);
	setElementOpacity("popUp", "0.9");
	
	// Если функция используется в подтверждении, меняем позиционирование
	if (forconfirm) {
    message.style.left = pos.left+pos.width/2-130;
    //message.align = middle;
    message.style.width = 250;
    var pos_conf = getElementPosition(message);
    message.style.top = pos.top - pos_conf.height;
	}
}
/*
 * Закрытые выплывающего сообщения
 */
function closePopUp(){
  if(document.getElementById('popUp'))
	document.getElementsByTagName("body")[0].removeChild(document.getElementById('popUp'));
}
//Возвращает размеры окна в пикселях
function getWindowSize(){
	return {"width":document.body.clientWidth, "height":document.body.clientHeight};
}
/*
 * Кроссбраузерная функция задания прозрачности элемента.
 * Не работает без getOpacityProperty()
 *  
 */
function setElementOpacity(sElemId, nOpacity){
  var opacityProp = getOpacityProperty();
  var elem = document.getElementById(sElemId);
  // Если не существует элемент с указанным id или браузер не поддерживает
  //  ни один из известных функции способов управления прозрачностью
  if (!elem || !opacityProp) return; // Если не существует элемент с указанным id или браузер не поддерживает ни один из известных функции способов управления прозрачностью
  
  if (opacityProp=="filter"){// Internet Exploder 5.5+
    nOpacity *= 100;	
    // Если уже установлена прозрачность, то меняем её через коллекцию filters, иначе добавляем прозрачность через style.filter
    var oAlpha = elem.filters['DXImageTransform.Microsoft.alpha'] || elem.filters.alpha;
    if (oAlpha) oAlpha.opacity = nOpacity;
    else elem.style.filter += "progid:DXImageTransform.Microsoft.Alpha(opacity="+nOpacity+")"; // Для того чтобы не затереть другие фильтры используем "+="
  }
  else // Другие браузеры
    elem.style[opacityProp] = nOpacity;
}
/*
 * Кроссбраузерная функция получения свойства, отвечающего за 
 * прозрачность элемента. Для старых браузеров, не поддерживающих
 * прозрачность, возвращает false
 */
function getOpacityProperty(){
  if (typeof document.body.style.opacity == 'string') // CSS3 compliant (Moz 1.7+, Safari 1.2+, Opera 9)
    return 'opacity';
  else if (typeof document.body.style.MozOpacity == 'string') // Mozilla 1.6 и младше, Firefox 0.8 
    return 'MozOpacity';
  else if (typeof document.body.style.KhtmlOpacity == 'string') // Konqueror 3.1, Safari 1.1
    return 'KhtmlOpacity';
  else if (document.body.filters && navigator.appVersion.match(/MSIE ([\d.]+);/)[1]>=5.5) // Internet Exploder 5.5+
    return 'filter';

  return false; //нет прозрачности
}
/*
 * Создаёт запрос на получение текста на сервер
 * url - страничка, возвращающая ответ, param - параметр запроса
 */
function makeRequest(param, elem, checkSize, forConfirm){
  var url = location.protocol + "//" + location.hostname + "/gen.php";
  var http_request = xmlhttp();
  if (!http_request)
    return false;
  
  http_request.onreadystatechange = function(){contents(http_request, elem, checkSize, forConfirm);};//run on server answer
  var urlm = url + "?par=" + param;
 // alert("urlm: " + urlm);
  http_request.open('GET', urlm, true);
  http_request.send(null);
}
/*
 * обработчик ответа сервера
 */
function contents(http_request, elem, checkSize, forConfirm){
  if(http_request.readyState == 4){
    if(http_request.status == 200){
      popUp(elem, http_request.responseText, checkSize, forConfirm);
    }
    else{
      alert('С запросом возникла проблема.');
    }
  }
}
function popup_help(id_text, answer) {
  if (answer == 0)
    ajax_req ('gen.php', '?par=' + id_text, 2, 0);
  else {
    if (document.getElementById('help_div')) return false;

    //создание окна
    var message = document.createElement("div");
    message.className = "help";
    message.id = "help_div";//ВАЖНО! По этому id находит элемент функция closePopUp()
    message.style.left = document.body.clientWidth / 2 - 400;
    message.style.top = document.body.clientHeight / 2 - 240;
    message.style.width = 800;
    message.style.position = "absolute";
    message.style.opacity = 0.9;
    message.style.filter='alpha(opacity=90)'; 
    
    //контент окна
    message.innerHTML = answer;
    document.getElementsByTagName("body")[0].appendChild(message);
  
    // кнопка закрытия / открытия
  	var crest = document.createElement("div");
	    crest.innerHTML = '<a href = "#" ' +
		  	'onClick = "document.getElementsByTagName(\'body\')[0].removeChild(document.getElementById(\'help_div\')); return false;">' +
			  '<img src = "pics/close_s.gif" width = "30" height = "30" title = "Закрыть помощь"' +
  			'onmouseover = "colorCrest(this, true, true)" onmouseout = "colorCrest(this, false, true)"></a>';
	    crest.style.position = "absolute";
	    crest.style.left = "768";
	    crest.style.top = "0";
  	message.appendChild(crest);
  }
}
function show_phone (id_firm, answer, elem_id) {
  if (answer == 0)
    ajax_req ('gen.php', '?get_phone=' + id_firm, 1, elem_id);
  else
    document.getElementById(elem_id).innerHTML = '<b>Телефон:</b> <span class="phone">' + answer + '</span>';
    
    var phone = document.getElementById(elem_id);
    var pos = getElementPosition(phone);
    var message = document.createElement("div");
    message.className = "call_sauna";
    message.id = "call_sauna";//ВАЖНО! По этому id находит элемент функция closePopUp()
    message.style.left = pos.left - 12;
    message.style.top = pos.top + 16;
    message.style.opacity = 0;
    message.style.filter='alpha(opacity=0)'; 
    
    //контент окна
    message.innerHTML = '<div class="phone_show">При звонке в сауну скажите,<br>что вы с сайта Онлайн Сауна!</div>';
    document.getElementsByTagName("body")[0].appendChild(message);
    setTimeout(function(){appear(message, message.style.opacity, '+', 0.02, 1)}, 1000);
}
function appear(obj, opac, target, step, destr){
//  var step = 0.02;
  var step_ie = step * 100;
  var del_show = 5;
  var del_destroy = 6000;
  if (target == '+') {
    obj.style.opacity = opac * 1 + step;
    f_opac = opac * 100 + step_ie;
    obj.style.filter = "alpha(opacity="+f_opac+")";
    opac = opac * 1 + step;
    if (opac < 1)
      setTimeout(function(){appear(obj, opac, target, step, destr)}, del_show);
    else
      if (destr == 1)
        setTimeout(function(){appear(obj, obj.style.opacity, '-', step, destr)}, del_destroy);
  }
  else {
    obj.style.opacity = opac * 1 - step;
    f_opac = opac * 100 - step_ie;
    obj.style.filter = "alpha(opacity="+f_opac+")";
    opac = opac * 1 - step;
    if (opac > 0)
      setTimeout(function(){appear(obj, opac, target, step, destr)}, del_show);
    else
      if (destr == 1)
      {
        document.getElementsByTagName("body")[0].removeChild(obj);
        obj = null;
      }
  }
}
function ajax_req (php_scr, params_str, target, elem_id) {
  var url = location.protocol +"//"+ location.hostname+"/" + php_scr;
  var http_request = xmlhttp();
  if (!http_request)
    return false;
  
  http_request.onreadystatechange = function(){
    if(http_request.readyState == 4){
      if(http_request.status == 200) {
        if (target == '1') show_phone(0, http_request.responseText, elem_id);
        if (target == '2') popup_help(0, http_request.responseText);
      }
      else
        alert('С запросом возникла проблема.');
    }
  };
  var urlm = url + params_str;
  http_request.open('GET', urlm, true);
  http_request.send(null);
}