﻿;(function(j$) {

function safari_escape(text)
{
	if (navigator.appVersion.indexOf("KHTML") > -1) {
		var esc = escape(text);

		if (esc.indexOf("%u") < 0 && esc.indexOf("%") > -1) {
			text = decodeURIComponent(esc);
		}
	}

	return text;
};
// Note: iframe()
// height, width, version and background values can be embedded in the classname using the following syntax:
//  <a class="iframe w:450 h:450 scr:no">
j$.fn.iframe = function(opt) {
	return this.each(function() {
		var j$this = j$(this);
		var cls   = this.className;
		var opts  = j$.extend({
			frameborder : ((cls.match(/fb:(\d+)/)||[])[1]) || 0,
			marginwidth : ((cls.match(/wm:(\d+)/)||[])[1]) || 0,
			marginheight: ((cls.match(/hm:(\d+)/)||[])[1]) || 0,
			width       : ((cls.match(/w:(\d+)/ )||[])[1]) || '100%',
			height      : ((cls.match(/h:(\d+)/ )||[])[1]) || '100%',
			scrolling   : ((cls.match(/sc:(\w+)/)||[])[1]) || "auto",
			hspace      : ((cls.match(/hs:(\w+)/)||[])[1]) || 0,
			vspace      : ((cls.match(/vs:(\w+)/)||[])[1]) || 0,
			cls         : cls,
			src         : j$this.attr('href') || j$this.attr('src'),
			id          : j$this.attr('id'),
			caption     : j$this.text(),
			attrs       : {},
			elementType : 'div',
			xhtml       : true
		}, opt || {});

		var endTag = opts.xhtml ? ' />' : '>';
		var a      = [['<iframe src="', opts.src, '"'].join('')];

		if (opts.id) {
			a.push([' id="', opts.id, '"'].join(''));
		}
		else {
			a.push(' id="content_iframe"');
		}

		a.push([' frameborder="', opts.frameborder, '"'].join(''));
		a.push([' marginwidth="', opts.marginwidth, '"'].join(''));
		a.push([' marginheight="', opts.marginheight, '"'].join(''));
		a.push([' width="', opts.width, '"'].join(''));
		a.push([' height="', opts.height, '"'].join(''));
		a.push([' scrolling="', opts.scrolling, '"'].join(''));
		a.push([' hspace="', opts.hspace, '"'].join(''));
		a.push([' vspace="', opts.vspace, '"'].join(''));
		a.push(endTag);

		// convert anchor to span/div/whatever...
		var j$el = j$(['<', opts.elementType, ' class="', opts.cls, '"></', opts.elementType, '>'].join(''));
		j$el.html(a.join(''));
		j$this.after(j$el).remove();
	});
};
// Note: ShowLoader(ajaxLoader)
j$.fn.ShowLoader = function(enable) {
	if (enable) {
		j$(this).html('').show().css({'height': '100px', 'background': ['transparent url(', dokuConf.ajaxLoaderImg, ') no-repeat center center'].join('')});
	} else {
		j$(this).css({'height': 'auto', 'background': 'none'});
	}
};
// Note: ScrollTo
j$.fn.ScrollTo = function(speed, callback) {
	var top = j$(this).offset().top;
	
	if (j$(this).attr('tagName') == 'BODY') {
		top = 0;
	}
	
	var selector = 'html';
	
	if (j$.browser.safari) {
		selector = 'body';
	} else if (j$.browser.msie) {
		if ('undefined' != typeof document.documentElement.style.msInterpolationMode) {
			// IE7 later
		} else {
			selector = 'body'; // IE6
		}
	}
	
	j$(selector).animate({scrollTop: top}, speed, 'swing', callback);
};
// Note: BlockElement
j$.fn.BlockElement = function(opt) {
	opt = j$.extend({
		msg     : '',
		block   : true,
		pagelock: false
	}, opt || {});

	if (opt.pagelock) {
		j$.blockUI({message: opt.msg});
		j$('.blockOverlay').click(j$.unblockUI);
		return;
	}

	if (opt.block) {
		j$(this).block({
			message: opt.msg,
			css    : {
				border: 'none',
				padding: '15px',
				backgroundColor: '#000',
				'-webkit-border-radius': '10px',
				'-moz-border-radius': '10px',
				opacity: '.5',
				color: '#fff'
			}
		});

		if (opt.click) {
			j$('.blockOverlay').click(j$(this).unblockUI);
		}
	}
	else {
		j$(this).unblock();
	}
};
// Note: CommentPost
j$.fn.CommentPost = function(mode) {
	var me = j$(this);

	me.ShowLoader(true);
	me.ScrollTo(800, function() {
		var form = j$('#comments-form');
		var params;

		form.BlockElement({msg: '<h1>Please wait...</h1>', block: true});

		if ('post' == mode) {
			mtCommentOnSubmit(document.getElementById('comments-form'));
			j$('input[name="preview"]').val('');
			params = [form.serialize(), '&post=post'].join('');
		}
		else {
			j$('input[name="preview"]').val('1');
			params = [form.serialize(), '&preview=preview'].join('');
		}

		j$.post(dokuConf.CommentURL, params, function(message, status) {
			me.ShowLoader(false);
			form.BlockElement({block: false});

			if ('error' != status) {
				var txt = safari_escape(message);

				if (0 < txt.indexOf('<!DOCTYPE', 0)||'' == txt) {
					if (0 < txt.indexOf('<h2>エラーが発生しました。</h2>', 0)) {
						j$.fn.BlockElement({msg: '<h1>コメント投稿に失敗しました<br />しばらくしてからリトライしてみてください</h1>', pagelock: true});
					}
					else {
						document.location.reload();
					}
				}
				else {
					if (0 < txt.indexOf('Thank you for commenting', 0)) {
						j$('#comments-open-content').hide();
					}

					me.html(txt);
				}
				return false;
			}
		});
	});
	return false;
};

})(jQuery);
