// iz_zoom.js (c) econosys system    http://www.econosys.jp/system/
// iz_zoom page   http://www.econosys.jp/system/iz_zoom.html
// version 1.22

var iz_zoom = function(id_name, options, evnTgt){

	// cursor
	if (! $(id_name)){alert('iz_zoom_error : can not find element id="'+id_name+'" .');return false;}
	Element.setStyle(id_name, {'cursor' : 'default'}); 

	var id;
	if ( $('iz_zoom_relative_box') ){
		Element.setStyle('iz_zoom_relative_box', {
			'overflow' : 'hidden' ,
			'top'      : '0px' ,
			'left'     : '0px' ,
			'width'    : '0px' ,
			'height'   : '0px' 
		});
	}

	id = 'iz_zoom_box';
	if (! $(id) ){document.body.innerHTML += '<div id="'+id+'" style="cursor: default; position:absolute; top:0px; left:0px; width:0; height:0;"></div>';}
	this.id      = id;
	this.element = $(id_name);
	this.options = options;
    this.eventTarget = evnTgt;
	this._iz_register_events();
    this.id_name = id_name;
    
	// event_cache
	this.event_cache;
};

iz_zoom.prototype = {

	//----------------------------------------------- _debug_method
	_debugmethod : function(event) {
		alert(this.element.id);
	},


	//----------------------------------------------- _iz_register_events
	_iz_register_events: function(){
//		Event.observe(this.element, "click",     this._iz_start.bindAsEventListener(this));
//		Event.observe(this.element, "mouseover", this._load_image_file.bindAsEventListener(this));
        /* event リスナ変更 add v8*/
        Event.observe($(this.eventTarget), "click",     this._iz_start.bindAsEventListener(this));
		Event.observe($(this.eventTarget), "mouseover", this._load_image_file.bindAsEventListener(this));
	},


	//----------------------------------------------- _load_image_file
	_load_image_file: function() {
		if (this.options.imagefile){
			img     = new Image();
            //var nowImg = document.getElementById("imageM");
			img.src = this.options.imagefile;
            //img.src = nowImg;
		}
	} ,


	//----------------------------------------------- _iz_start
	_iz_start: function() {
        //var nowImg = $('imageM').src;
		id           = this.id;
		templatefile = this.options.templatefile;
		imagefile    = this.options.imagefile;
        //imagefile    = nowImg;
		cssfile      = this.options.cssfile;
		x            = this.options.x;
		y            = this.options.y;
		relative_id  = this.options.relative_id;
		hash         = this.options;

		// default
		if (! x){x=0;}
		if (! y){y=0;}

		// check arguments
		if (! templatefile ){alert('iz_zoom_error : please set templatefile');return false;}

		// relative position
		if (relative_id){
			relative_x = this._get_position($(relative_id)).x;
			relative_y = this._get_position($(relative_id)).y;
			x = x + relative_x;
			y = y + relative_y;
		}
		else if ( $('iz_zoom_relative_box') ){
			relative_x = this._get_position($('iz_zoom_relative_box')).x;
			relative_y = this._get_position($('iz_zoom_relative_box')).y;
			x = x + relative_x;
			y = y + relative_y;
		}
		
	
		$(id).innerHTML = '';
	
		// load css file
		if (cssfile){
			var css  = document.createElement('link');
			css.rel  = 'stylesheet';
			css.href = cssfile;
			css.type = 'text/css';
			document.getElementsByTagName('head')[0].appendChild(css);
		}

		// load template file
		new Ajax.Request(templatefile, {
			method     : 'get',
			onFailure  : function(httpObj){
				alert('iz_zoom_error : can not read templatefile ['+templatefile+'].');return false;
			} ,
			onSuccess  : this._view_template.bindAsEventListener(this) ,
			onComplete : function(httpObj){
			}
		});
	} ,


	//----------------------------------------------- _view_template
	_view_template: function(httpObj) {

		var text = httpObj.responseText;
		text = this._ajax_filter(text);
		var template = new Template(text);

        hash["imagefile"] = $(this.id_name).src;

		// hash.style
		hash.style='style="position:relative; top:'+y+'px; left:'+x+'px; z-index:1001; display:none;"';
		$(id).innerHTML = template.evaluate(hash);
		// effect
		this._iz_effect();
		// onclick event
		this._iz_event_observe();
	} ,


	//----------------------------------------------- _ajax_filter
	_ajax_filter: function(t){
		if(navigator.appVersion.indexOf( "KHTML" ) > -1){
		    _ajax_filter = function(t){
		        var esc = escape(t);
		        return(esc.indexOf("%u") < 0 && esc.indexOf("%") > -1) ? decodeURIComponent(esc) : t
		    }
		}
		return t;
	},


	//----------------------------------------------- _get_position
	_get_position: function(dom_obj){
		var	position = {x:dom_obj.offsetLeft, y:dom_obj.offsetTop};
		while(dom_obj = dom_obj.offsetParent){
			position.x += dom_obj.offsetLeft;
			position.y += dom_obj.offsetTop;
		};
		return position;
	},


	//----------------------------------------------- _hidden_ie6_select : Version 1.00
	_hide_ie6_select: function(){
	
		if (navigator.userAgent.indexOf('MSIE 6.',0) == -1){return;}
		else{
			var elements = document.getElementsByTagName('select');
			for (var j = 0, len2 = elements.length; j < len2; j++) {
				elements[j].style.visibility = 'hidden';
			}
		}
	} ,

	//----------------------------------------------- _visible_ie6_select : Version 1.00
	_show_ie6_select: function(){
	
		if (navigator.userAgent.indexOf('MSIE 6.',0) == -1){return;}
		else{
			var elements = document.getElementsByTagName('select');
			for (var j = 0, len2 = elements.length; j < len2; j++) {
				elements[j].style.visibility = 'visible';
			}
		}
	} ,

	//----------------------------------------------- _iz_effect
	_iz_effect: function(){
		this._hide_ie6_select();
		new Effect.Appear( $('iz_element'), {from:0.0, to:1.0, duration:1.0});
	},
	
	
	//----------------------------------------------- _iz_event_observe
	_iz_event_observe: function(){
		this.event_cache = this._iz_click.bindAsEventListener(this);
		Event.observe( $('iz_element'), 'click', this.event_cache, false);
	},
	
	
	//----------------------------------------------- _iz_click
	_iz_click: function(event){
		Event.stopObserving( $('iz_element'), 'click', this.event_cache, false);
		new Effect.Appear( $('iz_element'), {from:1.0, to:0.0, duration:1.0})
		setTimeout(function(){$(this.id).innerHTML = '';}, 1002);
		setTimeout( this._show_ie6_select.bind(this), 1002);
		setTimeout( function(){this._iz_click_flag=0;}, 1002);
	}
}


