if (typeof $ != "function") {
    var $ = function(id) {
        return document.getElementById(id);
    }
}

if (location.search) {
 var query = location.search;
 if (query.match(/\?(tag|text|username)=([-_.!~*()a-zA-Z0-9;:@+$,%]+)$/)) {
  var exp1 = RegExp.$1;
  var exp2 = RegExp.$2;
  if (exp1 == 'tag') {
   $('type')[0].selected = true;
  }
  else if (exp1 == 'text') {
   $('type')[1].selected = true;
  }
  else if (exp1 == 'username') {
   $('type')[2].selected = true;
  }
  if (exp2.match(/^%/)) {
   $('q').value = decodeURIComponent(exp2);
  } else {
   $('q').value = exp2;
  }
 }
}

var per_page = 100;
var timer = undefined;
var scrollValue = { "ie":0, "other":0 };
var user_id = undefined;
var type = '0';
var q = '';

var owner_id = {};
var target;

var ua = '';
if (window.navigator.userAgent.match(/MSIE/)) {
 ua = 'ie';
}

if (GBrowserIsCompatible()) {
 var map = new GMap2(document.getElementById("map"));
 map.removeMapType(G_SATELLITE_MAP);
 map.removeMapType(G_HYBRID_MAP);
 map.removeMapType(G_NORMAL_MAP);
}

function doHopScroll() {
 if (timer) {
  clearInterval(timer);
 }
 scrollValue.ie = -1;
 scrollValue.other = -1;
 autoScroll();
 timer = setInterval('autoScroll()', 1750);
 $('smooth-scroll').disabled = false;
 $('hop-scroll').disabled = true;
 $('scroll-stop').disabled = false;
}

function doSmoothScroll() {
 if (timer) {
  clearInterval(timer);
 }
 scrollValue.ie = -0.05;
 scrollValue.other = -0.007;
 autoScroll();
 timer = setInterval('autoScroll()', 1);
 $('smooth-scroll').disabled = true;
 $('hop-scroll').disabled = false;
 $('scroll-stop').disabled = false;
}

function stopScroll() {
 clearInterval(timer);
 $('smooth-scroll').disabled = false;
 $('hop-scroll').disabled = false;
 $('scroll-stop').disabled = true;
}

function doFlickrSearch() {
 $('smooth-scroll').disabled = false;
 $('hop-scroll').disabled = false;
 $('scroll-stop').disabled = true;
 $('search-button').disabled = true;
 callFlickr();
}

function callFlickr() {
 if (timer) {
  clearInterval(timer);
 }

 var script = document.createElement("script");
 script.charset = 'UTF-8';
 script.type = 'text/javascript';

 type = $("type")[$("type").selectedIndex].value;
 q = encodeURIComponent($("q").value);
 var t = 'tags=' + q;

 if (type == '2') {
  if (!user_id) {
   t = 'username=' + q;
   script.src = 'http://api.flickr.com/services/rest/?method=flickr.people.findByUsername&api_key=1059c89229a3b1b2ac1ac27f6696e7f1&'+t+'&format=json';
   document.lastChild.appendChild(script);
   return false;
  } else {
   t = 'user_id=' + user_id;
  }
 }
 else if (type == '1') {
  t = 'text=' + q;
 }

 script.src = 'http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=1059c89229a3b1b2ac1ac27f6696e7f1&'+t+'&per_page='+per_page+'&format=json';
 document.lastChild.appendChild(script);
 //document.write('<script type="text/javascript" src="http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=1059c89229a3b1b2ac1ac27f6696e7f1&'+t+'&per_page='+per_page+'&format=json"></script>');
}

function autoScroll() {
 // IEだとスムーズに動かないので
 if (ua == 'ie') {
  map.panDirection(scrollValue.ie, 0);
 } else {
  map.panDirection(scrollValue.other, 0);
 }
}

var url = [];
function jsonFlickrApi(json) {
 json = eval(json);
 $('search-button').disabled = false;
 if (json.user) {
  user_id = json.user.nsid;
  var script = document.createElement("script");
  script.charset = 'UTF-8';
  script.type = 'text/javascript';
  script.src = 'http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=1059c89229a3b1b2ac1ac27f6696e7f1&user_id='+user_id+'&per_page='+per_page+'&format=json';
  document.lastChild.appendChild(script);
  user_id = undefined;
  return true;
 }
 if (!json.photos) {
  alert('No photos. / 条件に一致する写真はありません。');
  return false;
 }
 var photo = json.photos.photo;
 if (photo.length == 0) {
  alert('No photos. / 条件に一致する写真はありません。');
  return false;
 }
 for (var i = 0; i < photo.length; i++) {
  url[i] = 'http://static.flickr.com/' + photo[i]["server"] + '/';
  var file = photo[i]["id"] + '_' + photo[i]["secret"] + '.jpg';
  url[i] += file;
  owner_id[url[i]] = photo[i]["owner"];
 }
 map.setCenter(new GLatLng(33, (Math.random() * 180) % 180), 10);

 /*var layer= new GTileLayer(new GCopyrightCollection(""), 10, 10);
 layer.getTileUrl = function(tile, zoom) {
  var len = per_page;
  if (len > photo.length) len = photo.length;
  return url[(tile.x + tile.y) % len];
 };
 var mapNormal = new GMapType(
  [G_NORMAL_MAP.getTileLayers()[0], layer],
  G_NORMAL_MAP.getProjection(), "Flickr"
 );
 map.setMapType(mapNormal);*/

 var layer = G_NORMAL_MAP.getTileLayers()[0];
 layer.getTileUrl = function(tile, zoom) {
  var len = per_page;
  if (len > photo.length) len = photo.length;
  return url[(tile.x + tile.y) % len];
 };
 layer.getOpacity = function() { return 1;};
 map.addOverlay(new GTileLayerOverlay(layer));
 var query = '';
 var flickr_url = 'http://www.flickr.com/';
 if (type == '0') {
  query = '?tag=' + q;
  flickr_url += 'search/?m=tags&q=' + q;
 }
 else if (type == '1') {
  query = '?text=' + q;
  flickr_url += 'search/?m=text&q=' + q;
 }
 else if (type == '2') {
  query = '?username=' + q;
  flickr_url += 'photos/' + q + '/';
 }
 $('this_url').innerHTML = '<a href="'+query+'">URL of this slide show</a>';
 $('go_flickr').innerHTML = '<a href="'+flickr_url+'" target="_blank">Open these photos by Flickr</a>';
}

function clickObserver(event) {
 event = event || window.event;
 target = event.target || event.srcElement;
 if ($("show-detail").checked && target.src) {
  if (target.src.match(/^http:\/\/static\.flickr\.com\/.+\/([0-9a-z]+)_[0-9a-z]+\.jpg$/)) {
   var iframe = document.createElement("iframe");
   iframe.src = ['http://www.flickr.com/photos/', owner_id[target.src], '/', RegExp.$1].join('');
   with(iframe.style) {
    width = "820px";
    height = "440px";
   }
   $("iframe-container").appendChild(iframe);
   $("iframe-container").style.display = 'block';
   return;
  }
 }
}

function iframeClose() {
 var ic = $("iframe-container");
 ic.removeChild(ic.lastChild);
 ic.style.display = 'none';
}

window.onload = callFlickr;
$("map").onclick = clickObserver;


