/*

  America.gov Site JavaScript: Misc Functions
  
  America.gov Web Site
  United States Department of State
  Last Edited: June 2008 by Darren W Krape (krapedw@state.gov)

*/

// Returns the number only pixel of a given item
var num = function(el, prop) {
  return parseInt($.css(el.jquery?el[0]:el,prop))||0;
};

// Returns the outerHeight of a given item
var outerHeight = function(element) {
  outerWidthResult = element.height() + num(element,'borderTopWidth') + num(element, 'borderBottomWidth') + num(element, 'paddingTop') + num(element, 'paddingBottom') + num(element, ',marginTop') + num(element, 'marginBottom');
  return outerWidthResult;
}

// Returns the outerWidth of a given item
var outerWidth = function(element) {
  outerWidthResult = element.width() + num(element,'borderLeftWidth') + num(element, 'borderRightWidth') + num(element, 'paddingLeft') + num(element, 'paddingRight') + num(element, ',marginLeft') + num(element, 'marginRight');
  return outerWidthResult;
}

function loadVideoPlayer(mediaLocation,mediaId,mediaLanguage){

  if(mediaLanguage == "fa") {
    playerURL = "http://usinfo.americancorner.org.tw/RTL_LanguageVideoPlayer400.swf";
    playerName = "RTL_LanguageVideoPlayer400";
    playerLanguage = "persian";
  } else {
    playerURL = "http://usinfo.americancorner.org.tw/amgLanguageVideoPlayer400.swf";
    playerName = "amgLanguageVideoPlayer400";
    playerLanguage = "english";
  }

  var flashvars = {
    allowFullScreen: "true",
    autoStart: "false",
    playerId: "1388789744",
    playerHeight: "300",
    playlist: "",
    playerWidth: "400",
    EmbedCode: "on",
    swliveconnect: "true",
    copyUrl: document.location,
    language: playerLanguage
  };

  flashvars.videoId = mediaId;

  var params = {
    allowFullScreen: "true",
    bgcolor: "#000000",
    allowScriptAccess: "always",
    swliveconnect: "true"
  };

  var attributes = {
    name: playerName,
    id: playerName
  };

  swfobject.embedSWF(playerURL, mediaLocation,  "400",  "346",  "8.0.0.0","http://usinfo.americancorner.org.tw/media/expressInstall.swf", flashvars, params, attributes);
}

$.fn.mediaLoader = function(language) {

  $(this).each(function() {

    var mediaDetails = new Array();
    mediaDetails = $(this).attr("class").split(' ');

    mediaType = mediaDetails[1];
    mediaLanguage = mediaDetails[2];

    if(!mediaLanguage) mediaLanguage = "en";

    if(mediaType == "photos") {

      var iframeCode = "<iframe src='" + $(this).attr("href") + "' frameborder='0' width='616' height='418' scrolling='no'></iframe>";
      $(this).hide().before(iframeCode);

    } else if(mediaType == "video") {

      var mediaId = $(this).text();
      var mediaLocation = "player" + mediaId;

      $(this).attr({id:mediaLocation});
      loadVideoPlayer(mediaLocation,mediaId,mediaLanguage);

    }

  });

};

$.fn.popUp = function() {
  $(this).click(function () {  
    var hrefLocation = $(this).attr("href");
    window.open(hrefLocation, 'popup', 'toolbar=0,scrollbars=yes,location=1,statusbar=0,menubar=1,resizable=1,width=820,height=580,left=20,top=20');
    return false;
  });
};

//Tabbed Collection Boxes (Such as on the video, photo gallery or webchat pages)
$.fn.tabbedCollection = function() {

  this.each(function(){

    var p = $(this); 

    if($(p).hasClass("tab-inside"))
      $(p).find(".box-body").prepend("<ul class='collection-nav'></ul>");
    else
      $(p).prepend("<ul class='collection-nav'></ul>");

    var i = 0;
    while ((i + 1) <= $(p).find(".elements").length) {
      var currentElement = $(p).find(".elements:eq(" + i + ")");
      var tabName = $(currentElement).attr("title");
      var tabClass = tabName.replace(" ", "");
      var tabID = "tab" + Math.floor(Math.random()*1001)
      $(p).find(".collection-nav").append("<li class='" + tabClass + "'><a href='#" + tabID + "' rel='#" + tabID + "'><span>" + tabName + "</span></a>");
      $(p).find(".collection-nav li:last-child").addClass("last");
      $(currentElement).attr({"id":tabID});
      i++;
    };
  
    $(p).find(".collection-nav li:eq(0)").addClass("active");
    $(p).find(".collection-box li:eq(0)").addClass("active");

    $(p).find(".elements").hide();
    $(p).find(".elements:eq(0)").show();

    $(p).find(".collection-box div li").click(function () {
      $(".collection-box div li").removeClass("active");
      $(this).addClass("active");
    });

    $(p).find(".collection-nav li").click(function () {  
      $(this).parent().find("li").removeClass("active");
      $(this).addClass("active");

      var elementList = $(this).find("a").attr("rel");
      $(p).find(".elements").hide();
      $(p).find(elementList).show();
      return false;
    });

  });
};

// Search Text Hint Show/Hide
// By Remy Sharp: http://usinfo.americancorner.org.tw/gate/big5/remysharp.com/2007/01/25/jquery-tutorial-text-box-hints/
$.fn.hint = function () {
  return this.each(function (){
    var p = $(this); 
    var title = p.attr('title'); 
    if (title) { 
      p.blur(function (){ if (p.val() == '') { p.val(title); p.addClass('blur'); } });
      p.focus(function (){ if (p.val() == title) { p.val(''); p.removeClass('blur'); } });
      p.parents('form:first()').submit(function(){ if (p.val() == title) { p.val(''); p.removeClass('blur'); } });
      p.blur();
    }
  });
}

$.fn.bubble = function () {

  if($(".bubble")) $("#header").append("<div class='bubble'><a href='#' class='close-bubble'>[x]</a><div class='content'></div></div>");

  $(this).click(function () {

    var bubbleClass = $(this).attr("href").substring(1);
    var bubbleContent = $($(this).attr("href"));
    var itemPosition = $(this).position();

    if(!$(this).hasClass("bubble-open")) {

      $(".bubble-open").removeClass("bubble-open");
      $(this).addClass("bubble-open");

      $(".bubble").fadeOut("fast", function() {
        $(".bubble").removeClass().addClass("bubble").addClass(bubbleClass);
        $(".bubble .content").empty();
        bubbleContent.clone().appendTo(".bubble .content");
        $(".bubble").css({top: itemPosition['top'], left: itemPosition['left']});
        $(".bubble").fadeIn("fast");
        if(bubbleClass == "email-form") $(".bubble").emailPost();
      });

    } else {
      if(bubbleClass == "email-form") $(".bubble").emailPost();
    }
    
    return false;
  });
  
  $(".close-bubble").click(function () {
    $(".bubble-open").removeClass("bubble-open");
    $(".bubble").fadeOut("fast", function() {
      $(".bubble").removeClass().addClass("bubble");
    });
    return false; 
  });

};

$.fn.previewComment = function () {

  var p = $(this);

  $(this).click(function () {

    var name = $("#author").val();
    if(!name && ($("#author").length == 0))
      name = $("#commentform .column-left a:eq(0)").text();
    else if (!name && ($("#author").length != 0))
      name = "Your Name";

    var date = "now";
    
    if(!$("#location").val())
      var location = "";
    else
      var location = "Location: " + $("#location").val();
    
    var content = $("#comment").val();
    content = content.replace("\n", "<br />");

    var message = "<div class='message warning'><span>This is only a preview. You must press \"Submit Comment\" to add your comment.</span></div>";
    var previewComment = "<li class='comment comment-preview'><div class='comment-item'><div class='comment-info'><div class='comment-author'><p class='comment-author-name'>" + name + "</p><p class='comment-author-location'>" + location + "</p></div><div class='comment-meta'><p class='comment-meta-date'>Now</p><p class='comment-meta-permalink'>&nbsp;</p></div></div>" + message + "<div class='comment-text'><pre>" + content + "</pre></div></li>";

    if($(".commentlist").length == 0) {
      $("#post-list").after("<div id='comment-list'><h3>Comments</h3><ol class='commentlist'></ol></div>");
    }
    
    if($(".comment-preview").length == 0) {
      $(".commentlist").append(previewComment);
    } else {
      $(".comment-preview").remove();
      $(".commentlist").append(previewComment);
    }
    
    return false; 
  });

};

function isValidEmail(str) {
  return (str.lastIndexOf(".") > 2) && (str.indexOf("@") > 0) && (str.lastIndexOf(".") > (str.indexOf("@")+1)) && (str.indexOf("@") == str.lastIndexOf("@"));
}

$.fn.emailPost = function () {

  var p = $(this);

  $(this).find("a.submit").click(function () {

    var emailSender = p.find("input[name='email-sender']").val();
    var emailRecipient = p.find("input[name='email-recipient']").val();
    var senderMessage = p.find("textarea[name='sender-message']").val();
    
    var postTitle = p.find("input[name='post-title']").val();
    var postLink = p.find("input[name='post-link']").val();
    
    var postID = p.find("input[name='post-id']").val();
    var blogID = p.find("input[name='blog-id']").val();
    
    p.find(".message").remove();
  
    if(isValidEmail(emailSender)) var senderStatus = true; else  p.find("input[name='email-sender']").before("<div class='message warning'><span>Not a valid address</span></div>");
    if(isValidEmail(emailRecipient)) var recipientStatus = true; else p.find("input[name='email-recipient']").before("<div class='message warning'><span>Not a valid address</span></div>");
    
    if(senderStatus && recipientStatus) {
      p.find("input[type='text'],textarea").addClass("disabled").attr("disabled","disabled");
      $(this).hide().after("<div class='message success'><span>Email sent</span></div>");
      
      $.ajax({
        type: "GET",
        url: "/index.php?email_action=send_email",
        data: "email_sender=" + emailSender + "&email_recipient=" + emailRecipient + "&post_title=" + postTitle + "&post_link=" + postLink + "&sender_message=" + senderMessage + "&post_id=" + postID + "&blog_id=" + blogID 
      });
    }
      
    return false; 
  });
};


$.fn.logView = function (blogID,postID) {

  $(this).fadeTo(15000, 0, function() {
      $.ajax({
        type: "GET",
        url: "/index.php?log_action=log_post",
        data: "post_id=" + postID + "&blog_id=" + blogID 
      });
  });

};

$.fn.showMore = function () {
  return this.each(function (){
    var p = $(this); 

    $(p).find("a.expand").click(function () {
      var expand = $(p).find("div.expand");

      if($.browser.msie && ($.browser.version < 7)) {
        expand.toggle();
      } else {
        if (expand.is(":hidden")) expand.slideDown(); else expand.slideUp();
      }

      $(this).toggleClass("active");
      return false;
    });

  });
};

$(function() {

  $(".search-text").hint();
  $(".tabbed-collection").tabbedCollection(); //Top tabs function, active state on content elements. Used for video, webchats, photos
  $("a.bubble-display").bubble();
//  $(".media").mediaLoader();
  $(".preview a").previewComment();
  $(".breakout, #blog-header").showMore();

  $(".print a").click(function () { window.print(); return false; });
  $(".back").click(function () { history.go(-1); return false; });

  //Preserves the mouse-over on top-level menu elements when hovering over children
  $("#menu ul ul").each(function(i){
    $(this).hover(function(){
      $(this).parent().find("a").slice(0,1).addClass("maintainHover"); 
    },function(){ 
      $(this).parent().find("a").slice(0,1).removeClass("maintainHover"); 
    });
  });

  // IE6 Fix: Drop-down fix due to lack of support for :hover on list elements
  if($.browser.msie && ($.browser.version < 7)) {
    $("#menu ul").each(function(i){
      $(this).find("li").hover(function(){
        $(this).find("ul").addClass("ieHover");
      },function(){ 
        $(this).find("ul").removeClass("ieHover"); 
      });
    });
  }

  // IE6 Fix: Corrects IE6' lack of :first-child support 
  if($.browser.msie && ($.browser.version < 8)) {
    $("li:last-child, tr:last-child").addClass("last-child");
    $("#footer li:last-child").css({ border: "none", marginRight: "0", paddingRight: "0" });
  }

  //Zebra Striping for tables
  $("tr:nth-child(odd)").addClass("odd");

});