jQuery.preloadImages = function()
{
  for(var i = 0; i<arguments.length; i++)
  {
    jQuery("<img>").attr("src", arguments[i]);
  }
}



function load_product_images () {
  $("img.product_image_element").each(function() {
        $.preloadImages($(this).attr("name"));

    $(this).mouseover(function(){
        var img_url = $(this).attr("name");

        var img = $("#main_photo_element");
        if (img.attr('src') == img_url)
            return false;

        img.hide();
        img.attr("src", img_url);
        img.fadeIn(400);
    });

  });
}


function clickclear(thisfield, defaulttext) {
  if (thisfield.value == defaulttext) {
    thisfield.value = "";
  }
}

function clickrecall(thisfield, defaulttext) {
  if (thisfield.value == "") {
    thisfield.value = defaulttext;
  }
}

function toggle_login_box() {
    var visible = $("#small_login_box").is(":visible");
    if (visible) {
        $('#small_login_box').hide();
        $('#large_login_box').show();
    } else {
        $('#small_login_box').show();
        $('#large_login_box').hide();
    }
}

function toggle_video_code_box() {
    var visible = $("#embed_code_data").is(":visible");
    if (visible) {
        $('#embed_code_data').hide();
        $('#video_code_show_link').html("Get embed code");
    } else {
        $('#embed_code_data').show();
        $('#embed_code_data input')[0].select();
        $('#video_code_show_link').html("Hide embed code");
    }
}


function toggle_poll_results() {
    var visible = $("#poll_results").is(":visible");
    if (visible) {
        $('#poll_results').hide();
        $('#see_results_link').html("See results");
    } else {
        $('#poll_results').show();
        $('#see_results_link').html("Hide results");
    }
}


function disable_submit(element) {
    element.disabled = true;
    isub = (element.form.onsubmit ? (
                element.form.onsubmit() ? element.form.submit() : false
        ) : element.form.submit());
        if (isub == false) {
            element.disabled = false;
        };
    return isub;
}


/******************************************************************
                            AJAX
*******************************************************************/

var AJAX_TIMEOUT = 9999999;

$.ajaxSetup({
        scriptCharset: "utf-8" ,
        contentType: "application/json; charset=utf-8"
});


// always use this method instead of calling escape
// directly and be happy when handling unicode text
function custom_escape(value) {
    if (encodeURIComponent) {
        return encodeURIComponent(value);
    } else {
        return escape(value);
    }
}


function ajax_wrapper(options) {
      var form_data = null, abort_complete = false;
      var form_element, form_obj;

      if (options.form_holder_id) {
          form_element = options.form_holder_id;

          if (!options.jquery_form_serialize) {
                  var inputs = [];
                  var selector = form_element + " :input";
                  if (options.form_holder_add_selector) {
                        selector = selector + ", " + form_element + " " +
                            options.form_holder_add_selector;
                  }

                  $(selector).each(
                        function() {
                        if (options.process_inputs) {
                            options.process_inputs(this, inputs);
                        } else {
                            inputs.push(
                                this.name + '=' + custom_escape(this.value));
                        }
                  });
                  form_data = inputs.join('&');

          } else {
                form_obj = $(form_element);
                form_data = form_obj.formSerialize();
          }
      } else if (options.form_data) {
        form_data = options.form_data;
      }

      // setup ajax notification box
      var busy_element = $("#ajax_load_indicator");
      function show_busy() {
         busy_element.show();
         busy_element.unbind("ajaxSend");
      }

      function hide_busy() {
         busy_element.hide();
         busy_element.unbind("ajaxComplete");
      }

       busy_element.bind("ajaxSend", show_busy);
       busy_element.bind("ajaxComplete", hide_busy);


      jQuery.ajax({
            type: options.request_type,
            url: options.url,
            datatype: "html",
            scriptCharset: "utf-8" ,
            contentType: "application/x-www-form-urlencoded; charset=utf-8",
            data: form_data,
            timeout: AJAX_TIMEOUT,

            complete: function(request, text_status) {
                 if (options.on_complete && !abort_complete) {
                    options.on_complete(request);
                 }
            },

            success: function(r) {
                if (r == "__forbidden__") {
                    alert(
                    "Sorry, you are not allowed to perform this operation");
                } else {
                     if (options.on_success) {
                        options.on_success(r);
                     }

                      if (r.match('class="errorlist"')) {
                        if (options.on_validation_error) {
                            options.on_validation_error(r);
                        }
                      } else {
                        if (options.on_validation_success) {
                            options.on_validation_success(r);
                        }
                      }
                }
            }
       });
}

/******************************************************************
                            Forum
*******************************************************************/

function show_content(post_id) {
  document.getElementById('hide_' + post_id).style.display = 'none';
  document.getElementById('show_' + post_id).style.display = '';
}

function hide_content(post_id) {
  document.getElementById('hide_' + post_id).style.display = '';
  document.getElementById('show_' + post_id).style.display = 'none';
}


function hide_home_area() {
     var home = $("#home_col2")[0];
     var home_holder = $("#forum_posts_mainpage");
     if (home) {
        home_holder.hide();
     }
}


function show_home_area() {
     var home = $("#home_col2")[0];
     var home_holder = $("#forum_posts_mainpage");
     if (home) {
        home_holder.show();
     }
}


function forum_add_topic(forum_id) {
     hide_home_area();

     var div_id = "#forum_form_area_" + forum_id;
     ajax_wrapper({
           request_type: "GET",
           url: "/ajax/forum/topic/add/" + forum_id + "/",

           on_success: function(r) {
                $(div_id).html(r);
           }
     });
}

function move_to_want_to_rant() {
    forum_add_topic(1);
    $.scrollTo($("#want_to_rant"), {offset: {left: 0, top: -140}});
}

function forum_save_topic(forum_id) {

     var div_id = "#forum_form_area_" + forum_id;
     ajax_wrapper({
           request_type: "POST",
           form_holder_id: "#form_start_topic",
           jquery_form_serialize: true,
           url: "/ajax/forum/topic/add/" + forum_id + "/",

           on_validation_error: function(r) {
                $(div_id).html(r);
           },

           on_validation_success: function(r) {
                $(div_id).empty();
                $("#forum_content_area_" + forum_id).html(r);


                 var home = $("#home_col2")[0];
                 var home_holder = $("#forum_posts_mainpage");
                 if (home) {
                    $("#forum_posts_mainpage").load(
                        "/forum/homepage/reload/", {}, function() {
                            show_home_area();
                        }
                    );
                 }



           }
     });
}


function cancel_forum_form(forum_id) {
    $('#forum_form_area_' + forum_id).empty();
    show_home_area();
}


function forum_list_topic(forum_id) {

     var div_id = "#forum_content_area_" + forum_id;
     ajax_wrapper({
           request_type: "GET",
           url: "/ajax/forum/topic/list/" + forum_id + "/",

           on_success: function(r) {
                $(div_id).html(r);
           }
     });
}


function forum_delete_topic(forum_id, topic_id) {

     ajax_wrapper({
           request_type: "GET",
           url: "/ajax/forum/topic/delete/" + forum_id +
                    "/" + topic_id + "/",

           on_success: function(r) {
                forum_list_topic(forum_id);
           }
     });
}

function scroll_to_element_name(scroll_to_element) {
    var element = document.getElementById(
                            scroll_to_element);
    var selectedPosX = 0;
    var selectedPosY = 0;
    while(element != null){
      selectedPosX += element.offsetLeft;
      selectedPosY += element.offsetTop;
      element = element.offsetParent;
    }
    window.scrollTo(selectedPosX,selectedPosY);
}


function forum_view_topic(forum_id, topic_id,
        scroll_to_element) {

     var div_id = "#forum_content_area_" + forum_id;
     ajax_wrapper({
           request_type: "GET",
           url: "/ajax/forum/topic/view/" + forum_id +
            "/" + topic_id + "/",

           on_success: function(r) {
                $(div_id).html(r);
                if (scroll_to_element) {
                    scroll_to_element_name(scroll_to_element);
                }
           }
     });
}



function forum_save_topic_reply(forum_id, topic_id) {
     var div_id = "#forum_content_area_" + forum_id;
     ajax_wrapper({
           request_type: "POST",
           form_holder_id: "#form_start_topic form",
           jquery_form_serialize: true,
           url: "/ajax/forum/topic/view/" + forum_id +
                "/" + topic_id + "/",

           on_success: function(r) {
                $("#forum_content_area_" + forum_id).html(r);
           }
     });
}


function forum_topic_change_state(forum_id, topic_id,
                                  state, post_id) {

     var div_id = "#forum_content_area_" + forum_id;
     ajax_wrapper({
           request_type: "GET",
           url: "/ajax/forum/post/state/" + topic_id +
                    "/" + post_id + "/" + state + "/",

           on_success: function(r) {
                $(div_id).html(r);
                $("#forum_post_" + post_id).effect(
                        "highlight", {color:"#D1D1D1"}, 2000);

           }
     });
}


function forum_edit_post(forum_id, topic_id, post_id) {
     var div_id = "#forum_content_area_" + forum_id;
     ajax_wrapper({
           request_type: "GET",
           url: "/ajax/forum/post/edit/" + topic_id +
                    "/" + post_id + "/",

           on_success: function(r) {
                $(div_id).html(r);
           }
     });
}

function forum_edit_post_save(forum_id, topic_id, post_id) {
     var div_id = "#forum_content_area_" + forum_id;
     ajax_wrapper({
           request_type: "POST",
           form_holder_id: "#form_edit_post",
           jquery_form_serialize: true,
           url: "/ajax/forum/post/edit/" + topic_id +
                    "/" + post_id + "/",

           on_validation_error: function(r) {
                $(div_id).html(r);
           },

           on_validation_success: function(r) {
                $(div_id).html(r);
                scroll_to_element_name('forum_post_' + post_id);
                $("#forum_post_" + post_id).effect(
                        "highlight", {color:"#D1D1D1"}, 2000);
           }
     });
}


function forum_post_reply_cancel(post_id) {
    $("#reply_post_holder_" + post_id).empty();
}


function forum_reply_post_save(forum_id, post_id) {
     var div_id = "#reply_post_" + post_id;
     ajax_wrapper({
           request_type: "POST",
           form_holder_id: div_id + " form",
           jquery_form_serialize: true,
           url: "/ajax/forum/post/reply/save/" + post_id + "/",

           on_validation_error: function(r) {
                    $('#reply_post_holder_' + post_id).html(r);
           },

           on_validation_success: function(r) {
                if (r) {
                    $('#forum_content_area_' + forum_id).html(r);
                    scroll_to_element_name('forum_post_' + post_id);
                    $("#forum_post_" + post_id).effect(
                            "highlight", {color:"#D1D1D1"}, 2000);
                }
           }
     });
}


function forum_open_reply_post(post_id) {
     var div_id = "#reply_post_holder_" + post_id;
     ajax_wrapper({
           request_type: "GET",
           url: "/ajax/forum/post/reply/open/" + post_id + "/",

           on_success: function(r) {
                $(div_id).html(r);
                scroll_to_element_name('reply_post_' + post_id);
           }
     });
}


/******************************************************************
                            Video
*******************************************************************/

function gallery_list_select_item(gallery_id) {
    if (!gallery_id) {
        window.location = '/cms/video/all/';
    } else {
        window.location = '/cms/video/all/?gallery=' + gallery_id;
    }
}


function init_frontend() {
    if ($("#user_msg #msg").html()) {
        $("#user_msg, #user_msg #msg").show();
        setTimeout('$("#user_msg, #user_msg #msg").fadeOut("slow")', 3000);
    }

}


/******************************************************************
                            Poll Questions
*******************************************************************/

function vote_question(question_id) {
     var div_id = "#poll_question_content";

     ajax_wrapper({
           request_type: "POST",
           form_holder_id: "#poll_question_form",
           jquery_form_serialize: true,

           url: "/polls/vote/",

           on_success: function(r) {
                var btn = $("#send_answer");
                btn.val("wait...");
                btn[0].disabled = true;

                var furl = "/polls/ajax/load/results/" +
                            question_id + "/";

                $("#poll_results_main_holder").load(
                    furl, function () {
                    btn.hide();
                    var e = $("#thank_you_question");
                    e.effect("highlight", {color:"#CE7459"}, 2000);
                });

           }
     });
}



/******************************************************************
                            Poll Questions
*******************************************************************/


function make_headline(item_type, item_id, parent_type) {
     ajax_wrapper({
           request_type: "GET",
           url: "/headline/" + item_type +
                    "/" + item_id + "/" +
                    parent_type + "/",

           on_success: function(r) {
                window.location.reload();
           }
     });
}


function get_qstring_value(name, url) {
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( url );
  if( results == null )
    return "";
  else
    return results[1];
}

function fetch_video_id(url) {
  var regexS = "http://www.youtube.com/v/(.*?)\\?.*?";
  var regex = new RegExp(regexS);

  var results = regex.exec(url);
  if( results == null )
    return "";
  else
    return results[1];
}


function fetch_video_additional_features() {
    var item_id = 0;

    $("param[name='src']").each(
          function() {
              item_id = item_id + 1;

              var url = $(this).attr("value");
              var slug = get_qstring_value("slug", url);
              var video_id = fetch_video_id(url);

              // get embed code
              var player_element = $("#video_player_code_template");
              var player_code = player_element.html();
              player_code = player_code.replace(/__video_id__/g, video_id);

              // get html code for 'extras' areas
              var content_element = $("#below_video_markup_template");
              var content = content_element.html();
              content = content.replace(/__video_id__/g, video_id);
              content = content.replace(/__item_id__/g, item_id);


              var pitem = $(this).parent();
              pitem.after(
                '<div class="video_extras" id="video_extras_' +
                    item_id + '"></div>')

              // set player code
              $("#video_extras_" + item_id).html(content);
              $("#embed_code_value_" + item_id).val(player_code);
          }
    );
}



function internal_toggle_video_code_box(item_id) {
    var e = $("#embed_code_data_" + item_id);
    var visible = e.is(":visible");

    if (visible) {
        e.hide();
        $('#video_code_show_link_' + item_id).html("Get embed code");
    } else {
        e.show();
        $('#embed_code_value_' + item_id)[0].select();
        $('#video_code_show_link_' + item_id).html("Hide embed code");
    }
}


function toggle_favorites_vote_box(setup) {
    var visible = $("#vote_favorites_form").is(":visible");
    if (visible) {
        $('#vote_favorites_form').hide();
        $('#vote_favorites_link').html("Choose your own favourites");
    } else {
        $('#vote_favorites_form').show();
        $('#vote_favorites_link').html("Choose your own favourites (hide)");
    }

    if (setup) {
        setup_favorite_vote_form();
    }
}


function setup_favorite_vote_form() {
    $('#genre_field select').change(function() {
        if ($(this).val() == 'Other') {
            $("#genre_field_holder .other_genre span")[0].style.display = 'block';
            $("#genre_field_holder .other_genre input")[0].style.display = 'block';
        } else {
            $("#genre_field_holder .other_genre span")[0].style.display = 'none';
            $("#genre_field_holder .other_genre input")[0].style.display = 'none';
        }
    });

    $('#genre_field2 select').change(function() {
        if ($(this).val() == 'Other') {
            $("#genre_field2_holder .other_genre span")[0].style.display = 'block';
            $("#genre_field2_holder .other_genre input")[0].style.display = 'block';
        } else {
            $("#genre_field2_holder .other_genre span")[0].style.display = 'none';
            $("#genre_field2_holder .other_genre input")[0].style.display = 'none';
        }
    });

    $('#genre_field3 select').change(function() {
        if ($(this).val() == 'Other') {
            $("#genre_field3_holder .other_genre span")[0].style.display = 'block';
            $("#genre_field3_holder .other_genre input")[0].style.display = 'block';
        } else {
            $("#genre_field3_holder .other_genre span")[0].style.display = 'none';
            $("#genre_field3_holder .other_genre input")[0].style.display = 'none';
        }
    });


    $('#country_field select').change(function() {
        var value = $(this).val();

        if (value == 'Canada') {
            $("#vote_favorites_form #ca_provinces td").show();
            $("#vote_favorites_form #ca_provinces th").show();
            $("#vote_favorites_form #us_states td").hide();
            $("#vote_favorites_form #us_states th").hide();

        } else if (value == 'United States'){
            $("#vote_favorites_form #us_states td").show();
            $("#vote_favorites_form #us_states th").show();
            $("#vote_favorites_form #ca_provinces td").hide();
            $("#vote_favorites_form #ca_provinces th").hide();

        } else {
            $("#vote_favorites_form #us_states td").hide();
            $("#vote_favorites_form #us_states th").hide();
            $("#vote_favorites_form #ca_provinces td").hide();
            $("#vote_favorites_form #ca_provinces th").hide();
        }
    });
}



function top10_submit_vote(url) {
     var div_id = "#vote_favorites_main_holder";

     ajax_wrapper({
           request_type: "POST",
           form_holder_id: "#vote_favorites_form table",
           jquery_form_serialize: false,
           url: url,

           on_validation_error: function(r) {
                $(div_id).html(r);
                $('#vote_favorites_form').show();
                $('#vote_favorites_link').html("Choose your own favourites (hide)");
           },

           on_validation_success: function(r) {
                $(div_id).html(r);
                setup_favorite_vote_form();
                $.scrollTo($("#vote_favorites_link"), {offset: {left: 0, top: -140}});

                $("#vote_thankyou").show();
                $("#vote_thankyou").fadeOut(6000);
           }
     });
}


function toggle_vote_favorite_results_box() {
    var visible = $("#top10_current_results").is(":visible");
    if (visible) {
        $('#top10_current_results').hide();
        $('#vote_favorites_results_link').html("Show summary");
    } else {
        $('#top10_current_results').show();
        $('#vote_favorites_results_link').html("Hide summary");
    }
}
