/* Popup galéria / kép / link - v1.0 2007. július 25.
=====================================================
Képmegjelenítő meghívás: <a href="#" onclick="return popup_image({this}, {loader}, {drag_and_drop});">Kép</a>
Galéria meghívás:        <a href="#" onclick="return popup_gallery({gallery_id}, {image_id}, {loader}, {drag_and_drop})">Galéria</a>
Link meghívás:           <a href="#" onclick="return popup_link({this}, {popup_width}, {popup_height}, {loader}, {drag_and_drop});">Link</a>

Készítette: Pándics Márton, Rayfield Kft.
E-mail: pandics.marton[kukac]rayfield[pont]hu
*/

var link_handler    = '/includes/handlers/link_handler.php';
var image_handler   = '/includes/handlers/image_handler.php';
var gallery_handler = '/includes/handlers/gallery_handler.php';

// galéria megnyitása
function popup_gallery(gallery_id, image_id, loader, drag_and_drop)
{
	var gallery = document.getElementById('rf_gallery');

	// már van megjelenített galéria
	if (gallery) {
		return update_gallery('', gallery_id, image_id, loader, drag_and_drop);
	}

	new Ajax.Request(gallery_handler, {parameters: 'gallery_id=' + gallery_id, onComplete: function(originalRequest) { update_gallery(originalRequest, gallery_id, image_id, loader, drag_and_drop); }});
	return false;
}

// galéria bezárása
function close_gallery()
{
	var gallery = document.getElementById('rf_gallery');
	document.body.removeChild(gallery);

	return false;
}

// galéria keretének megjelenítése (csak első alkalommal) / kép frissítése
function update_gallery(originalRequest, gallery_id, image_id, loader, drag_and_drop)
{
	if (originalRequest) {
		var result = originalRequest.responseText

		if (!result) {
			alert('update_gallery: a gallery_handler (' + gallery_handler + ') nem adta vissza a galéria keretét!');
			return false;
		} else {
			document.body.innerHTML += result;
		}

		var positions = get_popup_positions($('rf_gallery').offsetWidth, $('rf_gallery').offsetHeight);

		$('rf_gallery').style.left = positions[0] + 'px';
		$('rf_gallery').style.top  = positions[1] + 'px';

		if (drag_and_drop) {
			new Draggable('rf_gallery', {handle: 'popup_header', starteffect: false, endeffect: false});
		}
	}

	new Ajax.Request(gallery_handler, {parameters: 'gallery_id=' + gallery_id + '&image_id=' + image_id, onComplete: function(originalRequest) { update_gallery_callback(originalRequest, loader); }});
	return false;
}

// galéria frissítés eredményének alkalmazása
function update_gallery_callback(originalRequest, loader)
{
	var result = originalRequest.responseText;

	if (!result) {
		alert('update_gallery_callback: a gallery_handler (' + gallery_handler + ') nem adja vissza a kép adatait!');
		return false;
	} else {
		var results = result.split('@');
	}

	var gallery_id    = results[0];
	var prev_image_id = results[1];
	var next_image_id = results[2];
	var image_source  = results[3];

	if (loader) {
		$('rf_gallery_image').className = 'the_loader'; 
		$('rf_gallery_image').src = '../../images/ajax_loader.gif';
	}

	var gallery_image = new Image();
	gallery_image.onload = function() {
		$('rf_gallery_image').src = image_source;
		$('rf_gallery_image').className = 'the_image';
	}
	gallery_image.src = image_source;

	if (prev_image_id) {
		$('rf_gallery_left').className = 'button_visible';
		$('rf_gallery_left').onclick = function() { return update_gallery('', gallery_id, prev_image_id, loader); };
	} else { 
		$('rf_gallery_left').className = 'button_invisible';
	}

	if (next_image_id) {
		$('rf_gallery_right').className = 'button_visible';
		$('rf_gallery_right').onclick = function() { return update_gallery('', gallery_id, next_image_id, loader); };
	} else { 
		$('rf_gallery_right').className = 'button_invisible';
	}

	$('rf_popup_gallery_image_name').innerHTML = results[4];
}

// kép megnyitása
function popup_image(a_object, loader, drag_and_drop)
{
	var popup = $(a_object.href);   

	// már megjelenített popup
	if (popup) {
		return popup_image_callback('', a_object.href, loader, drag_and_drop);
	}

	new Ajax.Request(image_handler, {parameters: 'image_source=' + a_object.href, onComplete: function(originalRequest) { popup_image_callback(originalRequest, a_object.href, loader, drag_and_drop); }});
	return false;
}

// kép, kép keretének megjelenítése (csak első alkalommal) / újrapozicionálás
function popup_image_callback(originalRequest, image_source, loader, drag_and_drop)
{
	if (originalRequest) {
		var result = originalRequest.responseText;

		if (!result) {
			alert('popup_image_callback: a image_handler (' + image_handler + ') nem adta vissza a kép keretét!');
			return false;
		} else {
			document.body.innerHTML += result;
		}
	}

	var positions = get_popup_positions($(image_source).offsetWidth, $(image_source).offsetHeight);

	$(image_source).style.left = positions[0] + 'px';
	$(image_source).style.top  = positions[1] + 'px';

	if (originalRequest) {
		if (drag_and_drop) {
			new Draggable(image_source, {handle: 'rf_popup_image_header', starteffect: false, endeffect: false});
		}

		if (loader) {
			$('rf_popup_image').className = 'the_loader'; 
			$('rf_popup_image').src = '../../images/ajax_loader.gif';
		}

		var popup_image = new Image();
		popup_image.onload = function() {
			$('rf_popup_image').src = image_source;
			$('rf_popup_image').className = 'the_image';
		}
		popup_image.src = image_source;
	}

	return false;
}

// kép bezárása
function close_image(image_source)
{
	var popup = document.getElementById(image_source);
	document.body.removeChild(popup);

	return false;
}

// link megjelenítése
function popup_link(a_object, inner_width, inner_height, loader, drag_and_drop)
{
	var popup_link = document.getElementById(a_object.href);

	// már megjelenített popup
	if (popup_link) {
		return popup_link_callback('', a_object.href, loader, drag_and_drop);
	}

	new Ajax.Request(link_handler, {parameters: 'link_source=' + a_object.href + '&inner_width=' + inner_width + '&inner_height=' + inner_height, onComplete: function(originalRequest) { popup_link_callback(originalRequest, a_object.href, loader, drag_and_drop); }});
	return false;
}

// link popup megjelenítése (csak első alkalommal) / újrapozicionálás
function popup_link_callback(originalRequest, link_source, loader, drag_and_drop)
{
	if (originalRequest) {
		var result = originalRequest.responseText;

		if (!result) {
			alert('popup_link_callback: a link_handler (' + link_handler + ') nem adta vissza a link popup keretének tartalmát!');
			return false;
		} else {
			document.body.innerHTML += result;
		}
	}

	var positions = get_popup_positions($(link_source).offsetWidth, $(link_source).offsetHeight);

	$(link_source).style.left = positions[0] + 'px';
	$(link_source).style.top  = positions[1] + 'px';

	if (originalRequest) {
		if (drag_and_drop) {
			new Draggable(link_source, {handle: 'rf_popup_link_header', starteffect: false, endeffect: false});
		}

		if (loader) { 
			$('rf_popup_link').innerHTML = '<img src="../../images/ajax_loader.gif" />';
		}

		new Ajax.Updater('rf_popup_link', link_handler, {parameters: 'link_source=' + link_source});
	}

	return false;
}

// popup link bezárása
function close_link(link_source)
{
	var popup_link = document.getElementById(link_source);
	document.body.removeChild(popup_link);

	return false;
}

// popup középre helyezésének méretei
function get_popup_positions(width, height)
{
        var is_ie = document.all ? true : false;
        var scroll_x = document.documentElement.scrollLeft;
        var scroll_y = document.documentElement.scrollTop;

        if (is_ie) {
                var window_x = document.documentElement.clientWidth;
                var window_y = document.documentElement.clientHeight;
        } else {
                var window_x = window.innerWidth;
                var window_y = window.innerHeight;
        }

        if (window_x <= width) {
                var left = scroll_x;
        } else {
                var left = scroll_x + (window_x - width) / 2;
        }

        if (window_y <= height) {
                var top = scroll_y;
        } else {
                var top = scroll_y + (window_y - height) / 2;
        }

        return new Array(left, top);
}
