//------------------------------------------------------------------------------
//	マイページ機能
//	Copyright (C) 2011 FUTUREINN CO., LTD. All Rights Reserved.
//------------------------------------------------------------------------------
var MYPAGE = {};
//-------------------------------------------------
// ▼各種設定 変更可能エリア ここから
//-------------------------------------------------
MYPAGE.PAGENAME_FIX = ' ｜那須塩原市';			//タイトルから削除する固定文字列
MYPAGE.VIEW_CNT = 10;							//サイドメニューに表示する件数
MYPAGE.KEEP_DAYS = 100;							//クッキーの保存日数
MYPAGE.MEMO_LENGTH = 200;						//メモの文字数
MYPAGE.SORT = false;							//並び替え機能（true:ONでスタート、false:OFFでスタート）
//-------------------------------------------------
// ▲各種設定 変更可能エリア ここまで
//-------------------------------------------------
MYPAGE.jQuery = jQuery.noConflict(true);

(function(){
var $ = MYPAGE.jQuery;
$(function(){

	/**
	 * jQuery Cookie plugin
	 *
	 * Copyright (c) 2010 Klaus Hartl (stilbuero.de)
	 * Dual licensed under the MIT and GPL licenses:
	 * http://www.opensource.org/licenses/mit-license.php
	 * http://www.gnu.org/licenses/gpl.html
	 * -------------------------------------------------
	 * 2011 jQuery.noConflict(true)するため、同じ名前空間に取込
	 *
	 */
	$.cookie = function (key, value, options) {

	    // key and at least value given, set cookie...
	    if (arguments.length > 1 && String(value) !== "[object Object]") {
	        options = $.extend({}, options);

	        if (value === null || value === undefined) {
	            options.expires = -1;
	        }

	        if (typeof options.expires === 'number') {
	            var days = options.expires, t = options.expires = new Date();
	            t.setDate(t.getDate() + days);
	        }

	        value = String(value);

	        return (document.cookie = [
	            encodeURIComponent(key), '=',
	            options.raw ? value : encodeURIComponent(value),
	            options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
	            options.path ? '; path=' + options.path : '',
	            options.domain ? '; domain=' + options.domain : '',
	            options.secure ? '; secure' : ''
	        ].join(''));
	    }

	    // key and possibly options given, get cookie...
	    options = value || {};
	    var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent;
	    return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null;
	};

	//ここからオリジナル
	// データ操作-----------------------------------------------------------------------------------
	var mypage_ary = new Array;

	//Mypageで使用するクッキーの変数名リスト
	var mypg_cookie_ary = ["mypg_1","mypg_2","mypg_3","mypg_4","mypg_5","mypg_6","mypg_7","mypg_8","mypg_9","mypg_10"];

	//Mypageクラス
	var Mypage = function(url,title,memo){
		this.url = url;
		this.title = title;
		this.memo = memo;
	}

	//クッキーからマイページデータを取り出して配列に格納
	var getMypageData = function(arg_ary){
		for (var i = 0; i <  mypg_cookie_ary.length; i++) {
			var cookie_data =  $.cookie(mypg_cookie_ary[i]);
			if(cookie_data){
				var page_data = cookie_data.split("\t\t");
				for (var j = 0; j <  page_data.length; j++) {
					if(page_data[j]){
						var dt = page_data[j].split("\t");
						if(dt[0]!=undefined &&dt[1]!=undefined && dt[2]!=undefined){
							var memo = dt[2] != ' ' ? dt[2] : '';
							var obj = new Mypage(dt[0],dt[1],memo);
							arg_ary.push(obj);
						}
		    		}
				}
			}
		}
	};
	
	//現在のページ情報を追加
	var setMypageData = function(arg_ary){
		var url = document.URL;
		var title = document.title;
		var memo = $('#mypg_memo').val();
		setPageData(arg_ary,url,title,memo);
	}

	//ページ情報を配列に追加
	var setPageData = function(arg_ary,url,title,memo){
		var reg = new RegExp(MYPAGE.PAGENAME_FIX);
		title = title.replace( reg, '' );
		if(memo == "コメントを記入できます。")memo ="" ;
		var obj = new Mypage(url,title,memo.htmlEncode());
		arg_ary.unshift(obj);
	}

	//マイページをクッキーに保存
	var setCookie = function(arg_ary){
		var cookie_ary = new Array;
		var c_str = "";
		for (var i = 0; i <  arg_ary.length; i++) {
			var memo = arg_ary[i].memo ? arg_ary[i].memo : ' ';
			var page_data = arg_ary[i].url+"\t"+ arg_ary[i].title+"\t"+memo+"\t\t";
			if((c_str+page_data).getByteLenUTF8() > 3900){
				cookie_ary.push(c_str);
				c_str = page_data;
			}else{
				c_str += page_data;
			}
		}
		cookie_ary.push(c_str);
		if(mypg_cookie_ary.length < cookie_ary.length){
			alert("[エラー] マイページに保存できる容量を超えました。\n");
			return;
		}
		var cookie_opt ={ expires: MYPAGE.KEEP_DAYS, path: '/' };
		for (var i = 0; i <  mypg_cookie_ary.length; i++) {
			var cooike_value = cookie_ary[i] ? cookie_ary[i] : '';
			$.cookie(mypg_cookie_ary[i],cooike_value,cookie_opt);
		}
	};

	//Stringオブジェクトにバイト数を取得するメソッド追加
	String.prototype.getByteLenUTF8 = function() {
		for(var i = this.length, num, res = i * 2; i-- > 0;) {
			if((num = this.charCodeAt(i)) > 0x7ff && (num < 0xd800 || num > 0xdfff)) {
				res++;
			} else if(num < 0x80) {
				res--;
			}
		}
		return res;
	};
	
	//Stringオブジェクトにhtmlエンコードするメソッド追加
	String.prototype.htmlEncode = function() {
		var str = this
		str = str.replace(/&/g, "&amp;");
		str = str.replace(/"/g, "&quot;");
		str = str.replace(/</g, "&lt;");
		str = str.replace(/>/g, "&gt;");
		return str;
	}
	
	//Stringオブジェクトにhtmlデコードするメソッド追加
	String.prototype.htmlDecode = function() {
		var str = this
		str = str.replace(/&quot;/g, '"');
		str = str.replace(/&lt;/g, "<");
		str = str.replace(/&gt;/g, ">");
		str = str.replace(/&amp;/g, "&");
		return str;
	}
	
	// メインメニュー処理-------------------------------------------------------------------------
	if($('#main_mypage')){
		//メインメニューに値をセット
		var setMainMenu = function(arg_ary){
			//リストに値をセット
				$('#main_mypage').empty();
				for (var i = 0; i <  arg_ary.length; i++) {
					var newdiv = $('#mypage_dummy').clone();
					newdiv.attr("id", function () {
						return "mypage_" + i;
						})
						.each(function () {
							var self = this;
							$("a[name=mypage_link]", this).text(arg_ary[i].title);
							$("a[name=mypage_link]", this).attr({
								href : arg_ary[i].url,
								title : arg_ary[i].title
							});
							$("p[name=mypage_memo_v]", this).html(arg_ary[i].memo.replace(/\n/g,"<br />"));
							$("textarea[name=mypage_memo_e]", this).val(arg_ary[i].memo.htmlDecode());
							if(MYPAGE.SORT){
								chMainPanelMode(this,"sort");
							}else{
								chMainPanelMode(this,"view");
							}
							$("img[name=mypage_save]", this).click(function(){
								mypageSave(self);
								return false;
							});
							$("img[name=mypage_edit]", this).click(function(){
								mypageEditClick(self);
								return false;
							});
							$("img[name=mypage_del]", this).click(function(){
								mypageDel(self);
								return false;
							});
							$(this).show();
						})
						.appendTo('#main_mypage');
				}
				$('#mypage_dummy').hide();
		}
		//表示・編集・並び替えモード切替
		var chMainPanelMode= function(div_el,mode){
			if(mode == "edit"){
				$("form[name=mypage_memo_form]", div_el).show();
				$("p[name=mypage_memo_v]", div_el).hide();
				$("div[class=memo]", div_el).show();
				$("img[name=mypage_edit]", div_el).show();
			}else{
				$("form[name=mypage_memo_form]", div_el).hide();
				if($("p[name=mypage_memo_v]", div_el).text() == ""){
					$("div[class=memo]", div_el).hide();
				}else{
					$("p[name=mypage_memo_v]", div_el).show();
				}
				if(mode == "view"){
					$("h3[name=mypage_title]", div_el).removeClass("sort").addClass("edit");
					$("img[name=mypage_edit]", div_el).show();
					$("img[name=mypage_del]", div_el).show();
				}
				if(mode == "sort"){
					$("h3[name=mypage_title]", div_el).removeClass("edit").addClass("sort");
					$("img[name=mypage_edit]", div_el).hide();
					$("img[name=mypage_del]", div_el).hide();
				}
			}
		};
		//「保存する」ボタンイベント
		var mypageSave= function(div_el){
			var no = div_el.id.match(/[0-9]$/);
			if(no){
				var m_length = $("textarea[name=mypage_memo_e]", div_el).val().length;
				if(m_length <= MYPAGE.MEMO_LENGTH){
					mypage_ary[no].memo = $("textarea[name=mypage_memo_e]", div_el).val().htmlEncode();
					$("p[name=mypage_memo_v]", div_el).html(mypage_ary[no].memo.replace(/\n/g,"<br />"));
					setCookie(mypage_ary);
					chMainPanelMode(div_el,"view");
//					setMainMenu(mypage_ary);
				}else{
					alert("[エラー] メモの最大文字数を超えています。\n最大文字数："+MYPAGE.MEMO_LENGTH+"文字\n現在の入力文字数："+m_length+"文字");
					return false;
				}	
			}else{
				alert("[エラー] 保存できません。");
			}
		};
		//「編集する」ボタンイベント
		var mypageEditClick= function(div_el){
			chMainPanelMode(div_el,"edit");
		};
		//「削除する」ボタンイベント
		var mypageDel= function(div_el){
			//編集中の項目があるかどうかチェック
			var edit = false;
			$('#main_mypage form[name=mypage_memo_form]').each(function(){
				if($(this).css('display') != 'none')edit = true;
			})
			if(edit){
				if(!confirm("編集中の項目があります。\nこのまま削除を実行すると、編集中の内容は失われます。\n編集内容を破棄して続行する場合は[OK]、編集画面に戻って保存をする場合は[キャンセル]を選択してください。")) return false;
			}else{
				if(!confirm("削除してよろしいですか？")) return false;
			}
			var no = div_el.id.match(/[0-9]$/);
			if(no){
				mypage_ary.splice(no,1);
				setCookie(mypage_ary);
				setMainMenu(mypage_ary);
			}else{
				alert("[エラー] 削除できません。");
			}
			return false;
		};
		//「並び替えを開始」クリックイベント
		$('#mypage_sort_s').click(function(){
			//編集中の項目があるかどうかチェック
			var edit = false;
			$('#main_mypage form[name=mypage_memo_form]').each(function(){
				if($(this).css('display') != 'none')edit = true;
			})
			if(edit){
				if(!confirm("編集中の項目があります。\nこのまま並び替えモードに切り替えると、編集中の内容は失われます。\n編集内容を破棄して続行する場合は[OK]、編集画面に戻って保存をする場合は[キャンセル]を選択してください。")) return false;
			}
			$('#main_mypage div[class=checkpage]').each(function(){
				chMainPanelMode(this,"sort");
			})
			MYPAGE.SORT = true;
			$(this).hide();
			$('#mypage_sort_e').show();
			$("#main_mypage").sortable("enable");
			return false;
		});
		//「並び替えを終了」クリックイベント
		$('#mypage_sort_e').click(function(){
			$("#main_mypage").sortable("disable");
			$('#main_mypage div[class=checkpage]').each(function(){
				chMainPanelMode(this,"view");
			})
			MYPAGE.SORT = false;
			$(this).hide();
			$('#mypage_sort_s').show();
			return false;
		});

	}

	// サイドメニュー処理-------------------------------------------------------------------------
	if($('#mypage')){
		var setSideMenu = function(arg_ary){
			//「マイページ一覧」タブに値をセット
			$('#box1_nodata').show();
			$('#box1_list').hide();
			if(arg_ary.length != 0){
				$('#mypg_list li').not('#mypg_li_dummy').remove();
				for (var i = 0; i <  arg_ary.length; i++) {
						if(i < MYPAGE.VIEW_CNT){
							var newli = $('#mypg_li_dummy').clone();
							newli.attr("id", function () {
								return "mypg_li_" + i;
								})
								.each(function () {
									var self = this;
									$("a[name=mypg_link]", this).text(arg_ary[i].title);
									$("a[name=mypg_link]", this).attr({
										href : arg_ary[i].url,
										title : arg_ary[i].memo
									});
									$(this).show();
								})
								.appendTo('#mypg_list');
						}
				}
				$('#mypg_li_dummy').hide();
				$('#box1_nodata').hide();
				$('#box1_list').show();
			}
			//サイドメニュー：「追加する」タブに値をセット
			$('#box2_nodata').hide();
			$('#box2_registered').hide();
			var this_page;
			for (var i = 0; i <  arg_ary.length; i++) {
				if(arg_ary[i].url == document.URL){
					this_page = new Mypage(arg_ary[i].url,arg_ary[i].title,arg_ary[i].memo);
				}
			}
			if(this_page){
				if(this_page.memo != ""){
					$('#box2_registered p[name=mypg_memo_v]').html(this_page.memo.replace(/\n/g,"<br />"));
				}else{
					$('#box2_registered div[id=smemo]').hide();
				}
				$('#box2_registered').show();
			}else{
				$('#box2_nodata').show();
			}
		}
		//「追加する」クリックイベント
		$('#mypg_push').click(function(){
			var m_length = $('#mypg_memo').val().length;
			if(m_length <= MYPAGE.MEMO_LENGTH){
				setMypageData(mypage_ary);
				setCookie(mypage_ary);
				setSideMenu(mypage_ary);
				$('#for_box1').trigger("click");
			}else{
				alert("[エラー] メモの最大文字数を超えています。\n最大文字数："+MYPAGE.MEMO_LENGTH+"文字\n現在の入力文字数："+m_length+"文字");
			}
			return false;
		});
		//マイページタブ：ページがないときの「追加する」クリックイベント
		$('#box1_mypg_push').click(function(){
			$('#for_box2').trigger("click");
			return false;
		});
	}
	
	//「すべて削除」クリックイベント
	$('#mypg_delete').click(function(){
		mypage_ary = [];
		setCookie([]);
		setSideMenu([]);
	});
	
	// 実行-----------------------------------------------------------------------------------------
	//データ取得
	getMypageData(mypage_ary);
	
	//メインメニュー初期表示
	if($('#main_mypage')){
	
		//ボタン表示
		$("#mypage_sort_e").hide();
		//データセット
		setMainMenu(mypage_ary);
		//並び順
		var option={
			items: "div[class=checkpage]",
			stop:function(){
				var tmp_ary = new Array;
				$("div[class=checkpage]","#main_mypage").each(function(i,v){
					var no = v.id.match(/[0-9]$/);
					if(no){
						tmp_ary.push(mypage_ary[no]);
					}else{
						alert("[エラー] 保存できません。");
					}
				});
				mypage_ary = tmp_ary;
				setCookie(mypage_ary);
				setMainMenu(mypage_ary);
			}
		};
		$("#main_mypage").sortable(option);
		if(!MYPAGE.SORT){
			$("#main_mypage").sortable("disable");
		}
	}

	//サイドメニュー初期表示
	if($('#mypage')){
		//データセット
		setSideMenu(mypage_ary);
	}
});

})();


