/**
 * ABook Viewer for WEB common package
 *
 * Copyright (C) Agentec Co, Ltd. All rights reserved.
 */

// グローバルの名前空間用のオブジェクトを用意する
var COMMON = {};

COMMON.resourceVersionArr = [];
COMMON.metaVersionArr = [];

COMMON.DEFAULT_IMG_OPTION_MEMO = 'img/list/icon_sticker.png';
COMMON.DEFAULT_IMG_OPTION_MARKING = 'img/list/icon_pen.png';
COMMON.DEFAULT_IMG_CONTENT_EDIT = 'img/common/band_updated.png';
COMMON.DEFAULT_IMG_CONTENT_NEW = 'img/common/band_new.png';

COMMON.ThumbnailForOtherType = {
    Thumbnail_ImageType : 'img/image_type.png',
    Thumbnail_VideoType : 'img/iPad_video.png',
    Thumbnail_MusicType : 'img/thumb_default_sound.png',
    Thumbnail_OthersType : 'img/thumb_default_other.png',
    Thumbnail_NoFileType : 'img/thumb_default_none.png',
    Thumbnail_HtmlType : 'img/thumb_default_html.png',
    Thumbnail_LinkType : 'img/thumb_default_link.png'
};

// =============================================================================================
// Constants [start]
// =============================================================================================
COMMON.Consts = {
    // Display mode: 1 -> Bookshelf
    ConstDisplayMode_BookShelf : 1,
    // Display mode: 0 -> List
    ConstDisplayMode_List : 2,

    // Order setting: 1 -> ascending
    ConstOrderSetting_Asc : 1,

    // Order setting: 0 -> descending
    ConstOrderSetting_Desc : 2,

    // Language: English
    ConstLanguage_En : "en",
    // Language: Japanese
    ConstLanguage_Ja : "ja",
    // Language: Korean
    ConstLanguage_Ko : "ko",

    // API result: success
    ConstAPI_SUCCESS : "success",
    // API result: fail
    ConstAPI_FAIL : "fail",

    // 初回ログイン時パスワード強制変更: 0:なし
    ConstServiceOption_NON : 0,
    // 初回ログイン時パスワード強制変更: 1:催促
    ConstServiceOption_REGULAR : 1,
    // 初回ログイン時パスワード強制変更: 2:強制
    ConstServiceOption_FORCE : 2,

    // Lock screen timer
    ConstLockScreenTime : 1800000

};

/* Content Type Keys */
COMMON.ContentTypeKeys = {
    Type_PDF : 'pdf',
    Type_Image : 'image',
    Type_Video : 'movie',
    Type_Music : 'music',
    Type_Others : 'other',
    Type_NoFile : 'none',
    Type_Html : 'html',
    Type_Enquete : 'enquete',
    Type_Exam : 'exam',
    Type_Link : 'url',
    Type_PanoImage : 'panoImage',
    Type_PanoMovie : 'panoMovie',
    Type_ObjectVR : 'objectvr'
};

/*
 * Define short keys for content view
 */
COMMON.ShortKeys = {
    // Move previous: arrow left <-
    MovePrevious : 37,
    // Move next: arrow right ->
    MoveNext : 39,
    // Zoom in: ","
    ZoomIn : 188,
    // Zoom out: "."
    ZoomOut : 190,
    // Fit: Enter
    ZoomFit : 13,
    // Show, hide toolbar: "["
    ShowHideToolbar : 219,
    // Show, hide marking: "]"
    ShowHideMarking : 221,
    // Zoom out : "-"
    ZoomOutAlt : 189,
    // Zoom in: "+"
    ZoomInAlt : 187,
    // Zoom out: "-" firefox/opera
    ZoomOutAlt_Firefox : 173,
    // Zoom in : "+" firefox/opera
    ZoominAlt_Firefox : 59
};

// -------------------------------------------------
// Define all keys for local/session storage [start]
// -------------------------------------------------

COMMON.ScreenIds = {
    Login : './../login.html',
    Home : 'home.html?__UPDATEID__',
    ContentView : 'contentview.html?__UPDATEID__',
    Setting : 'settings.html?__UPDATEID__',
    BookmarkList : 'bookmark.html?__UPDATEID__',
    ContentSearch : 'contentsearch.html?__UPDATEID__',
    History : 'history.html?__UPDATEID__',
    ContentViewOpenUri : 'contentview_openuri.html?__UPDATEID__',
    ContentViewStreaming : 'contentview_streaming.html?__UPDATEID__',
    ContentViewGetits : 'contentview_getits.html?__UPDATEID__'
};

COMMON.Keys = {
    zoom_ratioPre : 'zoom_ratioPre',

    IsRefresh : 'IsRefresh',
    // Local
    BookmarkScreen : 'BookmarkScreen',
    // Local
    IsJumpBack : 'IsJumpBack',
    // Local:
    JumpQueue : 'JumpQueue',
    // Local
    ContentViewDetail : 'ContentViewDetail',
    // Session
    userInfo_userName : 'userInfo_userName',
    // Local
    ContentLogData : 'ContentLogData',
    // Session: true/false
    IsLocked : 'IsLocked',
    // Local: true/false
    IsHideToolbar : 'IsHideToolbar',
    // Local: true/false
    IsAddingMemo : 'IsAddingMemo',
    // Local: true/false
    IsAddingMarking : 'IsAddingMarking',
    // Local: true/false
    IsDisplayMarking : 'IsDisplayMarking',
    // Local: true/false
    IsDisplayMemo : 'IsDisplayMemo',
    // Local
    MarkingType : 'MarkingType',
    // Local
    ReadingContentIds : 'ReadingContentIds',
    // Local
    BookMarkData : 'BookMarkData',
    // Local
    MarkingData : 'MarkingData',
    // Local
    MemoData : 'MemoData',
    // Local
    ResourceVersion : 'ResourceVersion',
    // Local
    MetaVersion : 'MetaVersion',

    // Local :ユーザオプション(userOpt)_ログアウトモード: Interger(0:logout with backup,
    // 1:logout without backup)
    userOpt_logoutMode : 'logoutMode',

    // Session :コンテンツ詳細情報(contentInfo)_サムネール: String (base64string)
    contentInfo_contentThumbnail : 'contentInfo_contentThumbnail',

    // Local: isChangedMemo: boolean (true: changed, false: not change)
    isChangedMemo : 'isChangedMemo',
    // Local: isChangedMakingData: boolean (true: changed, false: not change)
    isChangedMarkingData : 'isChangedMarkingData',
    // Local: isChangedBookmark: boolean (true: changed, false: not change)
    isChangedBookmark : 'isChangedBookmark',

    // Session:パスワード要変更(requirePasswordChange):String (0:不要, 1:初回, 2:定期変更)
    requirePasswordChange : 'requirePasswordChange',

    /* -------------------------------------------------------------------------------- */
    // Session/local:ユーザ情報(userInfo)_セッションID:String
    userInfo_sid : 'sid',
    userInfo_sid_preview : 'sidPreview',
    // Session :事業者オプション(serviceOpt)_初回ログイン時パスワード強制変更:Integer(0:なし, 1:催促, 2:強制)
    serviceOpt_force_pw_change_on_login : 'force_pw_change_on_login',
    // Session :事業者オプション(serviceOpt)_定期ログイン時パスワード強制変更:Integer(0:なし, 1:催促, 2:強制)
    serviceOpt_force_pw_change_periodically : 'force_pw_change_periodically',
    // Session:事業者オプション(serviceOpt)_メモ・マーキングデータバックアップ使用:Char(Y:可能, N:不可)
    serviceOpt_user_data_backup : 'user_data_backup',
    // Session:事業者オプション(serviceOpt)_テキストコピー機能使用:Char(Y:可能, N:不能)
    serviceOpt_copy_text : 'copy_text',
    // Session :事業者オプション(serviceOpt)_マーキング機能使用:Char(Y:可能, N:不可)
    serviceOpt_marking : 'marking',
    // No.8: do not use this value: serviceOpt_force_login_periodically
    // Session :事業者オプション(serviceOpt)_一定期間経過後アプリロック:Char(Y:可能, N:不可)
    // serviceOpt_force_login_periodically: 'force_login_periodically',
    // No.8: スクリーンロック
    // Session :事業者オプション(serviceOpt)_スクリーンロック(Web版):Char(Y:可能, N:不可)
    serviceOpt_web_screen_lock : 'web_screen_lock',
    // Session :事業者オプション(serviceOpt)_スクリーンロック待ち時間:Interger
    serviceOpt_web_screen_lock_wait : 'web_screen_lock_wait',
    // Session :事業者オプション(serviceOpt)_GPS使用可:Char(Y:可能, N:不可)
    serviceOpt_usable_readinglog_gps : 'usable_readinglog_gps',
    // Session :事業者オプション(serviceOpt)_詳細ログ使用可:Char(Y:可能, N:不可)
    serviceOpt_usable_readinglog_object : 'usable_readinglog_object',
    // Session :事業者オプション(serviceOpt)_カタログエディション:Char(Y:可能, N:不可)
    serviceOpt_catalog_edition : 'catalog_edition',
    // Session :事業者オプション(serviceOpt)_日比谷カスタム:Char(Y:可能, N:不可)
    serviceOpt_hibiyakadan_catalog : 'hibiyakadan_catalog',
    // Session :事業者オプション(serviceOpt)_DHカスタム:Char(Y:可能, N:不可)
    serviceOpt_daihatsu : 'daihatsu',
    // Session :事業者オプション(serviceOpt)_getits向けGPS使用可:Char(Y:可能, N:不可)
    serviceOpt_reader_usable_readinglog_gps : 'reader_usable_readinglog_gps',
    // Session :事業者オプション(serviceOpt)_getits向け詳細ログ使用可:Char(Y:可能, N:不可)
    serviceOpt_reader_readinglog_object : 'reader_readinglog_object',
    // Session :事業者オプション(serviceOpt)_コンテンツ共有モード:Interger(0:なし , 1:ABook,
    // 2:getits)
    serviceOpt_content_share : 'content_share',
    // Session :事業者オプション(serviceOpt)_公開時プッシュメッセージ:Char(Y:可能, N:不可)
    serviceOpt_apns : 'apns',
    // Session :事業者オプション(serviceOpt)_任意のプッシュメッセージ:Char(Y:可能, N:不可)
    serviceOpt_usable_push_message : 'usable_push_message',
    // Session :暗号化対応:Char(Y:可能, N:不可)
    serviceOpt_encryption : 'encryption',
    // Session :HTMLカスタムログ:Char(Y:可能, N:不可)
    serviceOpt_html_custom_log : 'html_custom_log',
    // Session :共通(common)_コンテンツID:Integer
    common_contentId : 'common_contentId',
    // Local :共通(common)_コンテンツID:Integer
    common_preContentId : 'common_preContentId',
    // Session: 共通(common)_コンテンツデータチェックフラグ: Integer(true/false,
    // true:メモ、マーキング、しおりを削除する処理を行える false:メモ、マーキング、しおりを削除する処理をしない)
    common_contentDataChkFlg : 'common_contentDataChkFlg',
    // Session :ページ情報データ(pageInfo)_ページNo:Integer
    pageInfo_pageNo : 'pageInfo_pageNo',
    // Local :ページ情報データ(pageInfo)_ページNo:Integer
    common_prePageNo : 'common_prePageNo',
    // Session :ページ情報データ(pageInfo)_ページテキスト:String
    pageInfo_pageText : 'pageText',
    // Session :ページ情報データ(pageInfo)_コンテンツサムネイル:Integer
    pageInfo_pageImgResrcId : 'pageImgResrcId',
    // Session :コンテンツ内リンク(linkInfo)_リンク位置のx座標:Integer
    linkInfo_linkLocationX : 'linkLocationX',
    // Session :コンテンツ内リンク(linkInfo)_リンク位置のy座標:Integer
    linkInfo_linkLocationY : 'linkLocationY',
    // Session :コンテンツ内リンク(linkInfo)_リンク領域の幅:Integer
    linkInfo_linkLocationWidth : 'linkLocationWidth',
    // Session :コンテンツ内リンク(linkInfo)_リンク領域の高さ:Integer
    linkInfo_linkLocationHeight : 'linkLocationHeight',
    // Session :コンテンツ内リンク(linkInfo)_リンクタイプ:Integer(0/1)
    linkInfo_linkKind : 'linkKind',
    // Session :コンテンツ内リンク(linkInfo)_ターゲットURI:String(0/1)
    linkInfo_destURI : 'destURI',
    // Session :コンテンツ内リンク(linkInfo)_ターゲットページNo:Integer(0/1)
    linkInfo_destPageNumber : 'linkInfo_destPageNumber',
    // Session :閲覧ログ(log)_コンテンツ閲覧開始時刻:Datetime
    log_contentStartViewDt : 'contentStartViewDt',
    // Session :コンテンツ詳細情報(contentInfo)_コンテンツID:Integer
    contentInfo_contentId : 'contentInfo_contentId',
    // Session :コンテンツ詳細情報(contentInfo)_カテゴリID:Integer
    contentInfo_categoryId : 'categoryId',
    // Session :コンテンツ詳細情報(contentInfo)_コンテンツ名:String
    contentInfo_contentName : 'contentName',
    // Session :コンテンツ詳細情報(contentInfo)_コンテンツ名(カナ):String
    contentInfo_contentNameKana : 'contentNameKana',
    // Session :コンテンツ詳細情報(contentInfo)_コンテンツ詳細:String
    contentInfo_contentDetail : 'contentDetail',
    // Session :コンテンツ詳細情報(contentInfo)_公開開始日:Datetime
    contentInfo_deliveryStartDate : 'deliveryStartDate',
    // Session :コンテンツ詳細情報(contentInfo)_公開終了日:Datetime
    contentInfo_deliveryEndDate : 'deliveryEndDate',
    // Session :コンテンツ詳細情報(contentInfo)_本棚サムネール名:Interger
    contentInfo_thumbnailName : 'thumbnailName',
    // Session :コンテンツ詳細情報(contentInfo)_詳細画面サムネール名:Interger
    contentInfo_thumbnailBigName : 'thumbnailBigName',
    // Session :コンテンツ詳細情報(contentInfo)_メタ更新バージョン:Interger
    contentInfo_metaVersion : 'contentInfo_metaVersion',
    // Session :コンテンツ詳細情報(contentInfo)_リソース更新バージョン:Interger
    contentInfo_resourceVersion : 'contentInfo_resourceVersion',
    // Session :コンテンツ詳細情報(contentInfo)_PDF総ページ数:Interger
    contentInfo_allPageNum : 'contentInfo_allPageNum',
    // Session :(contentType):String
    contentInfo_contentType : 'contentInfo_contentType',
    // Session :検索条件(searchCond)_検索テキスト:String
    searchCond_searchText : 'searchText',
    // Session :検索条件(searchCond)_検索区分:Interger(1:コンテンツ検索, 2:タグ検索, 3:全文検索)
    searchCond_searchDivision : 'searchCond_searchDivision',
    // Session :検索条件(searchCond)_ソート基準:Interger(1:タイトル名, 2:タイトル名(かな), 3:公開順)
    searchCond_sortType : 'searchCond_sortType',
    // Session :検索条件(searchCond)_ソート方法:Interger(1:昇順, 2:降順)
    searchCond_sortOrder : 'sortOrder',
    // Session :検索条件(searchCond)_レコードFrom:Interger
    searchCond_recordFrom : 'recordFrom',
    // Session :検索条件(searchCond)_レコードTo:Interger
    searchCond_recordTo : 'recordTo',
    // Session :検索条件(searchCond)_カテゴリID:Interger
    searchCond_genreId : 'genreId',
    // Session :検索条件(searchCond)_グループID:Interger
    searchCond_groupId : 'groupId',
    // Session :通知情報(pushInfo)_新着件数:Interger
    pushInfo_newMsgNumber : 'pushInfo_newMsgNumber',
    // Local :ペン書式設定(penOpt)_色:String
    penOpt_color : 'penOpt_color',
    // Local :ペン書式設定(penOpt)_サイズ:Interger
    penOpt_size : 'penOpt_size',
    // Local :マーカ書式設定(maker)_色:String
    maker_color : 'maker_color',
    // Local :マーカ書式設定(maker)_サイズ:Interger
    maker_size : 'maker_size',
    // Local :消しゴム書式設定(erase)_色:String
    erase_color : 'erase_color',
    // Local :消しゴム書式設定(erase)_サイズ:Interger
    erase_size : 'erase_size',
    // Local :ユーザ情報(userInfo)_ログインID:String
    userInfo_loginId : 'loginId',
    // Local :ユーザ情報(userInfo)_アカウントパス:String
    userInfo_accountPath : 'accountPath',
    // Local :ユーザ情報(userInfo)_アカウント情報記憶フラグ:Char(Y:可能, N:不可)
    userInfo_rememberLogin : 'rememberLogin',
    // Local :ユーザ情報(userInfo)_最終ログイン日時:Datetime
    userInfo_lastLoginTime : 'lastLoginTime',
    // Local :ユーザ情報(userInfo)_パスワードスキップ日時:Datetime
    userInfo_pwdSkipDt : 'pwdSkipDt',
    // Local :ユーザオプション(userOpt)_動画繰り返しフラグ:Interger(0: 繰り返しなし, 1: 繰り返しあり)
    userOpt_videoMode : 'videoMode',
    // Local :ユーザオプション(userOpt)_音楽繰り返しフラグ:Interger(0: 繰り返しなし, 1: 繰り返しあり)
    userOpt_musicMode : 'musicMode',
    // Local :ユーザオプション(userOpt)_マーキング表示設定:Interger(0:表示しない, 1:表示する)
    userOpt_makingDsp : 'makingDsp',
    // Local :ユーザオプション(userOpt)_アラート表示設定:Interger(0:表示しない, 1:表示する)
    userOpt_closeOrRefreshAlert : 'userOpt_closeOrRefreshAlert',
    // Local :ユーザオプション(userOpt)_バックアップ確認フラグ:Interger(0:する, 1:しない)
    userOpt_bkConfirmFlg : 'bkConfirmFlg',
    // Local :並び順(sortOpt)_表示モード:Interger(0:本棚, 1:リスト)
    sortOpt_viewMode : 'viewMode',
    // Local :並び順(sortOpt)_表示区分:Interger(0:ジャンル, 1:グループ)
    sortOpt_viewType : 'viewType',
    // Local :並び順(sortOpt)_ソート基準:Interger(1:コンテンツ検索, 2:タグ検索, 3:全文検索)
    sortOpt_searchDivision : 'sortOpt_searchDivision',
    // Local: 並び順(sortOpt)_ソート方法:Interger(1:タイトル名, 2:タイトル名(かな), 3:公開順)
    sortOpt_sortType : 'sortOpt_sortType',
    // Local :しおりデータ(bookmark)_ページNo:Interger
    bookmark_pageNo : 'bookmark_pageNo',
    // Local :メモデータ(memo)_コンテンツID:Interger
    memo_contentNo : 'memo_contentNo',
    // Local :メモデータ(memo)_ページNo:Interger
    memo_pageNo : 'memo_pageNo',
    // Local :メモ(memo)_CopyText:String
    memo_copyText : 'memo_copyText',
    // Local :ユーザオプション(userOpt)_バックアップデフォルト_マーキング:Interger
    userOpt_bkMakingFlag : 'userOpt_bkMakingFlag',
    // Local :ユーザオプション(userOpt)_バックアップデフォルト_メモ:Interger
    userOpt_bkMemoFlag : 'userOpt_bkMemoFlag',
    // Local :ユーザオプション(userOpt)_バックアップデフォルト_しおり:Interger
    userOpt_bkShioriFlag : 'userOpt_bkShioriFlag',
    // Local :ユーザオプション(userOpt)_ビューのアニメーション種類:Interger
    userOpt_pageTransition : 'userOpt_pageTransition',
    // Local :ユーザオプション(userOpt)_アニメーション時間:Float
    userOpt_pageTransitionPeriod : 'userOpt_pageTransitionPeriod',

    isGetitsMode : 'isGetitsMode',
    isStreamingMode : 'isStreamingMode',
    conf_apiUrl : 'conf_apiUrl',
    conf_apiLoginUrl : 'conf_apiLoginUrl',
    conf_apiResourceDlUrl : 'conf_apiResourceDlUrl',
    storeUrl : 'storeUrl',
    siteUrl : 'siteUrl',

    latitude : 'latitude',
    longitude : 'longitude',

    // Local:セッションID:String
    userInfo_sid_bak : 'sid_bak'

/* -------------------------------------------------------------------------------- */

};

// Entity for Bookmark
function BookMarkEntity() {
    this.contentid = "";
    this.pageNo = 0;
    // More info
    this.contentTitle = "";
    this.contentTitleKana = "";
    this.registerDate = new Date();

    // Add for phase2
    this.bookmarkid = "";
};

// Entity for Memo
function MemoEntity() {
    this.contentid = "";
    this.pageNo = 0;
    this.posX = -1;
    this.posY = -1;
    this.Text = "";

    // Add for phase2
    this.memoid = "";
    this.registerDate = new Date();
};

// Entity for marking
function MarkingEntity() {
    this.contentid = "";
    this.pageNo = -1;
    this.content = "";

    // Add for phase2
    this.markingid = "";
    this.registerDate = new Date();
};
// Entity for log
function LogEntity() {
    this.contentid = "";
    this.readingStartDate = new Date();
    this.readingEndDate = null;
    this.readingTime = 0;
    this.deviceTypeId = 4;
    // GPS
    this.latitude = '';
    this.longitude = '';
    // ページログ配列
    this.pageLogArray = [];
    // 詳細ログ配列
    this.objectLogArray = [];
    // カスタムログ配列
    this.customLogArray = [];
};
// Entity for PageLog
function PageLogEntity() {
    this.contentid = "";
    this.pageNo = 1;
    this.readingStartDate = new Date();
    this.readingEndDate = null;
    this.readingTime = 0;
};
// Entity for ObjectLog
function ObjectLogEntity() {
    this.contentid = "";
    this.actionDate = new Date();
    this.pageNo = 1;
    this.objectId = "";
    this.resourceId = "";
    this.mediaType = "";
    this.actionType = "";
    this.actionValue = "";
    this.actionTime = "0";
    this.locationX = "";
    this.locationY = "";
    this.locationHeight = "";
    this.locationWidth = "";
    this.eventType = 1;
};
//Entity for CustomLog
function CustomLogEntity() {
    this.contentid = "";
    this.actionDate = new Date();
    this.param1 = "";
    this.param2 = "";
    this.param3 = "";
    this.param4 = "";
    this.param5 = "";
};

/*
 * Extract memo data from result of API and merge with local memo
 */
COMMON.getDataMemo = function(jsonString) {
    var memoDataFromServer = jsonString.data;

    var arrLocalMemo = ClientData.MemoData();

    for ( var i = 0; i < memoDataFromServer.length; i++) {
        var objServerMemo = new MemoEntity();
        objServerMemo.contentid = memoDataFromServer[i].contentid;
        objServerMemo.pageNo = memoDataFromServer[i].pageNo;
        objServerMemo.posX = memoDataFromServer[i].posX;
        objServerMemo.posY = memoDataFromServer[i].posY;
        objServerMemo.Text = memoDataFromServer[i].Text;

        // Add for phase2
        objServerMemo.memoid = memoDataFromServer[i].memoid; // UUID
        objServerMemo.registerDate = memoDataFromServer[i].registerDate; // UTC+0

        // Searching memoid in local that is matching with memo of server
        var nIndexFoundLocalMemo = -1;
        for ( var nIndexLocalMemo = 0; nIndexLocalMemo < arrLocalMemo.length; nIndexLocalMemo++) {
            if (arrLocalMemo[nIndexLocalMemo].memoid == objServerMemo.memoid) {
                nIndexFoundLocalMemo = nIndexLocalMemo;
                break;
            }
        }
        // Found local memo that has memoid = memoid of server memo
        if (nIndexFoundLocalMemo >= 0) {

            // Local date is older than server date -> restore
            if (arrLocalMemo[nIndexFoundLocalMemo].registerDate < objServerMemo.registerDate) {

                arrLocalMemo[nIndexFoundLocalMemo].contentid = objServerMemo.contentid;
                arrLocalMemo[nIndexFoundLocalMemo].pageNo = objServerMemo.pageNo;
                arrLocalMemo[nIndexFoundLocalMemo].posX = objServerMemo.posX;
                arrLocalMemo[nIndexFoundLocalMemo].posY = objServerMemo.posY;
                arrLocalMemo[nIndexFoundLocalMemo].Text = objServerMemo.Text;
                arrLocalMemo[nIndexFoundLocalMemo].registerDate = objServerMemo.registerDate;
            }

        } else { // Not found: [local memo].memoid = [server memo].memoid
            // Merge server memo to local
            arrLocalMemo.push(objServerMemo);
        }

    }
    ClientData.MemoData(arrLocalMemo);
};

/*
 * Extract marking data from result of API and replace to local marking
 */
COMMON.getDataMarking = function(jsonString) {
    var data = jsonString.data;
    var arr = ClientData.MarkingData();
    arr.clear();
    ClientData.MarkingData(arr);

    var arrMarking = [];
    for ( var nIndex1 = 0; nIndex1 < data.length; nIndex1++) {
        var obj = new MarkingEntity();
        obj.contentid = data[nIndex1].contentid;
        obj.pageNo = data[nIndex1].pageNo;
        obj.content = data[nIndex1].content;

        // Add for phase2
        obj.markingid = data[nIndex1].markingid;
        obj.registerDate = data[nIndex1].registerDate;

        // Add object to client
        arrMarking.push(obj);
    }
    ClientData.MarkingData(arrMarking);
};

/*
 * Extract bookmark data from result of API and replace to local bookmark
 */
COMMON.getDataBookmark = function(jsonString) {
    var data = jsonString.data;
    var arr = ClientData.BookMarkData();
    arr.clear();
    ClientData.BookMarkData(arr);

    var arrBookmark = [];
    for ( var nIndex1 = 0; nIndex1 < data.length; nIndex1++) {
        var obj = new BookMarkEntity();
        obj.contentid = data[nIndex1].contentid;
        obj.pageNo = data[nIndex1].pageNo;
        obj.contentTitle = data[nIndex1].contentTitle;
        obj.contentTitleKana = data[nIndex1].contentTitleKana;
        obj.registerDate = data[nIndex1].registerDate;

        // Add for phase2
        obj.bookmarkid = data[nIndex1].bookmarkid;

        // Add object to client
        arrBookmark.push(obj);
    }
    ClientData.BookMarkData(arrBookmark);
};

/*
 * Get data from localstorage and sessionstorage synchronization If has any
 * param (args.length > 0) -> setter If has not param (args.length = 0) ->
 * getter . Get from session: + if it existed and key existed in localstorage ->
 * return result + else: set value from local to sessionstorage -> return value
 * of sessionstorage if value is not empty, otherwise, return default result.
 *
 */
COMMON.operateData = function(args, strKey, returnDefaultData) {

    if (args.length > 0) {
        var data = args[0];
        LocalStorageUtils.set(strKey, data);
        SessionStorageUtils.set(strKey, JSON.stringify(data));
    } else {
        if (SessionStorageUtils.get(strKey) != 'undefined' && SessionStorageUtils.get(strKey) != undefined && SessionStorageUtils.get(strKey) != '' && SessionStorageUtils.get(strKey) != null
                && SessionStorageUtils.get(strKey) != 'null') {
            if (LocalStorageUtils.existKey(strKey) == true) {
                return JSON.parse(SessionStorageUtils.get(strKey));
            } else {
                return returnDefaultData;
            }
        } else {
            if (LocalStorageUtils.existKey(strKey) == true) {
                SessionStorageUtils.set(strKey, JSON.stringify(LocalStorageUtils.get(strKey)));
                return JSON.parse(SessionStorageUtils.get(strKey));
            }
            return returnDefaultData;
        }
    }
};
var ClientData = {
    zoom_ratioPre : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.zoom_ratioPre, JSON.stringify(data));
        } else {
            if (SessionStorageUtils.get(COMMON.Keys.zoom_ratioPre) != 'undefined' && SessionStorageUtils.get(COMMON.Keys.zoom_ratioPre) != undefined
                    && SessionStorageUtils.get(COMMON.Keys.zoom_ratioPre) != '' && SessionStorageUtils.get(COMMON.Keys.zoom_ratioPre) != null
                    && SessionStorageUtils.get(COMMON.Keys.zoom_ratioPre) != 'null') {
                return JSON.parse(SessionStorageUtils.get(COMMON.Keys.zoom_ratioPre));
            }
            return 1;
        }
    },
    // Local :ユーザ情報(userInfo)_アカウントパス:String
    userInfo_accountPath : function(data) {
        if (arguments.length > 0) {
            AVWEB.avwUserSetting().set(COMMON.Keys.userInfo_accountPath, data);
        } else {
            return AVWEB.avwUserSetting().get(COMMON.Keys.userInfo_accountPath);
        }
    },
    // Local: ユーザ情報(userInfo)_セッションID:String
    userInfo_sid_local : function(data) {
        if (arguments.length > 0) {
            AVWEB.avwUserSetting().set(COMMON.Keys.userInfo_sid, data);
        } else {
            return AVWEB.avwUserSetting().get(COMMON.Keys.userInfo_sid);
        }
    },
    userInfo_sid_local_preview : function(data) {
        if (arguments.length > 0) {
            AVWEB.avwUserSetting().set(COMMON.Keys.userInfo_sid_preview, data);
        } else {
            return AVWEB.avwUserSetting().get(COMMON.Keys.userInfo_sid_preview);
        }
    },
    // Local :ユーザ情報(userInfo)_ログインID:String
    userInfo_loginId : function(data) {
        if (arguments.length > 0) {
            AVWEB.avwUserSetting().set(COMMON.Keys.userInfo_loginId, data);
        } else {
            return AVWEB.avwUserSetting().get(COMMON.Keys.userInfo_loginId);
        }
    },
    // Local :ユーザ情報(userInfo)_アカウント情報記憶フラグ:Char(Y:可能, N:不可)
    userInfo_rememberLogin : function(data) {
        if (arguments.length > 0) {
            AVWEB.avwUserSetting().set(COMMON.Keys.userInfo_rememberLogin, data);
        } else {
            return AVWEB.avwUserSetting().get(COMMON.Keys.userInfo_rememberLogin);
        }
    },

    // Local
    JumpQueue : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.JumpQueue, []);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.JumpQueue, []);
        }
    },
    // Local
    ResourceVersion : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.ResourceVersion, []);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.ResourceVersion, []);
        }
    },
    // Local
    ContentViewDetail : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.ContentViewDetail, []);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.ContentViewDetail, []);
        }
    },
    // Local
    MetaVersion : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.MetaVersion, []);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.MetaVersion, []);
        }
    },

    // Local
    ReadingContentIds : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.ReadingContentIds, []);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.ReadingContentIds, []);
        }
    },

    // Local: Bookmark collection
    BookMarkData : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.BookMarkData, []);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.BookMarkData, []);
        }
    },
    // Local: Marking collection
    MarkingData : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.MarkingData, []);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.MarkingData, []);
        }
    },

    // Local: content log collection
    ContentLogData : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.ContentLogData, []);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.ContentLogData, []);
        }
    },
    // Local: Memo collection
    MemoData : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.MemoData, []);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.MemoData, []);
        }
    },
    // Local
    IsJumpBack : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.IsJumpBack, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.IsJumpBack, undefined);
        }
    },
    // Local
    IsHideToolbar : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.IsHideToolbar, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.IsHideToolbar, undefined);
        }
    },
    // Local
    IsAddingMarking : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.IsAddingMarking, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.IsAddingMarking, undefined);
        }
    },
    // Local
    IsAddingMemo : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.IsAddingMemo, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.IsAddingMemo, undefined);
        }
    },
    // Local
    IsDisplayMarking : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.IsDisplayMarking, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.IsDisplayMarking, undefined);
        }
    },
    // Local
    IsDisplayMemo : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.IsDisplayMemo, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.IsDisplayMemo, undefined);
        }
    },

    // Local
    MarkingType : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.MarkingType, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.MarkingType, undefined);
        }
    },
    // Local :ユーザオプション(userOpt)_ログアウトモード: Interger(0:logout with backup,
    // 1:logout without backup)
    userOpt_logoutMode : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.userOpt_logoutMode, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.userOpt_logoutMode, undefined);
        }
    },
    // Local
    BookmarkScreen : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.BookmarkScreen, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.BookmarkScreen, undefined);
        }
    },
    // Local: isChangedMemo: boolean (true: changed, false: not change)
    isChangedMemo : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.isChangedMemo, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.isChangedMemo, undefined);
        }
    },
    // Local: isChangedMakingData: boolean (true: changed, false: not change)
    isChangedMarkingData : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.isChangedMarkingData, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.isChangedMarkingData, undefined);
        }
    },

    // Local: isChangedBookmark: boolean (true: changed, false: not change)
    isChangedBookmark : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.isChangedBookmark, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.isChangedBookmark, undefined);
        }
    },

    // Local :共通(common)_コンテンツID:Integer
    common_preContentId : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.common_preContentId, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.common_preContentId, undefined);
        }
    },
    // Local :ページ情報データ(common)_ページNo:Integer
    common_prePageNo : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.common_prePageNo, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.common_prePageNo, undefined);
        }
    },
    // Local :ペン書式設定(penOpt)_色:String
    penOpt_color : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.penOpt_color, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.penOpt_color, undefined);
        }
    },

    // Local :ペン書式設定(penOpt)_サイズ:Interger
    penOpt_size : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.penOpt_size, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.penOpt_size, undefined);
        }
    },

    // Local :マーカ書式設定(maker)_色:String
    maker_color : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.maker_color, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.maker_color, undefined);
        }
    },

    // Local :マーカ書式設定(maker)_サイズ:Interger
    maker_size : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.maker_size, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.maker_size, undefined);
        }
    },

    // Local :消しゴム書式設定(erase)_色:String
    erase_color : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.erase_color, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.erase_color, undefined);
        }
    },

    // Local :消しゴム書式設定(erase)_サイズ:Interger
    erase_size : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.erase_size, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.erase_size, undefined);
        }
    },
    // Local :ユーザ情報(userInfo)_最終ログイン日時:Datetime
    userInfo_lastLoginTime : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.userInfo_lastLoginTime, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.userInfo_lastLoginTime, undefined);
        }
    },

    // Local :ユーザ情報(userInfo)_パスワードスキップ日時:Datetime
    userInfo_pwdSkipDt : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.userInfo_pwdSkipDt, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.userInfo_pwdSkipDt, undefined);
        }
    },
    // Local :ユーザオプション(userOpt)_動画繰り返しフラグ:Interger(0: 繰り返しなし, 1: 繰り返しあり)
    userOpt_videoMode : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.userOpt_videoMode, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.userOpt_videoMode, undefined);
        }
    },
    // Local :ユーザオプション(userOpt)_音楽繰り返しフラグ:Interger(0: 繰り返しなし, 1: 繰り返しあり)
    userOpt_musicMode : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.userOpt_musicMode, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.userOpt_musicMode, undefined);
        }
    },

    // Local :ユーザオプション(userOpt)_マーキング表示設定:Interger(0:表示しない, 1:表示する)
    userOpt_makingDsp : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.userOpt_makingDsp, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.userOpt_makingDsp, undefined);
        }
    },
    // Local :ユーザオプション(userOpt)_アラート表示設定:Interger(0:表示しない, 1:表示する)
    userOpt_closeOrRefreshAlert : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.userOpt_closeOrRefreshAlert, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.userOpt_closeOrRefreshAlert, undefined);
        }
    },
    // Local :ユーザオプション(userOpt)_バックアップ確認フラグ:Interger(0:する, 1:しない)
    userOpt_bkConfirmFlg : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.userOpt_bkConfirmFlg, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.userOpt_bkConfirmFlg, undefined);
        }
    },
    // Local :並び順(sortOpt)_表示モード:Interger(0:本棚, 1:リスト)
    sortOpt_viewMode : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.sortOpt_viewMode, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.sortOpt_viewMode, undefined);
        }
    },

    // Local :並び順(sortOpt)_表示区分:Interger(0:ジャンル, 1:グループ)
    sortOpt_viewType : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.sortOpt_viewType, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.sortOpt_viewType, undefined);
        }
    },

    // Local :並び順(sortOpt)_ソート基準:Interger(1:コンテンツ検索, 2:タグ検索, 3:全文検索)
    sortOpt_searchDivision : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.sortOpt_searchDivision, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.sortOpt_searchDivision, undefined);
        }
    },

    // Local: 並び順(sortOpt)_ソート方法:Interger(1:タイトル名, 2:タイトル名(かな), 3:公開順)
    sortOpt_sortType : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.sortOpt_sortType, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.sortOpt_sortType, undefined);
        }
    },
    // Local :しおりデータ(bookmark)_ページNo:Interger
    bookmark_pageNo : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.bookmark_pageNo, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.bookmark_pageNo, undefined);
        }
    },

    // Local :メモデータ(memo)_コンテンツID:Interger
    memo_contentNo : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.memo_contentNo, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.memo_contentNo, undefined);
        }
    },

    // Local :メモデータ(memo)_ページNo:Interger
    memo_pageNo : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.memo_pageNo, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.memo_pageNo, undefined);
        }
    },

    // Local :ユーザオプション(userOpt)_バックアップデフォルト_マーキング:Interger
    userOpt_bkMakingFlag : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.userOpt_bkMakingFlag, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.userOpt_bkMakingFlag, undefined);
        }
    },

    // Local :ユーザオプション(userOpt)_バックアップデフォルト_メモ:Interger
    userOpt_bkMemoFlag : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.userOpt_bkMemoFlag, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.userOpt_bkMemoFlag, undefined);
        }
    },

    // Local :ユーザオプション(userOpt)_バックアップデフォルト_しおり:Interger
    userOpt_bkShioriFlag : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.userOpt_bkShioriFlag, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.userOpt_bkShioriFlag, undefined);
        }
    },

    // Local :ユーザオプション(userOpt)_ビューのアニメーション種類:Interger
    userOpt_pageTransition : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.userOpt_pageTransition, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.userOpt_pageTransition, undefined);
        }
    },

    // Local :ユーザオプション(userOpt)_アニメーション時間:Float
    userOpt_pageTransitionPeriod : function(data) {
        if (arguments.length > 0) {
            COMMON.operateData(arguments, COMMON.Keys.userOpt_pageTransitionPeriod, undefined);
        } else {
            return COMMON.operateData(arguments, COMMON.Keys.userOpt_pageTransitionPeriod, undefined);
        }
    },

    // Session
    memo_copyText : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.memo_copyText, JSON.stringify(data));
        } else {
            if (SessionStorageUtils.get(COMMON.Keys.memo_copyText) != 'undefined' && SessionStorageUtils.get(COMMON.Keys.memo_copyText) != undefined
                    && SessionStorageUtils.get(COMMON.Keys.memo_copyText) != '' && SessionStorageUtils.get(COMMON.Keys.memo_copyText) != null
                    && SessionStorageUtils.get(COMMON.Keys.memo_copyText) != 'null') {
                return JSON.parse(SessionStorageUtils.get(COMMON.Keys.memo_copyText));
            }
            return null;
        }
    },
    // Session
    IsRefresh : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.IsRefresh, JSON.stringify(data));
        } else {
            if (SessionStorageUtils.get(COMMON.Keys.IsRefresh) != 'undefined' && SessionStorageUtils.get(COMMON.Keys.IsRefresh) != undefined && SessionStorageUtils.get(COMMON.Keys.IsRefresh) != ''
                    && SessionStorageUtils.get(COMMON.Keys.IsRefresh) != null && SessionStorageUtils.get(COMMON.Keys.IsRefresh) != 'null') {
                return JSON.parse(SessionStorageUtils.get(COMMON.Keys.IsRefresh));
            }
            return false;
        }
    },
    // Session
    userInfo_userName : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.userInfo_userName, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.userInfo_userName);
        }
    },

    // Session :コンテンツ詳細情報(contentInfo)_サムネール: String (base64string)
    contentInfo_contentThumbnail : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.contentInfo_contentThumbnail, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.contentInfo_contentThumbnail);
        }
    },

    // Session:パスワード要変更(requirePasswordChange):String (0:不要, 1:初回, 2:定期変更)
    requirePasswordChange : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.requirePasswordChange, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.requirePasswordChange);
        }
    },

    // Session:ユーザ情報(userInfo)_セッションID:String
    userInfo_sid : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.userInfo_sid, data);
            // AVWEB.avwUserSetting().set(COMMON.Keys.userInfo_sid, data);
        } else {
            // return AVWEB.avwUserSetting().get(COMMON.Keys.userInfo_sid);
            if (AVWEB.avwUserSession()) {
                return SessionStorageUtils.get(COMMON.Keys.userInfo_sid);
            }
            return null;
        }
    },
    userInfo_sid_preview : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.userInfo_sid_preview, data);
            // AVWEB.avwUserSetting().set(COMMON.Keys.userInfo_sid, data);
        } else {
            // return AVWEB.avwUserSetting().get(COMMON.Keys.userInfo_sid);
            if (AVWEB.avwUserSession()) {
                return SessionStorageUtils.get(COMMON.Keys.userInfo_sid_preview);
            }
            return null;
        }
    },
    // Session :事業者オプション(serviceOpt)_初回ログイン時パスワード強制変更:Integer(0:なし, 1:催促, 2:強制)
    serviceOpt_force_pw_change_on_login : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_force_pw_change_on_login, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_force_pw_change_on_login);
        }
    },

    // Session :事業者オプション(serviceOpt)_定期ログイン時パスワード強制変更:Integer(0:なし, 1:催促, 2:強制)
    serviceOpt_force_pw_change_periodically : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_force_pw_change_periodically, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_force_pw_change_periodically);
        }
    },

    // Session:事業者オプション(serviceOpt)_メモ・マーキングデータバックアップ使用:Char(Y:可能, N:不可)
    serviceOpt_user_data_backup : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_user_data_backup, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_user_data_backup);
        }
    },

    // Session:事業者オプション(serviceOpt)_テキストコピー機能使用:Char(Y:可能, N:不可)
    serviceOpt_copy_text : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_copy_text, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_copy_text);
        }
    },
    // Session :事業者オプション(serviceOpt)_マーキング機能使用:Char(Y:可能, N:不可)
    serviceOpt_marking : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_marking, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_marking);
        }
    },
    // No.8: do not use this value: serviceOpt_force_login_periodically
    // Session :事業者オプション(serviceOpt)_一定期間経過後アプリロック:Char(Y:可能, N:不可)
    // serviceOpt_force_login_periodically: function (data) {
    // if (arguments.length > 0) {
    // SessionStorageUtils.set(COMMON.Keys.serviceOpt_force_login_periodically,
    // data);
    // } else {
    // return
    // SessionStorageUtils.get(COMMON.Keys.serviceOpt_force_login_periodically);
    // }
    // },
    // Session :事業者オプション(serviceOpt)_GPS使用可:Char(Y:可能, N:不可)
    serviceOpt_usable_readinglog_gps : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_usable_readinglog_gps, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_usable_readinglog_gps);
        }
    },
    // Session :事業者オプション(serviceOpt)_詳細ログ使用可:Char(Y:可能, N:不可)
    serviceOpt_usable_readinglog_object : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_usable_readinglog_object, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_usable_readinglog_object);
        }
    },

    // Session :事業者オプション(serviceOpt)_getits_GPS使用可:Char(Y:可能, N:不可)
    serviceOpt_reader_usable_readinglog_gps : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_reader_usable_readinglog_gps, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_reader_usable_readinglog_gps);
        }
    },
    // Session :事業者オプション(serviceOpt)_getits_詳細ログ使用可:Char(Y:可能, N:不可)
    serviceOpt_reader_readinglog_object : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_reader_readinglog_object, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_reader_readinglog_object);
        }
    },

    // Session :事業者オプション(serviceOpt)_コンテンツ共有モード:Interger(0:なし , 1:ABook,
    // 2:getits)
    serviceOpt_content_share : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_content_share, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_content_share);
        }
    },

    // Session :事業者オプション(serviceOpt)_公開時プッシュメッセージ:Char(Y:可能, N:不可)
    serviceOpt_apns : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_apns, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_apns);
        }
    },

    // Session :事業者オプション(serviceOpt)_任意のプッシュメッセージ:Char(Y:可能, N:不可)
    serviceOpt_usable_push_message : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_usable_push_message, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_usable_push_message);
        }
    },

    // Session :事業者オプション(serviceOpt)_任意のプッシュメッセージ:Char(Y:可能, N:不可)
    serviceOpt_encryption : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_encryption, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_encryption);
        }
    },

    // Session :事業者オプション(serviceOpt)_HTMLカスタムログ:Char(Y:可能, N:不可)
    serviceOpt_html_custom_log : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_html_custom_log, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_html_custom_log);
        }
    },

    // Session :事業者オプション(serviceOpt)_カタログエディション:Char(Y:可能, N:不可)
    serviceOpt_catalog_edition : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_catalog_edition, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_catalog_edition);
        }
    },
    // Session :事業者オプション(serviceOpt)_日比谷対応:Char(Y:可能, N:不可)
    serviceOpt_hibiyakadan_catalog : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_hibiyakadan_catalog, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_hibiyakadan_catalog);
        }
    },
    // Session :事業者オプション(serviceOpt)_DH対応:Char(Y:可能, N:不可)
    serviceOpt_daihatsu : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_daihatsu, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_daihatsu);
        }
    },

    // Session :共通(common)_コンテンツID:Integer
    common_contentId : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.common_contentId, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.common_contentId);
        }
    },

    // Session: 共通(common)_コンテンツデータチェックフラグ: Integer(true/false,
    // true:メモ、マーキング、しおりを削除する処理を行える false:メモ、マーキング、しおりを削除する処理をしない)
    common_contentDataChkFlg : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.common_contentDataChkFlg, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.common_contentDataChkFlg);
        }
    },
    // Session :ページ情報データ(pageInfo)_ページNo:Integer
    pageInfo_pageNo : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.pageInfo_pageNo, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.pageInfo_pageNo);
        }
    },

    // Session :ページ情報データ(pageInfo)_ページテキスト:String
    pageInfo_pageText : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.pageInfo_pageText, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.pageInfo_pageText);
        }
    },

    // Session :ページ情報データ(pageInfo)_コンテンツサムネイル:Integer
    pageInfo_pageImgResrcId : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.pageInfo_pageImgResrcId, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.pageInfo_pageImgResrcId);
        }
    },

    // Session :コンテンツ内リンク(linkInfo)_リンク位置のx座標:Integer
    linkInfo_linkLocationX : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.linkInfo_linkLocationX, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.linkInfo_linkLocationX);
        }
    },

    // Session :コンテンツ内リンク(linkInfo)_リンク位置のy座標:Integer
    linkInfo_linkLocationY : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.linkInfo_linkLocationY, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.linkInfo_linkLocationY);
        }
    },

    // Session :コンテンツ内リンク(linkInfo)_リンク領域の幅:Integer
    linkInfo_linkLocationWidth : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.linkInfo_linkLocationWidth, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.linkInfo_linkLocationWidth);
        }
    },

    // Session :コンテンツ内リンク(linkInfo)_リンク領域の高さ:Integer
    linkInfo_linkLocationHeight : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.linkInfo_linkLocationHeight, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.linkInfo_linkLocationHeight);
        }
    },

    // Session :コンテンツ内リンク(linkInfo)_リンクタイプ:Integer(0/1)
    linkInfo_linkKind : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.linkInfo_linkKind, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.linkInfo_linkKind);
        }
    },

    // Session :コンテンツ内リンク(linkInfo)_ターゲットURI:String(0/1)
    linkInfo_destURI : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.linkInfo_destURI, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.linkInfo_destURI);
        }
    },

    // Session :コンテンツ内リンク(linkInfo)_ターゲットページNo:Integer(0/1)
    linkInfo_destPageNumber : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.linkInfo_destPageNumber, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.linkInfo_destPageNumber);
        }
    },

    // Session :閲覧ログ(log)_コンテンツ閲覧開始時刻:Datetime
    log_contentStartViewDt : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.log_contentStartViewDt, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.log_contentStartViewDt);
        }
    },

    // Session :コンテンツ詳細情報(contentInfo)_コンテンツID:Integer
    contentInfo_contentId : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.contentInfo_contentId, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.contentInfo_contentId);
        }
    },

    // Session :コンテンツ詳細情報(contentInfo)_カテゴリID:Integer
    contentInfo_categoryId : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.contentInfo_categoryId, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.contentInfo_categoryId);
        }
    },

    // Session :コンテンツ詳細情報(contentInfo)_コンテンツ名:String
    contentInfo_contentName : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.contentInfo_contentName, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.contentInfo_contentName);
        }
    },

    // Session :コンテンツ詳細情報(contentInfo)_コンテンツ名(カナ):String
    contentInfo_contentNameKana : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.contentInfo_contentNameKana, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.contentInfo_contentNameKana);
        }
    },

    // Session :コンテンツ詳細情報(contentInfo)_コンテンツ詳細:String
    contentInfo_contentDetail : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.contentInfo_contentDetail, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.contentInfo_contentDetail);
        }
    },

    // Session :コンテンツ詳細情報(contentInfo)_公開開始日:Datetime
    contentInfo_deliveryStartDate : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.contentInfo_deliveryStartDate, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.contentInfo_deliveryStartDate);
        }
    },

    // Session :コンテンツ詳細情報(contentInfo)_公開終了日:Datetime
    contentInfo_deliveryEndDate : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.contentInfo_deliveryEndDate, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.contentInfo_deliveryEndDate);
        }
    },

    // Session :コンテンツ詳細情報(contentInfo)_本棚サムネール名:Interger
    contentInfo_thumbnailName : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.contentInfo_thumbnailName, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.contentInfo_thumbnailName);
        }
    },

    // Session :コンテンツ詳細情報(contentInfo)_詳細画面サムネール名:Interger
    contentInfo_thumbnailBigName : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.contentInfo_thumbnailBigName, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.contentInfo_thumbnailBigName);
        }
    },

    // Session :コンテンツ詳細情報(contentInfo)_メタ更新バージョン:Interger
    contentInfo_metaVersion : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.contentInfo_metaVersion, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.contentInfo_metaVersion);
        }
    },

    // Session :コンテンツ詳細情報(contentInfo)_リソース更新バージョン:Interger
    contentInfo_resourceVersion : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.contentInfo_resourceVersion, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.contentInfo_resourceVersion);
        }
    },

    // Session :コンテンツ詳細情報(contentInfo)_PDF総ページ数:Interger
    contentInfo_allPageNum : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.contentInfo_allPageNum, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.contentInfo_allPageNum);
        }
    },

    // Session :(contentType):String
    contentInfo_contentType : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.contentInfo_contentType, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.contentInfo_contentType);
        }
    },
    // Session :検索条件(searchCond)_検索テキスト:String
    searchCond_searchText : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.searchCond_searchText, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.searchCond_searchText);
        }
    },

    // Session :検索条件(searchCond)_検索区分:Interger(1:コンテンツ検索, 2:タグ検索, 3:全文検索)
    searchCond_searchDivision : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.searchCond_searchDivision, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.searchCond_searchDivision);
        }
    },

    // Session :検索条件(searchCond)_ソート基準:Interger(1:タイトル名, 2:タイトル名(かな), 3:公開順)
    searchCond_sortType : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.searchCond_sortType, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.searchCond_sortType);
        }
    },

    // Session :検索条件(searchCond)_ソート方法:Interger(1:昇順, 2:降順)
    searchCond_sortOrder : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.searchCond_sortOrder, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.searchCond_sortOrder);
        }
    },

    // Session :検索条件(searchCond)_レコードFrom:Interger
    searchCond_recordFrom : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.searchCond_recordFrom, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.searchCond_recordFrom);
        }
    },

    // Session :検索条件(searchCond)_レコードTo:Interger
    searchCond_recordTo : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.searchCond_recordTo, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.searchCond_recordTo);
        }
    },

    // Session :検索条件(searchCond)_カテゴリID:Interger
    searchCond_genreId : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.searchCond_genreId, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.searchCond_genreId);
        }
    },

    // Session :検索条件(searchCond)_グループID:Interger
    searchCond_groupId : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.searchCond_groupId, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.searchCond_groupId);
        }
    },

    // Session :通知情報(pushInfo)_新着件数:Interger
    pushInfo_newMsgNumber : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.pushInfo_newMsgNumber, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.pushInfo_newMsgNumber);
        }
    },

    // Session :ユーザ情報(userInfo)_ログインID:String
    userInfo_loginId_session : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.userInfo_loginId, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.userInfo_loginId);
        }
    },

    // Session :ユーザ情報(userInfo)_アカウントパス:String
    userInfo_accountPath_session : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.userInfo_accountPath, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.userInfo_accountPath);
        }
    },
    // Session :事業者オプション(serviceOpt)_スクリーンロック(Web版):Char(Y:可能, N:不可)
    serviceOpt_web_screen_lock : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_web_screen_lock, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_web_screen_lock);
        }
    },
    // Session :事業者オプション(serviceOpt)_スクリーンロック待ち時間:Interger
    serviceOpt_web_screen_lock_wait : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.serviceOpt_web_screen_lock_wait, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.serviceOpt_web_screen_lock_wait);
        }
    },

    isGetitsMode : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.isGetitsMode, JSON.stringify(data));
        } else {
            if (SessionStorageUtils.get(COMMON.Keys.isGetitsMode) != 'undefined' && SessionStorageUtils.get(COMMON.Keys.isGetitsMode) != undefined
                    && SessionStorageUtils.get(COMMON.Keys.isGetitsMode) != '' && SessionStorageUtils.get(COMMON.Keys.isGetitsMode) != null
                    && SessionStorageUtils.get(COMMON.Keys.isGetitsMode) != 'null') {
                return JSON.parse(SessionStorageUtils.get(COMMON.Keys.isGetitsMode));
            }
            return false;
        }
    },

    isStreamingMode : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.isStreamingMode, JSON.stringify(data));
        } else {
            if (SessionStorageUtils.get(COMMON.Keys.isStreamingMode) != 'undefined' && SessionStorageUtils.get(COMMON.Keys.isStreamingMode) != undefined
                    && SessionStorageUtils.get(COMMON.Keys.isStreamingMode) != '' && SessionStorageUtils.get(COMMON.Keys.isStreamingMode) != null
                    && SessionStorageUtils.get(COMMON.Keys.isStreamingMode) != 'null') {
                return JSON.parse(SessionStorageUtils.get(COMMON.Keys.isStreamingMode));
            }
            return false;
        }
    },

    conf_apiUrl : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.conf_apiUrl, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.conf_apiUrl);
        }
    },
    conf_apiLoginUrl : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.conf_apiLoginUrl, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.conf_apiLoginUrl);
        }
    },
    conf_apiResourceDlUrl : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.conf_apiResourceDlUrl, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.conf_apiResourceDlUrl);
        }
    },

    storeUrl : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.storeUrl, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.storeUrl);
        }
    },
    
    siteUrl : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.siteUrl, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.siteUrl);
        }
    },

    latitude : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.latitude, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.latitude);
        }
    },

    longitude : function(data) {
        if (arguments.length > 0) {
            SessionStorageUtils.set(COMMON.Keys.longitude, data);
        } else {
            return SessionStorageUtils.get(COMMON.Keys.longitude);
        }
    },

    // Local: セッションIDのバックアップ
    userInfo_sid_local_bak : function(data) {
        if (arguments.length > 0) {
            AVWEB.avwUserSetting().set(COMMON.Keys.userInfo_sid_bak, data);
        } else {
            return AVWEB.avwUserSetting().get(COMMON.Keys.userInfo_sid_bak);
        }
    }

};

// -------------------------------------------------
// Define all keys for local/session storage [ end ]
// -------------------------------------------------

// =============================================================================================
// Constants [ end ]
// =============================================================================================

/*
 * Operations for local storage
 */
var LocalStorageUtils = {
    getUniqueId : function() {
        var uniqueId = "";

        if (AVWEB.avwUserSetting().get(COMMON.Keys.userInfo_accountPath)) {
            uniqueId += AVWEB.avwUserSetting().get(COMMON.Keys.userInfo_accountPath);
        }
        if (AVWEB.avwUserSetting().get(COMMON.Keys.userInfo_loginId)) {
            uniqueId += "." + AVWEB.avwUserSetting().get(COMMON.Keys.userInfo_loginId);
        }
        if (uniqueId != "") {
            uniqueId += ".";
        }

        return uniqueId;
    },
    get : function(strKey) {
        var key = this.getUniqueId() + strKey;

        return AVWEB.avwUserSetting().get(key);
    },
    set : function(strKey, objValue) {
        var key = this.getUniqueId() + strKey;
        AVWEB.avwUserSetting().set(key, objValue);
    },
    remove : function(strKey) {
        var key = this.getUniqueId() + strKey;
        AVWEB.avwUserSetting().remove(key);
        SessionStorageUtils.remove(strKey);
    },
    clear : function() {
        var localStorageKeys = AVWEB.avwUserSetting().keys();
        for ( var nIndex = 0; nIndex < localStorageKeys.length; nIndex++) {
            var strKey = localStorageKeys[nIndex];

            if ((strKey + "").contains(this.getUniqueId())) {
                AVWEB.avwUserSetting().remove(strKey);
            }
        }
    },
    existKey : function(strKey) {
        var keys = AVWEB.avwUserSetting().keys();
        var findKey = this.getUniqueId() + strKey;
        var isExisted = false;
        if (keys != null && keys != undefined) {
            for ( var nIndex = 0; nIndex < keys.length; nIndex++) {
                if (keys[nIndex] == findKey) {
                    isExisted = true;
                    break;
                }
            }
        }
        return isExisted;
    }
};

/*
 * Operations for session storage [start]
 */

var SessionStorageUtils = {
    login : function() {
        if (AVWEB.avwUserSession()) {
            // Skip this case
        } else {
            AVWEB.avwCreateUserSession();
        }
    },
    get : function(strKey) {
        return AVWEB.avwUserSession().get(strKey);
    },
    set : function(strKey, objValue) {
        AVWEB.avwUserSession().set(strKey, objValue);
    },
    clear : function() {
        if (AVWEB.avwUserSession()) {
            AVWEB.avwUserSession().destroy();
        }
    },
    remove : function(strKey) {
        AVWEB.avwUserSession().set(strKey, null);
    }
};
/*
 * Operations for session storage [ end ]
 */

// =============================================================================================
// Utils for string, date, number [start]
// =============================================================================================
/*
 * Convert date to JP format date time [start]
 */

/*
 * YYYY/MM/DD HH:MM:SS
 */
Date.prototype.jpDateTimeString = function() {
    var strResult = "";
    var strYear = this.getFullYear() + "";
    var strMonth = (this.getMonth() + 1) + "";
    var strDayInMonth = this.getDate() + "";
    var strHour = this.getHours() + "";
    var strMinute = this.getMinutes() + "";
    var strSecond = this.getSeconds() + "";

    strResult += strYear.padLeft("0", 4) + "/" + strMonth.padLeft("0", 2) + "/" + strDayInMonth.padLeft("0", 2);
    strResult += " " + strHour.padLeft("0", 2) + ":" + strMinute.padLeft("0", 2) + ":" + strSecond.padLeft("0", 2);
    return strResult;

};
/*
 * YYYY-MM-DD HH:MM:SS
 */
Date.prototype.jpDateTimeString1 = function() {
    var strResult = "";
    var strYear = this.getFullYear() + "";
    var strMonth = (this.getMonth() + 1) + "";
    var strDayInMonth = this.getDate() + "";
    var strHour = this.getHours() + "";
    var strMinute = this.getMinutes() + "";
    var strSecond = this.getSeconds() + "";

    strResult += strYear.padLeft("0", 4) + "-" + strMonth.padLeft("0", 2) + "-" + strDayInMonth.padLeft("0", 2);
    strResult += " " + strHour.padLeft("0", 2) + ":" + strMinute.padLeft("0", 2) + ":" + strSecond.padLeft("0", 2);
    return strResult;

};
/*
 * yyyy/MM/dd
 */
Date.prototype.jpDateString = function() {
    var strResult = "";
    var strYear = this.getFullYear() + "";
    var strMonth = (this.getMonth() + 1) + "";
    var strDayInMonth = this.getDate() + "";

    strResult += strYear.padLeft("0", 4) + "/" + strMonth.padLeft("0", 2) + "/" + strDayInMonth.padLeft("0", 2);

    return strResult;

};
/*
 * HH:mm:ss
 */
Date.prototype.jpTimeString = function() {
    var strResult = "";
    var strHour = this.getHours() + "";
    var strMinute = this.getMinutes() + "";
    var strSecond = this.getSeconds() + "";

    strResult += " " + strHour.padLeft("0", 2) + ":" + strMinute.padLeft("0", 2) + ":" + strSecond.padLeft("0", 2);
    return strResult;

};
/*
 * HH:mm
 */
Date.prototype.jpShortTimeString = function() {
    var strResult = "";
    var strHour = this.getHours() + "";
    var strMinute = this.getMinutes() + "";
    var strSecond = this.getSeconds() + "";

    strResult += " " + strHour.padLeft("0", 2) + ":" + strMinute.padLeft("0", 2);
    return strResult;

};
/*
 * yyyyMMddHHmmss
 */
Date.prototype.toIdString = function() {
    var strResult = "";
    var strYear = this.getFullYear() + "";
    var strMonth = (this.getMonth() + 1) + "";
    var strDayInMonth = this.getDate() + "";
    var strHour = this.getHours() + "";
    var strMinute = this.getMinutes() + "";
    var strSecond = this.getSeconds() + "";
    var strMilisecond = this.getMilliseconds() + "";

    strResult += strYear.padLeft("0", 4) + strMonth.padLeft("0", 2) + strDayInMonth.padLeft("0", 2);
    strResult += strHour.padLeft("0", 2) + strMinute.padLeft("0", 2) + strSecond.padLeft("0", 2) + strMilisecond.padLeft("0", 3);
    return strResult;
};
// Subtract date to get days
Date.prototype.subtractByDays = function(targetDate) {
    var milis = Math.abs(this - targetDate);
    var days = Math.floor(milis / (60 * 60 * 24 * 1000));
    return days;
};
Date.prototype.addSeconds = function(plusSeconds) {
    var newDate = new Date(this.getTime() + plusSeconds * 1000);
    return newDate;
};

// Subtract date to get days
Date.prototype.subtractBySeconds = function(targetDate) {
    var milis = Math.abs(this - targetDate);
    var days = Math.floor(milis / 1000);
    return days;
};

/*
 * Convert date to JP format date time [ end ]
 */

// trimming space from both side of the string
String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, "");
};

// trimming space from left side of the string
String.prototype.trimLeft = function() {
    return this.replace(/^\s+/, "");
};

// trimming space from right side of the string
String.prototype.trimRight = function() {
    return this.replace(/\s+$/, "");
};

// String: pads left
String.prototype.padLeft = function(padString, length) {
    var str = this;
    while (str.length < length)
        str = padString + str;
    return str;
};

// String: pads right
String.prototype.padRight = function(padString, length) {
    var str = this;
    while (str.length < length)
        str = str + padString;
    return str;
};
// Check contain string
String.prototype.contains = function(string) {

    if (this.indexOf(string) != -1) {
        return true;
    }
    return false;
};

// Number: pads left
Number.prototype.padLeft = function(padString, length) {
    var str = this + "";
    return str.padLeft(padString, length);
};

// Number: pads right
Number.prototype.padRight = function(padString, length) {
    var str = this + "";
    return str.padRight(padString, length);
};
// Clear data of array
Array.prototype.clear = function() {
    this.splice(0, this.length);
};

/*
 * Remove extension of specified name Ex: aaaa.mp3 -> aaa
 */
COMMON.removeExt = function(strName) {
    if (strName) {
        var arrString = strName.split('.');
        var strResult = "";
        if (arrString.length > 1) {
            var nLastIndex = strName.lastIndexOf('.');
            strResult = strName.substr(0, nLastIndex);
        } else {
            strResult = strName;
        }
        return strResult;
    }
    return "";
};

/*
 * String utilities [ end ]
 */

// =============================================================================================
// Utils for string, date, number [ end ]
// =============================================================================================
var ValidationUtil = {

    // 必須: Text
    CheckRequiredForText : function(value) {

        if (value == null || value == '') {
            return false;
        }
        return true;
    },

    // get byte count
    GetByteCount : function(value) {
        var escapedStr = encodeURI(value);
        if (escapedStr.indexOf("%") != -1) {
            var count = escapedStr.split("%").length - 1;
            if (count == 0)
                count++; // perverse case; can't happen with real UTF-8
            var tmp = escapedStr.length - (count * 3);
            count = count + tmp;
        } else {
            count = escapedStr.length;
        }
        return count;
    },

    // 最小文字数
    CheckMinLengthForByte : function(value, len) {
        if (this.GetByteCount(value) < len)
            return false;
        return true;
    },

    // 最大文字数
    CheckMaxLengthForByte : function(value, len) {

        if (this.GetByteCount(value) > len)
            return false;
        return true;
    },

    // 半数字
    IsNumber : function(value) {
        var reg = new RegExp("^[0-9]+$");
        return reg.test(value);
    },

    // 半英字
    IsAlphabet : function(value) {
        var reg = new RegExp("^[a-zA-Z]+$");
        return reg.test(value);
    },

    // 半記号
    IsSymbol : function(value) {
        var reg = new RegExp(
                "\u005b\u005e\u0027\u0060\u0027\u007e\u0027\u0021\u0027\u0040\u0027\u0023\u0027\u0024\u0027\u0025\u0027\u005e\u0027\u0026\u0027\u002a\u0027\u0028\u0027\u0029\u0027\u005f\u0027\u002b\u0027\u003d\u0027\u007b\u0027\u007d\u0027\u007c\u0027\u003a\u0027\u0022\u0027\u003b\u0027\u0027\u0027\u003c\u0027\u003e\u0027\u003f\u0027\u002f\u0027\u002e\u0027\u002c\u005c\u002d\u005b\u005c\u005d\u005c\u005c\u005d");
        return !reg.test(value);
    },

    // メール
    CheckEmailValid : function(value) {
        // Check if string is a valid email address
        var reg = new RegExp("^[0-9a-zA-Z]+@[0-9a-zA-Z]+[\\.]{1}[0-9a-zA-Z]+[\\.]?[0-9a-zA-Z]+$");
        return reg.test(value);
    },
    // Password
    CheckPasswordValid : function(value) {
        // Check if string is a valid email address
        var reg = new RegExp("^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[#+-\\./:_]).{1,47}$");
        return reg.test(value);
    },
    // Alphabet + Nunber + Symbol
    IsAlphabetOrNumberOrSymbol : function(value) {
        // Check if string is alphabet or number or symbol
        var reg = new RegExp(
                "\u005b\u005e\u0061\u002d\u007a\u0041\u002d\u005a\u0030\u002d\u0039\u0027\u0060\u0027\u007e\u0027\u0021\u0027\u0040\u0027\u0023\u0027\u0024\u0027\u0025\u0027\u005e\u0027\u0026\u0027\u002a\u0027\u0028\u0027\u0029\u0027\u005f\u0027\u002b\u0027\u003d\u0027\u007b\u0027\u007d\u0027\u007c\u0027\u003a\u0027\u0022\u0027\u003b\u0027\u0027\u0027\u003c\u0027\u003e\u0027\u003f\u0027\u002f\u0027\u002e\u0027\u002c\u005c\u002d\u005b\u005c\u005d\u005c\u005c\u005d");
        return !reg.test(value);
    },
    // Get the total of types in array
    CheckNumberOfTypeInString : function(value) {
        var list = new Array();
        var c;
        for ( var i = 0; i < value.length; i++) {
            c = value[i];
            for ( var j = i + 1; j < value.length; j++) {
                if (value[j] == c) {
                    value = value.slice(0, j) + value.slice(j + 1, value.len);
                    j = j - 1;
                }
            }
            list[i] = c;
        }
        var count = list.length;
        return count
    },
    // Special character: *
    IsCharacterSpecial : function(value) {
        for ( var i = 0; i < value.length; i++) {
            if (value[i] == '*')
                return true;
        }
        return false;
    },

    // 半記号
    IsPasswordSymbol : function(value) {
        var reg = new RegExp("\u005b\u005e\u0027\u0023\u0027\u002b\u005c\u002d\u0027\u002e\u0027\u002f\u0027\u003a\u0027\u005f\u005d");
        return !reg.test(value);
    },

    // 半記号
    IsPasswordAlphabetOrNumerOrSymbol : function(value) {
        var reg = new RegExp("\u005b\u005e\u0061\u002d\u007a\u0041\u002d\u005a\u0030\u002d\u0039\u0027\u0023\u0027\u002b\u005c\u002d\u0027\u002e\u0027\u002f\u0027\u003a\u0027\u005f\u005d");
        return !reg.test(value);
    }
};

// Get format based64 string to show inline
COMMON.getBase64Image = function(imgSource) {
    return imgSource.replace(/^data:image\/(png|jpg);base64,/, "");
};

// get time wait lockscreen
COMMON.getTimeWaitLockScreen = function() {
    var timeWaitLockScreen = -1;
    if (ClientData.serviceOpt_web_screen_lock() == "Y") {
        var sysSettings = AVWEB.avwSysSetting();
        if (isNaN(ClientData.serviceOpt_web_screen_lock_wait())) {
            timeWaitLockScreen = sysSettings.screenlockTimeDefault * 60000;
        } else {
            var temp = ClientData.serviceOpt_web_screen_lock_wait();
            timeWaitLockScreen = temp * 60000; // time unit is minute
            if (timeWaitLockScreen < 0 || temp % 1 != 0) {
                timeWaitLockScreen = sysSettings.screenlockTimeDefault * 60000;
            } else if (timeWaitLockScreen == 0) { // no lockscreen
                timeWaitLockScreen = -1;
            }
        }
    }
    return timeWaitLockScreen;
};

// Do locking screen after idle time
COMMON.LockScreen = function() {
    if (AVWEB.avwUserSession()) {

        // no lockscreen for user anonymous
        if (COMMON.isAnonymousLogin()) {
            return;
        }
        // getitsでも発動しない
        if (ClientData.isGetitsMode() == true) {
            return;
        }
        // ストリーミングでも発動しない
        if (ClientData.isStreamingMode() == true) {
            return;
        }

        var timeWaitLockScreen = COMMON.getTimeWaitLockScreen();
        if (timeWaitLockScreen > 0) {
            // var message = I18N.i18nText("sysInfoScrLock01");
            SCREENLOCK.screenLock({
                timeout : timeWaitLockScreen,
                html : '<img src="img/1222.png" alt="Screen Lock" /><br />', // +
                                                                                // message,
                unlockFunc : COMMON.unlockFunction,
                errorMessage : I18N.i18nText('msgLoginErrWrong')
            });
        }

    }
};

// The function will be called at the time: loading
$(function() {

    // Init setting values
    if (AVWEB.avwUserSession()) { // Logged

        // View mode default
        if (ClientData.sortOpt_viewMode() == null || ClientData.sortOpt_viewMode() == undefined) {
            ClientData.sortOpt_viewMode(COMMON.Consts.ConstDisplayMode_BookShelf); // Bookshelf
        }

        // 動画、音楽繰り返し
        if (ClientData.userOpt_musicMode() == null || ClientData.userOpt_musicMode() == undefined) {
            if (AVWEB.avwSysSetting().optMusicMode != undefined) {
                ClientData.userOpt_musicMode(AVWEB.avwSysSetting().optMusicMode);
            } else {
                ClientData.userOpt_musicMode(1);
            }
        }
        if (ClientData.userOpt_videoMode() == null || ClientData.userOpt_videoMode() == undefined) {
            ClientData.userOpt_videoMode(1);
        }

        // マーキング(コンテンツを開いた時に表示する)
        if (ClientData.userOpt_makingDsp() == null || ClientData.userOpt_makingDsp() == undefined) {
            ClientData.userOpt_makingDsp(1);
        }

        // 毎回ログアウトの時、バックアップするかどうかは必ず確認する
        if (ClientData.userOpt_bkConfirmFlg() == null || ClientData.userOpt_bkConfirmFlg() == undefined) {
            ClientData.userOpt_bkConfirmFlg(1);
        }

        // タブ・ブラウザ終了・F5時のアラートが表示する
        if (ClientData.userOpt_closeOrRefreshAlert() == null || ClientData.userOpt_closeOrRefreshAlert() == undefined) {
            ClientData.userOpt_closeOrRefreshAlert(1);
        }

        // Set default value for options backup: marking -> checked
        if (ClientData.userOpt_bkMakingFlag() == null || ClientData.userOpt_bkMakingFlag() == undefined) {
            ClientData.userOpt_bkMakingFlag(1);
        }
        // Set default value for options backup: memo -> checked
        if (ClientData.userOpt_bkMemoFlag() == null || ClientData.userOpt_bkMemoFlag() == undefined) {
            ClientData.userOpt_bkMemoFlag(1);
        }
        // Set default value for options backup: bookmark -> checked
        if (ClientData.userOpt_bkShioriFlag() == null || ClientData.userOpt_bkShioriFlag() == undefined) {
            ClientData.userOpt_bkShioriFlag(1);
        }

        // Set default value for logoutMode (backup auto and logout)
        if (ClientData.userOpt_logoutMode() == null || ClientData.userOpt_logoutMode() == undefined) {
            ClientData.userOpt_logoutMode(0);
        }

        // set default page transition No.4

        if (ClientData.userOpt_pageTransition() == null || ClientData.userOpt_logoutMode() == undefined) {
            ClientData.userOpt_pageTransition(0);
        }
        if (ClientData.userOpt_pageTransitionPeriod() == null || ClientData.userOpt_pageTransitionPeriod() == undefined) {
            ClientData.userOpt_pageTransitionPeriod(1);
        }

    }
});

// Unlock the locked screen by inputing password on screen to check
// authentication
COMMON.unlockFunction = function(inputPass) {
    var forceUnlockFunc = arguments[1]; // added secret arguments :
                                        // forceUnlockFunction
    var result = false;
    var params = {
        previousSid : ClientData.userInfo_sid(),
        loginId : ClientData.userInfo_loginId_session(),
        password : inputPass,
        urlpath : ClientData.userInfo_accountPath()
    };

    // Get url to login
    // var sysSettings = AVWEB.avwSysSetting();
    var apiLoginUrl = ClientData.conf_apiLoginUrl(); // sysSettings.apiLoginUrl;
    var errorCode = '';
    AVWEB.avwCmsApiSyncWithUrl(apiLoginUrl, null, 'webClientLogin', 'GET', params, function(data) {
        if (data.result == 'success') {
            ClientData.userInfo_sid(data.sid);
            ClientData.userInfo_sid_local(data.sid);
            // バックアップにも保持
            ClientData.userInfo_sid_local_bak(data.sid);

            result = true;
            // forceUnlockFunc();

            // update status wait lockscreen
            var serviceOptionList = data.serviceOptionList;
            $.each(serviceOptionList, function(i, option) {

                if (option.serviceOptionId == 60) {
                    ClientData.serviceOpt_web_screen_lock(option.value);
                } else if (option.serviceOptionId == 61) {
                    ClientData.serviceOpt_web_screen_lock_wait(option.value);
                }
            });

        }
    }, function(xhr, statusText, errorThrown) {
        if (xhr.responseText && xhr.status != 0) {
            errorCode = JSON.parse(xhr.responseText);
        } else {
            errorCode = {
                errorMessage : "E001"
            };
        }
    });

    if (result == true) {
        // ビューア画面ならイベントのアンロック
        if ($("#viewer").length) {
            // 表示状態か
            if ($('#viewer').is(':visible')) {
                if (window.CONTENTVIEW_EVENTS) {
                    CONTENTVIEW_EVENTS.onUnlock();
                }
            }
        }
    }
    return {
        'result' : result,
        'errorCode' : errorCode,
        'newTimeout' : COMMON.getTimeWaitLockScreen()
    };
};

/*
 * Set starting log for reading content
 */
COMMON.SetStartLog = function(strContentId) {

    var isFound = false;
    var arrContentLogs = ClientData.ContentLogData();
    for ( var nIndex = 0; nIndex < arrContentLogs.length; nIndex++) {
        if (arrContentLogs[nIndex].contentid == strContentId) {

            if (!ClientData.isStreamingMode()) {
                arrContentLogs[nIndex].readingStartDate = new Date();
                arrContentLogs[nIndex].readingEndDate = (new Date()).addSeconds(1);
                // Reading time
                arrContentLogs[nIndex].readingTime = arrContentLogs[nIndex].readingEndDate.subtractBySeconds(arrContentLogs[nIndex].readingStartDate);
            }
            isFound = true;
            break;
        }
    }
    if (isFound == false) {
        var curr = new Date();
        var curr1 = new Date();
        var log = new LogEntity();
        log.readingStartDate = curr;
        log.contentid = strContentId;

        // Set 1 second
        curr1.setSeconds(curr.getSeconds() + 1);
        log.readingEndDate = curr1;
        // Reading time
        log.readingTime = log.readingEndDate.subtractBySeconds(log.readingStartDate);

        // デバイスタイプ判定
        var deviceType = 4;
        if (ClientData.isStreamingMode()) {
            if (CONTENTVIEW_GENERAL.avwUserEnvObj.os == "ipad") {
                deviceType = 1;
            } else if (CONTENTVIEW_GENERAL.avwUserEnvObj.os == "iphone") {
                deviceType = 2;
            } else if (CONTENTVIEW_GENERAL.avwUserEnvObj.os == "android") {
                deviceType = 3;
            }
        }
        log.deviceTypeId = deviceType;

        // GPS
        log.latitude = ClientData.latitude();
        log.longitude = ClientData.longitude();

        // PageLog 1ページ目セット(1レコードは必須)
        if(CONTENTVIEW_GENERAL.contentType == COMMON.ContentTypeKeys.Type_PDF || 
        		CONTENTVIEW_GENERAL.contentType == COMMON.ContentTypeKeys.Type_NoFile || 
        		CONTENTVIEW_GENERAL.contentType == COMMON.ContentTypeKeys.Type_PanoImage){
        	var pageLog = new PageLogEntity();
            pageLog.contentid = strContentId;
            log.pageLogArray.push(pageLog);
        }
        // Add to storage
        arrContentLogs.push(log);
    }

    // Set back to storage
    ClientData.ContentLogData(arrContentLogs);
};

/*
 * Set starting log for reading content
 */
COMMON.SetGpsLog = function(strContentId) {

    var arrContentLogs = ClientData.ContentLogData();

    for ( var nIndex = 0; nIndex < arrContentLogs.length; nIndex++) {
        if (arrContentLogs[nIndex].contentid == strContentId) {
            // GPS
            arrContentLogs[nIndex].latitude = ClientData.latitude();
            arrContentLogs[nIndex].longitude = ClientData.longitude();
            break;
        }
    }
    // Set back to storage
    ClientData.ContentLogData(arrContentLogs);

};

// Set ending log for reading content
COMMON.SetEndLog = function(strContentId) {

    // var log = new LogEntity(); //無駄なのでコメント
    var arrContentLogs = ClientData.ContentLogData();

    for ( var nIndex = 0; nIndex < arrContentLogs.length; nIndex++) {
        if (arrContentLogs[nIndex].contentid == strContentId) {
            // Found content -> set ending date
            var dateEnd = new Date();
            var dateStart = new Date(arrContentLogs[nIndex].readingStartDate);
            arrContentLogs[nIndex].readingEndDate = dateEnd;

            // Calculate to seconds
            arrContentLogs[nIndex].readingTime = dateEnd.subtractBySeconds(dateStart);

        }
    }
    ClientData.ContentLogData(arrContentLogs);
};

// 1ページ分のページ閲覧ログを作成
COMMON.SetPageLog = function(strContentId, strPageNo) {
	
    var arrContentLogs = ClientData.ContentLogData();

    for ( var nIndex = 0; nIndex < arrContentLogs.length; nIndex++) {
        if (arrContentLogs[nIndex].contentid == strContentId) {

            // PageLog追加
            var pageLog = new PageLogEntity();
            pageLog.contentid = strContentId;
            if(CONTENTVIEW_GENERAL.contentType == COMMON.ContentTypeKeys.Type_PanoImage || 
            		CONTENTVIEW_GENERAL.contentType == COMMON.ContentTypeKeys.Type_PanoMovie || 
            		CONTENTVIEW_GENERAL.contentType == COMMON.ContentTypeKeys.Type_ObjectVR){
            	pageLog.pageNo = strPageNo;
            }else{
            	pageLog.pageNo = strPageNo + 1; // 0始まりのページ番号
            }            
            arrContentLogs[nIndex].pageLogArray.push(pageLog);

        }
    }
    ClientData.ContentLogData(arrContentLogs);

    // ストリーミングモード
    if (ClientData.isStreamingMode()) {
        CONTENTVIEW_STREAMING.movePage(strPageNo + 1);
    }

};

// 1アクションのオブジェクトログを作成
COMMON.SetObjectLog = function(strContentId, objectLog) {

    // オーサリングプレビューなら無視
    if (COMMON.isAuthoringPreview()) {
        return;
    }

    var arrContentLogs = ClientData.ContentLogData();

    for ( var nIndex = 0; nIndex < arrContentLogs.length; nIndex++) {
        if (arrContentLogs[nIndex].contentid == strContentId) {
            // ObjectLog追加
            arrContentLogs[nIndex].objectLogArray.push(objectLog);

        }
    }
    ClientData.ContentLogData(arrContentLogs);

};

// 前回の1アクションのオブジェクトログの利用時間を設定
COMMON.SetObjectLogActionTime = function(strContentId, objectId, actionTime) {

    var arrContentLogs = ClientData.ContentLogData();

    for ( var nIndex = 0; nIndex < arrContentLogs.length; nIndex++) {
        if (arrContentLogs[nIndex].contentid == strContentId) {
            if (arrContentLogs[nIndex].objectLogArray.length > 0) {
                if (arrContentLogs[nIndex].objectLogArray[arrContentLogs[nIndex].objectLogArray.length - 1].objectId == objectId) {
                    arrContentLogs[nIndex].objectLogArray[arrContentLogs[nIndex].objectLogArray.length - 1].actionTime = actionTime;
                }
            }
        }
    }
    ClientData.ContentLogData(arrContentLogs);

};

//カスタムログを作成
COMMON.SetCustomLog = function(strContentId, customLog) {

    // オーサリングプレビューなら無視
    if (COMMON.isAuthoringPreview()) {
        return;
    }

    var arrContentLogs = ClientData.ContentLogData();

    for ( var nIndex = 0; nIndex < arrContentLogs.length; nIndex++) {
        if (arrContentLogs[nIndex].contentid == strContentId) {
            // ObjectLog追加
            arrContentLogs[nIndex].customLogArray.push(customLog);
        }
    }
    ClientData.ContentLogData(arrContentLogs);

};

/*
 * Register reading log of content to server by calling api
 */
COMMON.RegisterLog = function(is) {

    // オーサリングプレビューなら無視
    if (COMMON.isAuthoringPreview()) {
        return;
    }

    var arrContentLogs = ClientData.ContentLogData();
    var isError = false;

    for ( var nIndex = 0; nIndex < arrContentLogs.length; nIndex++) {
        var dateEnd = new Date(arrContentLogs[nIndex].readingEndDate);
        var dateStart = new Date(arrContentLogs[nIndex].readingStartDate);

        // ページログJSONデータの作成
        var pageLogJson = "";
        var objectLogJson = "";
        var customLogJson = "";

        // biz/adモードで詳細ログY か getitsでgetits詳細ログY の場合
        if ((ClientData.isGetitsMode() == false && ClientData.serviceOpt_usable_readinglog_object() == 'Y')
                || (ClientData.isGetitsMode() == true && ClientData.serviceOpt_reader_readinglog_object() == 'Y')) {
            var pageLogArray = arrContentLogs[nIndex].pageLogArray;
            // 詳細ログオプションが有効ならページ閲覧ログデータ作成
            if (pageLogArray != null && pageLogArray.length > 0) {

                var lines = [];
                // 終了時間と閲覧時間の設定
                var pageLogStart;
                var pageLogEnd;
                // 2レコード目からチェック
                for ( var nIndex2 = 1; nIndex2 < pageLogArray.length; nIndex2++) {
                    // 一つ前のログの終了日時がnullなら次のレコードの開始日時をセット
                    if (pageLogArray[nIndex2 - 1].readingEndDate == null) {
                        pageLogArray[nIndex2 - 1].readingEndDate = pageLogArray[nIndex2].readingStartDate;
                    }
                    pageLogStart = new Date(pageLogArray[nIndex2 - 1].readingStartDate);
                    pageLogEnd = new Date(pageLogArray[nIndex2 - 1].readingEndDate);
                    // 時間差から閲覧秒セット
                    pageLogArray[nIndex2 - 1].readingTime = pageLogEnd.subtractBySeconds(pageLogStart);

                }
                // 最終レコードの処理
                if (pageLogArray[pageLogArray.length - 1].readingEndDate == null) {
                    pageLogArray[pageLogArray.length - 1].readingEndDate = new Date();
                }
                pageLogStart = new Date(pageLogArray[pageLogArray.length - 1].readingStartDate);
                pageLogEnd = new Date(pageLogArray[pageLogArray.length - 1].readingEndDate);
                // 時間差から閲覧秒セット
                pageLogArray[pageLogArray.length - 1].readingTime = pageLogEnd.subtractBySeconds(pageLogStart);

                // JSONデータ作成
                for ( var nIndex2 = 0; nIndex2 < pageLogArray.length; nIndex2++) {
                    pageLogStart = new Date(pageLogArray[nIndex2].readingStartDate);
                    pageLogEnd = new Date(pageLogArray[nIndex2].readingEndDate);
                    // 3秒以上なら記録する
                    if (pageLogArray[nIndex2].readingTime > 2) {
                        var line = [];
                        line.push(pageLogArray[nIndex2].pageNo);
                        line.push(pageLogStart.jpDateTimeString1());
                        line.push(pageLogEnd.jpDateTimeString1());
                        line.push(pageLogArray[nIndex2].readingTime);
                        lines.push(line);
                        // alert("PageLog Line:" + JSON.stringify( line ) );
                    }
                }
                // alert("PageLog Lines:" + JSON.stringify( lines ) );

                if (lines.length > 0) {
                    pageLogJson = "{ header:[\"pageNo\",\"readingStartDate\",\"readingEndDate\",\"readingTime\"],lines:";
                    pageLogJson = pageLogJson + JSON.stringify(lines);
                    pageLogJson = pageLogJson + "}";
                    // console.log("JSON:" + pageLogJson);
                }
            }

            var objectLogArray = arrContentLogs[nIndex].objectLogArray;
            // 詳細ログオプションが有効ならページ閲覧ログデータ作成
            if (objectLogArray != null && objectLogArray.length > 0) {

                var lines = [];
                var actionDate;

                // JSONデータ作成
                for ( var nIndex2 = 0; nIndex2 < objectLogArray.length; nIndex2++) {
                    actionDate = new Date(objectLogArray[nIndex2].actionDate);
                    var line = [];

                    if (objectLogArray[nIndex2].objectId != null) {
                        line.push(actionDate.jpDateTimeString1());
                        line.push(objectLogArray[nIndex2].pageNo);
                        line.push(objectLogArray[nIndex2].objectId);
                        line.push(objectLogArray[nIndex2].resourceId);
                        line.push(objectLogArray[nIndex2].mediaType);
                        line.push(objectLogArray[nIndex2].actionType);
                        line.push(objectLogArray[nIndex2].actionValue);
                        line.push(objectLogArray[nIndex2].actionTime);
                        line.push(objectLogArray[nIndex2].locationX);
                        line.push(objectLogArray[nIndex2].locationY);
                        line.push(objectLogArray[nIndex2].locationHeight);
                        line.push(objectLogArray[nIndex2].locationWidth);
                        if (objectLogArray[nIndex2].eventType != null) {
                            line.push(objectLogArray[nIndex2].eventType);
                        } else {
                            line.push("");
                        }

                        lines.push(line);
                        // console.log("ObjectLog Line:" + JSON.stringify( line
                        // ) );

                    }
                }
                // console.log("ObjectLog Lines:" + JSON.stringify( lines ) );

                if (lines.length > 0) {
                    objectLogJson = "{ header:[\"actionDate\",\"pageNo\",\"objectId\",\"resourceId\",\"mediaType\",\"actionType\",\"actionValue\",\"actionTime\",\"locationX\",\"locationY\",\"locationHeight\",\"locationWidth\",\"eventType\"],";
                    objectLogJson = objectLogJson + "lines:";
                    objectLogJson = objectLogJson + JSON.stringify(lines);
                    objectLogJson = objectLogJson + "}";
                    // console.log("JSON:" + objectLogJson);
                }

            }

        }

        //カスタムログが有効な場合
        if(ClientData.serviceOpt_html_custom_log() == 'Y'){

            var customLogArray = arrContentLogs[nIndex].customLogArray;
            // カスタムログオプションが有効ならログデータ作成
            if (customLogArray != null && customLogArray.length > 0) {

                var lines = [];
                var actionDate;

                // JSONデータ作成
                for ( var nIndex2 = 0; nIndex2 < customLogArray.length; nIndex2++) {
                    actionDate = new Date(customLogArray[nIndex2].actionDate);
                    var line = [];

                    line.push(actionDate.jpDateTimeString1());

                    if (customLogArray[nIndex2].param1 != null) {
                        line.push(customLogArray[nIndex2].param1);
                    } else {
                        line.push("");
                    }

                    if (customLogArray[nIndex2].param2 != null) {
                        line.push(customLogArray[nIndex2].param2);
                    } else {
                        line.push("");
                    }

                    if (customLogArray[nIndex2].param3 != null) {
                        line.push(customLogArray[nIndex2].param3);
                    } else {
                        line.push("");
                    }

                    if (customLogArray[nIndex2].param4 != null) {
                        line.push(customLogArray[nIndex2].param4);
                    } else {
                        line.push("");
                    }

                    if (customLogArray[nIndex2].param5 != null) {
                        line.push(customLogArray[nIndex2].param5);
                    } else {
                        line.push("");
                    }

                    lines.push(line);

                }

                if (lines.length > 0) {
                    customLogJson = "{ header:[\"actionDate\",\"param1\",\"param2\",\"param3\",\"param4\",\"param5\"],";
                    customLogJson = customLogJson + "lines:";
                    customLogJson = customLogJson + JSON.stringify(lines);
                    customLogJson = customLogJson + "}";
                }

            }
        }

        var params = {
            sid : ClientData.userInfo_sid(),
            contentId : arrContentLogs[nIndex].contentid,
            readingStartDate : dateStart.jpDateTimeString1(),
            readingEndDate : dateEnd.jpDateTimeString1(),
            readingTime : arrContentLogs[nIndex].readingTime,
            deviceTypeId : arrContentLogs[nIndex].deviceTypeId,
            latitude : arrContentLogs[nIndex].latitude,
            longitude : arrContentLogs[nIndex].longitude,
            pageLog : pageLogJson,
            objectLog : objectLogJson,
            customLog : customLogJson,
            isStreaming : ClientData.isStreamingMode()
        };
        // API送信結果判定
        arrContentLogs[nIndex].sendResult = false;
        AVWEB.avwCmsApiSync(ClientData.userInfo_accountPath(), "contentReadingLog", 'post', params, function(data) {
            if (data.result == 'success') {
                // 成功したログは削除
                arrContentLogs[nIndex].sendResult = true;
            }
        }, function(xhr, b, c) {
            if (xhr.status != 0) {
                isError = true;
                var xhrData = JSON.parse(xhr.responseText);
                if (xhrData && xhrData.httpStatus == 500) {
                    // なんらか不正なデータなので送信成功にして捨てる
                    arrContentLogs[nIndex].sendResult = true;
                }
            } else {
                AVWEB.showSystemError();
            }
        });
    }
    ;
    if (AVWEB.avwHasError()) {
        return;
    }
    // Clear logs in local
    if (!isError) {
        ClientData.ContentLogData([]);
    } else {
        // 送信成功したログは削除
        var arrTarget = [];
        for ( var nIndex = 0; nIndex < arrContentLogs.length; nIndex++) {
            if (arrContentLogs[nIndex].sendResult == false) {
                arrTarget.push(arrContentLogs[nIndex]);
            }
        }
        ClientData.ContentLogData(arrTarget);
    }
};

// Disable specified objects
COMMON.disable = function() {
    for ( var nIndex = 0; nIndex < arguments.length; nIndex++) {
        if ($(arguments[nIndex])) {
            $(arguments[nIndex]).attr('disabled', 'disabled');
        }
    }
};
// Enable specified objects
COMMON.enable = function() {
    for ( var nIndex = 0; nIndex < arguments.length; nIndex++) {
        if ($(arguments[nIndex])) {
            $(arguments[nIndex]).removeAttr('disabled');
        }
    }
};

// Stop waiting screen
COMMON.StopWaitProcess = function() {
    $('#avw-sys-modal-wait').hide();
};

// Show waiting screen
COMMON.WaitProcess = function() {
    if (document.getElementById('avw-sys-modal-wait')) {
        $('#avw-sys-modal-wait').show();
    } else {
        var tags = '<div id="avw-sys-modal-wait"><img id="avw-sys-modal-wait-img" src="img/data_loading.gif"/></div>';
        $('body').prepend(tags);
        $('#avw-sys-modal-wait').css({
            'opacity' : 0.7,
            'position' : 'fixed',
            'top' : '0',
            'left' : '0',
            'width' : $(window).width(),
            'height' : $(window).height(),
            'background' : '#999',
            'z-index' : 100
        });

        $("#avw-sys-modal-wait-img").center();

        // resize error page
        $(window).resize(function() {
            $('#avw-sys-modal-wait').css({
                'width' : $(window).width(),
                'height' : $(window).height()
            });
            $("#avw-sys-modal-wait-img").center();
        });
    }
};

// Hide the locking layout
COMMON.unlockLayout = function() {
    $('#avw-sys-modal').hide();
};

// Show the locking layout
COMMON.lockLayout = function() {
    if (document.getElementById('avw-sys-modal')) {
        $('#avw-sys-modal').show();
    } else {
        var tags = '<div id="avw-sys-modal"></div>';
        $('body').prepend(tags);
        $('#avw-sys-modal').css({
            'opacity' : 0.7,
            'position' : 'fixed',
            'top' : '0',
            'left' : '0',
            'width' : $(window).width(),
            'height' : $(window).height(),
            'background' : '#999',
            'z-index' : 100
        });
        // resize error page
        $(window).resize(function() {
            $('#avw-sys-modal').css({
                'width' : $(window).width(),
                'height' : $(window).height()
            });
        });
    }
};

// Function to set position of object to center
jQuery.fn.center = function() {
    this.css("position", "fixed");

    this.css("top", (($(window).height() - this.height()) / 2) + "px");
    this.css("left", (($(window).width() - this.width()) / 2) + "px");

    return this;
};
// Function to set position of object to top
jQuery.fn.top = function() {
    this.css("position", "absolute");
    this.css("top", ($(window).scrollTop() + 1) + "px");

    return this;
};
// Function to set position of object to right
jQuery.fn.right = function() {
    this.css("position", "absolute");
    this.css("left", ($(window).width() - this.width() - 5) + $(window).scrollLeft() + "px");

    return this;
};
// Function to set position of object to bottom
jQuery.fn.bottom = function() {
    this.css("position", "absolute");
    this.css("top", ($(window).height() - this.height() - 5) + $(window).scrollTop() + "px");

    return this;
};
// Replace all text by new text
String.prototype.replaceAll = function(oldText, newText) {
    var strResult = this;
    while (strResult.indexOf(oldText) >= 0) {
        strResult = strResult.replace(oldText, newText);
    }
    return strResult;
};

/*
 * Get string by number of lines
 */
COMMON.getLines = function(source, number) {
    var result = "";
    var arrSource = new Array();
    arrSource = source.split('\n');
    for ( var i = 0; i < number; i++) {
        if (i >= arrSource.length) {
            break;
        }
        // count \n character occured
        if (i < (source.split('\n').length) && i != 0) {
            result += "\n";
        }
        result += arrSource[i];
    }
    return result;
};

/*
 * Convert yyyy-MM-dd hh:mm:ss.f to Date
 */
COMMON.convertToDate = function(input) {
    var dateResult;
    var nYear = 0;
    var nMonth = 0;
    var nDay = 0;
    var nHour = 0;
    var nMinute = 0;
    var nSecond = 0;
    var strTemp = input;
    var nIndex;

    dateResult = new Date();
    try {

        // Get year
        nIndex = strTemp.indexOf("-");
        nYear = Number(strTemp.substr(0, nIndex));
        // Get month
        strTemp = strTemp.substr(nIndex + 1);
        nIndex = strTemp.indexOf("-");
        nMonth = Number(strTemp.substr(0, nIndex));
        // Get day
        strTemp = strTemp.substr(nIndex + 1);
        nIndex = strTemp.indexOf(" ");
        nDay = Number(strTemp.substr(0, nIndex));
        // Get hour
        strTemp = strTemp.substr(nIndex + 1);
        nIndex = strTemp.indexOf(":");
        nHour = Number(strTemp.substr(0, nIndex));
        // Get minute
        strTemp = strTemp.substr(nIndex + 1);
        nIndex = strTemp.indexOf(":");
        nMinute = Number(strTemp.substr(0, nIndex));
        // Get second
        strTemp = strTemp.substr(nIndex + 1);
        nIndex = strTemp.indexOf(".");
        nSecond = Number(strTemp.substr(0, nIndex));

        dateResult.setYear(nYear);
        dateResult.setMonth(nMonth - 1);
        dateResult.setDate(nDay);
        dateResult.setHours(nHour);
        dateResult.setMinutes(nMinute);
        dateResult.setSeconds(nSecond);

    } catch (e) {
        //
    }

    return dateResult;

};

/*
 * Escape html
 */
COMMON.htmlEncode = function(value) {
    return jQuery('<div/>').text(value || '').html();
};

/*
 * Check if browser is on touch device
 */
COMMON.isTouchDevice = function() {
    var is_touch_device = 'ontouchstart' in document.documentElement;
    if (is_touch_device) {
        return true;
    }
    return false;
};

/*
 * Get total bytes of jp chars
 */
COMMON.getBytes = function(value) {
    var escapedStr = encodeURI(value);

    var count;
    if (escapedStr.indexOf("%") != -1) {
        count = escapedStr.split("%").length - 1;
        if (count == 0)
            count++; // perverse case; can't happen with real UTF-8
        var tmp = escapedStr.length - (count * 3);

        count = (count / 3) * 2 + tmp;

    } else {
        count = escapedStr.length
    }
    return count;
};
/*
 * Truncate by bytes
 */
COMMON.truncateByBytes = function(value, byteCount) {
    var strResult = "";
    for ( var nIndex = 0; nIndex < value.length; nIndex++) {
        if (COMMON.getBytes(strResult + value[nIndex]) <= byteCount) {
            strResult += value[nIndex];
        } else {
            break;
        }
    }
    return strResult;
};

COMMON.truncate = function(strInput, length) {
    if (strInput.length <= length) {
        return strInput;
    } else {
        return strInput.substring(0, length) + "...";
    }
};

COMMON.ToogleLogoutNortice = function() {
    if (COMMON.isAnonymousLogin()) {
        return;
    }
    var isShow = false;
    if (ClientData.userOpt_closeOrRefreshAlert() == 1) { // Checked
        isShow = true;
    }

    if (isShow == false) {
        window.onbeforeunload = null;
    } else {
        AVWEB.avwSetLogoutNortice();
    }
};

/*
 * Get UTC Time ( GMT + 0 )
 */
COMMON.getUtcTime = function() {
    var curTime = new Date();

    /* get time zone */
    var timeZone = curTime.getTimezoneOffset();

    var resultTime = new Date(curTime.getTime() + (timeZone * 60000));

    return resultTime;

};

// Convert UTC time to Date object
COMMON.convertUtcToDate = function(utcTime) {
    return new Date(Number(utcTime));
};

// Get UUID version 4
COMMON.getUUID = function() {
    return uuid.v4();
};

/*
 * Check is anonymous user login
 */
COMMON.isAnonymousLogin = function() {
    return AVWEB.avwSysSetting().anonymousLoginFlg;
};

/* Check if current browser is IE9 */
COMMON.isIE9 = function() {
    var ua = window.navigator.userAgent.toLowerCase();

    if (/msie 9.0/.test(ua)) {
        return true;
    }
    return false;
};

/* Check if current browser is IE10 */
COMMON.isIE10 = function() {
    var ua = window.navigator.userAgent.toLowerCase();
    if (/msie 10.0/.test(ua)) {
        return true;
    }
    return false;
};

// Check content type is pdf content
COMMON.isPdfContent = function(contentType) {
    if (!(contentType == COMMON.ContentTypeKeys.Type_PDF)) {
        return false;
    } else {
        return true;
    }
};

// set resource version data
COMMON.setResourceVersionData = function(conId) {
    var tempResourceArr;
    var tempResource;
    // check if insert new or edit
    var flag = false;

    // if (ClientData.ResourceVersion().length <= 0 ||
    // ClientData.ResourceVersion() == null || ClientData.ResourceVersion() ==
    // 'undefined') {
    // tempResourceArr = [];
    // }
    // else {
    // tempResourceArr = ClientData.ResourceVersion();
    // }
    tempResourceArr = ClientData.ResourceVersion();

    for ( var i = 0; i < COMMON.resourceVersionArr.length; i++) {
        if (COMMON.resourceVersionArr[i].contentid == conId) {
            tempResource = COMMON.resourceVersionArr[i].resourceversion;
            break;
        }
    }

    if (tempResourceArr.length > 0) {
        for ( var j = 0; j < tempResourceArr.length; j++) {
            if (tempResourceArr[j].contentid == conId) {
                tempResourceArr[j].resourceversion = tempResource;
                flag = true;
                break;
            }
            // else {
            // flag = false;
            // }
        }

        if (!flag) {
            tempResourceArr.push({
                contentid : conId,
                resourceversion : tempResource
            });
        }

    } else {
        tempResourceArr.push({
            contentid : conId,
            resourceversion : tempResource
        });
    }

    ClientData.ResourceVersion(tempResourceArr);
};

// set meta Version Data
COMMON.setMetaVersionData = function(conId) {

    var tempMetaArr;
    var tempMeta;
    // check if insert new or edit
    var flag = false;

    // if (ClientData.MetaVersion().length <= 0 || ClientData.MetaVersion() ==
    // null || ClientData.MetaVersion() == 'undefined') {
    // tempMetaArr = [];
    // }
    // else {
    // tempMetaArr = ClientData.MetaVersion();
    // }
    tempMetaArr = ClientData.MetaVersion();

    for ( var i = 0; i < COMMON.metaVersionArr.length; i++) {
        if (COMMON.metaVersionArr[i].contentid == conId) {
            tempMeta = COMMON.metaVersionArr[i].metaversion;
            break;
        }
    }

    if (tempMetaArr.length > 0) {
        for ( var j = 0; j < tempMetaArr.length; j++) {
            if (tempMetaArr[j].contentid == conId) {
                tempMetaArr[j].metaversion = tempMeta;
                flag = true;
                break;
            }
            // else {
            // flag = false;
            // }
        }

        if (!flag) {
            tempMetaArr.push({
                contentid : conId,
                metaversion : tempMeta
            });
        }

    } else {
        tempMetaArr.push({
            contentid : conId,
            metaversion : tempMeta
        });
    }

    ClientData.MetaVersion(tempMetaArr);
};

// convert delivery Date
COMMON.formatDeliveryDate = function(date) {

    var day = date.date;
    var month = eval(date.month) + 1;
    var year = eval(date.year) + 1900;

    var outputDate = year + '/' + (('' + month).length < 2 ? '0' : '') + month + '/' + (('' + day).length < 2 ? '0' : '') + day;

    return outputDate;
};

// convert view Date
COMMON.formatNormalDate = function(day, month, year) {
    var outputDate = year + '/' + (('' + month).length < 2 ? '0' : '') + month + '/' + (('' + day).length < 2 ? '0' : '') + day;

    return outputDate;
};

// format Image string
COMMON.formatStringBase64 = function(imgStr) {

    var outputString = 'data:image/jpeg;base64,' + imgStr;

    return outputString;
};

// Get param url
COMMON.getUrlParam = function(name, url) {

    if (!url) {
        url = window.location.href;
    }

    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(url);
    if (results == null) {
        return "";
    } else {
        // alert("results[0]:" + results[0]);
        // alert("results[1]:" + results[1]);
        return results[1];
    }
};

// オーサリングプレビューモードか判定
COMMON.isAuthoringPreview = function() {

    if (AVWEB.avwSysSetting().previewFlg != undefined) {
        return AVWEB.avwSysSetting().previewFlg;
    } else {
        return false;
    }

};