//Задание обработчика для события (ООП)
function OOP_Event(instance, method, context, type) {
	return function() {
		var l = arguments.length, args = [];
		for (var i = 0; i < l; i++) {args[i] = arguments[i];}
		if(type!='callback' && args.length==0) args.push(false);
		if(context) args.push(context);
		return (typeof(method)==='string')?instance[method].apply(instance, args):method.apply(instance, args);
	}
}
function OOP_CallBack(instance, method, context) {
	return OOP_Event(instance, method, context, 'callback');
}

var isIE = navigator.userAgent.toLowerCase().indexOf("msie") > -1;
var isMoz = document.implementation && document.implementation.createDocument;

function RollOpacity(id,value) {	var elem=$n(id), op=(isIE)?parseInt(value*100):value, shag=(isIE)?10:0.1;
	RollOpacity.clear(id);
	if(elem) {	    var cur_op=(isIE)?elem.filters["DXImageTransform.Microsoft.alpha"]:elem.style, cof=parseFloat(cur_op.opacity);
		if(cof==op) return false;
		if(cof<op) cur_op.opacity=cof+shag;
		if(cof>op) cur_op.opacity=cof-shag;
		RollOpacity.rop[id]=setTimeout("RollOpacity('"+id+"',"+value+")",30);	}}
RollOpacity.rop={};
RollOpacity.clear=function(id) {if(RollOpacity.rop[id]) clearTimeout(RollOpacity.rop[id]);}
RollOpacity.clear_all=function(block) {	var bl=block.length;	for(var i in RollOpacity.rop) {		if(i.substring(0,bl)==block) RollOpacity.clear(i);	}}

var photo_albums={}

function RollAlbums(elem,id) {	elem.blur();	if($S(id+'_album').display=='block') $S(id+'_album').display='none';
	else {		$S(id+'_album').display='block';	}
	return false;}

//Фотогалерея
var PhotoGallery=new Function;
PhotoGallery.prototype={
	init: function(block_id,data) {
		this.cont=$n(block_id);
		this.block_id=block_id;
		this.data=data;
		this.max_count=8;
		this.last_hover_elem=false;
		this.cur_left=0;
		this.cur_big=this.cur_left;
		this.cur_mouse=false;
		this.scroll_delay=300;

		this.draw_line();
        this.draw_big();
        this.show_big(this.cur_left);
	},

    //Создание большой фотографии
    draw_big: function() {
    	this.big_cont=AddElement(this.cont,'DIV',{className: 'g_photo_big'});
    	this.big_text=AddElement(this.big_cont,'DIV');
    	this.big_image_l=AddElement(this.big_cont,'DIV',{className: 'g_photo_big_loader'});
    	this.big_image=AddElement(this.big_image_l,'DIV', {onclick: OOP_Event(this,'show_next_big'), title: 'Щелкните на фотографии для просмотра следующего изображения'});
    },

    //Создание линии маленьких фотографий
    draw_line: function() {
    	this.f_line=AddElement(this.cont,'DIV',{className: 'g_photo_line', onmousedown: OOP_Event(this,'p_click'), onmouseup: OOP_Event(this,'p_click'), onmouseover: OOP_Event(this,'i_over')});

    	this.left_arr=AddElement(this.f_line,'A',{href: 'javascript:void(0)', className: 'g_line_left'});

		this.gc=AddElement(this.f_line,'DIV',{className: 'g_line_gc'});
        this.line_inner=AddElement(this.gc,'DIV',{className: 'g_line_inner'});
        this.draw_photos();

    	this.right_arr=AddElement(this.f_line,'A',{href: 'javascript:void(0)', className: 'g_line_right'});
    },

    //Отрисовка маленьких фотографий
    draw_photos: function() {    	RollOpacity.clear_all(this.block_id);    	for(var i=0, code=[], cr=this.cur_left, dl=this.data.length; i<dl; i++) {
    		if(i>=cr && i<(cr+this.max_count)) {                code.push("<img src='"+this.data[i]['s']+"' id='"+this.block_id+"_pgn_"+i+"' title='"+this.data[i]['text']+"' style='"+((this.cur_big!=i) ? ((isIE) ? 'filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50)' : 'opacity: 0.5') : '')+"'>");
    		}
    	}
    	this.line_inner.innerHTML=code.join('');
    },

    //Обработчик наведения мыши
    i_over: function(e) {
		var ev = e || window.event, elem = ev.target || ev.srcElement;
		if(this.last_hover_elem && this.last_hover_elem.id && this.last_hover_elem.id!=this.block_id+'_pgn_'+this.cur_big) {
			RollOpacity(this.last_hover_elem.id, 0.5);
		}
		if(elem.nodeName=='IMG' && elem.parentNode.className=='g_line_inner') {			this.last_hover_elem=elem;			if(elem.id!=this.block_id+'_pgn_'+this.cur_big) RollOpacity(this.last_hover_elem.id, 1);
			return true;
		}
    },

    //Обработчик кликов
    p_click: function(e) {
    	var ev = e || window.event, elem = ev.target || ev.srcElement;
    	if(ev.type=='mouseup') return this.clear_scroll();

    	if(elem==this.left_arr) return this.scroll_left();
    	if(elem==this.right_arr) return this.scroll_right();

    	if(elem.nodeName=='IMG' && elem.parentNode.className=='g_line_inner') {    		this.show_big(parseInt(elem.id.replace(new RegExp(this.block_id+'_pgn_'),'')));
    		this.draw_photos();
    	}

		this.clear_scroll();
    },

	//Показываем следующую слева большую картинку
    show_next_big: function() {    	if(this.cur_big<(this.data.length-1)) {    		this.show_big(parseInt(this.cur_big)+1);
   			if(this.cur_left<(this.data.length-1-this.get_last())) this.cur_left++;
   			this.draw_photos();
    	}
    	return false;    },

    //Показать большое фото
    show_big: function(i) {    	if(!this.data[i]) return false;

    	var new_w=this.data[i]['w']+'px', new_h=this.data[i]['h']+'px';

    	this.cur_big=i;
    	this.big_image_l.style.width=new_w;
    	this.big_image_l.style.height=new_h;

    	this.big_image.style.backgroundImage="url(" + this.data[i]['b'] + ")";    	this.big_image.style.width=new_w;
    	this.big_image.style.height=new_h;        this.big_text.innerHTML=this.data[i]['text']+"<p>";
    },

    //Прокрутка влево
    scroll_left: function(elem) {
   		if(this.cur_left>0) {   			this.cur_left--;
   			this.draw_photos();

            this.cur_mouse=setTimeout(function(ins){return function(){ins['scroll_left'].apply(ins)}}(this), this.scroll_delay);
   		}
		else this.clear_scroll();
		return false;
    },

    //Прокрутка вправо
    scroll_right: function() {    	var last=this.get_last();
   		if(this.cur_left<(this.data.length-1-last)) {   			this.cur_left++;
   			this.draw_photos();

            this.cur_mouse=setTimeout(function(ins){return function(){ins['scroll_right'].apply(ins)}}(this), this.scroll_delay);
   		}
   		else this.clear_scroll();
   		return false;
    },

    //Очистка таймаута на скороллинг
    clear_scroll: function() {		if(this.cur_mouse) {
			clearTimeout(this.cur_mouse);
			this.cur_mouse=false;
		}
		return false;    },

    //Получение номера последней видимой фотки
    get_last: function() {
    	var pics=this.line_inner.childNodes, first_child=parseInt(pics.item(0).offsetTop);

	    for (var i=1, pl=pics.length; i<pl; i++) {
	        if(parseInt(pics.item(i).offsetTop)>first_child) return (i-1);
	    }
	}
}