siv_add_event(window, 'load', siv_onload);

var siv_zoom_in_img = new Image();
siv_zoom_in_img.src = siv_get_plugin_dir() + 'zoom-in.cur';
var siv_zoom_out_img = new Image();
siv_zoom_out_img.src = siv_get_plugin_dir() + 'zoom-out.cur';

function siv_add_event(target, event_name, func) {
	if (target.addEventListener) {
		target.addEventListener(event_name, func, false);
	} else if (target.attachEvent) {
		target.attachEvent('on' + event_name, func);
	} else  {
		target['on' + event_name] = func;
	}
}

function siv_onload() {
	var cursor_style = 'url(' + siv_zoom_in_img.src + '), pointer !important';
	for (var i = 0; i < document.images.length; i++) {
		var img = document.images[i];
		var parent = (img.parentNode) ? img.parentNode : img.parentElement;
		if (parent && parent.tagName == 'A') {
			if (parent.href.match(/\.(bmp|gif|png|jpg|jpeg)$/i)) {
				parent.onclick = function () { return siv_link_onclick(this); };
				parent.style.cursor = cursor_style;
				img.style.cursor = cursor_style;
			}
		}
	}
}

function siv_link_onclick(elm) {
	var id = 'siv_simple_image_viewer';
	
	var window_height = (window.innerHeight) ?
		window.innerHeight : document.documentElement.clientHeight;
		
	var scroll_top = (document.body.scrollTop) ?
		document.body.scrollTop : document.documentElement.scrollTop;
	
	var doc_height = document.body.clientHeight;
	
	var style = 'position: absolute; ' +
				'top: ' + (scroll_top + (window_height / 2) - 8) + 'px; ' +
				'left: ' + ((document.body.clientWidth / 2) - 64) + 'px; ' +
				'z-index: 9999999999; ' +
				'width: 128px; ' +
				'height: 15px;' +
				'cursor: url(' + siv_zoom_out_img.src + '), pointer !important; ' +
				'background-image: url(' + siv_get_plugin_dir() + 'load.gif); ' +
				'background-position: center; ' +
				'background-repeat: no-repeat; ';
	var style_bg = 'position: absolute; ' +
				'top: 0px; ' +
				'left: 0px; ' +
				'z-index: 9999999999; ' +
				'height: ' + doc_height + 'px; ' +
				'width: 100%; ' +
				'opacity: 0.6; ' +
				'-moz-opacity: 0.6;' +
				'filter: alpha(opacity=65); ' +
				'background-color: gray; ';
	var title = 'Click to close viewer.';
	var html = '<div ' +
					'id="' + id + '_bg" ' +
					'style="' + style_bg + '" ' +
				'><\/div>' +
				'<div ' +
					'id="' + id + '" ' +
					'title="' + title + '" ' +
					'style="' + style + '" ' +
					'onclick="siv_viewer_onclick()" ' +
				'><\/div>';
	
	if (navigator.appName=="Microsoft Internet Explorer") {
		
		document.body.insertAdjacentHTML('BeforeEnd', html);
		
	} else if (document.createElement && document.body.appendChild
		&& document.body.setAttribute) {
		
		var bg = document.createElement('div');
		bg.setAttribute('id', id + '_bg');
		bg.setAttribute('style', style_bg);
		document.body.appendChild(bg);
		
		var viewer = document.createElement('div');
		viewer.setAttribute('id', id);
		viewer.setAttribute('title', title);
		viewer.setAttribute('style', style);
		siv_add_event(viewer, 'click', siv_viewer_onclick);
		document.body.appendChild(viewer);
		
	} else {
		
		document.body.innerHTML += html;
		
	}
	
	var img = new Image();
	img.onload = function () {
		
		var top = (window_height - img.height) / 2;
		top = scroll_top + ((top < 0) ? 0 : top);
		
		var left = (document.body.clientWidth - img.width) / 2;
		left = document.body.scrollLeft + ((left < 0) ? 0 : left);
		
		var viewer = siv_get_elm(id);
		viewer.style.top = top + 'px';
		viewer.style.left = left +'px';
		viewer.style.width = img.width + 'px';
		viewer.style.height = img.height + 'px';
		viewer.style.backgroundImage = "url('" + img.src + "')";
		
	}
	img.src = elm.href;
	
	siv_show_hide_select('hidden');
	
	return false;
}

function siv_viewer_onclick(evt) {
	var evt = evt || event;
	var elm = (evt.target) ? evt.target : evt.srcElement;
	siv_del_elm(elm);
	siv_del_elm(siv_get_elm(elm.id + '_bg'));
	siv_show_hide_select('visible');
}

function siv_del_elm(elm) {
	if (document.body.removeChild) {
		document.body.removeChild(elm);
	} else {
		elm.outerHTML = '';
	}
}

function siv_show_hide_select(flg) {
	if (typeof document.body.style.maxHeight == 'undefined') { // IE6 only
		var selects = document.getElementsByTagName('SELECT');
		for (var i = 0; i < selects.length; i++) {
			selects[i].style.visibility = flg;
		}
	}
}

function siv_get_elm(id) {
	return (document.getElementById) ? document.getElementById(id) : document.all(id);
}

function siv_get_plugin_dir() {
	return document.getElementById('siv_js').src.replace('simple-image-viewer.js', '');
}
