/*

Auth.authenticate --> Auth.login --> Auth.logout

*/


Auth = {
	obj: null,

	auth: false,

	id: null,

	pw: null,

	authenticate: function() {
		if( Auth.obj ) {
			//YAHOO.util.Connect.abort(Auth.obj, Auth.callback, false);
		}

		var url = "php/proxy.php?url=http://me2day.net/api/get_auth_url";
		Auth.obj = YAHOO.util.Connect.asyncRequest("GET", url, Auth.callback, null);
		Cookie.saveMap();
	},

	handleSuccess: function(o) {
		if( o.responseText.match("<auth_token>") ) {
			var pos = o.responseText.search("<url>"); // 5
			var url = o.responseText.substr(pos + 5, 65);
			pos = o.responseText.search("<token>"); // 7
			var token = o.responseText.substr(pos + 7, 32);
			Auth.onSuccess(url, token);
		}
		else {
			alert(o.responseText);
		}
		delete Auth.obj;
		Auth.obj = null;
	},

	handleFailure: function(o) {
		delete Auth.obj;
		Auth.obj = null;
	},

	onSuccess: function(url, token) {
		Cookie.set("token", token, 5);
		document.location.href = url;
	},

	login: function(id, pw) {
		if( !id || !pw ) {
			Auth.logout();
			return;
		}

		Auth.auth = true;
		Auth.id = id;
		Auth.pw = pw;
		
		Cookie.set("user_id", id, 30);
		Cookie.set("user_key", pw, 30);

		YAHOO.util.Dom.setStyle("menu_login", "display", "none");
		YAHOO.util.Dom.setStyle("menu_logout", "display", "block");
	},

	logout: function() {
		Auth.auth = false;
		Auth.id = null;
		Auth.pw = null;
		
		Cookie.erase("user_id");
		Cookie.erase("user_key");

		YAHOO.util.Dom.setStyle("menu_login", "display", "block");
		YAHOO.util.Dom.setStyle("menu_logout", "display", "none");
	}
};

Auth.callback = {
	success: Auth.handleSuccess,
	failure: Auth.handleFailure,
	scope: Auth
};

/*

Cookie.set --> Cookie.get --> Cookie.erase

*/

Cookie = {
	set: function(name, value, min) {
		if( min ) {
			var date = new Date();
			date.setTime(date.getTime() + (min * 60 * 1000));
			var expires = "; expires=" + date.toGMTString();
		}
		else {
			var expires = "";
		}
		document.cookie = name + "=" + value + expires + "; path=/";
	},

	get: function(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for( var i = 0; i < ca.length; i++ ) {
			var c = ca[i];
			while( c.charAt(0)==' ' ) {
				c = c.substring(1, c.length);
			}
			if( c.indexOf(nameEQ) == 0 ) {
				return c.substring(nameEQ.length, c.length);
			}
		}
		return null;
	},

	erase: function(name) {
		Cookie.set(name, "", -1);
	},

	saveMap: function() {
		Cookie.set("x", Me2Map.getCenter().x.toString(), 5);
		Cookie.set("y", Me2Map.getCenter().y.toString(), 5);
		Cookie.set("zoom", Me2Map.getZoom().toString(), 5);
		Cookie.set("today", Me2Date.getDisplayDate(), 5);
		
		if( document.location.href.match("tag.htm") ) {
			Cookie.set("redirect", "tag.htm", 5);
		}
		else {
			Cookie.set("redirect", "index.htm", 5);
		}
	},

	loadMap: function() {
		var x = Cookie.get("x");
		var y = Cookie.get("y");
		var zoom = Cookie.get("zoom");
		var today = Cookie.get("today");

		return { "today": today, "x": x, "y": y, "zoom": zoom };
	}
};

Query = {
	args: null,

	get: function(name) {
		if( !Query.args ) {
			Query.args = new Object();
			var pairs = location.search.substring(1).split("&");
			for( var i = 0; i < pairs.length; i++ ) {
				var pos = pairs[i].indexOf('=');
				if( pos == -1 ) { 
					continue;
				}
				var key = pairs[i].substring(0, pos); 
				var value = pairs[i].substring(pos + 1); 
				Query.args[key] = unescape(value); 
			}
		}

		return Query.args[name] ? Query.args[name] : null;
	}
};

Me2Date = {
	day: 24 * 60 * 60 * 1000,

	isValid: function(date) {
		if( date.length != 8 && date.length != 10 ) {
			return false;
		}

		var y = Me2Date._getYear(date);
		var m = Me2Date._getMonth(date);
		var d = Me2Date._getDate(date);

		if( !y || !m || !d ) {
			return false;
		}

		return true;
	},

	_getYear: function(date) {
		if( date.length != 8 && date.length != 10 ) {
			return null;
		}

		var y = parseInt(date.substr(0, 4));
		if( y < 2000 ) {
			return null;
		}

		return y;
	},

	_getMonth: function(date) {
		if( date.length != 8 && date.length != 10 ) {
			return null;
		}

		var m = (date.length == 8) ? date.substr(4, 2) : date.substr(5, 2);
		m = (parseInt(m) > 0) ? parseInt(m) : parseInt(m.substr(1));

		return (m >= 1 && m <= 12) ? m : null;
	},

	_getDate: function(date) {
		if( date.length != 8 && date.length != 10 ) {
			return null;
		}
		var d = (date.length == 8) ? date.substr(6, 2) : date.substr(8, 2);
		d = (parseInt(d) > 0) ? parseInt(d) : parseInt(d.substr(1));

		return (d >= 1 && d <= 31) ? d : null;
	},

	_date_to_string: function(date) {
		var y = date.getFullYear();
		var m = date.getMonth() + 1;
		var d = date.getDate();

		return y + "" +  ((m > 9) ? m : "0" + m) + "" + ((d > 9) ? d : "0" + d);
	},

	getToday: function(offset) {
		// today : offset = 0
		// yesterday : offset = -1
		// tomorrow : offset = 1
		var today = new Date();
		var y = today.getFullYear();
		var m = today.getMonth() + 1;
		var d = today.getDate();
		
		if( offset ) {
			var another_day = new Date(y, m - 1, d + offset);
			y = another_day.getFullYear();
			m = another_day.getMonth() + 1;
			d = another_day.getDate();
		}

		return y + "" +  ((m > 9) ? m : "0" + m) + "" + ((d > 9) ? d : "0" + d);
	},

	getPrev: function(date) {
		if( !Me2Date.isValid(date) ) {
			return null;
		}

		var y = Me2Date._getYear(date);
		var m = Me2Date._getMonth(date);
		var d = Me2Date._getDate(date);
		var prev = new Date(y, m - 1, d - 1);

		return Me2Date._date_to_string(prev);
	},

	getNext: function(date) {
		if( !Me2Date.isValid(date) ) {
			return null;
		}

		var y = Me2Date._getYear(date);
		var m = Me2Date._getMonth(date);
		var d = Me2Date._getDate(date);
		var prev = new Date(y, m - 1, d + 1);

		return Me2Date._date_to_string(prev);
	},

	setDisplayDate: function(date) {
		if( !Me2Date.isValid(date) ) {
			return;
		}

		var y = Me2Date._getYear(date);
		var m = Me2Date._getMonth(date);
		var d = Me2Date._getDate(date);

		YAHOO.util.Dom.get("date_display").innerHTML = y + "." +  ((m > 9) ? m : "0" + m) + "." + ((d > 9) ? d : "0" + d);
	},

	getDisplayDate: function() {
		return YAHOO.util.Dom.get("date_display").innerHTML.replace(/\./g, "");
	}
};

Me2Permalink = {
	to_pubdate: function(permalink) {
		if( !permalink.match("http://me2day.net/") ) {
			return null;
		}

		permalink = permalink.substr(permalink.length - 19);
		var date = permalink.substr(0, 10).replace(/\//g, "-");
		var time = permalink.substr(11);
		var h = (parseInt(time.substr(0, 2)) > 0) ? parseInt(time.substr(0, 2)) : parseInt(time.substr(1, 1));

		if( h >= 9 ) {
			h -= 9;
			var pubDate = date + " " + ((h > 9) ? h : "0" + h) + time.substr(2);
		}
		else {
			h = 24 + h - 9;
			date = Me2Date.getPrev(date);
			date = date.substr(0, 4) + "-" + date.substr(4, 2) + "-" + date.substr(6, 2);
			var pubDate = date + " " + ((h > 9) ? h : "0" + h) + time.substr(2);
		}

		return pubDate;
	},

	to_id: function(permalink) {
		if( !permalink.match("http://me2day.net/") ) {
			return null;
		}

		permalink = permalink.substr(18);
		var pos = permalink.indexOf("/");
		permalink = permalink.substr(0, pos);
		return permalink;
	}
};

Browser = {
	isIE: function() {
		return (navigator.userAgent && navigator.userAgent.match("MSIE")) ? true : false;
	},

	isFF: function() {
		return (navigator.userAgent && navigator.userAgent.match("Firefox")) ? true : false;
	},

	isSafari: function() {
		return (navigator.vendor && navigator.vendor.match("Apple")) ? true : false;
	}
};

PageMaker = {
	obj: null,

	done: false,

	total: 0,
	
	display: 15,

	page: 1,

	post: 0,

	json: null,

	create: function() {
		PageMaker.getPageInfo();
	},

	createFirstPage: function() {
		var num = 1;
		var prev = "<a href='javascript:PageMaker.movePage(" + (num - 1) + ")' id='page_maker_prev'>이전포스트</a>&nbsp;&nbsp;&nbsp;&nbsp;";
		var next = "<a href='javascript:PageMaker.movePage(" + (num + 1) + ")' id='page_maker_next'>다음포스트</a>";
		var nums = "";
		for( var i = 0; i < PageMaker.display * num && i < PageMaker.total; i++ ) {
			var post = i + 1;
			nums += "<a href='javascript:PageMaker.movePost(" + post + ")' id='page_maker_post" + post + "'>" + post + "</a>&nbsp;&nbsp;&nbsp;&nbsp;";
		}
		YAHOO.util.Dom.get("main_paging").innerHTML = prev + nums + next;
	},

	getPageInfo: function() {
		if( PageMaker.obj ) {
			//YAHOO.util.Connect.abort(PageMaker.obj, PageMaker.callback, false);
		}

		var url = "php/getPageInfo.php";
		PageMaker.obj = YAHOO.util.Connect.asyncRequest("GET", url, PageMaker.callback, null);
	},

	getPostInfo: function() {
		if( PageMaker.obj ) {
			//YAHOO.util.Connect.abort(PageMaker.obj, PageMaker.callback, false);
		}

		var url = "php/getPostInfo.php?callback=PageMaker.handleJson&start=" + (PageMaker.display * (PageMaker.page - 1)) + "&display=" + PageMaker.display;
		PageMaker.obj = YAHOO.util.Connect.asyncRequest("GET", url, PageMaker.callback, null);
	},

	handleSuccess: function(o) {
		if( o.responseText.match("PageMaker.handleJson") ) {
			eval(o.responseText);
		}

		var count = parseInt(o.responseText);
		if( count.toString() == "NaN" ) {
			return;
		}

		PageMaker.total = count;
		PageMaker.createFirstPage();
//		PageMaker.movePage(1);
	},

	handleFailure: function(o) {
	},

	handleJson: function(json) {
		PageMaker.json = json;
		PageMaker.movePost(PageMaker.post);
	},

	movePage: function(num) {
		if( !num || !PageMaker.total ) {
			return;
		}
		if( num < 1 || num > Math.ceil(PageMaker.total / PageMaker.display) ) {
			return;
		}

		PageMaker.page = num;
		PageMaker.json = null;
		YAHOO.util.Dom.get("page_maker_prev").href = "javascript:PageMaker.movePage(" + (num - 1) + ")";
		YAHOO.util.Dom.get("page_maker_next").href = "javascript:PageMaker.movePage(" + (num + 1) + ")";
		var nums = "";
		for( var i = PageMaker.display * (num - 1); i < PageMaker.display * num && i < PageMaker.total; i++ ) {
			var post = i + 1;
			var id = "page_maker_post" + ((post - 1) % PageMaker.display + 1);
			YAHOO.util.Dom.get(id).href = "javascript:PageMaker.movePost(" + post + ")";
			YAHOO.util.Dom.get(id).innerHTML = post;
		}
		PageMaker.clearBold();
	},

	movePost: function(num) {
		PageMaker.post = num;

		if( !PageMaker.json ) {
			PageMaker.getPostInfo();
			return;
		}

		PageMaker.clearBold();
		PageMaker.setBold(num);

		var index = (PageMaker.post - 1) % PageMaker.display;
		if( PageMaker.json.length <= index ) {
			return;
		}
		var x = PageMaker.json[index].x;
		var y = PageMaker.json[index].y;
		var t = PageMaker.json[index].t;

		YAHOO.ME2MAP.mode = "READ_DATE";
		YAHOO.util.Dom.setStyle("message_tag", "display", "none");
		YAHOO.util.Dom.setStyle("message_single_id", "display", "none");
		
		Balloon.hide();
		ViewComment.hideComments();
		Me2Date.setDisplayDate(t);
		Me2Map.setCenterAndZoom(new NPoint(x, y), 3);
	},

	clearBold: function() {
		for( var i = 0; i < PageMaker.display && i < PageMaker.total; i++ ) {
			var id = "page_maker_post" + (i % PageMaker.display + 1);
			YAHOO.util.Dom.setStyle(id, "fontWeight", "normal");
			YAHOO.util.Dom.setStyle(id, "color", "#000000");
		}
	},

	setBold: function(num) {
		var id = "page_maker_post" + ((num - 1) % PageMaker.display + 1);
		YAHOO.util.Dom.setStyle(id, "fontWeight", "bold");
		YAHOO.util.Dom.setStyle(id, "color", "#ff3333");
	}
};

PageMaker.callback = {
	success: PageMaker.handleSuccess,
	failure: PageMaker.handleFailure,
	scope: PageMaker
};

Preview = {
	preview: function() {
		switch( YAHOO.ME2MAP.mode ) {
		case "WRITE_POST":
			var edt = "write_post_edt";
			var preview = "preview_post";
			break;
		case "WRITE_COMMENT":
			var edt = "write_comment_edt";
			var preview = "preview_comment";
			break;
		case "WRITE_SHADOW":
			var edt = "write_shadow_edt";
			var preview = "preview_shadow";
			break;
		default:
			return;
		}

		var text = YAHOO.util.Dom.get(edt).value;
		var show = (text.replace(/\s/g, "") != "") ? true : false;

		text = text.replace(/\"([^\"]+)\":http:\/\/(\S*) /g, "<a href='http://$2'>$1</a>");
		text = text.replace(/\"([^\"]+)\":http:\/\/(\S*)/g, "<a href='http://$2'>$1</a>");
		YAHOO.util.Dom.get(preview).innerHTML = text;

		YAHOO.util.Dom.setStyle(preview, "display", show ? "block" : "none");
	},

	start: function() {
		clearTimeout(YAHOO.ME2MAP.preview_timer);

		Preview.preview();

		YAHOO.ME2MAP.preview_timer = setTimeout("Preview.start()", 500);
	},

	stop: function() {
		clearTimeout(YAHOO.ME2MAP.preview_timer);

		Preview.preview();
	},

	hide: function() {
		YAHOO.util.Dom.get("preview_post").blur();
		YAHOO.util.Dom.get("preview_comment").blur();
//		YAHOO.util.Dom.get("preview_shadow").blur();
		YAHOO.util.Dom.setStyle("preview_post", "display", "none");
		YAHOO.util.Dom.setStyle("preview_comment", "display", "none");
//		YAHOO.util.Dom.setStyle("preview_shadow", "display", "none");
	},

	hasShadowTag: function() {
		var tag = YAHOO.util.Dom.get("write_post_tag").value;
		if( tag.match(/^shadow$/i) || tag.match(/^shadow\s+/i) || tag.match(/\s+shadow$/i) || tag.match(/\s+shadow\s+/i) ) {
			return true;
		}
		return false;
	},

	hasAnonymousTag: function() {
		var tag = YAHOO.util.Dom.get("write_post_tag").value;
		if( tag.match(/^anonymous$/i) || tag.match(/^anonymous\s+/i) || tag.match(/\s+anonymous$/i) || tag.match(/\s+anonymous\s+/i) ) {
			return true;
		}
		return false;
	},

	checkShadow: function() {
		if( Preview.hasShadowTag() || Preview.hasAnonymousTag() ) {
			YAHOO.util.Dom.setStyle("panel_write_post", "background", "#cccccc");
			YAHOO.util.Dom.setStyle("preview_post", "border-color", "#cccccc");
			YAHOO.util.Dom.setStyle("write_post_edt", "background", "#eeeeee");
			YAHOO.util.Dom.setStyle("write_post_tag", "background", "#eeeeee");
		}
		else {
			YAHOO.util.Dom.setStyle("panel_write_post", "background", "#eeeeee");
			YAHOO.util.Dom.setStyle("preview_post", "border-color", "#eeeeee");
			YAHOO.util.Dom.setStyle("write_post_edt", "background", "#ffffff");
			YAHOO.util.Dom.setStyle("write_post_tag", "background", "#ffffff");
		}
	},

	startCheckShadow: function() {
		clearTimeout(YAHOO.ME2MAP.shadow_timer);

		Preview.checkShadow();

		YAHOO.ME2MAP.shadow_timer = setTimeout("Preview.startCheckShadow()", 500);
	},

	stopCheckShadow: function() {
		clearTimeout(YAHOO.ME2MAP.shadow_timer);

		Preview.checkShadow();
	}
};

function debug(html) {
	YAHOO.util.Dom.get("message_debug").innerHTML = html;
}

SearchAddress = {
	busy: false,

	address: [],

	search: function(address) {
		if( SearchAddress.busy ) {
			return;
		}

		var url = "php/searchAddress.php?callback=SearchAddress.handleJson&address=" + address;
		YAHOO.util.Connect.asyncRequest("GET", url, SearchAddress.callback, null);

		SearchAddress.busy = true;
	},
	
	handleSuccess: function(o) {
		SearchAddress.busy = false;
		eval(o.responseText);
	},

	handleFailure: function(o) {
		SearchAddress.busy = false;
	},

	handleJson: function(json) {
		if( !json ) {
			return;
		}

		SearchAddress.address = json;
		SearchAddress.afterRead(json);
	},

	afterRead: function(json) {
	}
};

SearchAddress.callback = {
	success: SearchAddress.handleSuccess,
	failure: SearchAddress.handleFailure,
	scope: SearchAddress
};

RegionSearch = {
	search: function(e) {
		if( e && e.keyCode != 13 ) {
			return;
		}

		var keyword = YAHOO.util.Dom.get("region_search_edt").value;
		if( !keyword ) {
			alert("검색할 주소를 입력하세요.");
			return;
		}

		SearchAddress.afterRead = function(json) {
			for( var i = 0; i < json.length && i < 10; i++ ) {
				YAHOO.util.Dom.get("search_result" + i).innerHTML = json[i].region;
				YAHOO.util.Dom.get("search_result" + i)._x = json[i].x;
				YAHOO.util.Dom.get("search_result" + i)._y = json[i].y;
			}
			YAHOO.ME2MAP.rresult.setTitle((json.length >= 10 ? "1 ~ 10" : "1 ~ " + json.length) + " / Total " + json.length);
			YAHOO.ME2MAP.rresult.page = 1;

			var x = YAHOO.ME2MAP.rsearch.getContainerX();
			var y = YAHOO.ME2MAP.rsearch.getContainerY();
			YAHOO.ME2MAP.rresult.setXY(x, y + 64);
			YAHOO.ME2MAP.rresult.show();
		}
		SearchAddress.search(keyword);		
	},

	prevRegion: function() {
		YAHOO.ME2MAP.rresult.page = (YAHOO.ME2MAP.rresult.page > 1) ? YAHOO.ME2MAP.rresult.page - 1 : 1;
		RegionSearch.clearResult();

		var json = SearchAddress.address;
		var page = YAHOO.ME2MAP.rresult.page;

		if( page < 0 ) {
			YAHOO.ME2MAP.rresult.page = 1;
			page = YAHOO.ME2MAP.rresult.page;
		}
		YAHOO.ME2MAP.rresult.setTitle((json.length >= page * 10 ? ((page - 1) * 10 + 1) + " ~ " + (page * 10) : ((page - 1) * 10 + 1) + " ~ " + json.length) + " / Total " + json.length);

		for( var i = 0; i + (page - 1) * 10 < json.length && i < 10; i++ ) {
			YAHOO.util.Dom.get("search_result" + i).innerHTML = json[i + (page - 1) * 10].region;
			YAHOO.util.Dom.get("search_result" + i)._x = json[i + (page - 1) * 10].x;
			YAHOO.util.Dom.get("search_result" + i)._y = json[i + (page - 1) * 10].y;
		}
	},

	nextRegion: function() {
		YAHOO.ME2MAP.rresult.page++;
		RegionSearch.clearResult();

		var json = SearchAddress.address;
		var page = YAHOO.ME2MAP.rresult.page;

		if( json.length <= (page - 1) * 10 ) {
			YAHOO.ME2MAP.rresult.page = Math.floor(json.length / 10) + 1;
			page = YAHOO.ME2MAP.rresult.page;
		}
		YAHOO.ME2MAP.rresult.setTitle((json.length >= page * 10 ? ((page - 1) * 10 + 1) + " ~ " + (page * 10) : ((page - 1) * 10 + 1) + " ~ " + json.length) + " / Total " + json.length);

		for( var i = 0; i + (page - 1) * 10 < json.length && i < 10; i++ ) {
			YAHOO.util.Dom.get("search_result" + i).innerHTML = json[i + (page - 1) * 10].region;
			YAHOO.util.Dom.get("search_result" + i)._x = json[i + (page - 1) * 10].x;
			YAHOO.util.Dom.get("search_result" + i)._y = json[i + (page - 1) * 10].y;
		}
	},

	showRegion: function(_this) {
		Me2Map.setCenterAndZoom(new NPoint(_this._x, _this._y), 3);
	},

	clearResult: function() {
		for( var i = 0; i < 10; i++ ) {
			YAHOO.util.Dom.get("search_result" + i).innerHTML = "-";
		}
	},

	create: function() {
		if( YAHOO.ME2MAP.rsearch ) {
			return;
		}

		YAHOO.ME2MAP.rsearch = new WINDOW("region_search");
		YAHOO.ME2MAP.rsearch.color = "#eeeeee";
		YAHOO.ME2MAP.rsearch.create(717, 0, 250, 36, "CLOSE");
		YAHOO.ME2MAP.rsearch.setTitle("Region Search");
		YAHOO.ME2MAP.rsearch.addHTML("<div style='float: left; margin-top: 12px; margin-left: 5px; color: #333333; width: 45px; font: 9pt arial;'> 지역명 </div><input type='text' class='edt_medium' style='margin-top: 5px;' id='region_search_edt'/><div class='btn_medium' style='margin-top: 5px;' onclick='RegionSearch.search()'>검색</div>");
		YAHOO.ME2MAP.rsearch.enableDragDrop();
		YAHOO.ME2MAP.rsearch.center();
		YAHOO.util.Event.addListener("region_search_edt", "keydown", RegionSearch.search);
		

		YAHOO.ME2MAP.rresult = new WINDOW("search_result");
		YAHOO.ME2MAP.rresult.create(717, 192, 250, 384, "CLOSE");
		YAHOO.ME2MAP.rresult.setTitle("Search Result");
		YAHOO.ME2MAP.rresult.addHTML("<div style='cursor: pointer; width: 250px; height: 12px;' onclick='RegionSearch.prevRegion()'><img src='image/prev_result.gif'></div>");
		for( var i = 0; i < 10; i++ ) {
			YAHOO.ME2MAP.rresult.addHTML("<div id='search_result" + i + "' class='search_result' onclick='RegionSearch.showRegion(this)'>-</div>");
		}
		YAHOO.ME2MAP.rresult.addHTML("<div style='cursor: pointer; width: 250px; height: 12px;' onclick='RegionSearch.nextRegion()'><img src='image/next_result.gif'></div>");
		YAHOO.ME2MAP.rresult.enableDragDrop();
		YAHOO.ME2MAP.rresult.hide();
	},

	show: function() {
		RegionSearch.create();
		YAHOO.ME2MAP.rsearch.show();
	},

	hide: function() {
		RegionSearch.create();
		YAHOO.ME2MAP.rsearch.hide();
	}
};

