var tq = (typeof tq == 'object') ? tq : {};

tq.tq_login = function() {
  $('form#login input#password_text').remove();
  $('form#login').attr('action','https://' + location.hostname + '/pls/html/think.web_login');
  $('form#login')[0].submit();
  return true;
  location.reload();
};

tq.gotoSocialMedia = function() {
  switch (location.search.substr(1))
  {
  case 'yt':
    location.href = 'http://www.youtube.com/oraclefoundation';
    break;
  case 'fb':
    location.href = 'http://www.facebook.com/thinkquest';
    break;
  case 'tw':
    location.href = 'http://www.twitter.com/thinkquest';
    break;
  }
};

// Update hyperlinks for localized Projects white papers
tq.updateWhitePaperLink = function($obj) {
  var
    supportedLangs = ['tr'],
    thisLang = window.location.pathname.match(/^\/([^/]+)\//)[1];

  $obj.each(function(){
    if ($.inArray(thisLang, supportedLangs) >= 0) {
      var $this = $(this);
      $this.attr('href', $this.attr('href').replace(/\/([^/]+)\.([^/]+)$/, '/$1_' + thisLang + '.$2'));
    }
  });
};

tq.comp_enroll = function() {
  location.href = 'https://' + location.host + '/pls/html/f?p=54200:1:';
};

tq.projects_enroll = function() {
  var cookie_value = getCookie('tcTempCookie') || 'en';
  location.href = 'https://' + location.host + '/pls/reghtml/registration.beginapplication?p=tc&l=' + cookie_value;
};

tq.prepare_login_form = function() {
  $('form#login').attr('autocomplete','off');
  $('#p_password').val('');
  $('#p_username').val($('#login_form span.username').text());
  $('#password_text').val($('#login_form span.password').text());
  $('#p_username').keypress(function(e) {
    if (e.keyCode == '13') {
      e.preventDefault();
    }
  });
  $('#p_password').keypress(function(e) {
    if (e.keyCode == '13') {
      tq.tq_login();
    }
  });
  $('#p_username')
    .focus(function() {
      $('#p_username').addClass('active');
      if ($('#p_username').val() == $('#login_form span.username').text()) {
        $('#p_username').val('');
      }
    })
    .blur(function() {
      $('#p_username').removeClass('active');
      if ($('#p_username').val() == '') {
        $('#p_username').val($('#login_form span.username').text());
      }
    });
  $('#password_text')
    .focus(function() {
      $('#p_password').show();
      $('#p_password').addClass('active');
      $('#password_text').hide();
      $('#password_text').val('');
      $('#p_password').focus();
    })
    .blur(function() {
      $('#password_text').removeClass('active');
      $('#password_text').val($('#login_form span.password').text());
    });
  $('#p_password')
    .focus(function() {
      $('#p_password').addClass('active');
    })
    .blur(function() {
      $('#p_password').removeClass('active');
      if ($('#p_password').val() == '') {
        $('#p_password').hide();
        $('#password_text').show();
        $('#password_text').removeClass('active');
        $('#password_text').val($('#login_form span.password').text());
      }
    });
  $('#login_help').click(function(e) {
    e.preventDefault();
    location.href = 'https://' + location.hostname + '/pls/html/think.support?p=loginhelp';
  });
  $('#left_menu_red li.register').click(function(e) {
    e.preventDefault();
    location.href = 'https://' + location.hostname + '/pls/html/f?p=54200:1::::1:';
  });
};

tq.expanded_comp_left_nav = function() {
  $('#left_menu_red li.sub_menu_list a').click(
    function(e) {
      if (location.href.indexOf('instructions_') == 0) {
        e.preventDefault();
      }
    }
  );
  if (location.href.indexOf('competition/projects') > 0 || location.href.indexOf('f?p=50900:150:') > 0) {
    $('#left_menu_red li.sub_menu_list ul.sub_menu').show();
    $('#left_menu_red li.sub_menu_list').addClass('open');
    $('#left_menu_red li.sub_menu_list ul.sub_menu li.projects').addClass('active');
  }
  else if (location.href.indexOf('competition/digital_media') > 0 || location.href.indexOf('f?p=50900:151:') > 0) {
    $('#left_menu_red li.sub_menu_list ul.sub_menu').show();
    $('#left_menu_red li.sub_menu_list').addClass('open');
    $('#left_menu_red li.sub_menu_list ul.sub_menu li.digital_media').addClass('active');
  }
  else if (location.href.indexOf('competition/application_development') > 0 || location.href.indexOf('f?p=50900:152:') > 0) {
    $('#left_menu_red li.sub_menu_list ul.sub_menu').show();
    $('#left_menu_red li.sub_menu_list').addClass('open');
    $('#left_menu_red li.sub_menu_list ul.sub_menu li.application_development').addClass('active');
  }
};

tq.collapsed_comp_left_nav = function() {
  $('#left_menu_red li.sub_menu_list a').click(
    function(e) {
      if (location.href.indexOf('instructions_') == 0) {
        e.preventDefault();
      }
    }
  );
  $('#left_menu_red li.sub_menu_list a').hover(
    function() {
      $('#left_menu_red li.sub_menu_list ul.sub_menu').show();
      $('#left_menu_red li.sub_menu_list').addClass('open');
    },
    function() {
      $('#left_menu_red li.sub_menu_list ul.sub_menu').hide();
      $('#left_menu_red li.sub_menu_list').removeClass('open');
    }
  );
  $('#left_menu_red li.sub_menu_list ul.sub_menu li a').hover(
    function() {
      $('#left_menu_red li.sub_menu_list').addClass('open');
    },
    function() {
      $('#left_menu_red li.sub_menu_list').removeClass('open');
    }
  );
};

//-------------------- UTIL FUNCTIONS --------------------------
tq.util = tq.util || {};

tq.util.apexToggleField = function($p_field, p_action) {
  $p_field.closest('tr')[p_action]();
};

tq.util.ga = function(p_window, p_id) {
  p_window._gaq = p_window._gaq || [];
  var l_gaq = p_window._gaq;
  l_gaq.push(['_setAccount', p_id]);
  l_gaq.push(['_setVisitorCookieTimeout', 0]);
  l_gaq.push(['_setSessionCookieTimeout', 0]);
  l_gaq.push(['_setCampaignCookieTimeout', 0]);
  l_gaq.push(['_trackPageview']);

  var ga = p_window.document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  ga.src = ('https:' == p_window.document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  var s = p_window.document.getElementsByTagName('script')[0];
  s.parentNode.insertBefore(ga, s);
};

tq.util.captcha = function(p_options) {
  // Define defaults
  var l_settings = {
    challenge_field: 'f01',
    response_field: 'f02',
    theme: 'clean',
    lang: 'en'
  };

  // Combine all settings into l_settings object
  $.extend(l_settings, p_options);

  // Create the captcha widget
  Recaptcha.create(l_settings.public_key, l_settings.div_id,
  {
     theme: l_settings.theme,
     lang: l_settings.lang,
     callback: function() {
       var l_rename_fields = function() {
         var $l_div = $('#' + l_settings.div_id);
         $l_div.find('input#recaptcha_challenge_field').attr('name', l_settings.challenge_field);
         $l_div.find('input#recaptcha_response_field').attr('name', l_settings.response_field);
       };
       // Use apex.jQuery (if available) since jQuery's $ function may be overloaded later and then APEX won't see our event
       (typeof apex == 'object' && apex.jQuery || $)(document)
         .bind('apexbeforepagesubmit.tq', l_rename_fields)
         .find('#wwvFlowForm').submit(l_rename_fields);
     }
  });
};

//-------------------- jQuery Plugins --------------------------

(function($) {
  // jQuery plugin to change borders on form fields on focus/blur and to replace optional prompt
  $.fn.tqForm = function(p_options) {
    var
      l_self = 'tqForm',
      l_settings = {
        focus_border: '1px solid #000',
        prompt_color: '#999'
      };

    return this.each(function() {
      // Apply settings from the caller, if any
      $.extend(l_settings, p_options);

      var
        $this = $(this),
        l_data = {};

      if (l_settings.focus_border) {
        // Save original border so we can restore it later
        l_data.orig_border =
          $this.css('border-top-width') + ' ' +
          $this.css('border-top-style') + ' ' +
          $this.css('border-top-color');
      }

      if ($this.attr('data-prompt')) {
        l_data.prompt = {
          prompt_str: $this.attr('data-prompt'),
          orig_color: $this.css('color')
        };
        if ($this.val() == '' || $this.val() == l_data.prompt.prompt_str) {
          $this.css('color', l_settings.prompt_color).val(l_data.prompt.prompt_str);
        }
      }
      // Store settings with the element
      $this.data(l_self, l_data);

      var l_events = {};
      l_events['focus.' + l_self] = function() {
        var
          $this = $(this),
          l_prompt = $this.data(l_self).prompt;

        if (l_settings.focus_border) {
          $this.css('border', l_settings.focus_border);
        }
        if (l_prompt) {
          if ($this.val() == l_prompt.prompt_str) {
            $this.val('');
          }
          $this.css('color', l_prompt.orig_color);
        }
      };
      l_events['blur.' + l_self] = function() {
        var
          $this = $(this),
          l_prompt = $this.data(l_self).prompt;

        if (l_settings.focus_border) {
          $this.css('border', $this.data(l_self).orig_border);
        }
        if (l_prompt && $this.val() == '') {
          $this.css('color', l_settings.prompt_color).val(l_prompt.prompt_str);
        }
      };
      $this.bind(l_events);
    });
  };

  // jQuery plugin to force drop-down selects to show all options text in IE
  $.fn.showAllOptionsIE = function() {
    var
      l_self = 'showAllOptionsIE';
    // Apply this behavior for IE only - bail if not IE
    if (!$.browser.msie) {
      return;
    }

    var expand = function() {
      var l_width = $(this).css("width");
      // Don't overwrite the stored original width,
      // if the event occurs for a second time before contract()
      if (l_width == "auto"){
        return;
      }
      $(this)
       .data("origWidth", l_width)
       .css("width", "auto")
    };

    var contract = function() {
      var l_width = $(this).css("width");
      // If select is already collapsed, bail
      if (l_width != "auto"){
        return;
      }
      var l_orig_width = $(this).data("origWidth");
      // If the original width was not stored, bail
      if (l_orig_width === undefined){
        return;
      }
      $(this)
        .css("width", l_orig_width)
        .data("origWidth", l_width);
    };

    // Loop over all select elements in the form
    return this.each(function() {
      var
        $this = $(this),
        l_width = $this.css("width"),
        l_span = '<span style="padding: 2px; width:'+l_width+'; overflow:hidden; float:left;" />';
      // The select needs to be enclosed in a container with the same CSS width,
      // which uses overflow:hidden, in order to hide the expanded part
      $this.wrap(l_span);
      $this
        .mousedown(expand)
        .blur(contract)
        .change(contract);
    });
  };
})(jQuery);

