if (is_Mobile()) {
	var thumbnail_width = 105;
}else{
	var thumbnail_width = 120;
}
var eroy_offset = 0;
var q = '';
var count = 50;
var safe_search = '';
var filter_offset = 0;
var filters = new Array();
//bing
var url      = 'http://api.search.live.net/json.aspx';
var appid    = '3327C6AAB555438EF7A4E2C8C03FA4845EF5875E';
var source   = 'image';
var version  = '2.2';
var filter   = 'Size:Large';

$(function() {
	$('h1').click(function() {
		$("html, body").animate({ scrollTop: 0 }, 'slow', function () {
			//$('#searchIpt').focus();
		});
		return false;
	});
	$('#ad').css('margin-top',$('#header').height()+20);
	$('#results').css('margin-top',$('#header').height()+20);
	if (is_Mobile()) {
		$('#results').css('margin-bottom',60);
	}else{
		$('#results').css('margin-bottom',120);
	}
	$('#results').masonry({
		itemSelector : '#results li',
		columnWidth  : thumbnail_width + 1
	});
	if($.anchor()){
		$('#searchIpt').val($.anchor().replace(/\+/g, ' '));
		init($('#searchIpt').val());
	}else{
		$('#searchIpt').focus();
	}
	$('#submitBtn').click(function () {
		if($('#searchIpt').val()){
			$.anchor($('#searchIpt').val());
			init($('#searchIpt').val());
		}
	});
	$('#searchIpt').keypress(function(e) {
		if(e.keyCode == 13) {
			$('#submitBtn').click();
		}
	});
	$('#safeBox').change(function () {
		$('#submitBtn').click();
	});
	$('#filterBox').change(function () {
		$("#results a.noteroy").toggleClass('noteroy_on');
	});
	$('#testBtn').click(function () {
		$("#results a.noteroy").remove();
		$('#results').masonry('reload');
		$(window).resize();
		console.log(filters);
	});
});

function init(query){
	$('#results').html('').masonry('reload');
	eroy_offset = 0;
	filter_offset = 0;
	q = query;
	filters = [];
	if ($('#safeBox').is(':checked')){
		safe_search = 'Strict';
	}else{
		safe_search = 'Moderate';
	}
	_gaq.push(['_trackPageview','/gazou/'+query]);
	searchImages();
}

$(window).scroll(function(){
	if (($(window).scrollTop() == $(document).height() - $(window).height())||(window.pageYOffset + window.innerHeight == document.documentElement.scrollHeight)){
		searchImages();
	}
});

$(window).resize(function(){
	if($('#results li:last').offset().top < ($(window).scrollTop() + $(window).height())){
		searchImages();
	}
});

function searchImages() {
	if(eroy_offset == -1){
		return;
	}
	loadFilter();
	$.ajax({
		dataType: 'jsonp',
		data: {
			Appid:           appid,
			Query:           q,
			Sources:         source,
			'Image.Count':   count,
			'Image.Offset':  eroy_offset,
			Version:         version,
			Adult:           'Off',
			'Image.Filters': filter,
			JsonType:        'callback'
		},
		cache: true,
		jsonp: 'JsonCallback',
		url: url,
		error: function(response) {
			console.log(response);
			console.log('Response Error.');
		},
		success: function (response) {
			var errors = response.SearchResponse.Errors;
			if (errors != null) {
				console.log('Request Error.');
				console.log(errors);
			} else {
				$.each(response.SearchResponse.Image.Results, function(){
					var $imgElement = $('<li><a href="' + this.MediaUrl + '" onClick="OpenExtLink(this); return false;" target="_blank"><img src="' + this.Thumbnail.Url + '" width="' + thumbnail_width + '" height="' + Math.floor(this.Thumbnail.Height*thumbnail_width/this.Thumbnail.Width) + '" title="' + this.Title.replace('"','\'') + '"></a><a href="'+ this.Url +'" class="url" target="_blank"><img src="/images/arrow_right2.png" title="website"></a></li>');
					if ($('a[href="' + this.MediaUrl + '"]').size()==0){
						$('#results').append($imgElement).masonry('appended',$imgElement);
						$('#results li:last').hover(
							function () {
								$(this).children('.url').show();
							},
							function () {
								$(this).children('.url').hide();
							});
					}
				});
				filtering();
				if((eroy_offset + count) > 1000 || (eroy_offset + count) > response.SearchResponse.Image.Total){
					eroy_offset = -1;
					$.jGrowl('検索終了。全'+response.SearchResponse.Image.Total+'件。',{position:'bottom-right',life:10000});
				}else{
					if(eroy_offset==200){showAnc()};
					eroy_offset = eroy_offset + count;
					if($('#results li:last').offset().top < ($(window).scrollTop() + $(window).height())){
						searchImages();
					}
				}
			}
		}
	});
}


function loadFilter() {
	if(filter_offset == -1){
		return;
	}
	$.ajax({
		dataType: 'jsonp',
		data: {
			Appid:           appid,
			Query:           q,
			Sources:         source,
			'Image.Count':   count,
			'Image.Offset':  filter_offset,
			Version:         version,
			Adult:           safe_search,
			'Image.Filters': filter,
			JsonType:        'callback'
		},
		cache: true,
		jsonp: 'JsonCallback',
		url: url,
		error: function(response) {
			console.log(response);
			console.log('Response Error.');
		},
		success: function (response) {
			var errors = response.SearchResponse.Errors;
			if (errors != null) {
				console.log('Request Error.');
				console.log(errors);
			} else {
				$.each(response.SearchResponse.Image.Results, function(){
					filters.push(this.MediaUrl);
				});
				if((filter_offset + count) > 1000 || (filter_offset + count) > response.SearchResponse.Image.Total){
					filter_offset = -1;
				}else{
					filter_offset = filter_offset + count;
				}
			}
		}
	});
}

function filtering(){
	for(var i in filters){
		if (filters[i]){
			var n = $('a:not(.noteroy)[href="' + filters[i] + '"]').addClass('noteroy').size();
			if (n>0){filters[i] = null};
		}
	}
}

//ハッシュ用jQライブラリ http://d.hatena.ne.jp/ofk/20090915/1252993893
$.anchor = function (val, skip) {
	var fn = arguments.callee;
	switch (typeof val) {
		// getter
		case "undefined":
			var ret = location.hash;
			if (!ret) {
				return null;
			}
			ret = ret.replace(/^#/, "");
			return $.browser.fx ? ret : decodeURIComponent(ret);
		// callback
		case "function":
			if (!fn.tid) {
				fn.hash = location.hash;
				(function rec() {
					if (!fn.skip && fn.hash !== location.hash) {
						fn.hash = location.hash;
						$(window).trigger("changeAnchor", $.anchor());
					}
					fn.tid = setTimeout(rec, 300);
				})();
			}
			return $(window).bind("changeAnchor", val);
		// setter
		default:
			if (skip) {
				fn.skip = true;
				location.hash = encodeURIComponent(val);
				fn.hash = location.hash;
				fn.skip = false;
			}
			else {
				location.hash = encodeURIComponent(val);
			}
			return;
	}
};

//リファラカット用
function OpenExtLink(el){
	var url = el.href;
	w = window.open();
	w.document.write('<meta http-equiv="refresh" content="0;url='+url+'">');
	w.document.close();
}

function showAnc(){
	var $ancElement = $('<li id="anc" style="width: ' + thumbnail_width + 'px; height:100px">この検索結果は<br>どうだった？<a href="javascript:void(0);" onClick="Good(); return false;">よかった！</a><a href="javascript:void(0);" onClick="noGood(); return false;">いまいち</a></li>');
	$('#results').append($ancElement).masonry('appended',$ancElement);
}

function Good(){
	var imgsrc = $('#results img:eq(0)').attr('src');
	$.get('/rss/getgazouword.php', { k: $('#searchIpt').val(), s: imgsrc } );
	$('#anc').html('な<br>る<br>ほ<br>ど<br>！').animate({opacity: 0.7}, 'fast').animate({opacity: 1}, 'fast').delay(1000).fadeOut('slow');
}

function noGood(){
	$('#anc').html('な<br>る<br>ほ<br>ど<br>！').animate({opacity: 0.7}, 'fast').animate({opacity: 1}, 'fast').delay(1000).fadeOut('slow');
}

function is_Mobile(){
	var media = [
		'iPhone',
		'iPod',
		'iPad',
		'Android'
	];
	var pattern = new RegExp(media.join('|'), 'i');
	return pattern.test(navigator.userAgent);
}
