/**
 * @filename android.js
 * @date October 2008
 * @supportedby jeremydw@google.com
 * @fileoverview Displays app thumbnails for Android Market
 *    landing page and switches between video thumbnails for
 *    Android.com homepage
 */

/**
 * Video switcher on Android.com homepage
 */

var oldVid = "multi"; // set the default video
var nowPlayingString = "Now playing:";

var vidList = {
  'multi': {
    'string':'q1m4j676BCc',
    'caption':'Run multiple applications, all at once'},
  'richweb': {
    'string':'Gb6vwqcILJs',
    'caption':'Full web experience'},
  'homepage': {
    'string':'LQH0ICx7E9U',
    'caption':'Make it your own'}
};

function showvid(theVid){

  var currentVid;

  document.getElementById("li-"+oldVid).className = "";
  document.getElementById("vid-"+oldVid).style.display = "none";
  oldVid = theVid;
  document.getElementById("li-"+theVid).className = "selected";
  document.getElementById("vid-"+theVid).style.display = "block";

  document.getElementById("vidCaption").innerHTML =
    "<span>"+ nowPlayingString +"</span> "+vidList[theVid].caption;

}

/**
 * App thumbnail switcher
 */

var currentDroid;
var oldDroid;

// shows a random application
function randomDroid(){

  // count the total number of apps
  var droidListLength = 0;
  for (var k in droidList)
    droidListLength++;

  // pick a random app and show it
  var j = 0;
  var i = Math.floor(droidListLength*Math.random());
  for (var x in droidList) {
    if(j++ == i){
      currentDroid = x;
      showPreview(x);
      centerSlide(x);
    }
  }

}

/**
 * Show an application
 */

function droid(appName){

  oldDroid = document.getElementById("droidlink-"+currentDroid);
  currentDroid = appName;

  document.getElementById("droid-name").innerHTML = droidList[appName].name;
  document.getElementById("droid-dev").innerHTML = droidList[appName].dev;
  document.getElementById("droid-desc").innerHTML = droidList[appName].desc;
  document.getElementById("droid-url").innerHTML = '<a href="http://'+droidList[appName].url+'" target="_blank" onclick="javascript: pageTracker._trackPageview(\'/market/ext/'+appName+'\');">'+droidList[appName].url+'</a>';

  if(!droidList[appName].rotated) {
    document.getElementById("app-pics").innerHTML = '<img alt="" src="images/apps/'+appName+'-lg-01.jpg" /><img alt="" src="images/apps/'+appName+'-lg-02.jpg" /><img alt="" src="images/apps/'+appName+'-lg-03.jpg" class="last" />';
  }
  else {
    document.getElementById("app-pics").innerHTML = '<img alt="" src="images/apps/'+appName+'-lg-01.jpg" /><img alt="" src="images/apps/'+appName+'-lg-04.jpg" class="rotated last" />';
  }

  if(oldDroid)
    oldDroid.className = "";
  document.getElementById("droidlink-"+appName).className = "selected";

}

/**
 * Slider
 */

/**
 * Requires:
 *   [1] Div containing slides
 *   [2] A "clip" div to hide the slides as they scroll
 *   [3] Control arrows
 */

/**
 * CONFIG Below
 */

var slideCode = droidList; // the dictionary of slides
var slideList = 'app-list'; // the div containing the slides
var arrowRight = 'arrow-right'; // the right control arrow
var arrowLeft = 'arrow-left'; // the left control arrow

function init() {

  makeSlideStrip();

  /**
   * Do the following on init()
   */

  var hash = window.location.hash;
  if (hash.length) {
    var s = 'app=([^&]*)';
    var regex = new RegExp(s);
    var results = regex.exec(hash);
    if (results != null){
      var currentSlide = results[1];
      animateSlide(originPosition[currentSlide],'right');
      showPreview(currentSlide);
    }
    else{
      randomDroid();
    }
  }
  else {
    randomDroid();
  }

}

function showPreview(slideName) {
  centerSlide(slideName);
  droid(slideName); // do this function when slide is clicked
}

var thumblist = document.getElementById(slideList);// the div containing the slides

var slideWidth = 144; // width of a slide including all margins, etc.
var slidesAtOnce = 5; // no. of slides to appear at once (requires odd number to have a centered slide)

/**
 * END CONFIG. No further editing should be necessary.
 */

var originPosition = {};
var is_animating = 0;
var currentStripPosition = 0;
var centeringPoint = 0;
var rightScrollLimit = 0;
var timer = null;

// makeSlideStrip()
// - figures out how many slides there are
// - determines the centering point of the slide strip
function makeSlideStrip() {
  var slideTotal = 0;
  centeringPoint = Math.ceil(slidesAtOnce/2);
  for (var x in slideCode)
    slideTotal++;
  var i = 0;
  for (var code in slideCode) {
    if (i <= centeringPoint-1) {
      originPosition[code] = 0;
    }
    else {
      if (i >= slideTotal-centeringPoint+1)
        originPosition[code] = (slideTotal-slidesAtOnce)*slideWidth;
      else
        originPosition[code] = (i-centeringPoint+1)*slideWidth;
    }
    i++;
  }
  rightScrollLimit = -1*(slideTotal-slidesAtOnce)*slideWidth;
}

// slides with acceleration
function slide(goal, id, go_left, cp) {
  var div = document.getElementById(id);
  var animation = {};
  animation.time = .4;  // in seconds
  animation.fps = 60;
  animation.goal = goal;
  origin = 0.0;
  animation.origin = Math.abs(origin);  
  animation.frames = (animation.time * animation.fps) - 1.0;
  var current_frame = 0;
  var motions = Math.abs(animation.goal - animation.origin);

  function animate() {
    var ease_right = function (t) { return (1 - Math.cos(t * Math.PI))/2.0; };
    var ease = ease_right;
    if (go_left == 1) {
      ease = function(t) { return 1.0 - ease_right(t); };
    }
    var left = (ease(current_frame/animation.frames) * Math.abs(animation.goal - animation.origin)) - cp; 
    div.style.left = '-' + left + 'px';   
    current_frame += 1;
    if (current_frame == animation.frames) {
      is_animating = 0;
      window.clearInterval(timeoutId);
    }
  }
  var timeoutId = window.setInterval(animate, animation.time/animation.fps * 1000);

}

//Get style property
function getStyle(element, cssProperty){
  var elem = document.getElementById(element);
  if(elem.currentStyle){
    return elem.currentStyle[cssProperty]; //IE
  } else{
    var style =  document.defaultView.getComputedStyle(elem, null); //firefox, Opera
    return style.getPropertyValue(cssProperty);
  }
}

// moveit: slides the carousel for press and hold
function moveit(way){

  var div = document.getElementById(slideList);
  var divLeft = parseInt(getStyle(slideList,'left'));
  //var increment = Math.abs(1^current_frame)/4;
  var increment = 20;
  current_frame += 1;

  if(way=='left' && divLeft < 0){
    div.style.left = divLeft+increment+'px';
    aToggle('on','right');
  }
  else if(way=='right' && divLeft > rightScrollLimit){
    div.style.left = divLeft-increment+'px';
    aToggle('on','left');
  }
  else
    animateStop();

}

// Left and right arrows
function page_left() {
  var amount = slideWidth;
  var currentStripPosition = parseInt(getStyle(slideList,'left'));
  var divLeft = parseInt(getStyle(slideList,'left'));
  if(divLeft < 0){
    animateSlide(amount, 'left');
    arrowChange(currentStripPosition);
  }
}

function page_right() { 
  var amount = slideWidth;
  var currentStripPosition = parseInt(getStyle(slideList,'left'));
  var divLeft = parseInt(getStyle(slideList,'left'));
  if(divLeft-50 > rightScrollLimit){
    animateSlide(amount, 'right');
    arrowChange(currentStripPosition);
  }
}

function animateStart(direction){
  current_frame = 0;
  timer = setInterval('moveit("'+direction+'")',30);
}

function animateStop(){
  window.clearInterval(timer);
  var currentStripPosition = parseInt(getStyle(slideList,'left'));
  arrowChange(currentStripPosition);
}

function aToggle(state,aDir) {

  var leftarrow = document.getElementById(arrowLeft);
  var rightarrow = document.getElementById(arrowRight);

  if (state == 'on') {
    if (aDir =='right') rightarrow.className = 'arrow-right-on';
    else leftarrow.className = 'arrow-left-on';
  }
  else {
    if (aDir =='right') rightarrow.className = 'arrow-right-off'; 
    else leftarrow.className = 'arrow-left-off';
  }

}

function arrowChange(rP) {
  if (rP >= rightScrollLimit) aToggle('on','right');
  if (rP <= rightScrollLimit) aToggle('off','right');
  if (rP <= slideWidth) aToggle('on','left');
  if (rP >= 0) aToggle('off','left');
}

// animates the strip
// - sets arrows to on or off
function animateSlide(amount,dir) {
  var currentStripPosition = parseInt(getStyle(slideList,'left'));
  var motionDistance;
  if (amount == slideWidth)
    motionDistance = slideWidth;
  else
    motionDistance = amount;

  if (dir == 'right' && is_animating == 0) {
    arrowChange(currentStripPosition-motionDistance);
    is_animating = 1;
    slide(motionDistance, slideList, 0, currentStripPosition);
  }
  else if (dir == 'left' && is_animating == 0) {
    arrowChange(currentStripPosition+motionDistance);
    is_animating = 1;
    rightStripPosition = currentStripPosition + motionDistance;
    slide(motionDistance, slideList, 1, rightStripPosition);
  }
}

function centerSlide(slideName) {
  var currentStripPosition = parseInt(getStyle(slideList,'left'));
  var dir = 'left';
  var originpoint = Math.abs(currentStripPosition);
  if (originpoint <= originPosition[slideName]) {
    dir = 'right';
  }
  var motionValue = Math.abs(originPosition[slideName]-originpoint);
  animateSlide(motionValue,dir);
}

/**
 * Legal pages
 */

function showLanguageSwitcher(){
  if(window.location.toString().indexOf("#showlanguages")>0){
    document.getElementById("language-switcher").style.display="block";
  }
}

