/*
 * (C) Hitachi Government & Public Corporation System Engineering, Ltd. 2009. All rights reserved.
 */
(function($){$.extend({myMenu:new function(){this.defaultconfig={cookiename:"mymenu",cookieActiveDays:365,canUserEditTitle:true,fullCookieAction:"auto",listContainerId:"myMenuList",maxListCount:5,listPreTemplate:"<ul></ul>",listTemplate:"<li><a href='{{url}}'>{{title}}</a></li>",listEditContainerID:"myMenuEditList",editAreaPreTemplate:"<table></table>",editlistTemplate:"<tr><td><a href='{{url}}'>{{title}}</a></td><td><a href='#' id='{{myMenuEditTitle}}'>編集</a></td><td><a href='#' id='{{myMenuEditDelete}}'>削除</a></td></tr>",errorMessageContainerId:"mymenu_errorArea",addCurrentPageButtonId:"mymenu_addButton",targetBrowser:{msie:[6,7,8],firefox:[3],safari:[4],opera:[9],chrome:[4]},messages:{wrong_browser:"お使いのブラウザでは本機能はご利用になれません。",cant_use_cookie:"Cookieが無効になっているため、本機能はご利用になれません。",nullTitle:"エラー：タイトルを空にすることは出来ません。",nullList:"",editTitlePromptDialogTitle:"<h3>マイメニュー 登録タイトル編集</h3>",editTitlePromptText:"タイトルを入力してください。<br>",promptOK:"OK",promptCancel:"キャンセル",fullCookieErrorDialogTitle:"<h3>お気に入り 保存エラー</h3>",fullCookieErrorText:'保存可能な容量を超えたため、登録を中止しました。<br><a href="/myMenu/myMenuEdit.html">編集ページ</a>で不要な項目を削除してください。'},editPageURL:"myMenuEdit.html",backgroundImagePath:"",editTitleFunction:function(titleStr){return titleStr},expertSetting:{isDebugMode:false,editTitlePromptHTMLFunc:function(title,idx){var mesDef=$.myMenu.config.messages;return mesDef.editTitlePromptDialogTitle+'<div class="jqi_messagebody">'+mesDef.editTitlePromptText+'<div id="myMenuPromptError" style="display:none">'+mesDef.nullTitle+'</div><input type="text" style="width:auto" size="30" maxlength="30" id="myMenuTitlestr" name="titlestr" value="'+title+'" ><br><input type="hidden" id="myMenuIndex"  name="myMenuIndex" value="'+idx+'"></div>'},fullCookieConfirmPromptHTMLFunc:function(url,title){return $.myMenu.config.messages.fullCookieErrorDialogTitle+'<div class="jqi_messagebody">'+$.myMenu.config.messages.fullCookieErrorText+'</div><input type="hidden" id="myMenuCancelURL"  name="myMenuCancelURL" value="'+url+'"><input type="hidden" id="myMenuCancelTitle"  name="myMenuCancelTitle" value="'+title+'">'},fullCookieConfirmPromptButton:{"編集ページに移動":"MOVE","古い物を自動削除して登録":"AUTO",OK:"OK"},fullCookieConfirmPromptDefButtonIndex:2}};this.config=this.defaultconfig;this.defines={errorType:{cantUse:"CANT_USE",alert:"ALERT",debug:"DEBUG"},maxCookieLength:2500};this._lastError={type:"",message:""};this.getLastError=function(){return this._lastError};this.clearLastError=function(){this._lastError={type:"",message:""}};this.errorHandler=function(type,message){this._lastError.type=type;this._lastError.message=message;switch(type){case this.defines.errorType.cantUse:$("#"+this.config.errorMessageContainerId).html(message);break;case this.defines.errorType.alert:alert(message);break;case this.defines.errorType.debug:if(this.config.expertSetting.isDebugMode){alert(message)}break;default:break}};this.bookMarkObj=function(url,title){if(url===undefined||url===null){url=""}if(title===undefined||title===null){title=""}return{u:url,t:title}};this.getSecureURL=function(url){if(!$.isUrlInternal(url)){if($.isUrlFragment(url)){var tempurl=url.substr(0,url.indexOf("#"));if(!$.isUrlInternal(tempurl)){return""}}else{return""}}if(url.lastIndexOf("#")==url.length-1){return url.substr(0,url.length-1)}return url.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")};this.getSecureTitle=function(title){return title.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")};this._bookmarks=[];this.clearBookMarks=function(){this._bookmarks=[]};this.addBookMark=function(url,title){if(url===undefined||url===null||url==""||title===undefined||title===null||title==""){var mess="Failed to addBookMark:Invalid arguments";this.errorHandler($.myMenu.defines.errorType.debug,mess);throw mess}this._bookmarks.unshift(new this.bookMarkObj(url,title));return this._bookmarks};this.deleteOldestBookmark=function(){this._bookmarks.pop();return this._bookmarks};this.deleteBookmarkByIndex=function(index){var bmc=this.getBookmarksCollection(),mess="Failed to deleteBookmarkByIndex:Invalid arguments";if(index<0||index>bmc.length-1){this.errorHandler($.myMenu.defines.errorType.debug,mess);throw mess}bmc[index].u="";bmc=$.grep(bmc,function(bm){return bm.u!=""});this._bookmarks=bmc;return this._bookmarks};this.setBookmarksCollection=function(bookmarks){this._bookmarks=bookmarks};this.getBookmarksCollection=function(){return this._bookmarks};this.getBookmarksCollectionJSON=function(){return $.toJSON(this._bookmarks)};this.getRegisteredBookMarkIndex=function(url){var bms=this.getBookmarksCollection();for(var i=0;i<bms.length;i++){if(url==bms[i].u){return i}}return -1};this.deleteOldBookmarksToCookieSize=function(){while(escape(this.getBookmarksCollectionJSON()).length>this.defines.maxCookieLength){this.deleteOldestBookmark()}};this.checkPlatform=function(){var allowingVersion=this.config.targetBrowser[$.browser.name];if(allowingVersion===undefined){return this.config.messages.wrong_browser}if($.inArray((Number($.browser.versionX)).valueOf(),allowingVersion)<0){return this.config.messages.wrong_browser}if($.cookies.test()===false){return this.config.messages.cant_use_cookie}return"OK"};this.getTitle=function(){return this.config.editTitleFunction(document.title)};this.clearCookie=function(){$.cookies.del(this.config.cookiename)};this.save=function(){$.cookies.set(this.config.cookiename,escape(this.getBookmarksCollectionJSON()))};this.load=function(){var cookiedata=$.cookies.get(this.config.cookiename),bookmarksObj=[];if(cookiedata===null){this.errorHandler(this.defines.errorType.debug,"Failed to load :cookie is null");return}try{bookmarksObj=$.secureEvalJSON(unescape(cookiedata));if(bookmarksObj===null){throw"bookmarksObj is null"}$.each(bookmarksObj,function(i,val){var u=$.myMenu.getSecureURL(val.u);if(u==""){val.u=""}var t=$.myMenu.getSecureTitle(val.t);if(t==""){val.t=""}});if(bookmarksObj.length>0){this.clearBookMarks();$.each(bookmarksObj,function(i,val){if(val.u!=""&&val.t!=""){$.myMenu._bookmarks.push(new $.myMenu.bookMarkObj(val.u,val.t))}})}}catch(e){this.errorHandler(this.defines.errorType.debug,e.toString());return}};this.addBookmarkEx=function(url,title,mode){if(mode===undefined){mode=this.config.fullCookieAction}if(this.getSecureURL(url)==""){this.errorHandler(this.defines.errorType.debug,"Failed to addBookmarkEx :unsecure　url");throw"unsecure　url"}var idx,bmc;idx=this.getRegisteredBookMarkIndex(url);if(idx>=0){this.deleteBookmarkByIndex(idx)}this.addBookMark(url,title);if(escape(this.getBookmarksCollectionJSON()).length>this.defines.maxCookieLength){switch(mode){case"auto":this.deleteOldBookmarksToCookieSize();break;default:this.errorHandler(this.defines.errorType.debug,this.config.messages.fullCookieError);bmc=this.getBookmarksCollection();bmc.shift();this.setBookmarksCollection(bmc);this.deleteOldBookmarksToCookieSize()}}this.save();return this.getBookmarksCollection()};this.getBookmarkListHTML=function(template,isHaveMax){var bc=this.getBookmarksCollection(),data=[],listcount;if(bc===null){return this.config.messages.nullList}if(bc.length>0){listcount=bc.length;if(isHaveMax===undefined||isHaveMax===true){listcount=(this.config.maxListCount>bc.length)?bc.length:this.config.maxListCount}for(var i=0;i<listcount;i++){data.push({count:i+1,url:this.getSecureURL(bc[i].u),title:this.getSecureTitle(bc[i].t),myMenuEditTitle:"myMenuEditTitle_"+i,myMenuEditDelete:"myMenuEditDelete_"+i})}return $.tempest(template,data)}else{return this.config.messages.nullList}};this.updateList=function(){var listHTMLInnerObj,editHTMLInnerObj,listHTML,editHTML;listHTMLInnerObj=this.getBookmarkListHTML(this.config.listTemplate);editHTMLInnerObj=this.getBookmarkListHTML(this.config.editlistTemplate,false);if(this.getBookmarksCollection().length>0){listHTML=$(this.config.listPreTemplate);listHTML.append(listHTMLInnerObj);$("#"+this.config.listContainerId).html(listHTML);editHTML=$(this.config.editAreaPreTemplate);editHTML.append(editHTMLInnerObj);$("#"+this.config.listEditContainerID).html(editHTML)}else{$("#"+this.config.listContainerId).html(listHTMLInnerObj);$("#"+this.config.listEditContainerID).html(editHTMLInnerObj)}this.addListsEventHandler()};this.addListsEventHandler=function(){for(var i=0;i<this.getBookmarksCollection().length;i++){$("#myMenuEditTitle_"+i).click(function(){var idStr=$(this).attr("id");var idx=idStr.substr(idStr.lastIndexOf("_")+1);$.myMenu.editTitle(idx)});$("#myMenuEditDelete_"+i).click(function(){var idStr=$(this).attr("id");var idx=idStr.substr(idStr.lastIndexOf("_")+1);$.myMenu.editDelete(idx)})}};this.__callbackFunc=null;this.addCurrentPage=function(){var title=this.getTitle();if(this.config.canUserEditTitle){this.promptEditTitleFunction(title,this._addCurrentPage_callbank,-1)}else{this._addCurrentPage_callbank(title)}};this._addCurrentPage_callbank=function(title){var url=location.href;if(title==""){this.errorHandler($.myMenu.defines.errorType.alert,$.myMenu.config.messages.nullTitle);return}try{$.myMenu.addBookmarkEx(url,title);if(this.config.fullCookieAction=="confirm"){if($.myMenu.getLastError().message==$.myMenu.config.messages.fullCookieError){this.__callbackFunc=this.confirmPromtCallBack;$.prompt(this.config.expertSetting.fullCookieConfirmPromptHTMLFunc(url,title),{buttons:$.myMenu.config.expertSetting.fullCookieConfirmPromptButton,focus:$.myMenu.config.expertSetting.fullCookieConfirmPromptDefButtonIndex,callback:$.myMenu.__callbackFunc,isPrependTo:false,isShowCloseBtn:false,backgroundImagePath:$.myMenu.config.backgroundImagePath});if($.browser.name=="msie"){$("body").trigger("contextmenu")}}else{$.myMenu.updateList()}}else{$.myMenu.updateList()}}catch(e){$.myMenu.errorHandler($.myMenu.defines.errorType.debug,e.toString())}};this.confirmPromtCallBack=function(v,m,f){switch(v){case"MOVE":location.href=$.myMenu.config.editPageURL;return;case"AUTO":$.myMenu.addBookmarkEx(f.myMenuCancelURL,f.myMenuCancelTitle,"auto");$.myMenu.updateList();break}};this.__bts={};this.promptEditTitleFunction=function(titleStr,callback,idx){var mesDef=this.config.messages;this.__callbackFunc=callback;eval("this.__bts={'"+mesDef.promptOK+"':'OK','"+mesDef.promptCancel+"':'CANCEL'}");$.prompt(this.config.expertSetting.editTitlePromptHTMLFunc(titleStr,idx),{submit:function(v,m,f){an=m.children("#titlestr");if(f.titlestr==""&&v=="OK"){an.css("border","solid #ff0000 1px");$("#myMenuPromptError").show();return false}$("#myMenuTitlestr").focus();return true},callback:function(v,m,f){if(v=="OK"){$.myMenu.__callbackFunc(f.titlestr,f.myMenuIndex)}},buttons:this.__bts,isPrependTo:false,isShowCloseBtn:false,backgroundImagePath:$.myMenu.config.backgroundImagePath});if($.browser.name=="msie"){$("body").trigger("contextmenu")}};this.editTitle=function(index){this.promptEditTitleFunction($.myMenu.getBookmarksCollection()[index].t,this._editTitle_callbank,index)};this._editTitle_callbank=function(title,idx){if(title==""){this.errorHandler($.myMenu.defines.errorType.alert,$.myMenu.config.messages.nullTitle);return}try{var bmc=$.myMenu.getBookmarksCollection();bmc[idx].t=title;$.myMenu.setBookmarksCollection(bmc);this.updateList();this.save()}catch(e){$.myMenu.errorHandler($.myMenu.defines.errorType.debug,e.toString())}};this.editDelete=function(index){this.deleteBookmarkByIndex(index);this.updateList();this.save()};this.initialize=function(configObj){if(configObj==null||configObj==undefined){configObj={}}try{this.config=$.extend({},this.defaultconfig,configObj);this.config.messages=$.extend({},this.defaultconfig.messages,configObj.messages);this.config.expertSetting=$.extend({},this.defaultconfig.expertSetting,configObj.expertSetting)}catch(e){}var resultMsg=this.checkPlatform();if(resultMsg=="OK"){$.cookies.setOptions({hoursToLive:24*this.config.cookieActiveDays});$("#"+this.config.addCurrentPageButtonId).click(function(){$.myMenu.addCurrentPage()});this.load();this.updateList()}else{this.errorHandler(this.defines.errorType.cantUse,resultMsg)}}}})})(jQuery);
