// JavaScript Document
//  ----------------- up_window 24.06.2010 -------------------------
// класс alignByWindow
// задача класса в данной реализации вернуть для свободно позиционируемого элемента
// значения top и left с учетом вертикальной и горизонатльной прокрутки документа
// элемент расположится по центру окна
// для этого используется метод alignCenter
// в качестве параметра он получает единственный аргумент element который может быть элементом либо строкой
// необходимо учитывать один важный момент если элемент не поддерживает JavaScript свойства
// width и height то их аналоги должны быть указаны в свойствах style.width и style.height 
// не учитывание этого момента может привести к ошибкам в работе сценария
 
function alignByWindow(){// конструктор alignByWindow
	this.window_height_calculator = function(){
		if(window.innerHeight){// проверка функц возможностей //Свойства большинста броузеров
		    return window.innerHeight;
	    }
	    else if(document.documentElement.clientHeight){// проверка функц возможностей // свойства IE
			return document.documentElement.clientHeight;
	    }
        else if(document.body.clientHeight){// проверка функц возможностей // свойства IE
		    return document.body.clientHeight;
		}
	}
	this.window_width_calculator = function(){
		if(window.innerWidth){// проверка функц возможностей //Свойства большинста броузеров
		    return window.innerWidth;
	    }
	    else if(document.documentElement.clientWidth){// проверка функц возможностей // свойства IE
			return document.documentElement.clientWidth;
	    }
        else if(document.body.clientWidth){// проверка функц возможностей // свойства IE
		    return document.body.clientWidth;
		}
	}
	this.window_scroll_top = function(){// метод возвращающий величину прокрутки экрана по вертикали
	    if(window.pageYOffset != undefined ){// проверка функц возможностей //Свойства большинста броузеров    	
		    return window.pageYOffset;			
	    }
		/////////////////////////////////// для IE именно только в такой комбинации работает  // проверка функц возможностей //Свойства большинста броузеров
		if(document.documentElement.scrollTop){  
			return document.documentElement.scrollTop;
	    }
		if(document.body.scrollTop){
			return  document.body.scrollTop;
	    }
		else if(document.body.scrollTop != undefined ){  
			return  document.body.scrollTop;
	    }
	}
	this.window_scroll_left = function(){// метод возвращающий величину прокрутки экрана по горизонтали
	    if(window.pageXOffset != undefined ){// проверка функц возможностей //Свойства большинста броузеров    	
		    return window.pageXOffset;			
	    }
		/////////////////////////////////// для IE именно только в такой комбинации работает  // проверка функц возможностей //Свойства большинста броузеров
		if(document.documentElement.scrollLeft){
			    return document.documentElement.scrollLeft;
		}
		if(document.body.scrollLeft){ 
			return  document.body.scrollLeft;
	    }
		else if(document.body.scrollLeft != undefined){ 
			return  document.body.scrollLeft;
	    }
	}

    this.alignCenter = function(element){ // метод устанавливающий  значения для параметров top и left  
	    if(typeof(element) == "string") element = document.getElementById(element);
		
		var window_height = this.window_height_calculator(); //получаем числовое значение высоты окна
		var window_width = this.window_width_calculator(); //получаем числовое значение ширины окна
		var scroll_top = this.window_scroll_top(); // получаем величину прокрутки документа по вертикали
		var scroll_left = this.window_scroll_left(); // получаем величину прокрутки документа по горизонтали
			
		if(element.height){ // если параметры размеров указаны в атрибуте height
		
			var element_height = parseInt(element.height);// преобразуем в числовое и помещаем в пременную
			                                              // значение высоты элемента
			var element_width = parseInt(element.width);// преобразуем в числовое и помещаем в пременную
			                                              // значение ширины элемента
		}
		else if(element.style.height){ // если параметры размеров указаны в атрибуте style.height
			
			var element_height = parseInt(element.style.height);// преобразуем в числовое и помещаем в пременную
			                                                    // значение высоты элемента
			var element_width = parseInt(element.style.width);// преобразуем в числовое и помещаем в пременную
			                                              // значение ширины элемента
		}
		
	    var top_offset = parseInt(window_height/2 - element_height/2 + scroll_top);
		var left_offset = parseInt(window_width/2 - element_width/2 + scroll_left);
		
		var offset = new Array();
		offset[0] = top_offset;
		offset[1] = left_offset;
		return offset;
		//element.style.left = left_offset + "px";
	}   

}
var align = new alignByWindow();
 
 
 
 
 function show_window(){ // 
 
    //////////////////////////////////////////
	///             настройки              ///
	
 	var flag_img_link = true; //false// если надо чтобы изображение закрывалось при нажатии на изображение
	var flag_close_div = false; //true// если надо чтобы изображение закрывалось при нажатии на маленькую(локальную) кнопку
	var base_div_bgColor = '#E0111A';
	var base_div_border =  '#AF0D18 solid 2px';
	var base_div_padding = 18 ;  // отступ в базовом div
	
	var big_img_border =  '#FFDEC7 solid 1px';
	
	var load_div_size = [ 200 ,180 ];  // размеры div индикатора загрузки  ширина, высота
	var load_div_bgColor = '#FFFFFF';  // цвет фона div индикатора загрузки
	var load_div_border = 15 ;         // размер рамки div индикатора загрузки
	var load_div_borderColor = '#DCDCDC solid' ; // цвет рамки div индикатора загрузки
	

	
	//////////////////////////////////////////
	///       индикация загрузки           ///
	
	if(document.getElementById("load_div_UJKRSH03284")){
	    var load_div = document.getElementById("load_div_UJKRSH03284");
        load_div.parentNode.removeChild(load_div);
	}
		
	var load_div = document.createElement("div");
	load_div.id = 'load_div_UJKRSH03284';
	load_div.zIndex = '100';
	load_div.style.backgroundColor = load_div_bgColor;
	load_div.style.border = load_div_borderColor + ' ' + load_div_border + 'px';
	
	if (navigator.appName == "Microsoft Internet Explorer"){ // установка размеров для ei6-ei7
		load_div.style.width = parseInt(load_div_size[0]) + 2*load_div_border + 'px';
	    load_div.style.height = parseInt(load_div_size[1]) + 2*load_div_border + 'px';
	}
	else{                                                    // установка размеров для остальных
		load_div.style.width = parseInt(load_div_size[0]) + 'px';
	    load_div.style.height = parseInt(load_div_size[1]) + 'px';
	}
	
	var align_parametr = align.alignCenter(load_div); // выравниевание по центру
	load_div.style.position = 'absolute';
	
	if (navigator.appName == "Microsoft Internet Explorer"){ // установка расположения для ei6-ei7
		load_div.style.top = align_parametr[0];
	    load_div.style.left = align_parametr[1];
	}
	else{                                                    // установка расположения для остальных
		load_div.style.top = align_parametr[0] - load_div_border;
	    load_div.style.left = align_parametr[1] - load_div_border;
	}


	var load_img = document.createElement("img"); // создаем анимированную gif-ку

	load_img.onload = function(){
	    load_img.style.marginTop = parseInt(load_div_size[1])/2 - load_img.height/2 + 'px';
	    load_img.style.marginLeft = parseInt(load_div_size[0])/2 - load_img.width/2 + 'px';
		load_div.appendChild(load_img);
	    document.body.appendChild(load_div);
	}
	load_img.src = 'scripts/javascript/up_window_img/loading.gif';
	
	
	////////////////////////////////////////////////////////////
	///      работаем над выводом большого изображения       ///
	
	
	
	////////////////////////////////////////////////////////////
	///   если DIV контейнер для IMG уже есть удаляем его    ///
		
    if(document.getElementById("div_UJKRSH03284")){
	      var div = document.getElementById("div_UJKRSH03284");
          div.parentNode.removeChild(div);
	}
	
    //////////////////////////////////////////
	///   Создаем DIV контейнер для IMG    ///
	
	var div = document.createElement("div");
	div.style.position = 'absolute';
	div.style.zIndex = '101';
	div.id = 'div_UJKRSH03284';
	div.style.display = 'none';

	div.style.backgroundColor = base_div_bgColor ;
	div.style.border =  base_div_border;
	
	div.style.padding =  base_div_padding + 'px';
	
	///////////////////////////////////////////
	///  Создаем IMG кнопку для закрывания  ///
	
	var a = document.createElement("a");
	a.href = '#';
	a.onclick = function(){
		div.parentNode.removeChild(div);
		return false;
	}
	a.onmouseover = function(){
		img_close.src = 'scripts/javascript/up_window_img/close_mouse_over.gif';
		return false;
	}
	a.onmouseout = function(){
		img_close.src = 'scripts/javascript/up_window_img/close.gif';
		return false;
	}
	
	
	var img_close = document.createElement("img");
	img_close.style.border = 'none';
	img_close.src = 'scripts/javascript/close.gif';
	var image_preload = new Image();
	image_preload.src = "scripts/javascript/close_mouse_over.gif";
	a.appendChild(img_close);
	
	/////////////////////////////////////////////////////////////////
	///  Создаем DIV (маленькую локальную) кнопку для закрывания  ///
	
	var div_close = document.createElement("div");
	div_close.style.border =  '#DCDCDC solid 0px';
	div_close.style.width = 20  + 'px';
	div_close.style.height = 20 + 'px';
	div_close.style.top = 15 + 'px';
    div_close.style.right = 14 + 'px';
	div_close.style.position = 'absolute';
	
	
	
    //////////////////////////////////////////////////////////////////
	///    Создаем  кнопку для закрывания во все изображение       ///
		
	var img_link = document.createElement("a");
	img_link.style.cursor = 'pointer';
	img_link.onclick = function(){
		div.parentNode.removeChild(div); //здесь может необхдимо непосредственное обращение к div через getElementById ?
	}
	
	 //////////////////////////////////////////
	///           Создаем  IMG             ///
	
	
	var new_img = document.createElement("img");
	
	var img = new Image();
	img.onload = imgOnload;
	var src = this.getAttribute("rollover");
	img.src = src;
	
	
	//////////////////////////////////////////////////////////////////
	///    функция срабатывающая после загрузки изображения        ///
	
	function imgOnload(){
		
		// удаляем load_div
		if(document.getElementById("load_div_UJKRSH03284")){
	        var load_div = document.getElementById("load_div_UJKRSH03284");
            load_div.parentNode.removeChild(load_div);
	    }
		
        // устанавливаем размеры DIV
		div.style.width = img.width  + 'px';
	    div.style.height = img.height + 'px';

		
		
		// присваиваем адрес изображению
		new_img.src = src;
		new_img.style.border =  big_img_border; 
		
		// вычисляем значения top и left для выравнивания элемента по середине окна
		var offset = align.alignCenter(div);
		if (navigator.appName == "Microsoft Internet Explorer"){ // установка расположения для ei6-ei7
		    div.style.top = offset[0] - base_div_padding + 'px';
		    div.style.left = offset[1] - base_div_padding + 'px';
	    }
	    else{                                                    // установка расположения для остальных пока такое же как и для ie
	        div.style.top = offset[0] - base_div_padding + 'px';
		    div.style.left = offset[1] - base_div_padding + 'px';
	    }
		
		
		
		// вкладивем элементы друг в друга
		if(flag_close_div == true){
			div_close.appendChild(a);
		    div.appendChild(div_close);
		}
		
		if(flag_img_link == true){
			img_link.appendChild(new_img);
			div.appendChild(img_link);	
		}
		else{
		    div.appendChild(new_img); 
		}
		
		
 //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';



		document.body.appendChild(div);
		
		// показываем всё
		opacity.count = 0;
		opacity.count_opacity = 0.0;
		opacity.count_opacity_ie = 0;
		function opacity(){
		    div.style.display = 'block';

			if (navigator.appName == "Microsoft Internet Explorer"){ // ei6-ei7
		        div.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=" + opacity.count_opacity_ie + ")" ;
	        }
			else{
			    div.style.opacity = opacity.count_opacity.toFixed(1);
			}
			opacity.count++;
			opacity.count_opacity = opacity.count_opacity + 0.1;
			opacity.count_opacity_ie = parseInt(opacity.count_opacity_ie) + 10;
			if(parseInt(opacity.count) > 10){
				clearInterval(clear);
			    //alert(opacity.count);
			//alert(div.style.opacity);
			}
		}
		
		var clear = setInterval(opacity,15);
		
	}
	
	
	
	return false;

}
   
 
 
 
function up_window(){ //     

   var arr_a = document.getElementsByTagName("a");
   for( var i = 0 ; i < arr_a.length ; i++ ){	
       var rollover = arr_a[i].getAttribute("rollover");
	   if(rollover){
			arr_a[i].onclick = show_window; 
			//alert(rollover);
	   }
   }
}

