

var HatenaDiary = {
	URL : 'http://d.hatena.ne.jp',
	hatenaId: null,
	rkm: null,
	getHatenaId : function(){
		return doXHR( 'http://www.hatena.ne.jp/login' ).addCallback( function (res) {
			if ( res.responseText.match( /<a href="\/my">(\w+)<\/a>/) ) {
				return HatenaDiary.hatenaId = RegExp.$1;
			} else {
				throw('hatenaId not found. plz login.');
			}
		} )
	},
	getToken : function(){
		return this.getHatenaId().addCallback( function (hatenaId)  {
			if ( HatenaDiary.rkm ) {
				return succeed( HatenaDiary.rkm );
			} else {
				return doXHR( [
					HatenaDiary.URL,
					hatenaId,
					"20350101" // empty page has lesser content but with rkm.
				].join("/") ).addCallback( function (res) {
					if ( res.responseText.match( /Hatena\.rkm\s*=\s*['"](.+?)['"]/) ) {
						return HatenaDiary.rkm = RegExp.$1;
					} else {
						throw('rkm not found. plz login.');
					}
				} );
			}
		} );
	},
	
	post : function(params){
		return this.getToken().addCallback(function(token){
			params.rkm = token;
			var u = [HatenaDiary.URL, HatenaDiary.hatenaId, ""].join("/");
			var c = HatenaDiary[capitalize(params.type)].convertToForm(params);
			return doXHR( u, {
				method : 'POST',
				mimeType: "application/x-www-form-urlencoded",
				referrer    : u,
				sendContent : c,
			} ).addCallback(function(res){
			});
		});
	},
}

HatenaDiary.Link = {
	convertToForm : function(m){
		return {
			rkm   : m.rkm,
			title : "[" + m.type + "]"  + m.title,
			body : m.title.link(m.href),
		};
	}
}

HatenaDiary.Quote = {
	convertToForm : function(m){
		var body = '<blockquote ' + [
							'class="tombloo_quote"',
							'cite="' + m.href + '"',
							'title="' + m.title + '"'
						].join(" ") +
					'>' + m.body + '</blockquote>';
		return {
			rkm   : m.rkm,
			title : "[" + m.type + "]"  + m.title,
			body : body
		};
	}
}

HatenaDiary.Photo = {
	convertToForm : function(m){
		return {
			rkm   : m.rkm,
			title : "[" + m.type + "]"  + m.title,
			body : '<div class="tombloo_photo"><img src=' + m.source.quote() + ' />' +

					'<p class="tombloo_photo">' + m.body + '</p></div>',
		};
	}
}

Tombloo.Service.posters['HatenaDiary'] = function (ctx, params) {
	if ( HatenaDiary[ String(params.type).capitalize() ] ) {
		return HatenaDiary.post(params);
	} else {
		return succeed();
	}
}


