// Route Handlers

function showArchive(context) {
  //log("showArchive");
  if (!loginOK()) return;
  setSelectedCategory(''); 
  _fv.data.set('category-selected', ''); 
  $("#cf-top-content").load("/index/thumbnails", adjustThumbs);
  $("#cf-dynamic-content").html("<div class='cf-wrapper cf-loading'></div>");
  _fv.data.set('page',_fv.app.getLocation())
  var params = context.params;
  var url = "/index/fullpage-widget";
  var count = 21;
  url += "/count/" + count;
  if (params.page)
    url += "/from/" + count * parseInt(params.page);
  if (params.feed)
    url += "/feed/" + params.feed;
  $("#cf-dynamic-content").load(url, function(data, status){if (status == "error") showArchive(context)});
}

function showCat(context) {
  if (!loginOK()) return;
  $("#cf-top-content").load("/index/thumbnails/cat/"+context.params["cat"], adjustThumbs);
  //$.getJSON('/index/category-list/content/only',updateCategoryBar);
  $("#cf-dynamic-content").html("<div class='cf-wrapper cf-loading'></div>");
  _fv.data.set('page',_fv.app.getLocation())
  setSelectedCategory(context.params["cat"]); 
  _fv.data.set('widgets', _fv.site.layout);
  var params = context.params;
  var url = "/index/render";
  var cat = (params.cat ? params.cat : _fv.data.get("category-selected"));
  if (cat && cat != "home")
    url += "/cat/" + cat;
  if (params.images)
    url += "/images/" + params.images;
  if (params.skip)
    url += "/from/" + params.skip;
  if (params.count)
    url += "/count/" + params.count;
  $("#cf-dynamic-content").load(url, function(data, status){
    if (status == "error") {
      showCat(context)
    } else {
      showFeedTab(context);
      showVideoTab(cat);
    }
  });
}

function showHome(context) {
  if (!loginOK()) return;
  $("#cf-top-content").load("/index/thumbnails", adjustThumbs);
  //$.getJSON('/index/category-list/content/only',updateCategoryBar);
  $("#cf-dynamic-content").html("<div class='cf-wrapper cf-loading'></div>");
  _fv.data.set('page',_fv.app.getLocation())
  setSelectedCategory('home'); 
  _fv.data.set('widgets', _fv.site.layout);
  _fv.pageLoaded = true;
  var params = context.params;
  var url = "/index/render";
  var cat = (params.cat ? params.cat : _fv.data.get("category-selected"));
  if (cat && cat != "home")
    url += "/cat/" + cat;
  if (params.images)
    url += "/images/" + params.images;
  if (params.skip)
    url += "/from/" + params.skip;
  if (params.count)
    url += "/count/" + params.count;
  $("#cf-dynamic-content").load(url, function(data, status){if (status == "error") showHome(context);});
}

function removeThumb() {
  if (!($(this).parents(".cf-thumbnail").hasClass("hidden")))
    $(this).find("#cf-top-content .cf-thumbnail.hidden").first().removeClass("hidden");
  $(this).parents(".cf-thumbnail").remove();
}

function rotateThumbs() {
  var prev = $(this).hasClass("prev");
  for (ii = 0; ii < 4; ii++) {
    if (prev) {
      var el = $(".cf-thumbnail").last().removeClass("hidden").remove();
      $(".cf-thumbnail").first().before(el);
      $(".cf-thumbnail:not(.hidden)").last().addClass("hidden");
    } else {
      var el = $(".cf-thumbnail").first().addClass("hidden").remove();
      $(".cf-thumbnail.hidden").last().after(el);
      $(".cf-thumbnail.hidden").first().removeClass("hidden");
    }
  }
  $(".cf-thumbnail:not(.hidden)").each(function() {
    adjustThumb(this);
  });
}

function adjustThumb(el) {
    var el = $(el);
    var divX = el.find("div").width();
    var imgX = el.find("img").width();
    var imgY = el.find("img").height();
    if (divX > imgY) {
      var scale = divX / imgY;
      imgX = scale * imgX;
      imgY = scale * imgY;
      el.find("img").css("width", imgX).css("height", "auto");
    }
    if (imgX > divX || imgX > imgY) el.find("img").css("margin-left", (divX-imgX)/2);
    else if (divX > imgX) el.find("img").css("width", divX).css("height", "auto");
}

function showInfo(context) {
  if (!loginOK()) return;
  $("#cf-top-content").load("/index/thumbnails", adjustThumbs);
  //$.getJSON('/index/category-list/content/only',updateCategoryBar);
  _fv.data.set('page',_fv.app.getLocation())
  setSelectedCategory(''); 
  _fv.data.set('widgets', [{"widget":"info","width":3,"height":4,"x":1,"y":1,"data":context.params["page"]}]);
  loadContent();
}

function showLink(context) {
  if (!loginOK()) return;
  $("#cf-top-content").load("/index/thumbnails", adjustThumbs);
  //$.getJSON('/index/category-list/content/only',updateCategoryBar);
  _fv.data.set('page',_fv.app.getLocation())
  _fv.data.set('widgets', [{"widget":"link","width":3,"height":4,"x":1,"y":1,"data":context.params["id"]}]);
  loadContent();
}

function firstVisit(context) {
  //fetch("/mashr/preload/id/"+_fv.site['hostname'], 1);
  bouncePage();
}

function loadContent(context) {}

function accountMenu(context) {
  //display menu
  bouncePage();
}

function showSearch(context) {
  _fv.data.set('page',_fv.app.getLocation())
  loadContent();
}

function showSubcat(context) {
  _fv.data.set('page',_fv.app.getLocation())
  loadContent();
}

function showTag(context) {
  _fv.data.set('page',_fv.app.getLocation())
  loadContent();
}

function showSlide(context) {
  if ($(".cf-slide.item-"+context.params["id"]).length) {
    $(".cf-dynamic-content-gallery-items a").removeClass("selected");
    $("[href='#slide/"+context.params["id"]+"']").addClass("selected");
    $(".cf-slide.curr").hide().removeClass("curr").find(".cf-dynamic-content-gallery-caption").animate({"opacity":0}, {"duration":2500});
    $(".cf-slide.item-"+context.params["id"]).show('fast').addClass("curr").find(".cf-dynamic-content-gallery-caption").animate({"opacity":0.85}, {"duration":2500});
  } else {
  	bouncePage()
  }
  pauseSlideshow();
}

function popupStub() {
  bouncePage();
}

function popupFacebook() {
  if (_fv.site.authenticated) {
    FB.login(function(){window.location.reload();});
  } else { 
    path = '/oauth/facebook/authenticate';
    windowName = 'FacebookOAuth';
    windowOptions = 'location=0,status=0,width=900,height=500';
    _oauthWindow = window.open(path, windowName, windowOptions);
    _oauthInterval = window.setInterval(function(){
      if (!_oauthWindow || _oauthWindow.closed) {
        window.clearInterval(_oauthInterval);
        window.location.reload();
      }
    }, 1000);
  }
  return false;
}

function popupGoogle() {
  path = '/oauth/google/authenticate';
  windowName = 'GoogleOAuth';
  windowOptions = 'location=0,status=0,width=900,height=500';
  _oauthWindow = window.open(path, windowName, windowOptions);
  _oauthInterval = window.setInterval(function(){
    if (!_oauthWindow || _oauthWindow.closed) {
      window.clearInterval(_oauthInterval);
      window.location.reload();
    }
  }, 1000);
  return false;
}

function popupICTMN() {
  path = '/oauth/ictmn/authenticate';
  windowName = 'ICTMNAuth';
  windowOptions = 'location=0,status=0,width=900,height=500';
  _oauthWindow = window.open(path, windowName, windowOptions);
  _oauthInterval = window.setInterval(function(){
    if (!_oauthWindow || _oauthWindow.closed) {
      window.clearInterval(_oauthInterval);
      window.location.reload();
    }
  }, 1000);
  return false;
}

function popupTwitter() {
  path = '/oauth/twitter/authenticate';
  windowName = 'TwitterOAuth';
  windowOptions = 'location=0,status=0,width=900,height=500';
  _oauthWindow = window.open(path, windowName, windowOptions);
  _oauthInterval = window.setInterval(function(){
    if (!_oauthWindow || _oauthWindow.closed) {
      window.clearInterval(_oauthInterval);
      window.location.reload();
    }
  }, 1000);
  return false;
}

function doLogout(context) {
  FB.logout();
  $.get("/account/logout", function() {
    bouncePage();
    window.location.reload();
  });
}

function popupLogin(context) {
  if ($("#cf-login-dialog").size()) 
    popup = $("#cf-login-dialog");
  else  
    popup = $("<div id='cf-login-dialog'></div>").load("/account/loginform", function(){window.setTimeout(function(){$(".cf-oauth.cf-facebook").each(function(){FB.XFBML.parse(this);});}, 100);}).dialog({ autoOpen: false , title: _fv.site['name'], modal: true, overlay: { backgroundColor: '#000', opacity: 0.1 } });
  popup.dialog('open');
  
  bouncePage('#');
}

function postTwitter() {
  window.open("http://twitter.com/share?url=http://"+_fv.site.hostname+"&text=Check out My Mashr!", "mashrShare", "width=550,height=320");
}

function postTwitterStub() {
  bouncePage();
}

function postFacebook() {
  FB.ui(
    {
      method: 'stream.publish',
      message: "Check out my new Mashr! If you'd like your own Mashr, click the 'Get Your Own Mashr' button.",
      attachment: {
        name: 'Mashr.me',
        caption: 'My Sites. My Mix.',
        description: (
          'Mashr is a ...'
        ),
        href: 'http://' + _fv.site.hostname
      }
    }
  );  
  bouncePage();
}

//
// Social Networks
//

function addSocial(context) {
  var url = "/mashr/update/do/add-social/";
  $.get(url, {
    id: _fv.site.id,
    network: context.params["network"]
  }, function() {setTimeout(function() {bouncePage(0,1); }, 500);});
}

// Widget Handlers

function socialLinksWidget(index, params) {
  $.get("/index/social-links-widget", function(data) {
    insertWidget(index, params, data);
  });
}

function fullpageWidget(index, params) {
  var url = "/index/fullpage-widget";
  var cat = (params.cat ? params.cat : _fv.data.get("category-selected"));
  if (cat && cat != "home")
    url += "/cat/" + cat;
  if (params.images)
    url += "/images/" + params.images;
  if (params.skip)
    url += "/from/" + params.skip;
  if (params.count)
    url += "/count/" + params.count;
  $.get(url, function(data) {
    insertWidget(index, params, data);
    FB.XFBML.parse();
    $(".cf-dynamic-content-detail-social").removeClass("hidden");
  });
}

function detailWidget(index, params) {
  var url = "/index/detail-widget";
  var cat = (params.cat ? params.cat : _fv.data.get("category-selected"));
  if (cat && cat != "home")
    url += "/cat/" + cat;
  if (params.images)
    url += "/images/" + params.images;
  if (params.skip)
    url += "/from/" + params.skip;
  if (params.count)
    url += "/count/" + params.count;
  $.get(url, function(data) {
    insertWidget(index, params, data);
    FB.XFBML.parse();
    $(".cf-dynamic-content-detail-social").removeClass("hidden");
  });
}

function linkWidget(index, params) {
  $.get("/index/link/id/"+params["data"], function(data) {
    insertWidget(index, params, data);
  });
}

function featuredWidget(index, params) {
  var url = "/index/featured-widget/images/only";
  var cat = (params.cat ? params.cat : _fv.data.get("category-selected"));
  if (cat && cat != "home")
    url += "/cat/" + cat;
  if (params.skip)
    url += "/from/" + params.skip;
  $.get(url, function(data) {
    insertWidget(index, params, data);
    $(".cf-dynamic-content-featured-item-image a").fancybox({'titlePosition' : 'over'});
  });
}

function infoWidget(index, params) {
  $.get("/index/info/page/"+params["data"], function(data) {
    insertWidget(index, params, data);
  });
}

function slideshowWidget(index, params) {
  if ($("#widget-" + index + " .cf-slideshow-widget").size()) 
    return;
  var url = "/index/slideshow-widget";
  var cat = (params.cat ? params.cat : _fv.data.get("category-selected"));
  if (cat && cat != "home")
    url += "/cat/" + cat;
  if (params.skip)
    url += "/from/" + params.skip;
  if (params.images)
    url += "/images/" + params.images;
  if (params.count)
    url += "/count/" + params.count;
  $.get(url, function(data) {
    insertWidget(index, params, data);
  });
}

function initSlideshow() {
  $(".cf-dynamic-content-gallery-caption").css({"opacity":0});
  //$(".cf-dynamic-content-gallery-main").mouseover(function() {
  //  $(this).find(".cf-dynamic-content-gallery-caption").animate({"opacity":1});
  //});
  //$(".cf-dynamic-content-gallery-main").mouseleave(function() {
  //  $(this).find(".cf-dynamic-content-gallery-caption").animate({"opacity":0});
  //});
  unpauseSlideshow();
  var id = _fv.data.get("slideshowTimer");
  if (!id) {
    //rotateSlideshow();
    $(".cf-slide:visible .cf-dynamic-content-gallery-caption").animate({"opacity":0.85}, {"duration":1500});
    id = window.setInterval(rotateSlideshow, 8000);
    _fv.data.set("slideshowTimer", id);
    _fv.data.set("slideshowPaused", false);
    $(".cf-slideshow-widget-thumbs img").each(function() {
      var me = $(this);
      var imgY = me.height();
	  var widgetY = me.parent().height();
	  if (imgY > widgetY)
	    me.css("margin-top", (widgetY - imgY)/2);
	 
    }); 
  }
  var currItem = $(".cf-dynamic-content-gallery-main .curr").find("a").attr("class");
  $("[href='#slide/"+currItem+"']").addClass("selected");
}

function pauseSlideshow() {
  _fv.data.set("slideshowPaused", "paused");
}

function unpauseSlideshow() {
  _fv.data.set("slideshowPaused", false);
}

function rotateSlideshow() {
  var paused = _fv.data.get("slideshowPaused");
  if (paused) 
    return;
  $(".cf-dynamic-content-gallery-main").each(function() {
    var me = $(this)
    var curr = me.find(".cf-slide.curr");
    if (!curr.length)
      curr = me.find(".cf-slide").first();
    var next = curr.next().length ? curr.next() : me.find(".cf-slide").first();
    curr.fadeOut(600).removeClass("curr").find(".cf-dynamic-content-gallery-caption").animate({"opacity":0}, {"duration":1500});
    next.addClass("curr").fadeIn(1800);
    next.find(".cf-dynamic-content-gallery-caption").animate({"opacity":0.85}, {"duration":1500});
    var currItem = curr.find("a").attr("class");
    var nextItem = next.find("a").attr("class");
    $(".cf-dynamic-content-gallery-items a").removeClass("selected");
    $("[href='#slide/"+nextItem+"']").addClass("selected");
/*
    var imgY = next.find("img").height();
    var widgetY = me.parents(".cf-dynamic-content-gallery-main").height();
    if (imgY > widgetY)
    	next.find("img").css("margin-top", (widgetY - imgY)/2);
*/
  });
}

function listWidget(index, params) {
  var url = "/index/list-widget";
  var cat = (params.cat ? params.cat : _fv.data.get("category-selected"));
  if (cat && cat != "home")
    url += "/cat/" + cat;
  if (params.images)
    url += "/images/" + params.images;
  if (params.skip)
    url += "/from/" + params.skip;
  if (params.count)
    url += "/count/" + params.count;
  $.get(url, function(data) {
    insertWidget(index, params, data);
  });
}

function adWidget(index, params) {
  var url = "/index/ad-widget/openx/" + params.openx + "/zone/" + params.zone;
  insertWidget(index, params, "<iframe width='320' height='280' scrolling='no' frameborder='0' src='" + url + "'></iframe>");
}

function sourceWidget(index, params) {
  if ($("#widget-" + index + ".cf-feed-widget").size()) 
    return;
  var url = "/index/source-widget/";
  $.get(url, function(data) {
    insertWidget(index, params, data);
    justifyTabs($("#widget-" + index));
  });
}

function feedWidget(index, params) {
  if ($("#widget-" + index + ".cf-feed-widget").size()) 
    return;
  var url = "/index/feed-widget/count/" + params.count;
  $.get(url, function(data) {
    insertWidget(index, params, data);
    justifyTabs($("#widget-" + index));
  });
}

function realignTabs(el) {
  var tabs = $.makeArray(el.find(".cf-dynamic-content-tabs a"));
  var topLine = Array();
  var others = Array();
  var lineNum = 0;
  var lastTop = $(tabs[0]).position().top;
  for (var ii = 0; ii < tabs.length; ii++) {
    var position = $(tabs[ii]).position();
    if (position.top != lastTop) {
      lastTop = position.top;
      lineNum++;
    }
    if (lineNum)
    	others.push(tabs[ii]);
    else
    	topLine.push(tabs[ii]);
  }
  if (others.length) {
    others.push(topLine.pop());
    var dropdown = $('<a class="cf-widget-tab" href="#more">More</a>');
    var list = $('<ul class="drop"></ul>');
    el.find(".cf-dynamic-content-tabs").append(dropdown).append(list);
    $.each(others, function(kk,vv) {
      list.append($("<li>").append($(vv).removeClass("cf-widget-tab").remove()));
    });
    var total = 0;
    var items = el.find(".cf-dynamic-content-tabs a.cf-widget-tab").get();
    $.each(items, function(kk,vv){
    	total += $(vv).outerWidth();
    });
    var add = Math.floor((el.width() - total)/items.length);
   $.each(items, function(kk,vv){
    	$(vv).width($(vv).width()+add-6);
    });
  }
}

function dropdownMore(e) {
  e.preventDefault();
  var list = $(this).siblings(".drop").clone().addClass("more");
  $("body").append(list);
  list.css("position","absolute");
  var offset = $(this).offset();
  offset.left = offset.left + $(this).outerWidth() - 200;
  offset.top = offset.top + $(this).height();
  $(list).offset(offset);
  $(list).show();
  $("body").one("click", function() {$(".drop.more").remove();});
  return false;
}

function justifyTabs(el) {
  var tabs = $.makeArray(el.find(".cf-dynamic-content-tabs a"));
  //log("justify : " + tabs.length);
  var lines = Array();
  var lineNum = 0;
  lines[lineNum] = Array();
  //lastTop -> y coordinate
  var lastTop = $(tabs[0]).position().top;
  for (var ii = 0; ii < tabs.length; ii++) {
    var position = $(tabs[ii]).position();
    if (position.top != lastTop) {
      //log("new line!");
      lastTop = position.top;
      lineNum++;
      lines[lineNum] = Array();
    }
    lines[lineNum].push(tabs[ii]);
  }
  //Find total width of tabs
  for (var ii = 0; ii < lines.length; ii++) {
  	var totalLength = 0;
  	for (var jj = 0; jj < lines[ii].length; jj++) {
  		totalLength += (0+($(lines[ii][jj]).outerWidth(true)));
  	}
  	var parentLength = el.find(".cf-dynamic-content-tabs").width();
  	var barPadding = Math.floor((parentLength - totalLength)/lines[ii].length);
  	//log("Total width for line " + ii + " is " + totalLength + "; parent width is " + parentLength + "; adding " + barPadding + " to " + lines[ii].length + " elements.");
  	for (var kk = 0; kk < lines[ii].length; kk++) {
  		var justifiedTabs = $(lines[ii][kk]).width() + barPadding;
  		$(lines[ii][kk]).width(justifiedTabs);
  		//log("adding " + barPadding + " to " + $(lines[ii][jj]).find("a").text());
  	}
  }

}

function showFeedTab(context) {
  if ($(".cf-loading").length) { 
    $.ajax({url:"/index/render", async:false, success: function(data) {$("#cf-dynamic-content").html(data);}}); 
    $("#cf-top-content").load("/index/thumbnails", adjustThumbs); 
  }
  var cat = context.params["cat"];
  $(".cf-widget-tab").removeClass("selected");
  $(".cf-widget-tab."+cat).addClass("selected");
  $(".cf-dynamic-content-items").addClass("hidden");
  $(".cf-dynamic-content-items."+cat).removeClass("hidden");
 //bouncePage();
}

function hypemachineWidget(index, params) {
  var url = "/index/hypemachine-widget/";
  insertWidget(index, params, "<iframe width='320' height='280' scrolling='no' frameborder='0' src='" + url + "'></iframe>");
}

function fandangoWidget(index, params) {
  var url = "/index/fandango-widget/";
  insertWidget(index, params, "<iframe width='320' height='280' scrolling='no' frameborder='0' src='" + url + "'></iframe>");
}

function amazonWidget(index, params) {
  var url = "/index/amazon-widget/";
  insertWidget(index, params, "<iframe width='320' height='280' scrolling='no' frameborder='0' src='" + url + "'></iframe>");
}

function grouponWidget(index, params) {
  var url = "/index/groupon-widget/";
  insertWidget(index, params, "<iframe width='320' height='280' scrolling='no' frameborder='0' src='" + url + "'></iframe>");
}

function netflixWidget(index, params) {
  var url = "/index/netflix-widget/";
  insertWidget(index, params, "<iframe width='320' height='280' scrolling='no' frameborder='0' src='" + url + "'></iframe>");
}

function facebookWidget(index, params) {
  var widget = $("<img class='cf-social-icon' src='/static/img/facebook-icon.png' /><div class='cf-scroll'></div>");
  var empty = true;
  FB.api('/me/home', function(response) {
    if (response && response.data && response.data.length) {
      if (!_fv.site.authenticated) {
      	widget.append("<div class='cf-oauth cf-facebook' style='width: 180px; margin: auto;'><a href='#facebook'><img src='/static/img/fblogin."+_fv.site.locale+".png' /></a></div>");          
      	empty = false;
      } else {
        for (ii in response.data) {
          try {
            item = response.data[ii];
            link = item.link ? item.link : item.actions ? item.actions[0].link : false;
            text = item.message ? item.message : item.name ? item.name : "[" + item.type + "]";
            widget.append("<div class='cf-social'><img class='cf-social-img' src='http://graph.facebook.com/" + item.from.id + "/picture' alt='" + item.from.name + "'><p class='cf-social-text'>" + (link ? "<a class='cf-social-link' target='_blank' href='" + link + "' alt='" + item.from.name + "'>" : "") + text + (link ? "</a>" : "") + "</p></div>");
            empty = false;
          } catch(err) {
	  }
        }
      }
    }
    if (empty) {
      widget.append("<div class='cf-oauth cf-facebook' style='width: 180px; margin: auto;'><fb:login-button perms='read_stream,publish_stream,email'>Login with Facebook</fb:login-button></div>");
    }
  });
  insertWidget(index, params, widget); 
  if (empty)
    window.setTimeout(function(){$(".cf-oauth.cf-facebook").each(function(){FB.XFBML.parse(this);});}, 100);
  //resetSocialWidget()
}

function twitterWidget(index, params) {
  var url = "/index/twitter-widget/";
  $.get(url, function(data) {
    insertWidget(index, params, data);
  });
}

function socialWidget(index, params) {
  var url = "/index/social-widget/";
  $.get(url, function(data) {
    insertWidget(index, params, data);
    $(".cf-oauth.cf-facebook").each(function(){FB.XFBML.parse(this);});
    FB.api('/me/home', function(response) {
      if (response && response.data && response.data.length) {
      	var widget = $("<div></div>");
        for (ii in response.data) {
	  try {
	    item = response.data[ii];
	    link = item.link ? item.link : item.actions ? item.actions[0].link : false;
	    text = item.message ? item.message : item.name ? item.name : "[" + item.type + "]";
            widget.append("<div class='cf-social'><img class='cf-social-img' src='http://graph.facebook.com/" + item.from.id + "/picture' alt='" + item.from.name + "'><p class='cf-social-text'>" + (link ? "<a class='cf-social-link' target='_blank' href='" + link + "' alt='" + item.from.name + "'>" : "") + text + (link ? "</a>" : "") + "</p></div>");
	  } catch(err) { }

        } 
	$("#social-widget-login").replaceWith(widget);
      } else {
        $("#social-widget-login").show();
      }
    });  
  });
}

function videoWidget(index, params) {
  if ($("#widget-" + index + ".cf-dynamic-content-videos").size()) 
    return;
  var url = "/index/video-widget";
  $.get(url, function(data) {
    insertWidget(index, params, data);
    justifyTabs($("#widget-" + index));
  });
}

function loadPlayer(videoID) {
  if (!videoID)
    if (_fv.videos)
      videoID = _fv.videos[0];
  if (videoID) 
    swfobject.embedSWF("http://www.youtube.com/v/" + videoID + "&enablejsapi=1&playerapiid=player1", "videoDiv", "288", "190", "8", null, null, { allowScriptAccess: "always", wmode:"transparent" }, { id: "ytPlayer" });
  else 
    setTimeout(loadPlayer,500);
}

function onYouTubePlayerReady() {
  _fv.videoPlayer = document.getElementById("ytPlayer");
}

function selectVideo(e) {
  e.preventDefault();
  var cat = $(this).attr("href").replace(/#.*\//, '');
  showVideoTab(cat);
  return false;
}

function showVideoTab(cat) {
  cueYT(_fv.videos[cat]);
}

function cueYT(id) {
 if (_fv.videoPlayer && _fv.videoPlayer.cueVideoById) _fv.videoPlayer.cueVideoById(id);
 else setTimeout(function(){cueYT(id)},50);
}

function showEditOverlay() {
  var overlay = $("#tpl .edit-overlay").clone();
  var pinned = $(this).parents(".editable").hasClass("pinned");
  if (pinned) {
    $(overlay).find(".toggle-item").text("DON'T KEEP this item on the front page");
  }
  $(".edit-link .edit-overlay").remove();
  $(".edit-link").append(overlay);
  return false;
}

function showEditLink() {
  var link = $("<a class='edit-link' href='#'><img src='/static/common/images/edit.png'></a>");
  $(this).prepend(link);
}

function hideEditLink() {
  $(".edit-link").remove();
}

function deleteItem() {
  var item = $(this).parents(".editable").attr("item");
  $.ajax({
    url:"/settings/delete-item/item/"+item,
    async:false,
    success:bouncePage
  });
  hideEditLink();
  return false;
}

function deleteItemFeed() {
  var item = $(this).parents(".editable").attr("item");
  $.ajax({
    url:"/settings/delete-item-feed/item/"+item,
    async:false,
    success:bouncePage
  });
  hideEditLink();
  return false;
}

function toggleItem() {
  var item = $(this).parents(".editable").attr("item");
  var pinned = $(this).parents(".editable").hasClass("pinned");
  $.ajax({
    url:"/settings/toggle-item-pin/item/"+item+"/pinned/"+pinned,
    async:false,
    success:bouncePage
  });
  hideEditLink();
  return false;
}

function toggleMoreSources() {
  $(this).parent().find(".cf-more-sources").toggle();
  $(this).text($(this).text() == _fv.site["msg"]["more"] ? _fv.site["msg"]["hide"] : _fv.site["msg"]["more"]);
}

function validateLogin() {
  var username = $("#login_username").val();
  var password = $("#login_password").val();
  if(!username.length) {
    $(".errmsg.logerr").html(_fv.site["msg"]["You must enter your email address"]);
    return false;
  }
  if(!password.length) {
    $(".errmsg.logerr").html(_fv.site["msg"]["You must enter your password"]);
    return false;
  }
  $(".errmsg.logerr").html("");
  $.post("/account/authenticate", {username:username,password:password}, function(data) {
    if (data.email) {
      window.location.reload(1);
    } else {
      $(".errmsg.logerr").html(data.error);
    }
  }, "json");
  return false;
}

// Page Element Handlers
function updateWidgets(e,data) {
  $("#cf-dynamic-content .cf-wrapper").not(".persistent").remove();
  $.each(data.value, function(kk,vv) {
    if (vv.widget) {
      if (window[vv.widget+"Widget"]) {
        window[vv.widget+"Widget"](kk,vv);
      } else if (window.console) {
        window.console.log("Widget handler not found: " + vv.widget);
      }
    }
  });
}

function insertWidget(index, params, data) {
    $("#widget-"+index).remove();
    var el = $("<div></div>");
    $("#cf-dynamic-content").append(el);
    el.attr("id", "widget-"+index).addClass("cf-wrapper cf-h"+params.height+" cf-w"+params.width+" cf-x"+params.x+" cf-y"+params.y).html(data);
    if (params.classes)
    	el.addClass(params.classes);
    return el;
}

function updateCategoryBar(data) {
  //log("updateCategoryBar");
  $("#cf-category-links a.dynamic").addClass('stale');
  if (data) $.each(data, function(kk,vv) {
      var el = $("<a class='dynamic dropdown cat-"+kk+"' href='#browse/"+kk+"'>"+vv["name"]+"</a>");
      //var sources = $("<ul><li><a href='#archive'>Test</a></li><li><a href='#archive'>Test2</a></li></ul>");
      var sources = $("<ul></ul>");
      var source_count = 0;
      if (vv["sources"]) $.each(vv["sources"], function(_kk, _vv) {
        if (_vv["count"]) {
          sources.append("<li><a href='#archive/"+_vv["id"]+"'>"+_vv["title"]+"</a></li>");
	  source_count++;
	}
      });
      if (source_count) {
        el.append(sources);
      }
      if ($("#cf-category-links [href='/mashr#settings/feeds']").length) {
        $("#cf-category-links [href='/mashr#settings/feeds']").before(el);
      } else { 
        $("#cf-category-links .end").before(el);
      }
  });
  $("#cf-category-links a.stale").remove();
  $("#cf-top-content .next").click();
  $("#cf-top-content .prev").click();
}

function updateCategoryBarSelected(e,data) {
  //log("updateCategoryBarSelected");
  var cat = _fv.data.get("category-selected");
  var oldLink = $("#cf-category-links a.selected");
  var newLink = $("#cf-category-links a.cat-"+cat);
  oldLink.removeClass("selected");
  newLink.addClass("selected");
}

function keypressSocialSearch(data) {
  if(data.which == 13) return false;
}

function keyupSocialSearch(data) {
  var prefix = $(this).val().toLowerCase();
  $(".cf-social-list li").each(function() {
    var name = $(this).text().toLowerCase();
    if (name.indexOf(prefix) === 0) {
      $(this).removeClass("hidden");
    } else {
      $(this).addClass("hidden");
    }
  });
}

function log(msg) {
  if (window.console) window.console.log(msg);
}

function loginOK() {
  if (_fv.site.sharing == "private" && _fv.site.authenticated == false) {
    _fv.app.setLocation('#account/login'); 
    return false;
  }
  return true;
}

function lightboxStub(context) {
  showLightbox(context.params["id"]);
  bouncePage();
}

function adjustThumbs() {
  if (_fv.thumbs) clearInterval(_fv.thumbs);
  if ($(".cf-thumbnail").length) { 
    _fv.thumbs = setInterval(function() { $(".cf-thumbnail:not(.hidden)").each(function() { adjustThumb(this); }); }, 200);
    $("#cf-top-content").slideDown("fast");
  } else {
    $("#cf-top-content").slideUp("fast");
  }
}

function lightboxLink(context) {
  var id = context.params["id"]; //$(this).attr("href").replace(/#.*\//, '');
  showLightbox(id);
  showHome(context);
  return false;
}
function showLightbox(id) {
  if (!loginOK()) return;
  $("#cf-top-content").load("/index/thumbnails", adjustThumbs);
  $.get("/index/item/id/"+id, function(data) {
    if (!data || !data.title) return;
    var title = data.title.replace(/\'/g, "&rsquo;");
    var isPublic = (_fv.site.sharing == "public");
    var permalink = isPublic ? "http://"+window.location.hostname+"/#lightbox/"+id : data.item_url;
    var sharing = 
      "<hr />";
      if (_fv.site.disqus) 
      sharing += "<div id='disqus_thread' style='min-height:300px'></div>" + 
      "<script type='text/javascript'>" + 
          "var disqus_shortname = 'customerforce';" + 
          "var disqus_url = '" + data.item_url + "';" + 
          "(function() {" + 
              "var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;" + 
              "dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';" + 
              "(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);" + 
          "})();" + 
      "</script>";
      sharing += "<span class='share'><a href='http://twitter.com/share' class='twitter-share-button' data-text='"+title+"' data-url='"+permalink+"' data-count='none'>Tweet</a></span>" +
      "<script type='text/javascript' src='http://platform.twitter.com/widgets.js'></script>" +
      "<span class='share'><fb:like href='"+permalink+"' width='300px' layout='standard' show_faces='false' action='like' colorscheme='light' /></span>" +
      "";
    $.fancybox({
      'href' : data.item_url,
      'width' : 1024,
      'height' : (_fv.site.disqus ? '60%' : '90%'),
      'title' : sharing,
      'titlePosition' : 'inside',
      'transitionIn' : 'none',
      'transitionOut' : 'none',
      'type' : 'iframe',
      'onComplete' : function() {
        FB.XFBML.parse();
	var offset = $("#fancybox-wrap").offset(); 
	if (_fv.site.disqus) {
		$("body").scrollTop(0);
		_fv.fancyTimer = setInterval(function(){$("#fancybox-wrap").offset({left:offset.left,top:10});},100);
	}
      },
      'onClosed' : function() {
	if (_fv.site.disqus) {
	  clearInterval(_fv.fancyTimer);
	}
      }
    });
  }, "json");
  return false;
}

function reportPage(e) {
  e.preventDefault();
  var url = encodeURIComponent(window.location.href);
  window.location.href = "/support?reportContent=" + url;
  return false;
}

function showIntro(e, link) {
  if (typeof link === "undefined") {
    link = _fv.site.video;
  }
  $("#introWrapper").replaceWith('<iframe id="introWrapper" width="458" height="255" src="'+link+'" frameborder="0" allowfullscreen class="shayd"></iframe>');
}

function validateEmail(email) {
  //validate email address
  return email ? email.match(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i) : false;
}


function passwordReset(e) {
  e.preventDefault();
  var email = $("#email").val();
  var emailConfirm = $("#email-confirm").val();
  if (!email || !validateEmail(email)) {
    $(".password-reset-popup .flash").text("You must enter a valid email address to proceed");
  } else if (email != emailConfirm) {
    $(".password-reset-popup .flash").text("Email addresses do not match");
  } else {
    $(".password-reset-popup .flash").text("Working...");
    $.post("/account/reset", {email:email}, function(data) {
      if (data.email) {
        $("#fancybox-close").click();
      } else {
        $(".password-reset-popup .flash").text(data.error);
      }
    }, "json");
  }
  return false;
}

function showMySites(e) {
  e.preventDefault();
  $(".my").slideDown();
  $("body").one("click", function() {$(".my").slideUp();});
  return false;
}

function doSearch(e) {
  e.preventDefault();
  var q = $(".search-box .catch").val();
  if (q.length) {
    var url = "/index/search?q=" + q
    $("#cf-dynamic-content").load(url, function(data, status){if (status == "error") doSearch(e);}); 	
    //$(".search-box .catch").val('');
  }
  return false;
}
function submitSearch(e) {
  if (e.which == 13) {
    $(this).next().click();
    return false;
  }
}

function searchPage(e) {
  e.preventDefault();
  var from = $(this).attr("data-from");
  var q = $(this).attr("data-term");
  if (q.length) {
    $(".cf-search .title").text("Searching...");
    var url = "/index/search?q=" + q + "&from=" + from;
    $("#cf-dynamic-content").load(url, function(data, status){if (status == "error") doSearch(e);}); 	
  }
  return false;
}

//xyzzy

// Data Handlers
function fetch(url, flush) {
  if (flush)
  	_fv.data.clear(url);
  if (url && !(_fv.data.exists(url))) {
    $("body").addClass("cf-working");
    $.getJSON(url, function(data){
      _fv.data.set(url, data);
      $("body").removeClass("cf-working");
    });
  }
}

// Utility Functions
function displayParams(context) {
  $.each(context.params, function(kk, vv) {
    if (!$.isFunction(vv))
      alert(kk + " -> " + vv);
  });
}

function bouncePage(page, reload) {
  if (reload) {
    window.location.href = "/";
    return;
  }
  if (!page)
    page = _fv.data.get('page');
  if (!page)
    page = "#home";
  _fv.app.setLocation(page);
  initSlideshow();
}

function setSelectedCategory(cat) {
  var oldLink = $("#cf-category-links a.selected");
  var newLink = $("#cf-category-links a.cat-"+cat);
  oldLink.removeClass("selected");
  newLink.addClass("selected");
}

// Dropdowns
$(function(){
    $(".dropdown").live("mouseover", function(){
        $(this).addClass("hover");
        $(this).find("ul").css('visibility', 'visible');
      }).live("mouseout", function(){
        $(this).removeClass("hover");
        $(this).find("ul").css('visibility', 'hidden');
      });
});

// Facebook Init
$(function() {
  FB.init({appId: _fv.site.facebook.appid, status: true, cookie: true, xfbml: true});
  FB.Event.subscribe('auth.sessionChange', function(response) {
    if (response.session) {
      $.ajax({url:"/oauth/facebook/authenticate", success: function() {
        bouncePage();
        window.location.reload();
      }});
    } else {
      $.ajax({url:"/oauth/facebook/logout", success: function() {
        bouncePage();
      window.location.reload();
      }});
    }
  });
});

$.fancybox.init();

// Sammy
_fv.app = $.sammy(function() {
  // initialize plugins
  this.use(Sammy.GoogleAnalytics);
  this.use(Sammy.Storage);

  //set routes
  this.get('#home', showHome);
  this.get('#account', accountMenu);
  this.get('#account/login', popupLogin);
  this.get('#account/logout', doLogout);
  //this.get("#twitter", popupStub);
  //this.get("#google", popupStub);
  //this.get("#ictmn", popupStub);
  //this.get("#facebook", popupStub);
  this.get('#link/:id', lightboxLink);
  this.get('#info/:page', showInfo);
  this.get('#feed/:cat', showFeedTab);
  this.get('#refresh', loadContent);
  this.get('#archive/:feed', showArchive);
  this.get('#archive/:feed/page/:page', showArchive);
  this.get('#browse/:cat', showCat);
  this.get('#browse/:cat/page/:page', showCat);
  this.get('#browse/:cat/:subcat', showSubcat);
  this.get('#browse/:cat/:subcat/page/:page', showSubcat);
  this.get('#tags/:tag', showTag);
  this.get('#tags/:tag/page/:page', showTag);
  this.get('#search/:term', showSearch);
  this.get('#search/:term/page/:page', showSearch);
  this.get('#slide/:id', showSlide);
  this.get('#firstVisit', firstVisit);
  this.get('#postFacebook', postFacebook);
  this.get('#postTwitter', postTwitterStub);
  this.get('#addSocial/:network', addSocial);
  this.get('#lightbox/:id', lightboxStub);
});
  
_fv.data = new Sammy.Store({name:'data'});
_fv.pageloaded = false;
_fv.videoPlayer = false;

// Event Handlers
$("[href='#postTwitter']").live("click", postTwitter);
$("[href='#twitter']").live("click", popupTwitter);
$("[href='#google']").live("click", popupGoogle);
$("[href='#ictmn']").live("click", popupICTMN);
$("[href='#facebook']").live("click", popupFacebook);
$("[href='#report']").live("click", reportPage);
$("[href='#mysites']").live("click", showMySites);
//$("[href^='#link']").live("click", lightboxLink);
$("[href^='#video']").live("click", selectVideo);
$("[href='#prev']").live("click", searchPage);
$("[href='#next']").live("click", searchPage);
$("[href='#more']").live("click", dropdownMore);
$(".cf-sources .cf-more").live("click", toggleMoreSources);
$(".cf-social-search-input").live("keypress", keypressSocialSearch);
$(".cf-social-search-input").live("keyup", keyupSocialSearch);
$(".search-box .trig").live("click", doSearch);
$(".search-box .catch").live("keypress", submitSearch);
$("#cf-top-content .prev").live("click", rotateThumbs);
$("#cf-top-content .next").live("click", rotateThumbs);
$("#password-reset-form").live("submit", passwordReset);
$(".loginform").live("submit", validateLogin);
$("#loginform").live("submit", validateLogin);
if (_fv.site.editable) {
  $(".editable").live("mouseenter", showEditLink);
  $(".editable").live("mouseleave", hideEditLink);
  $(".edit-link").live("click", showEditOverlay);
  $(".delete-item").live("click", deleteItem);
  $(".delete-feed").live("click", deleteItemFeed);
  $(".toggle-item").live("click", toggleItem);
}

// Google APIs
google.load('search', '1');
google.load('feeds', '1');
google.load("swfobject", "2.1");


