//******************************************************************************
// initializing global variable
//******************************************************************************
OnSystemLoad.GET.EVENT
{
	dialyexp           = IARRAY
	tmp.var.mikireflag = 0

	// 初期化
	if !ISVAR('username')       { username       = 'ユーザーさん' }
	if !ISVAR('aitalkinterval') { aitalkinterval = 180 }
	if !ISVAR('DialyFlag')      { DialyFlag      = 0 }	// 日記を書くか書かないか
	if !ISVAR('flg.LastDialy')  { flg.LastDialy  = 0 }	// イベント日記用日付記憶変数
	if !ISVAR('flg.LastBoot')   { flg.LastBoot   = 0 }	// イベントトーク用日付記憶変数
}
OnSystemUnload.GET.EVENT
{
	ERASEVAR('dialyexp')
	ERASEVAR('dialyexpss')
	ERASEVAR('tmp.var.mikireflag')

	ERASEVAR('tmp.var.BalloonSelect.Page')

	// 使用しなくなった変数
	ERASEVAR('SHIORI3FW.Status')
	ERASEVAR('SHIORI3FW.ValueexList')
	ERASEVAR('E_CHARSET')
	ERASEVAR('communicateratio')
	ERASEVAR('mikireflag')
	ERASEVAR('sakuraname')
	ERASEVAR('sakurahwnd')
	ERASEVAR('kerohwnd')
	ERASEVAR('sakurablnhwnd')
	ERASEVAR('keroblnhwnd')
	ERASEVAR('stroke')
	ERASEVAR('teachusername')
	ERASEVAR('pectoral')
	ERASEVAR('DayFlag')

	// 不要なファイル
	void FDEL('saori\stamp.png')
	void FDEL('var\stamp.png')
	void FDEL('var\post.cgi')
	void FDEL('var\aska_post.cgi')
	void FDEL('var\tmp.txt')
	void FDEL('screenshot\screen.png')
	void FDEL('var\screen.png')
	void FDEL('var\thumbnail.png')
}

//******************************************************************************
// URLdrop event
//******************************************************************************
OnURLDropping         { '\0\s[0]\_q' + reference[0] + '.\_q\e' }
OnURLDropped          { '\0\s[0]\_q' + reference[0] + '.\_q\e' }

//******************************************************************************
// file making event
//******************************************************************************
OnUpdatedataCreating  { '\0\s[0]\_qCreating updates2.dau\_q\e' }
OnUpdatedataCreated   { '\0\s[0]\_qComplete.\_q\e' }
OnNarCreating         { '\0\s[0]\_qCreateing NAR\_q\e' }
OnNarCreated          { "\0\s[0]\_q「%(reference[0])」／「%(reference[1])」 created so far.\_q\e" }

//******************************************************************************
// update event
//******************************************************************************
OnUpdateBegin
{
	'\0\s[5]もっとお勉強して、新しい私に！\_w[500]\e'
}
OnUpdateReady
{
	_n = 0
	if sender == 'embryo' {
		_n = reference[0] + 1
	} else {
		_n = reference[0]
	}
	"\0\s[0]%(_n)個のファイルを更新しますね。\_w[500]\e"
}
OnUpdateComplete
{
	if reference[0] == 'none' {
		"\0\s[4]更新がありませんでした……。\e"
	} else {
		"\0\s[0]更新終わりました。\_w[1000]/
			\n\s[1]これでもっと%(username)の\nお役に立てるといいのですが……。\e"
	}
}
OnUpdateFailure
{
	if reference[0] == 'timeout' {
		"\0\s[3]時間切れです……。\e"
	} elseif reference[0] == 'md5 miss' {
		"\0\s[4]MD5値が不一致でした……。\e"
	} else {
		"\0\s[4]更新、失敗しちゃいました……。\e"
	}
}
OnUpdateOtherBegin
{
	'\0\s[6]新しい' + reference[3] + 'を探してみます…。\_w[500]\e'
}
OnUpdateOtherReady
{
	_n = 0
	if sender == 'embryo' {
		_n = reference[0] + 1
	} else {
		_n = reference[0]
	}
	"\0\s[0]%(_n)個のファイルが更新されていますね。\_w[500]\e"
}
OnUpdateOtherComplete
{
	if reference[0] == 'none' {
		"\0\s[0]更新はないみたいですね。\e"
	} else {
		"\0\s[0]更新終わりました。\_w[1000]/
			\n\s[1]新しい%(reference[3])、\_w[500]気に入って頂けますか……？\e"
	}
}
OnUpdateOtherFailure
{
	if reference[0] == 'timeout' {
		"\0\s[3]時間切れです……。\e"
	} elseif reference[0] == 'md5 miss' {
		"\0\s[4]MD5値が不一致でした……。\e"
	} else {
		"\0\s[4]更新、失敗しちゃいました……。\e"
	}
}
/*
OnUpdate.OnDownloadBegin      { '\0\s[0]\_q' + reference[0] + '\_q\e' }
OnUpdate.OnMD5CompareBegin    { '\0\s[0]\_qMD5Compare\_q\e' }
OnUpdate.OnMD5CompareComplete { '\0\s[0]\_qOK\_q\e' }
OnUpdate.OnMD5CompareFailure  { '\0\s[0]\_qFailure\_q\e' }
OnUpdateOther.OnDownloadBegin      { '\0\s[0]\_q' + reference[0] + '\_q\e' }
OnUpdateOther.OnMD5CompareBegin    { '\0\s[0]\_qMD5Compare\_q\e' }
OnUpdateOther.OnMD5CompareComplete { '\0\s[0]\_qOK\_q\e' }
OnUpdateOther.OnMD5CompareFailure  { '\0\s[0]\_qFailure\_q\e' }
*/

//******************************************************************************
// mail check event
//******************************************************************************
OnBIFFBegin   { '\0\s[0]\_qBIFF begin.\_q\e' }
OnBIFFFailure { '\0\s[0]\_q' + reference[0] + '.\_q\e' }
OnBIFFComplete
{
	_ret = ''
	if reference[0] == 0 {
		_ret += 'Not new.'
	} elseif reference[0] > 0 {
		_ret += reference[0] + ' mail come to your mailbox.\n\n[half]'
		_ret += AYATEMPLATE.MenuItem('open mailer','OpenMailer' ,0)
		_ret += AYATEMPLATE.MenuItem('cancel'     ,'Menu_CANCEL',100)
	}
	'\0\s[0]\_q' + _ret + '\_q\e'
}
sys.cs.OpenMailer
{
	_ret = ''
	if (sender == 'SSP') || (sender == 'embryo') {
		_ret += '\![open,mailer]'
	} else {
		if basewarenameex == 'SSP' {
			_ret += '\f[color,255,0,0]\f[height,+24]!!! Warning !!!\f[height,default]\f[color,default]'
		} else {
			_ret += '!!! Warning !!!'
		}
		_ret += "\n\n\n%(sender) tried to open your mailer."
	}
	'\0\s[0]\_q' + _ret + '\_q\e'
}

//******************************************************************************
// headlinesense event
//******************************************************************************
OnHeadlinesenseBegin    { '\0\s[0]\_q' + reference[0] + ' Headline...\_q\e' }
OnHeadlinesenseComplete { '\0\s[0]\_q' + reference[0] + '\_q\e' }
OnHeadlinesenseFailure  { '\0\s[0]\_qFailure. ' + reference[0] + '.\_q\e' }
OnHeadlinesense.OnFind
{
	_ret = ''
	if RE_MATCH(sender,'SSP|embryo|crow|NiseRingo|ninix-aya') {
		_ret += "\_q■%(reference[0])\_q\n\n[half]\_n"
		_ret += SHIORI3FW.EscapeDangerousTags(reference[3]) + '\_n\n[half]\_q'
		if (reference[2] == 'First') || (reference[2] == 'Next') {
			_ret += sys.fnc.marker() + "\q[%(AYATEMPLATE.MakeJustText('next page',46)),]\n"
		}
		_ret += AYATEMPLATE.MenuItem('open browser',reference[1] ,0)
		_ret += AYATEMPLATE.MenuItem('cancel'      ,'Menu_CANCEL',100)
		_ret = '\0\b[2]\s[0]' + _ret + '\e'
	} else {
		_ret += sys.fnc.ShowWarningBrowsing(sender,reference[1])
		_ret = '\0\s[0]\_q' + _ret + '\_q\e'
	}
	_ret
}
OnRSSBegin   { '\0\s[0]\_q' + reference[0] + ' RSS...\_q\e' }
OnRSSFailure { '\0\s[0]\_qFailure. ' + reference[0] + '.\_q\e' }
OnRSSComplete
{
	_ret = ''
	if RE_MATCH(sender,'SSP|embryo|crow|NiseRingo|ninix-aya') {
		_ret += "■%(reference[0])\n\n[half]\_n"
		for _i = 2; _i < ARRAYSIZE(reference); _i++ {
			if _i >= 22 {
				_ret += 'and more...\n'
				break
			}
			_r     = SPLIT(reference[_i],CHR(1))
			_title = _r[0]; if RE_SEARCH(_title,'^beefriends: ') { _title = REPLACE(_title,'beefriends: ','') }
			_url   = _r[1]
			_date  = _r[2]
			if RE_SEARCH(_title,'(^AD:)|(^PR:)|(\[ *PR *\])') {
				continue
			}
			_content = _title
			if STRLEN(_date) {
				_date = SPLIT(_date,',')
				_content = STRFORM("[$02d/$02d]",TOINT(_date[1]),TOINT(_date[2])) + _content
			}
			_ret += "\_a[%(_url)]%(SHIORI3FW.EscapeAllTags(AYATEMPLATE.MakeJustText(_content,46)))\_a\n"
		}
		_ret += '\_n\n[half]'
		_ret += AYATEMPLATE.MenuItem('open browser',reference[1] ,0)
		_ret += AYATEMPLATE.MenuItem('cancel'      ,'Menu_CANCEL',100)
		_ret = '\![set,choicetimeout,-1]\![set,balloontimeout,-1]\0\s[0]\b[2]\_q' + _ret + '\_q\e'
	} else {
		_ret += sys.fnc.ShowWarningBrowsing(sender,reference[1])
		_ret = '\0\s[0]\_q' + _ret + '\_q\e'
	}
	_ret
}
sys.fnc.ShowWarningBrowsing
{
	_sender = _argv[0]
	_url    = _argv[1]
	_ret    = ''
	if basewarenameex == 'SSP' {
		_ret += '\f[color,255,0,0]\f[height,+24]!!! Warning !!!\f[height,default]\f[color,default]'
	} else {
		_ret += '!!! Warning !!!'
	}
	_ret += "\n\n\n%(_sender) tried to open your browser\n/
		and to lead you to\n/
		%(CHR(0x22))%(_url)%(CHR(0x22)) ."
	_ret
}

//******************************************************************************
// SNTP event
//******************************************************************************
OnSNTPBegin   { '\0\s[0]\_qSNTPBegin.\_q\e' }
OnSNTPFailure { '\0\s[0]\_qFailure.\_q\e' }
OnSNTPCompare
{
	"\0\s[0]\_q/
	before %(AYATEMPLATE.SNTPCompare_StrForm(reference[2]))\n/
	after  %(AYATEMPLATE.SNTPCompare_StrForm(reference[1]))\n\n/
	\6Complete.\_q\e"
}
AYATEMPLATE.SNTPCompare_StrForm
{
	_txt = SPLIT(_argv[0],',')
	STRFORM("$04d/$02d/$02d $02d:$02d:$02d"/
		,TOINT(_txt[0])/
		,TOINT(_txt[1])/
		,TOINT(_txt[2])/
		,TOINT(_txt[3])/
		,TOINT(_txt[4])/
		,TOINT(_txt[5])/
	)
}

//******************************************************************************
// install event
//******************************************************************************
OnInstallBegin   { '\0\s[6]\_qインストールしています……。\_q\e' }
OnInstallFailure { '\0\s[4]インストールに失敗しました……。\e' }
OnInstallComplete
{
	_id = SPLIT(reference[0],' with',2)[0] //hogehoge with hemohemo
	_ret = ''
	_ret += "「%(reference[1])」/「%(reference[0])」\nインストール完了しました。\n\n"
	if RE_MATCH(_id,'ghost|shell|balloon') {
		if basewarenameex == 'SSP' {
			_ret += AYATEMPLATE.MenuItem('change','GOYAUTIL.InstallChange','lastinstalled',_id,0)
		} else {
			_ret += AYATEMPLATE.MenuItem('change','GOYAUTIL.InstallChange',reference[1],_id,0)
		}
		if (basewarenameex == 'SSP') && (_id == 'ghost') {
			_ret += AYATEMPLATE.MenuItem('call','GOYAUTIL.InstallCall','lastinstalled',100)
		}
		_ret += AYATEMPLATE.MenuItem('hold','Menu_CANCEL',100)
	}
	'\0\s[0]\_q' + _ret + '\_q\e'
}
OnInstallRefuse
{
	tmp.var.sakuraname = reference[0]
	if sender == 'SSP' {
		"\![get,property,OnInstallRefuseChange/
			,ghostlist(%(tmp.var.sakuraname)).sakuraname/
			,ghostlist(%(tmp.var.sakuraname)).name]\e"
	} else {
		"\![raise,OnInstallRefuseChange,%(tmp.var.sakuraname)]\e"
	}
}
OnInstallRefuseChange
{
	_sakuraname = reference[0]
	_name       = reference[1]
	_ret = ''
	_ret += "これは、%(tmp.var.sakuraname)さん用みたいですね。"
	if !(ASEARCH(tmp.var.sakuraname,ghostexlist) >= 0) {
		if (basewarenameex == 'SSP') && (_sakuraname != '') {
			_ret += AYATEMPLATE.MenuItem('change','GOYAUTIL.InstallChange',_name,'ghost',200)
			_ret += AYATEMPLATE.MenuItem('call'  ,'GOYAUTIL.InstallCall'  ,_name,100)
			_ret += AYATEMPLATE.MenuItem('hold'  ,'Menu_CANCEL',100)
		} elseif basewarenameex != 'SSP' {
			_ret += AYATEMPLATE.MenuItem('change','GOYAUTIL.InstallChange',_name,'ghost',200)
			_ret += AYATEMPLATE.MenuItem('hold'  ,'Menu_CANCEL',100)
		}
	}
	ERASEVAR('tmp.var.sakuraname')
	'\0\s[0]\_q' + _ret + '\_q\e'
}
sys.csex.GOYAUTIL.InstallChange
{
	"\![change,%(reference[1]),%(reference[0])]"
}
sys.csex.GOYAUTIL.InstallCall
{
	"\![call,ghost,%(reference[0])]"
}

//******************************************************************************
// UI event
//******************************************************************************
OnUserInput
{
	if ISFUNC('sys.input.' + reference[0]) {
		EVAL('sys.input.' + reference[0])
	}
}
OnKeyPress
{
	if ISFUNC('sys.key.' + reference[0]) {
		EVAL('sys.key.' + reference[0])
	}
}
sys.key.m
{
	sys.fnc.OpenMenu()
}
sys.key.r
{
	if basewarenameex == 'SSP' {
		'\![reload,shiori]\0\s[0]リロードしました。\e'
	}
}
sys.key.s
{
	if basewarenameex == 'SSP' {
		sys.fnc.makescreenshotfile()
	}
}
sys.key.t
{
	OnAiTalk()
}
OnChoiceSelect
{
	_id = reference[0]
	if ISFUNC('sys.cs.' + _id) {
		EVAL('sys.cs.' + _id)
	} elseif sender == 'crow' {
		if ISFUNC('sys.csex.' + _id) {
			reference[0] = IARRAY
			EVAL('sys.csex.' + _id)
		}
	} elseif basewarenameex != 'SSP' {
		reference = IARRAY
		foreach SPLIT(_id,CHR(0x1)); _ref {
			reference ,= TOAUTO(_ref)
		}
		_id = reference[0]
		if ISFUNC('sys.csex.' + _id) {
			reference[0] = IARRAY
			EVAL('sys.csex.' + _id)
		}
	}
}
OnChoiceSelectEx
{
	_id = reference[1]
	if ISFUNC('sys.csex.' + _id) {
		reference[0,1] = IARRAY
		EVAL('sys.csex.' + _id)
	}
}
OnChoiceTimeout
{
	if basewarenameex == 'SSP' {
		'\0\s[0]\e'
	} else {
		'\0\s[0]\b[-1]\e'
	}
}
OnAnchorSelect
{
	if RE_MATCH(reference[0], '^https?://.+$') {
		if basewarenameex == 'SSP' {
			'\C'
		}
		--
		'\0\s[0]\_q' + sys.fnc.OpenBrowserSafe(reference[0]) + '\_q\e'
	} else {
		if ISFUNC('sys.as.' + reference[0]) {
			EVAL('sys.as.' + reference[0])
		}
	}
}
sys.fnc.OpenBrowserSafe
{
	_url = AYATEMPLATE.EscapeText(_argv[0])
	_ret = ''
	if RE_MATCH(sender,'SSP|embryo|crow|NiseRingo|ninix-aya') {
		_ret += "\![open,browser,%(_url)]"
	} else {
		_ret += '\f[color,255,0,0]\f[height,+24]!!! Warning !!!\f[height,default]\f[color,default]'
		_ret += "\n\n\n%(sender) tried to open your browser\n/
			and to lead you to\n/
			%(_url) ."
	}
	_ret
}
OnTrayBalloonClick
{
	_title = reference[0]
	if ISFUNC('sys.tbc.' + _title) {
		EVAL('sys.tbc.' + _title)
	}
}
//******************************************************************************
// file drop event
//******************************************************************************
OnFileDrop2
{
	if ASEARCH('PlaylistMaker',installedplugin_name) >= 0 {
		sys.fnc.RaisePlaylistMaker('OnFileDrop2',reference[0])
	}
}
sys.fnc.RaisePlaylistMaker
{
	if basewarenameex == 'SSP' {
		_ret = "\![raiseplugin,PlaylistMaker,OnPlaylistMaker/
			,Version=PlaylistMaker/1.0/
			,From=びー/
			,Event=%(_argv[0])"
		for _i = 1; _i < _argc; _i++ {
			_ret += ',' + AYATEMPLATE.EscapeTextEx(_argv[_i])
		}
		_ret += ']\e'
		_ret
	}
}

//******************************************************************************
// plugin event
//******************************************************************************
OnBeerShower          { '\0\s[4]いたずらはやめてくださいー。\e' }
OnDive                { "\0\s[4]%(reference[0])になんて飛び込みたくありませんー。\e" }
OnHitThunder          { "\0\s[5]%(username)の世界にも、いつか行ってみたいです。\e" }
OnBalloonSelectMenu   { tmp.var.BalloonSelect.Page = reference[0] }
OnBalloonSelectCancel { ERASEVAR('tmp.var.BalloonSelect.Page') }

//******************************************************************************
// balloon change event
//******************************************************************************
OnBalloonChange
{
	if ASEARCH('BalloonSelector',installedplugin_name) >= 0 {
		if ISVAR('tmp.var.BalloonSelect.Page') && (tmp.var.BalloonSelect.Page >= 0) {
			'\![raiseplugin,BalloonSelector,OnBalloonSelectMenuOpen,' + tmp.var.BalloonSelect.Page + ']'
		}
	}
}

//******************************************************************************
// battery notice event
//******************************************************************************
OnBatteryLow
{
	if basewarenameex == 'SSP' {
		'\![set,trayballoon,--icon=info,--timeout=30,--title=Your battery is low./
			,--text=Remaining Battery Level : ' + reference[0] + '%]'
	}
}
OnBatteryCritical
{
	if basewarenameex == 'SSP' {
		'\![set,trayballoon,--icon=warning,--timeout=30,--title=Your battery is critical./
			,--text=Remaining Battery Level : ' + reference[0] + '%]'
	}
}

//******************************************************************************
// time event
//******************************************************************************
OnSurfaceRestore
{
	'\0\s[0]\1\s[10]\e'
}
OnMinuteChange
{
	if minute() == 0 {
//		if hour() == 0 {
//			// イベントトーク
//			_todayW = "%(sys.fnc.Fill0(month()))%(sys.fnc.Fill0(day()))"
//			_todayN = 10000 * year() + 100 * month() + day()
//			if ISFUNC("sys.boot.%(_todayW)") && (flg.LastBoot != _todayN) {
//				EVAL("sys.boot.%(_todayW)")
//				flg.LastBoot = _todayN
//				return
//			}
//		}
		"\0\s[0]%(hour())時です。\e"
	}
}
OnSecondChange
{
	if (tmp.var.mikireflag == 1) && (reference[1] == 0) {
		sys.fnc.EndMikireTalk()
	}
	tmp.var.mikireflag = reference[1]
}
sys.fnc.EndMikireTalk
{
	'\0\s[0]あ……、\_w[500]用事はお済みですか？\e'
}
