document.observe('dom:loaded', function() {
	InitializeEroy();
});

/* 暫定負荷対策版0429 */

/* 検索結果用 */
var eObj = false;
var fObj = false;
var aObj = false;
var rObj = false;

var itemid = 0;
var shown = 0;

var eJSON = '';
var fJSON = '';
var aJSON = '';
var rJSON = '';

var eResultsReturned = 0;
var fResultsReturned = 0;

var eResults = 0;
var fResults = 0;
var aItemsLength = 0;
var rItemsLength = 0;

var fFileSize = '';
var fTitle = '';

/* 表示用 */
var ePos = 0;
var fPos = 0;
var aPos = 0;
var rPos = 0;

var eCounter = 0;

/* 検索時クエリ用 */
var ePosition = 0;
var fPosition = 0;

var srchStr = '';

/* デフォルトを米Yahoo!に */
var url = 'http://boss.yahooapis.com/ysearch/images/v1/';
var appid = 'KKBl5mHV34HX7CKO4OIsrNQ5bzWBj3MOv441iZGt6wmhgXwI6wf15zoSS0NL7bSe';

/* 表示数 */
var display = 20;

/* メッセージ */
var mesSearching = '<img src="/images/ajax-loader.gif" width="16" height="16">';
var mesNotfound = '見つかりませんでした。<br><br>名字と名前の間に<br>半角スペースを入れると<br>ヒットするかも';
var mesNext = '次10';
var resltsBefore = '約';
var resltsAfter = '件';

var mesANC = 'アンケートです。<br>この検索結果は<br>いかがですか。';
var mesANCgood = '超良かった。';
var mesANCbad = 'まあ普通。';

/* AWSパラメータ */
var AWSsite ='http://aap.8-bit.jp/';
var AWSdevid ='0SQ2NCMKBQWDX6MRGV82';
var AWStag ='arienaigazou-22';
var AmazonURL ='http://www.amazon.co.jp/';

/* RakuAPIパラメータ */
var Rakusite ='http://api.rakuten.co.jp/rws/1.7/json';
var Rakudevid ='cf23974b54f24288c31baa55cde0f4c7';
var Rakutag ='0445d9c0.959097e5.0445d9c1.7d1d53a1';
var RakuURL ='http://www.rakuten.co.jp/';


function InitializeEroy()
{
	srchStr = $('queryString').value;
	if (srchStr == '') return;

//	サーチワードの判定
//	if (CheckLength(srchStr,1))
//	{
//		url = 'http://eroy.8-bit.jp/yj.php';
//	} else {
//		url = 'http://api.search.yahoo.com/ImageSearchService/V1/imageSearch';
//	}

	eObj = false;
	fObj = false;
	aObj = false;
	rObj = false;

	eJSON = '';
	fJSON = '';
	aJSON = '';
	rJSON = '';

	eResultsReturned = 0;
	fResultsReturned = 0;
	aItemsLength = 0;
	rItemsLength = 0;

	eResults = 2;
	fResults = 2;

	ePosition = 1;
	fPosition = 1;

	ePos = 0;
	fPos = 0;
	aPos = 0;
	rPos = 0;

	eCounter = 0;

	fFileSize = new Array();
	fTitle = new Array();

	$('result').innerHTML = '<span id="searching">' + mesSearching + '</span>';

//	getAWS();
//	getRaku();
	getEroy();
}


function getEroy()
{
	ePars = url + encodeURI(srchStr) +'?appid=' + appid + '&start=' + ePosition + '&filter=no';

	if (url.indexOf("com",0) == -1)
	{
		eObj = new JKL.ParseXML(ePars);
		eObj.async(EroyXML);
		eObj.parse();
	} else {
		ePars += '&count=50&format=json&callback=EroyJSON';
		eObj = new JSONscriptRequest(ePars);
		eObj.buildScriptTag();
		eObj.addScriptTag();
	}
}

function EroyXML(eObj)
{
	eJSON = eObj;
	loadEroy();
}


function EroyJSON(JSON)
{
	eJSON = JSON;
	eObj.removeScriptTag();
	loadEroy();
}

function loadEroy(JSON)
{
	eResults = eJSON.ysearchresponse.totalhits;

	if (eJSON.ysearchresponse.totalhits > 0){
		eResultsReturned = eJSON.ysearchresponse.resultset_images.length;
		} else {
		eResultsReturned = 0;
	}


//負荷対策。これでもきついときは↓をコメントアウト
//	if ((ePosition == 1)&&(url.indexOf("yahoo.com",0) > -1)&&(CheckLength(srchStr,1) == true)&&(eResults < 50)){
//		url = '/yj.php';
//		InitializeEroy();
//		return;
//	}

	ePosition += 50;
	ePos = 0;

	if (eResultsReturned == 0)
	{
		if (span = $('searching')) {span.parentNode.removeChild(span);}
		if (a = $('next')) {a.parentNode.removeChild(a);}
		$('result').innerHTML += '<div class="image"><table width="100%" height="100%" border="0" valign="center" class="img"><tr><td align="center">' + mesNotfound + '</td></tr></table></div>';
		return;
	}
	preloadData();
}


function getFilter()
{
	fPars = url + encodeURI(srchStr) + '?appid=' + appid + '&start=' + fPosition + '&filter=yes';

	if (url.indexOf("com",0) == -1)
	{
		fObj = new JKL.ParseXML(fPars);
		fObj.async(FilterXML);
		fObj.parse();
	} else {
		fPars += '&count=50&format=json&callback=FilterJSON';
		fObj = new JSONscriptRequest(fPars);
		fObj.buildScriptTag();
		fObj.addScriptTag();
	}
}

function FilterXML(fObj)
{
	fJSON = fObj;
	loadFilter();
}


function FilterJSON(JSON)
{
	fJSON = JSON;
	fObj.removeScriptTag();
	loadFilter();
}

function loadFilter(JSON)
{
	fResults = fJSON.ysearchresponse.totalhits;
//	fResultsReturned = fJSON.ysearchresponse.totalhits;

//totalResultsReturnedとlengthが一致しない不具合を補正
	if (fJSON.ysearchresponse.totalhits > 0){
		fResultsReturned = fJSON.ysearchresponse.resultset_images.length;
		} else {
		fResultsReturned = 0;
	}

	if (fResults != 0){
		for(i=0; i<fJSON.ysearchresponse.resultset_images.length; i++)
		{
			fFileSize.push(fJSON.ysearchresponse.resultset_images[i].size);
			fTitle.push(fJSON.ysearchresponse.resultset_images[i].abstract);
		}
	}

	fPosition += 50;

	$('ResultsReturned').innerHTML = resltsBefore + (eResults - fResults) + resltsAfter;
	preloadData();
}


function preloadData()
{
	if (eCounter == display)
	{
		displayNextBtn();
		return;
	}

	if (eResultsReturned == ePos)
	{
		getEroy();
		return;
	}

	if (fFileSize.length < 10 && fPosition < fResults)
	{
		getFilter();
		return;
	}

	for(i=0; i<fFileSize.length; i++)
	{
		if (eJSON.ysearchresponse.resultset_images[ePos].size == fFileSize[i])
		{
			for (j=0; j<(i+1); j++)
			{
				fFileSize.shift();
				fTitle.shift();
			}
			ePos += 1;
			preloadData();
			return;
		}
	}
	loadImageFile();
	preloadData();
}

function displayNextBtn()
{
	if (itemid <= 20){
		showResults(10);
		return;
	}

	if (shown == 50){
	anc = '<div id="anc" class="image"><table width="100%" height="100%" border="0" valign="center" class="img"><tr><td align="center">' + mesANC + '<br><br><a href="javascript:HideAnc();">' + mesANCbad + '</a><br><br><a href="javascript:GoodKeyword();">' + mesANCgood + '</a></td></tr></table></div>';
	new Insertion.After($(String(shown)),anc);
	}

	$('functions').style.visibility = "visible";
}

function GoodKeyword()
{
	var imgsrc = document.getElementsByClassName("img")[0].src;
	httpObj = new Ajax.Request('/rss/getgazouword.php?k='+encodeURIComponent(srchStr)+'&s='+imgsrc, { method: 'get'});
	$('anc').style.display = "none";
}

function HideAnc()
{
	$('anc').style.display = "none";
}


function loadImageFile()
{
	var eThumbnailUrl = eJSON.ysearchresponse.resultset_images[ePos].thumbnail_url;
	var eThumbnailWidth = eJSON.ysearchresponse.resultset_images[ePos].thumbnail_width;
	var eThumbnailHeight = eJSON.ysearchresponse.resultset_images[ePos].thumbnail_height;
	var eUrl = eJSON.ysearchresponse.resultset_images[ePos].clickurl;
	var eTitle = eJSON.ysearchresponse.resultset_images[ePos].abstract;
	var rUrl = eJSON.ysearchresponse.resultset_images[ePos].refererurl;

	ePos += 1;
	eCounter += 1;
	
	if (span = $('searching')) {span.parentNode.removeChild(span);}
	if ($('functions').style.visibility == "visible") {$('functions').style.visibility = "hidden";}

	itemid++;
	
	if (navigator.userAgent.indexOf('MSIE') != -1)
	{
	var resultimg = '<div class="image" id="' + itemid + '" style="display:none" onMouseOver="showtip(\'' + itemid + '\');" onMouseOut="hidetip(\'' + itemid + '\');"><a href="' + eUrl + '" id="img' + itemid + '"><img src="' + eThumbnailUrl + '" width="' + eThumbnailWidth + '" height="' + eThumbnailHeight + '" title="' + eTitle + '" class="img" style="position:relative; top:' + Math.round((170 - eThumbnailHeight)/2) + 'px" onClick="javascript:window.open(\'' + eUrl + '\',\'_blank\'); return false;"></a><a href="javascript:pin(\'' + itemid + '\');" class="zoom"><img src="/images/picture_add.png" width="16" height="16" title="画像をキープ" id="zoom' + itemid + '"></a><a href="' + rUrl + '" target="_blank" class="referer"><img src="/images/world_go.png" width="16" height="16" title="掲載ページ" id="referer' + itemid + '"></a><a href="http://www.tineye.com/search/?url=' + encodeURI(eThumbnailUrl) + '" target="_blank" class="tineye"><img src="/images/folder_magnify.png" width="16" height="16" title="同じ画像を探す" id="tineye' + itemid + '"></a></div>';
	} else {
	var resultimg = '<div class="image" id="' + itemid + '" style="display:none" onMouseOver="showtip(\'' + itemid + '\');" onMouseOut="hidetip(\'' + itemid + '\');"><a href="' + eUrl + '" target="_blank" id="img' + itemid + '"><img src="' + eThumbnailUrl + '" width="' + eThumbnailWidth + '" height="' + eThumbnailHeight + '" title="' + eTitle + '" class="img" style="position:relative; top:' + Math.round((170 - eThumbnailHeight)/2) + 'px"></a><a href="javascript:pin(\'' + itemid + '\');" class="zoom"><img src="/images/picture_add.png" width="16" height="16" title="画像をキープ" id="zoom' + itemid + '"></a><a href="' + rUrl + '" target="_blank" class="referer"><img src="/images/world_go.png" width="16" height="16" title="掲載ページ" id="referer' + itemid + '"></a><a href="http://www.tineye.com/search/?url=' + encodeURI(eThumbnailUrl) + '" target="_blank" class="tineye"><img src="/images/folder_magnify.png" width="16" height="16" title="同じ画像を探す" id="tineye' + itemid + '"></a></div>';
	}
	new Insertion.Bottom($('result'),resultimg);
}

/* AWS */
function getAWS()
{
	var AWSurl = AWSsite + '?Service=AWSECommerceService&SubscriptionId=' + AWSdevid + '&AssociateTag=' + AWStag + '&ResponseGroup=Medium&Operation=ItemSearch&SearchIndex=Blended&Keywords=' + encodeURI(srchStr) + '&Version=2005-07-26&ContentType=text%2Fjavascript&Style=http%3A%2F%2Feroy.8-bit.jp%2Fjs%2Faws2json.xsl';
	aObj = new JSONscriptRequest(AWSurl);
	aObj.buildScriptTag();
	aObj.addScriptTag();
}


function loadAWS(JSON)
{
	aJSON = JSON;
	aItemsLength = aJSON.Items.length;
	aObj.removeScriptTag();
}


function loadAWSImageFile(pos)
{
	if ((aItemsLength == 0)||(aPos == (aItemsLength - 1))) {
		loadRakuImageFile(pos);
		return;	
	}
	if ((aPos % 2) != 0){
		loadRakuImageFile(pos);
		aPos++;
		return;
	}
	for (i=aPos; i < aItemsLength; i++)
	{
		if (aJSON.Items[i].Image.URL)
		{
				var aThumbnailUrl = aJSON.Items[i].Image.URL;
				var aWidth = aJSON.Items[i].Image.Width;
				var aHeight = aJSON.Items[i].Image.Height;
				var aTitle = aJSON.Items[i].Title;
				var ASIN = aJSON.Items[i].ASIN;
				var aURL = aJSON.Items[i].URL;

				var resultimg = '<div class="affiliate" onMouseOver="showtip(\'_am' + i + '\');" onMouseOut="hidetip(\'_am' + i + '\');"><a href="' + aURL + '" target="_blank"><img src="' + aThumbnailUrl + '" width="' + aWidth + '" height="' + aHeight + '" title="' + aTitle + '" class="img" style="position:relative; top:' + Math.round((170 - aHeight)/2) + 'px"></a><a href="http://images-jp.amazon.com/images/P/' + ASIN + '.09.SCLZZZZZZZ.jpg" class="zoom" target="_blank"><img src="/images/zoom.png" width="16" height="16" title="大画像を表示" id="zoom_am' + i + '"></a><a href="' + aURL + '" target="_blank" class="referer"><img src="/images/amazon.png" width="16" height="16" title="amazon" id="referer_am' + i + '"></a></div>';
				new Insertion.After($(String(pos)),resultimg);

				aPos = i+1;
				break;
		}
	}
}

/* RakuAPI */
function getRaku()
{
//	if (document.cookie.indexOf("v=1")>-1) return false;
	var xp = new Date;
	xp.setMinutes(xp.getMinutes() + 3);
	xp = xp.toGMTString();
	document.cookie = "v=1;expires=" + xp;
	var Rakuurl = Rakusite + '?developerId=' + Rakudevid + '&affiliateId=' + Rakutag + '&operation=ItemSearch&version=2007-04-11&keyword=' + encodeURI(srchStr) + '&hits=30&imageFlag=1&sort=%2dupdateTimestamp&callBack=loadRaku&genreId=101240';
	rObj = new JSONscriptRequest(Rakuurl);
	rObj.buildScriptTag();
	rObj.addScriptTag();
}

function loadRaku(JSON)
{
	rJSON = JSON;
	rObj.removeScriptTag();
	rItemsLength = rJSON.Body.ItemSearch.hits;
}


function loadRakuImageFile(pos)
{
	if (rItemsLength < 2) return;
	if (rPos == rItemsLength) return;
	for (i=rPos; i < rItemsLength; i++)
	{
		var rThumbnailUrl = rJSON.Body.ItemSearch.Items.Item[i].mediumImageUrl;
		var rTitle = rJSON.Body.ItemSearch.Items.Item[i].itemName;
		var rURL = rJSON.Body.ItemSearch.Items.Item[i].affiliateUrl;
		if (rThumbnailUrl.indexOf("128x128",0) != -1){
			var rImageUrl = rThumbnailUrl.substr(0,(rThumbnailUrl.length - 12));
		}else{
			rImageUrl = rThumbnailUrl;
		}

		var resultimg = '<div class="affiliate" onMouseOver="showtip(\'_ra' + rPos + '\');" onMouseOut="hidetip(\'_ra' + rPos + '\');"><a href="' + rURL + '" target="_blank"><img src="' + rThumbnailUrl + '" title="' + rTitle + '" alt="' + rTitle + '" class="img" style="position:relative; top:21px"></a><a href="' + rImageUrl + '" target="_blank" class="zoom"><img src="/images/zoom.png" width="16" height="16" title="画像を開く" id="zoom_ra' + rPos + '"></a><a href="' + rURL + '" target="_blank" class="referer"><img src="/images/rakuten.png" width="16" height="16" title="rakuten" id="referer_ra' + rPos + '"></div>';
		new Insertion.After($(String(pos)),resultimg);

		rPos = i+1;
		break;
	}
}

function CheckLength(str,flg) {
		for (var i = 0; i < str.length; i++) {
		var c = str.charCodeAt(i);
		// Shift_JIS: 0x0 〜 0x80, 0xa0 , 0xa1 〜 0xdf , 0xfd 〜 0xff
		// Unicode : 0x0 〜 0x80, 0xf8f0, 0xff61 〜 0xff9f, 0xf8f1 〜 0xf8f3
		if ( (c >= 0x0 && c < 0x81) || (c == 0xf8f0) || (c >= 0xff61 && c < 0xffa0) || (c >= 0xf8f1 && c < 0xf8f4)) {
			if(!flg) return true;
		} else {
			if(flg) return true;
		}
	}
	return false;
}

function pin(selected){
	if ($(selected).style.borderColor.indexOf("red") != -1){
		$(selected).style.borderColor = '#ccc';
		$(selected).style.background = '';
	} else {
		$(selected).style.borderColor = 'red';
		$(selected).style.background = '#fee';		
	}
}


function hideResults(){
	for (var h = 1; h <= shown; h++){
		if (($(String(h)).style.borderColor.indexOf("red") == -1)&&($(String(h)).style.display == "block")){
			$(String(h)).style.display = "none";
		}
	}
	var elements = document.getElementsByClassName("affiliate");
	var affObj = $A(elements);
	affObj.each(
		function(obj){
		obj.style.display = "none";
		}
	);
	if ($('anc')){
		$('anc').style.display = "none";
	}
}

function showResults(items){
	var seed = Math.floor(Math.random() * items) + shown;
	for (var i = shown; i < (shown + items); i++) {
		$(String(i+1)).style.display = "block";
		if (i == seed){
			loadAWSImageFile(seed+1);//アフィリ系表示
		}
	}
	shown += items;
	eCounter -= items;
	preloadData();
}


function showtip(selected){
	var zoom = 'zoom'+ selected;
	var referer = 'referer'+ selected;
	var tineye = 'tineye'+ selected;
	$(zoom).style.visibility = "visible";
	$(referer).style.visibility = "visible";
	$(tineye).style.visibility = "visible";
}

function hidetip(selected){
	var zoom = 'zoom'+ selected;
	var referer = 'referer'+ selected;
	var tineye = 'tineye'+ selected;
	$(zoom).style.visibility = "hidden";
	$(referer).style.visibility = "hidden";
	$(tineye).style.visibility = "hidden";
}

function openResults(){
	for (var h = 1; h <= shown; h++){
		if ($(String(h)).style.borderColor.indexOf("red") != -1){
			window.open($('img' + String(h)).href,'_blank');
		}
	}
}





// jsr_class.js
//
// JSONscriptRequest -- a simple class for making HTTP requests
// using dynamically generated script tags and JSON
//
// Author: Jason Levitt
// Date: December 7th, 2005
//
// Constructor -- pass a REST request URL to the constructor
//
function JSONscriptRequest(fullUrl) {
    // REST request path
    this.fullUrl = fullUrl; 
    // Keep IE from caching requests
    this.noCacheIE = '&noCacheIE=' + (new Date()).getTime();
    // Get the DOM location to put the script tag
    this.headLoc = document.getElementsByTagName("head").item(0);
    // Generate a unique script tag id
    this.scriptId = 'JscriptId' + JSONscriptRequest.scriptCounter++;
}

// Static script ID counter
JSONscriptRequest.scriptCounter = 1;

// buildScriptTag method
//
JSONscriptRequest.prototype.buildScriptTag = function () {

    // Create the script tag
    this.scriptObj = document.createElement("script");
    
    // Add script object attributes
    this.scriptObj.setAttribute("type", "text/javascript");
    this.scriptObj.setAttribute("charset", "utf-8");
    this.scriptObj.setAttribute("src", this.fullUrl + this.noCacheIE);
    this.scriptObj.setAttribute("id", this.scriptId);
}
 
// removeScriptTag method
// 
JSONscriptRequest.prototype.removeScriptTag = function () {
    // Destroy the script tag
    this.headLoc.removeChild(this.scriptObj);  
}

// addScriptTag method
//
JSONscriptRequest.prototype.addScriptTag = function () {
    // Create the script tag
    this.headLoc.appendChild(this.scriptObj);
}

