Array.prototype.in_array = 
function(needle) {
  for (var i = 0; i < this.length; i++) {
    if (this[i] === needle) {
      return true;
    }
  }
  return false;
}

//
// This method Gets URL Parameters (GUP)
//
function gup( name )
{
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var tmpURL = window.location.href;
  var results = regex.exec( tmpURL );
  if( results == null )
    return "";
  else
    return results[1];
}


//
// This method decodes the query parameters that were URL-encoded
//
function decode(strToDecode)
{
	var encoded = strToDecode;
	return unescape(encoded.replace(/\+/g,  " "));
}

function translate (f)
{
  var form = f.form;
  var value = f.options[f.selectedIndex].value;
  var url_id = f.name.substr(f.name.lastIndexOf('_')+1);
  var url = document.getElementById('url'+url_id).href;
  var tr_url = url;
  switch (value)
  {
    case '':
      break;
    default:
      tr_url = 'http://translate.google.com/translate_c?hl=en&langpair='+value+'|en&u='+escape(url)+'&tbb=1';
      break;
  }
  document.getElementById('pageFrame'+url_id).src=tr_url;
}

function check_reminder (f)
{
  var value = f.options[f.selectedIndex].value;
  var url_id = f.name.substr(f.name.lastIndexOf('_')+1);
  var url = document.getElementById('pageFrame'+url_id).src;
  var msg = false;
  switch (value)
  {
    case 'broken':
      msg = "Please be sure to click on the link to open the\n"+
            "site in a new window to verify that it is broken.";
      if (confirm("Open site in new window?"))
      {
        window.open(url,'new');
	msg = false;
      }
      break;
    case 'no_content':
      msg = "Please be sure to click on the link to open the\n"+
            "site in a new window to verify there's no content.";
      if (confirm("Open site in new window?"))
      {
        window.open(url,'new');
	msg = false;
      }
      break;
    case 'non_english':
      msg = "Please be sure to select the appropriate secondary\n"+
            "category for this site, to the best of your ability.";
      break;
     break;
  }
  if (msg)
  {
    alert(msg);
  }
}

function click_all_ages (f, n)
{
  var all_ages = f['age0_'+n];
  
  for (var j=1; j<=8; j++)
  {
    var age_group = f['age'+j+'_'+n];
    age_group.checked = all_ages.checked;
  }
}

function click_age (f, n)
{
  var all_ages = f['age0_'+n];
  var all_checked = false;

  for (var j=1; j<=8; j++)
  {
    var age_group = f['age'+j+'_'+n];
    all_checked &= age_group.checked;
  }

  all_ages.checked = all_checked;
}

function fv2 (f, num_hits)
{
  var rv = true;
  for (var i=1; i<=num_hits; i++)
  {
    var valid_row = true;
    var category = f['category1_'+i].value;
    if (category == '')
    {
      valid_row = false;
    }
    else if (!(category == 'broken' || category == 'non_english' || category == 'no_content'))
    {
      // no gender
      var gender = f['gender_'+i];
      if (gender.selectedIndex == 0)
      {
        valid_row = false;
      }
      // no age
      var age_selected = false;
      for (var j=1; j<=8; j++)
      {
	var age_group = f['age'+j+'_'+i];
        age_selected |= age_group.checked;
      }
      if (!age_selected)
      {
        valid_row = false;
      }
    }
    if (!valid_row)
    {
      document.getElementById('section_'+i).style.backgroundColor="red";
      document.getElementById('section_'+i).onfocus=function(e){this.style.backgroundColor=null;this.onfocus=null;};
    }
    rv &= valid_row;
  }

  if (rv == false)
  {
    alert ("All sites must be categorized and demographics completed. Please complete the fields marked in red.");
  }
  else
  {
    var sub = document.getElementById('v_s').innerHTML;
    var cat = f.v_c.value;
    if (cat == '')
    {
      alert ("Please complete the verification question at the bottom of the survey form.");
      rv = false;
    }
    else
    {
      rv = verify_category_test(sub, cat);
    }
  }

  return rv;
}

function verify_category_test(sub, cat)
{
  var all = get_categories();
  if (typeof all[cat] != 'undefined' && all[cat].subs.in_array(sub))
  {
    return true;
  }
  else
  {
    var cat_found = false;
    for (c in all)
    {
      if (all[c].subs.in_array(sub))
      {
        cat_found = c;
	break;
      }
    }
    if (!cat_found)
    {
      alert ("Error: Category not found.");
    }
    else
    {
      alert ("Incorrect. The correct choice was '"+all[cat_found].name+"'.");
      set_category_test();
    }
    return false;
  }
}

function set_category_test()
{
  var all = get_categories();
  var sub = [];
  for (var cat in all)
  {
    sub = sub.concat(all[cat].subs);
  }
  var cur_sub = document.getElementById('v_s').innerHTML;
  var new_sub = '';
  do {
    var new_i = Math.floor(Math.random()*sub.length);
    new_sub = sub[new_i];
  } while (cur_sub == new_sub);
  document.getElementById('v_s').innerHTML = new_sub;
}

function get_categories()
{
  return {
    'adult'		       : { name: 'Sexually Explicit',	       subs: ['pornography','adult sites'] },
    'arts_and_entertainment'   : { name: 'Arts & Entertainment',       subs: ['arts', 'music', 'literature', 'writing', 'fiction', 'movies', 'tv', 'radio', 'celebrities'] },
    'automotive'	       : { name: 'Automotive',	      	       subs: ['vehicles', 'vehicle accessories'] },
    'business_and_finance'     : { name: 'Business & Finance',         subs: ['financial markets and news', 'business opportunities', 'entrepreneurship', 'b2b'] },
    'computing_and_technology' : { name: 'Computing & Technology',     subs: ['pc hardware', 'internet', 'software', 'gadgets', 'popular science', 'computer systems'] },
    'education'		       : { name: 'Education',		       subs: ['college', 'homework', 'study groups', 'bibliographic reference', 'search engines'] },
    'employment'	       : { name: 'Employment',	      	       subs: ['job listings', 'job recruiting', 'office culture', 'job benefits', 'career'] },
    'games'		       : { name: 'Games',		       subs: ['computer games', 'console games', 'online games', 'video games'] },
    'health'		       : { name: 'Health',		       subs: ['fitness', 'nutrition', 'disease', 'medicine', 'pregnancy', 'elderly care'] },
    'lifestyle'		       : { name: 'Lifestyle',		       subs: ['hobbies', 'crafts', 'food', 'fashion', 'leisure', 'scrapbooking', 'green living', 'pets'] },
    'online_shopping'          : { name: 'Online Shopping',            subs: ['online checkout', 'shopping cart', 'price compare', 'auction', 'classifieds', 'product review sites'] },
    'personal'                 : { name: 'Personal',                   subs: ['diary', 'personal life', 'daily life', 'social network page', 'resumes', 'portfolios'] },
    'politics_and_news'        : { name: 'Politics & News',            subs: ['current events', 'government', 'editorial'] },
    'real_estate'              : { name: 'Real Estate',                subs: ['home listings', 'mortgage', 'real estate brokers', 'moving', 'apartment rental'] },
    'relationships'            : { name: 'Relationships',              subs: ['dating', 'friends', 'husband/wife', 'siblings', 'family', 'gay'] },
    'religion'                 : { name: 'Religion',                   subs: ['faith', 'spirituality', 'non-traditional religions', 'philosophy'] },
    'sports'                   : { name: 'Sports',                     subs: ['professional althletics', 'sports fans', 'athletic teams'] },
    'travel'                   : { name: 'Travel',                     subs: ['vacation', 'airline', 'cruise', 'honeymoon', 'hotels'] }
  };
}
