// --------------------------------------------------------------------
// Author  : mashimonator
// Create  : 2009/07/15
// Update  : 2009/07/15
// Description : 以下のケースから画像ダウンロードを防ぐ
//               ・右クリック→保存
//               ・右クリック→背景に設定での保存
//               ・右クリック→背景画像の表示
//               ・デスクトップに画像をドラッグ＆ドロップで保存
// --------------------------------------------------------------------


var imgProtecter = {

	conf : {
		dummyImage : 'img/blank.gif',  // ダミー画像のパス
		targetClass : 'protect',     // ターゲットのクラス名
		dummyStyle : 'margin:0; padding:0; border:none; position:absolute; z-index:10;', // ダミー画像に適用されるstyle
		debugMode : false,           // デバッグモード(true：デバッグモード / false：通常モード)
		rClick : true,               // マウス右クリック(true：使用可 / false：禁止)
		imagetoolbar : false         // WindowsXPのイメージツールバー(true：使用可 / false：禁止)
	},

	//-----------------------------------------
	// 初期化
	//-----------------------------------------
	init : function() {
		imgProtecter.addEvent(window, 'load', imgProtecter.set);
		if ( !imgProtecter.conf.rClick ){
			imgProtecter.addEvent(document.body, 'contextmenu', function(){return false;});
		}
		if ( !imgProtecter.conf.imagetoolbar ){
			var head = document.getElementsByTagName('head');
			var m = document.createElement('meta');
			if (imgProtecter.isIE() && !imgProtecter.isIE8()) {
				m.setAttribute('httpEquiv','imagetoolbar');
			} else {
				m.setAttribute('http-equiv','imagetoolbar');
			}
			m.setAttribute('content','no');
			head.item(0).appendChild(m);
		}
	},

	//-----------------------------------------
	// ダミー画像のセット
	//-----------------------------------------
	set : function() {
		var elm = imgProtecter.getElementsByTagAndClassName('IMG', imgProtecter.conf.targetClass);
		var length = elm.length;
		for (var i = 0; i < length; i++) {
			// 情報取得
			var h = elm[i].getAttribute('height');
			var w = elm[i].getAttribute('width');
			var pos = imgProtecter.getElementPosition(elm[i]);
			// ダミー要素作成
			var img = document.createElement('img');
			img.setAttribute('src', imgProtecter.conf.dummyImage);
			if ( h ) {
				img.setAttribute('height', h);
			}
			if ( w ) {
				img.setAttribute('width', w);
			}
			var style = imgProtecter.conf.dummyStyle + ' top:' + pos.top + 'px; left:' + pos.left + 'px;';
			if ( imgProtecter.conf.debugMode ) {
				style = style + ' background-color:#FFB2D8;';
			}
			if ( imgProtecter.isIE() && !imgProtecter.isIE8() ) {
				img.style.cssText = style;
			} else {
				img.setAttribute('style', style);
			}
			document.body.appendChild(img);
		}
	},

	//-----------------------------------------
	// 要素を取得する
	//-----------------------------------------
	getElementsByTagAndClassName : function( tag, cls ) {
		var elements = new Array();
		var targetElements = document.getElementsByTagName(tag);
		var length = targetElements.length;
		for (var i = 0; i < length; i++) {
			if (targetElements[i].className.match(cls)) {
				elements[elements.length] = targetElements[i];
			}
		}
		return elements;
	},

	//-----------------------------------------
	// 対象要素のポジションを取得する
	//-----------------------------------------
	getElementPosition : function( elm ) {
		var offsetTrail = (typeof elm == 'string') ? doc.getElementById(elm): elm;
		var x = 0; var y = 0;
		while (offsetTrail) {
			x += offsetTrail.offsetLeft;
			y += offsetTrail.offsetTop;
			offsetTrail = offsetTrail.offsetParent;
		}
		if (navigator.userAgent.indexOf('Mac') != -1 && typeof doc.body.leftMargin != "undefined") {
			x += doc.body.leftMargin;
			y += doc.body.topMargin;
		}
		return ({ "left": x, "top": y });
	},

	//-----------------------------------------
	// IE判定
	//-----------------------------------------
	isIE : function() {
		if ( IE='\v'=='v' ) {
			return true;
		} else {
			return false;
		}
	},

	//-----------------------------------------
	// IE8判定
	//-----------------------------------------
	isIE8 : function() {
		if ( imgProtecter.isIE() && document.documentMode ) {
			return true;
		} else {
			return false;
		}
	},

	//-----------------------------------------
	// 指定された要素のイベントに関数を付加する
	//-----------------------------------------
	addEvent : function( elm, event, func ) {
		try {
			elm.addEventListener(event, func, false);
		} catch (e) {
			elm.attachEvent('on' + event, func);
		}
	}

}
imgProtecter.init();
