/* 
Image Zoom: v1.1 - 21 Digital Web Solutions cc, Werner Rottcher
Date: 2009-09-03

* DEPENDANCIES
- AJAX Loader Script
- findObj() - Global system function

OBJECT SAFE!, create as many as you need!

Version 1.1 - BETA
------------
1. Life begins

*/

var displaying = new Array();
var image_zoom_loading = false;

function image_zoom(mdisplay_layer_name, mevent_layer_name, mimage_name, 
					mphp_loader, msubmit_method) {
	var obj = this; //Setting Bind variable
	this.display_layer_name = mdisplay_layer_name;
	this.event_layer_name = mevent_layer_name;
	this.image_name = mimage_name;
	this.php_loader = mphp_loader;
	this.submit_method = msubmit_method;
    this.Opacity = 100;
    this.timeout = 0;
	var event_layer = findObj(mevent_layer_name);
	if (event_layer != null) {
		this.innerHTML = event_layer.innerHTML;
	}

	if(event_layer.addEventListener) { // DOM
		event_layer.addEventListener('mousemove', function daMouse(e) {
			var theTarget = e.target ? e.target : e.srcElement;
			obj.zoom(e, theTarget);
		}, true);
	} else if(event_layer.attachEvent ) { //IE
		event_layer.attachEvent('onmousemove', function(e) {
			var theTarget = e.target ? e.target : e.srcElement;
			obj.zoom(e, theTarget);
		});
	}	
}	

image_zoom.prototype={
	//now create the event handler function to process the event
	zoom: function (e, object) {
        var obj = this;
        if (image_zoom_loading) {return;}
        if( !e ) {
			//if the browser did not pass the event information to the
			//function, we will have to obtain it from the event register
			if( window.event ) {
				//Internet Explorer
				e = window.event;
			} else {
				//total failure, we have no way of referencing the event
				return;
			}
		}
        image_zoom_loading = true;
        var layer_name = "";
        var layer = null;
        for (i = 0; i < displaying.length; i++) {
            img_zoom_obj = displaying[i];
            if (img_zoom_obj.displaye_layer_name == obj.display_layer_name) {
                return;
            } else {
                for (j = 0; j < displaying.length; j++) {
                    img_zoom_obj = displaying[i];
                    obj.hideLayer(img_zoom_obj.display_layer_name, true);
                    img_zoom_obj.restoreInnerHTML();
                }
                displaying = new Array();
            }
        }
        displaying.push(obj);
        layer = findObj(obj.display_layer_name);
        layer.style.height = "auto";
        layer.style.visibility = "hidden";
        obj.Opacity = 0;
		obj.ajaxLoad();
        obj.hideLayer(obj.event_layer_name);
        obj.showLayer(obj.display_layer_name);
	},

    fadeIn: function(layer_name) {
        var obj = this;
        var mlayer = findObj(layer_name);
        obj.Opacity = obj.Opacity+4;
        if (this.Opacity <= 100) {
            if (IE) {
                mlayer.filters["alpha"].opacity = obj.Opacity;
            } else {
                mlayer.style.opacity = (obj.Opacity/100);
            }
            var timeoutFunction = function() {obj.fadeIn(layer_name)}
            this.timeout = setTimeout(timeoutFunction, 20);
        } else {
            clearTimeout(obj.timeout);
            obj.Opacity = 100;
            obj.timeout = null;
        }
    },

	showLayer: function(mlayer) {
		var obj = this;
		var layer = findObj(mlayer);
		if (layer != null) {
            layer.style.visibility = "visible";
            obj.fadeIn(mlayer);
		}
	},

	hideLayer: function(mlayer, reset_height) {
		var obj = this;
        var layer = findObj(mlayer);
		if (layer != null) {
			layer.style.visibility = "hidden";
            if (reset_height) {
                obj.Opacity = 0;
                if (IE) {
                    layer.filters["alpha"].opacity = obj.Opacity;
                } else {
                    layer.style.opacity = (obj.Opacity/100);
                }
                layer.style.height = "0px";
            }
			layer.innerHTML = "";
		}
	},

    restoreInnerHTML: function() {
        var obj = this;
        var layer = findObj(obj.event_layer_name);
        if (layer != null) {
            layer.innerHTML = obj.innerHTML;
            layer.style.visibility = "visible";
        }
    },
		
	ajaxLoad: function () {
		var obj = this;
		try {
			setLoadingImage(obj.display_layer_name);
			xmlHttp = new ajaxObject(obj.php_loader, obj.display_layer_name, updateLayer);
			xmlHttp.update("image_name="+obj.image_name+"&method="+obj.submit_method, 'GET');
            image_zoom_loading = false;
		} catch(err) {
			alert(err);
		}
	}
}
