var snode=null;
var timeout;
var lastaccess;
var snPassword = "";
var snQuery = "";
var snURL = "";
var snCheckID;
var wait;
var snHost = "";
var snAccount = "";
var snQueryBefore="";
var textPlain = "";
var oButton="";


function loadingPanel(){

	wait = new YAHOO.widget.Panel("wait",
					{ width:"240px",
						fixedcenter:true,
						close:false,
						draggable:false,
						zindex:4,
						modal:false,
						visible:false
					}
				);

	wait.setHeader("Loading, please wait...");
	wait.setBody('<img src="http://us.i1.yimg.com/us.yimg.com/i/us/per/gr/gp/rel_interstitial_loading.gif" />');
	wait.render(document.body);
}



function onMyAuth( action, data ){
	if( data.mestat.status != 200 ){
		wait.hide(); // hide loading animation
		alert("認証に失敗しました");
	}else{
		logon();
		// auth success..
		clrck();
		if ( snCheckID )
			setck();
	}
}


function logout(){
	document.location.reload();
}

function logon(){
	var obj = document.getElementById("login");
	obj.innerHTML = "こんにちは<br>" + snHost + "さん";
	obj.innerHTML += "<p><a href='javascript:logout();'>ログアウト</a></p>";
	obj.innerHTML += "<div id='help'><p><a href='http://dream.jp/mysearch/help.html'>MySearchヘルプ</a></p></div>";

	obj = document.getElementById("result");
	obj.innerHTML = "";

	var obj = document.getElementById("default");
	obj.innerHTML="<table><tr><td align='center' width='280'><font size='2'>検索キーワードを入力してください。</font></td></tr><tr><td height='280'></td></tr></table>";


	wait.hide();
}

function click_link(targetURL){

	if(timeoutDo()==true){
		window.open(targetURL);
	}else{
		return;
	}
}

function timeoutDo(){
	var today = new Date();
	var now = today.getTime();

	if( (timeout * 1000) < (now - lastaccess) ){
		alert("タイムアウトのため、ログイン画面に戻ります。");
		document.location.reload();
		return false;
	}else{
		lastaccess = today.getTime();
		return true;
	}
}

function snsearch(){

	function trim(argValue){
		return String(argValue).replace(/^[ 　]*/gim, "").replace(/[ 　]*$/gim, "");
	}

	var form = document.forms["queryForm"];

	if(trim(form.elements.q.value)){
		snQuery = form.elements.q.value;
		if ( snode==null )
			alert("ログインしてください");
		else {
			snURL="http://snproxy.dream.jp/sn/" + snHost;
			f = snode.getSearchInterface( onMySearchHandler );
			pageSearch(1);
		}
	}else{
		alert("検索キーワードを入力してください。");
	}
}

function snauth(){

	var form = document.forms["dlgForm"];
	snHost = form.elements.host.value;
	snAccount = form.elements.account.value;
	snPassword = form.elements.password.value;
	snCheckID = form.elements.checkid.checked;
	snode = new SemantiqNode( snHost );
	snURL="snproxy.dream.jp/sn/" + snHost;

	// loading panel init
	loadingPanel();
	
	// authentication
	a = snode.getAuthInterface( onMyAuth );
	a.auth( snAccount, snPassword );

	wait.show();
}

function init(){
	len=getck();
	var form = document.forms["dlgForm"];
	form.elements.host.value = snHost;
	form.elements.account.value = snAccount;
	if(0<len)
		form.elements.checkid.checked=true;

	var obj = document.getElementById("default");
	obj.innerHTML="";

}


function pageSearch( pages ){

	if(timeoutDo()==true){
		wait.show();
		f.query( encodeURI(snQuery),"mail",pages);

	}else{
		return;
	}
}


function onMySearchHandler( action, response ){
	var obj = document.getElementById("searchnavi");
	obj.innerHTML="<h2>「" + snQuery +"」 のメール検索結果</h2>";
	obj.innerHTML+="<p><a href='http://dream.jp/search.php'>Web検索</a> | <a href='http://dream.jp/imgsearch.php'>画像検索</a> | <a href='http://dream.jp/videosearch.php'>動画検索</a> | <a href='http://dream.jp/mysearch/'>デスクトップ検索</a> | メール検索</p>";
	obj = document.getElementById("result");
	obj.innerHTML="";
	var objDefault = document.getElementById("default");

	if (response.info.allitems==0 || response.items.length==0 ) {
		obj.innerHTML="<p>条件に一致するメールは見つかりませんでした。</p>";
		objDefault.innerHTML = "<table><tr><td height='220'></td></tr></table>";

	}else{

		var page=parseInt(response.info.page);
		var pages=parseInt(response.info.pages);
		var hitCount=parseInt(response.info.wholeitems);
		
		var mailGif = "";
		var fromname = "";
		var subject = "";
		var sendtime = "";
		var nextUrl = "";

		var errMassage = "";
		var allerrerFlg = "";



		var pagechange = "";
		pageBeforeNext();
		obj.innerHTML += pagechange + "<br>";

		var responseArray = new Array();
		for(var i=0;i<response.items.length;i++)
		{
			createResponseSort(i,responseArray,response);
		}
		responseArray.sort(function(a,b){return b.sendtimeSort - a.sendtimeSort});
		

		for(var i=0;i<responseArray.length;i++)
		{
			if(responseArray[i].code){
				errorMessage(responseArray[i].code);
			}else{

				createHtml(i);

				mailGif = "";
				fromname = "";
				subject = "";
				sendtime = "";
				nextUrl = "";
				textPlain = "";
				errMassage = "";
			}
		}

		obj.innerHTML += "<br>" + pagechange;

		if(response.items.length == 1){
			objDefault.innerHTML = "<table><tr><td height='120'></td></tr></table>";
		}else{
			objDefault.innerHTML = 	"";
		}
	}

	var today = new Date();
	lastaccess = today.getTime();
	timeout = 300;

	wait.hide();


	function pageBeforeNext(){

		var up = "";
		var down= "";

		endflg = 0;
		down = page-7;
		while(endflg == 0){
			if(down<=0){
				down = down + 1;
			}else{
				endflg = 1;
			}
		}
		var diff = 7-page;
		if(diff<0){
			diff = 0;
		}
		endflg = 0;
		up = page+7+diff;
		while(endflg == 0){
			if(pages<up){
				up = up - 1;
			}else{
				endflg = 1;
			}
		}

		endflg = 0;
		if(up - down < 13){
			diff = 14-(up-down);
			down = down - diff;
			while(endflg == 0){
				if(down<=0){
					down = down + 1;
				}else{
					endflg = 1;
				}
			}
		}


		var selectOptionArray = new Array(up-down+1);
		var selectOption="";
		var param = 0;

		for(downPage=down; downPage<page;downPage++){
			selectOptionArray[param] = "<a href='#' onClick='pageSearch("+downPage+")'>"+ downPage +"</a>";
			param++;
		}
		selectOptionArray[param] ="<strong><font size='2'>"+ page +"</font></strong>";
		param++;
		for(upPage=page+1;upPage<=up;upPage++){
			selectOptionArray[param] = "<a href='#' onClick='pageSearch("+upPage+")'>"+ upPage +"</a>";
			param++;
		}
		for(ti=0;ti<selectOptionArray.length;ti++){
			if(ti==selectOptionArray.length-1){
				selectOption += selectOptionArray[ti];
			}else{
				selectOption += selectOptionArray[ti] + ", ";
			}
		}
		

		if(hitCount>1000){
			pagechange += "<font size='2'>※1000件以上は表示できないため、キーワードを追加し検索結果を絞ってください。</font><br><br>"
		}

		var countNowPageMailFrom = (page-1)*15+1;
		var countNowPageMailTo = (page-1)*15+response.items.length;

		var hitCountMessage = "<strong>" + hitCount+ "</strong> 件の検索結果　（<strong>" + countNowPageMailFrom +"</strong> - <strong>" +countNowPageMailTo+ "</strong>件目）";

		var	nextpage=page+1;
		var	beforpage=page-1;

		if( pages > 1 ){
			if(page==1){
				pagechange += "<font size='1'>" + selectOption + "　　 " + "</font><a href='#' onClick='pageSearch("+nextpage+")'><font size='2'><strong>次へ</strong></a>　　　　" + hitCountMessage + "</font><br><br>";
			}else if(page==pages){
				pagechange += "<a href='#' onClick='pageSearch("+beforpage+")'><font size='2'><strong>前へ</strong></font></a><font size='1'>" + "　　" + selectOption + "</font>　　　　" + "<font size='2'>" + hitCountMessage +"</font><br><br>";
			}else{
				pagechange += "<a href='#' onClick='pageSearch("+beforpage+")'><font size='2'><strong>前へ</strong></font></a><font size='1'>" + "　　" + selectOption + "　　" +"</font><a href='#' onClick='pageSearch("+nextpage+")'><font size='2'><strong>次へ</strong></a>　　　　"+ hitCountMessage + "</font><br><br>";
			}
		}else{
			pagechange += hitCountMessage;
		}
	}

	function errorMessage(code){

		switch(code){
			case '500':
				obj.innerHTML +=  "<strong>メール取得エラー (コード:500)</strong><br>";
				obj.innerHTML += "<font color=#009900><strong>" + "本メールを解析するアドオンが利用可能状態にありません。</strong></font><br>画面右下のタスクトレイにあるSemantiqNodeのアイコンをクリックし、アドオンを有効にしてください。<br><br>";
				break;
			case '404':
				obj.innerHTML +=  "<strong>メール取得エラー (コード:404)</strong><br>";
				obj.innerHTML += "<font color=#009900><strong>" + "本メールは削除されています。</strong></font><br>メールが削除されているため表示することができません。<br><br>";
				break;
			default:
				obj.innerHTML +=  "<strong>エラー</strong><br>";
				obj.innerHTML +=  "エラーが発生しているため、しばらくたった後に再度操作してください。<br><br>";
				break;
		}
	}


	function createResponseSort(i,responseArray,response){

		responseArray[i] = new Array(8);

		if(response.items[i].code){
			responseArray[i]["code"] = response.items[i].code;
		}else{
			responseArray[i]["code"] ="";
		}

		if(response.items[i].subject){
			responseArray[i]["subject"] = response.items[i].subject;
		}else{
			responseArray[i]["subject"] ="";
		}

		responseArray[i]["href"] = response.items[i].href;

		try{

			if(response.items[i].href.substr(5,2) == 'OE'){
				mailGif = "images/outlookexpress.gif";
			}else if(response.items[i].href.substr(5,2) == 'TB'){
				mailGif = "images/thunderbird.gif";
			}else if(response.items[i].href.substr(5,2) == 'BK'){
				mailGif = "images/becky.gif";
			}else{
				mailGif = "";
			}
		}catch(e){
				mailGif = "";
		}

		try{
			responseArray[i]["mailGif"] = mailGif;
	
			if(response.items[i].from.name){
				responseArray[i]["fromname"] = response.items[i].from.name;
			}else{
				responseArray[i]["fromname"] = "";
			}

			if(response.items[i].prop.datetime){
				responseArray[i]["sendtime"] = dateformat(response.items[i].prop.datetime);
				responseArray[i]["sendtimeSort"] = parseInt(dateformatSort(response.items[i].prop.datetime));
			}else{
				responseArray[i]["sendtime"] = "";
			}

			if(response.items[i].snippet){
				responseArray[i]["textPlain"] = response.items[i].snippet;
			}else{
				responseArray[i]["textPlain"] = "";
			}
		}catch(e){
				responseArray[i]["fromname"] = "";
				responseArray[i]["sendtime"] = "";
				responseArray[i]["textPlain"] = "";
		}
	}


	function createHtml(i){

		nextUrl = "maildetail.php?snhost="+snHost+"&account="+snAccount+"&msgid="+responseArray[i].href;

		var allerrerFlg = "";
		if(responseArray[i].subject){
			subject = responseArray[i].subject;
			obj.innerHTML +=  "<img src="+responseArray[i].mailGif+">　<a href='#' onClick='click_link(\""+nextUrl+"\")'><strong>"+responseArray[i].subject+"</strong></a><br>";
		}else{
			subject = "";
			obj.innerHTML +=  "<img src="+responseArray[i].mailGif+">　<a href='#' onClick='click_link(\""+nextUrl+"\")'><strong>'件名なし'</strong></a><br>";
			errMassage += " 件名 "
			allerrerFlg += "A";
		}

		if(responseArray[i].fromname){
			fromname = responseArray[i].fromname;
			fromname = fromname.replace("<","&lt;");
			fromname = fromname.replace(">","&gt;");
			obj.innerHTML += "<strong>"+fromname+"</strong><br>";
		}else{
			fromname = "";
			errMassage += " 宛先 ";
			allerrerFlg += "B";
		}

		if(responseArray[i].sendtime){
			obj.innerHTML += "<font color=#009900><strong>" + responseArray[i].sendtime + "</strong></font><br>";
		}else{
			sendtime = "";
			errMassage += " 送信時刻 ";
			allerrerFlg += "C";
		}

		if(responseArray[i].textPlain){
			textPlain = responseArray[i].textPlain;
			var endflg = 0;

			while (-1 != textPlain.search("<b>")) {
				textPlain = textPlain.replace("<b>","&lt;b&gt;");
			}
			while (-1 != textPlain.search("</b>")) {
				textPlain = textPlain.replace("</b>","&lt;/b&gt;");
			}
			while (-1 != textPlain.search(">")) {
				textPlain = textPlain.replace(">","&gt;");
			}
			while (-1 != textPlain.search("<")) {
				textPlain = textPlain.replace("<","&lt;");
			}
			while (-1 != textPlain.search("&lt;b&gt;")) {
				textPlain = textPlain.replace("&lt;b&gt;","<b>");
			}
			while (-1 != textPlain.search("&lt;/b&gt;")) {
				textPlain = textPlain.replace("&lt;/b&gt;","</b>");
			}

			obj.innerHTML += textPlain;
			obj.innerHTML += '<br>';
		}


		if(allerrerFlg == "ABCD"){
			obj.innerHTML += "<br>";
		}else{
			if(errMassage != ""){
				errMassage = "<font color='#CD2626'>※「"+errMassage+"」は存在しません。</font><br><br>";
				obj.innerHTML += errMassage;
			}else{
				obj.innerHTML += "<br>";
			}
		}
	}


















	function createHtmlbk(i){

		if(response.items[i].href.substr(5,2) == 'OE'){
			mailGif = "images/outlookexpress.gif";
		}else if(response.items[i].href.substr(5,2) == 'TB'){
			mailGif = "images/thunderbird.gif";
		}else if(response.items[i].href.substr(5,2) == 'BK'){
			mailGif = "images/becky.gif";
		}else{
			mailGif = "";
		}
		nextUrl = "maildetail.php?snhost="+snHost+"&account="+snAccount+"&msgid="+response.items[i].href;

		var allerrerFlg = "";
		if(response.items[i].subject){
			subject = response.items[i].subject;
			obj.innerHTML +=  "<img src="+mailGif+">　<a href='#' onClick='click_link(\""+nextUrl+"\")'><strong>"+response.items[i].subject+"</strong></a><br>";
		}else{
			subject = "";
			obj.innerHTML +=  "<img src="+mailGif+">　<a href='#' onClick='click_link(\""+nextUrl+"\")'><strong>'件名なし'</strong></a><br>";
			errMassage += " 件名 "
			allerrerFlg += "A";
		}

		if(response.items[i].from.name){
			fromname = response.items[i].from.name;
			fromname = fromname.replace("<","&lt;");
			fromname = fromname.replace(">","&gt;");
			obj.innerHTML += "<strong>"+fromname+"</strong><br>";
		}else{
			fromname = "";
			errMassage += " 宛先 ";
			allerrerFlg += "B";
		}

		if(response.items[i].prop.datetime){
			sendtime = dateformat(response.items[i].prop.datetime);
			obj.innerHTML += "<font color=#009900><strong>" + sendtime + "</strong></font><br>";
		}else{
			sendtime = "";
			errMassage += " 送信時刻 ";
			allerrerFlg += "C";
		}

		if(response.items[i].snippet){
			textPlain = response.items[i].snippet;
			var endflg = 0;

			while (-1 != textPlain.search("<b>")) {
				textPlain = textPlain.replace("<b>","&lt;b&gt;");
			}
			while (-1 != textPlain.search("</b>")) {
				textPlain = textPlain.replace("</b>","&lt;/b&gt;");
			}
			while (-1 != textPlain.search(">")) {
				textPlain = textPlain.replace(">","&gt;");
			}
			while (-1 != textPlain.search("<")) {
				textPlain = textPlain.replace("<","&lt;");
			}
			while (-1 != textPlain.search("&lt;b&gt;")) {
				textPlain = textPlain.replace("&lt;b&gt;","<b>");
			}
			while (-1 != textPlain.search("&lt;/b&gt;")) {
				textPlain = textPlain.replace("&lt;/b&gt;","</b>");
			}


			obj.innerHTML += textPlain;
			obj.innerHTML += '<br>';
		}


		if(allerrerFlg == "ABCD"){
			obj.innerHTML += "<br>";
		}else{
			if(errMassage != ""){
				errMassage = "<font color='#CD2626'>※「"+errMassage+"」は存在しません。</font><br><br>";
				obj.innerHTML += errMassage;
			}else{
				obj.innerHTML += "<br>";
			}
		}
	}

}


