// iz_zoom.js (c)2002-2008 econosys system http://www.econosys.jp/system/
// iz_zoom page http://www.econosys.jp/system/freesoft03.html
// version 1.17

var iz_zoom = function(id_name, options){

	// cursor
	if (! $(id_name)){ alert('iz_zoom_error : can not find element id="'+id_name+'" .'); return false;}
	Element.setStyle(id_name, { 'cursor' : 'pointer' }); 

	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: pointer; position:absolute; top:0px; left:0px; width:0; height:0;"></div>'; }

	this.id      = id;
	this.element = $(id_name);
	this.options = options;

	this._iz_register_events();
};

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));
	},


	//----------------------------------------------- _iz_start
	_iz_start: function() {

		id           = this.id;
		templatefile = this.options.templatefile;
		imagefile    = this.options.imagefile;
		cssfile      = this.options.cssfile;
		x            = this.options.x;
		y            = this.options.y;
		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; }
		if (! imagefile ){ alert('iz_zoom_error : please set imagefile'); return false; }

		// load image file
		img     = new Image();
		img.src = imagefile;
		img.onload = function() {
		}

		// relative position
		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){
				//alert('ajax complete');
			}
		});
	} ,


	//----------------------------------------------- _view_template
	_view_template: function(httpObj) {

		var text = httpObj.responseText;
		text = this._ajax_filter(text);
		var template = new Template(text);

		// 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;
	},


/*
	//----------------------------------------------- set_shim
	_set_shim: function(id_name){
		if (navigator.userAgent.indexOf('MSIE 6.',0) == -1){ return; }
		alert('ie'+this.id);
		var dom_obj = document.getElementById(id_name);
		var style = dom_obj.currentStyle || document.defaultView.getComputedStyle(dom_obj, '') 
		var css = '';
		if (style.top){ css += 'top: '+ style.top + '; '; }
		if (style.left){ css += 'left: '+ style.left + '; '; }
		if (style.width){ css += 'width: '+ style.width + '; '; }
		if (style.height){ css += 'height: '+ style.height + '; '; }
	
		var html = '<iframe id="lay_bg" style="position:absolute; display:block; z-Index:1;' + css + '"></iframe>';
		document.body.innerHTML += html;
	} ,
*/

	//----------------------------------------------- _iz_effect
	_iz_effect: function(){
		new Effect.Appear( $('iz_element'), { from:0.0, to:1.0, duration:1.0 });
	},
	
	
	//----------------------------------------------- _iz_event_observe
	_iz_event_observe: function(){
		Event.observe( $('iz_element'), 'click', this._iz_click.bindAsEventListener(this), false);
	},
	
	
	//----------------------------------------------- _iz_click
	_iz_click: function(event){
		Event.stopObserving( $('iz_element'), 'click', this._iz_click, false);
		new Effect.Appear( $('iz_element'), { from:1.0, to:0.0, duration:1.0 })
		setTimeout(function(){ $(this.id).innerHTML = ''; }, 1002);
	}
}

