var email_filter = /^[\w\.%\+\-]+@(?:[A-Z0-9\-]+\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|jobs|museum)$/i;

//
// // Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults
var Photo = {
	show: function(url, id) {
		new Ajax.Updater('photo_comments', '/photos/get_comments/' + id + "&authenticity_token=");
		$('photo').src = url;
		$('mask').show();
		$('photo_wrapper').visualEffect('appear', {duration:0.5});
	},

	hide: function() {
		$('mask').hide();
		$('photo_wrapper').visualEffect('fade', {duration:0.5});
	},

	update_comments: function(id) {
		new Ajax.Updater('photo_comments', '/photos/get_comments/' + id + "&authenticity_token=", {asynchronous:true, evalScripts:true, onComplete:function(request){$('ajax_loader').hide();}});
	},

        onAlbumChange: function(){
          var selected = $('for_album').options[$('for_album').selectedIndex].value;
          if (selected == 'new_album'){
            $('album_fields').show();
            $('photo_photo_album_id').value = '';
          }
          else{
            $('album_fields').hide();
            $('photo_photo_album_id').value = selected;
          }

        }
}

var Video = {
  onAlbumChange: function(){
    var selected = $('for_album').options[$('for_album').selectedIndex].value;
    if (selected == 'new_album'){
      $('album_fields').show();
      $('video_video_album_id').value = '';
    }
    else{
      $('album_fields').hide();
      $('video_video_album_id').value = selected;
    }

  }
}

var BlockedUser = {
  select_all: function() {
    $('blocked_user_block_messages').checked = true;
    $('blocked_user_block_message_board_messages').checked = true;
    $('blocked_user_block_friendship_requests').checked = true;
  }
}

function transpImagesForOldIE(){
  var images = document.getElementsByTagName('img');
  for (i=0, numImgs=images.length; i < numImgs; i++)
    if (images[i].src.match(/\.png/i)) {
      if (!(images[i].src.match(/s3.amazonaws.com/))){
        var image_path = images[i].src.replace(/http:\/\/.*yousty.*?\//i, '../');  //TODO: need to somehow get absolute paht to work
        image_path = image_path.replace(/\.png.*/i, '.png');
        images[i].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + images[i].src + "')";
        images[i].src = '/images/x.gif';
      }

    }

//C:/Users/Nico/Desktop/InstantRails-2.0-win/rails_apps/yousty/trunk/public/images/buttons/jetzt_anmelden_3.png
}


Event.addBehavior.reassignAfterAjax = true;
Event.addBehavior({
  'div.ajax_pagination a' : Remote.Link
})


var community_message_interval = 30000; //30 secs
var community_message_index = 0;
var community_message_timer;

function switch_community_message(num_messages)
{
  if ($('community_message_table') && !$('community_message_table').mouseInside){
      next_community_message(num_messages)
      var recur_call = "switch_community_message(" + num_messages + ")";
      community_message_timer = setTimeout(recur_call, community_message_interval);
    }
}

function setMouseOverMessageState(){
  $('community_message_table').observe('mouseover',function(){$('community_message_table').mouseInside = true;});
  $('community_message_table').observe('mouseout',function(){$('community_message_table').mouseInside = false;});
}

function next_community_message(num_messages){
  if (num_messages > 1){
    $('community_message_'+community_message_index).visualEffect("fade", {duration:1.0});  //, {"duration": "1000"}
    community_message_index = (community_message_index+1) % num_messages;
  }
  setTimeout( function() {$('community_message_'+community_message_index).visualEffect("appear", {duration:1.0}); }, 1300 );
}

function previous_community_message(num_messages){
  if (num_messages > 1){
    $('community_message_'+community_message_index).visualEffect("fade", {duration:1.0});  //, {"duration": "1000"}
    if (community_message_index != 0)
      community_message_index = community_message_index-1;
    else
      community_message_index = num_messages-1;
  }
  setTimeout( function() {$('community_message_'+community_message_index).visualEffect("appear", {duration:1.0}); }, 1300 );
}


function showFlashMessage( msg )
{
    $('community_message').hide();
    $('flash').innerHTML = msg;
    $('flash').show();
    setTimeout(function() { $('flash').visualEffect('fade', {duration:3.0})}, 1000 );
    setTimeout(function() { $('community_message').visualEffect('appear', {duration:2.0}) }, 4300);
}


function submitCommunityMessageOnEnter(e)
{
  var characterCode;

  if(e && e.which){ //if which property of event object is supported (NN4)
    characterCode = e.which; //character code is contained in NN4's which property
  }
  else{
    characterCode = e.keyCode; //character code is contained in IE's keyCode property
  }

  if(characterCode == 13){ //if generated character code is equal to ascii 13 (if enter key)

    if ($('user_feed_message').value != 0 && $('user_feed_message').value.length >= 10)
      new Ajax.Request('/user_feed/create',
                       {asynchronous:true,
                        evalScripts:true,
                        onSuccess:function(request){$('user_feed_message').value = '';},  //showFlashMessage('Nachricht gesendet!')
                        parameters:$('instant_message_form').serialize()});
     return false;
  }
  return true;

  //return event.keyCode!=13
}


function submitFormOnEnter(e, form)
{
  var characterCode;

  if(e && e.which){ //if which property of event object is supported (NN4)
    characterCode = e.which; //character code is contained in NN4's which property
  }
  else{
    characterCode = e.keyCode; //character code is contained in IE's keyCode property
  }

  if(characterCode == 13){ //if generated character code is equal to ascii 13 (if enter key)

    $(form).submit();
    return false;
  }
 return true;

}


function enterPressed(e){
  var characterCode;

  if(e && e.which){ //if which property of event object is supported (NN4)
    characterCode = e.which; //character code is contained in NN4's which property
  }
  else{
    characterCode = e.keyCode; //character code is contained in IE's keyCode property
  }

  if(characterCode == 13){ //if generated character code is equal to ascii 13 (if enter key)

    return true;
  }
 return false;
}


function validate_field(regex, field, blank_is_valid)
{
  var regexp = new RegExp(regex)

  if ( regexp.test(field.value) || (field.value == '' && blank_is_valid) )
  {
    field.className = '';
    $(field.id+'_invalid_label').hide();
  }
  else
  {
    field.className = 'fieldWithErrors';
    $(field.id+'_invalid_label').show();
  }
}


function empty_city_field(){
  var city_field = $('user_stadt');
  city_field.value = '';
  city_field.className = 'fieldWithErrors';
  $(city_field.id+'_invalid_label').show();
}


function validate_zip(zip_field)
{
  if ( $('user_country').value == 'Deutschland' )
    if ( zip_field.value.length != 5 )
    {
      zip_field.className = 'fieldWithErrors';
      $(zip_field.id+'_invalid_label').show();
    }
    else
    {
      zip_field.className = '';
      $(zip_field.id+'_invalid_label').hide();
    }
  else
    if ( zip_field.value.length != 4 )
    {
      zip_field.className = 'fieldWithErrors';
      $(zip_field.id+'_invalid_label').show();
    }
    else
    {
      zip_field.className = '';
      $(zip_field.id+'_invalid_label').hide();
    }

}

function form_valid(form)
{
  var spans = form.getElementsByTagName('span');
  for (i=0, numSpans=spans.length; i < numSpans; i++)
    if (spans[i].id.match(/_invalid_label$/)) {
       if (Element.visible(spans[i]))
         return false;
    }

  return true;
}


function setStateDiv(select)
{
    country = select.options[select.options.selectedIndex].value;
    de = document.getElementById('states_germany');
    at = document.getElementById('states_austria');
    ch = document.getElementById('states_switzerland');

    if (country == 'Deutschland' || country == 'Germany')
    {
            de.style.display = '';
            at.style.display = 'none';
            ch.style.display = 'none';
            $('user_state_germany').name     = 'user[state]'
            $('user_state_austria').name     = 'tmp'
            $('user_state_switzerland').name = 'tmp'
    }
    else if (country == 'Österreich' || country == 'Austria')
    {
            de.style.display = 'none';
            at.style.display = '';
            ch.style.display = 'none';
            $('user_state_germany').name     = 'tmp'
            $('user_state_austria').name     = 'user[state]'
            $('user_state_switzerland').name = 'tmp'
    }
    else if (country == 'Schweiz' || country == 'Switzerland')
    {

            de.style.display = 'none';
            at.style.display = 'none';
            ch.style.display = '';
            $('user_state_germany').name     = 'tmp'
            $('user_state_austria').name     = 'tmp'
            $('user_state_switzerland').name = 'user[state]'

    }
    else
    {
            de.style.display = 'none';
            at.style.display = 'none';
            ch.style.display = 'none';

    }
}

var next_job_index;

function remove_job_idea(job_index){
  $('job_select_' + job_index).hide();
  $('user_job_idea_' + job_index).value = '';
  $('user_job_idea_' + job_index + '_category').selectedIndex  = 0;
  $('add_job_idea_link').show();
  next_job_index--;
  if (next_job_index > 1){
    $('job_remove_link_' + (next_job_index - 1)).show();
  }
}


function add_job_idea(){
  $('job_select_' + next_job_index).show();
  if (next_job_index > 1){
    $('job_remove_link_' + (next_job_index - 1)).hide();
  }
  if (next_job_index == 3)
    $('add_job_idea_link').hide();
  next_job_index++;
}


function mark_job_idea_field_invalid(job_index){
  if (job_index > 0){
    $('job_' + job_index).down().className = 'auto_complete_select_box fieldWithErrors';
    $('job_'+job_index+'_error').show();
  }
  else{
    $('job').down().className = 'auto_complete_select_box fieldWithErrors';
    if ($('job').down().down().value != '--- Bitte wählen ---')
      $('job_error').show();
  }
}

function mark_location_fields_invalid(){
  $('user_plz').className = 'fieldWithErrors';
  $('user_plz_invalid_label').show();
  $('user_stadt').className = 'fieldWithErrors';
  $('user_stadt_invalid_label').show();
  $('user_state').className = 'fieldWithErrors';
  $('user_state_invalid_label').show();
}


function open_tooltip( tool_tip_element ){
  $(tool_tip_element).select('.tooltip, .tooltip_one_line')[0].setStyle({
    display:'inline'
  });
  //$(tool_tip_element).visualEffect("blind_down", {"duration": 0.5});
}

function close_tooltip( tool_tip_element ){
  $(tool_tip_element).select('.tooltip, .tooltip_one_line')[0].setStyle({
    display:'none'
  });
}


function open_centered_tooltip( tool_tip_element, type ){
  var tool_tip = $(tool_tip_element).select('.tooltip, .tooltip_one_line')[0];
  $(type + '_popup').innerHTML = "<div class='clickable' style='float:right;font-weight:bold;' title='Schliessen' onclick=\"close_centered_tooltip('" + type + "')\">X</div>" + tool_tip.innerHTML;
  $(type + '_popup_container').show();
  if (typeof fixed_layout == 'function') fixed_layout(); //for IE 6
}

function close_centered_tooltip( type ){
  $(type + '_popup').innerHTML = '';
  $(type + '_popup_container').hide();
}

function show_new_company() {
  new Effect.Appear('newcompany');
}


//TODO: might be good to make this generic for any kind of form...
function video_fields_valid(){
  if ($('video_youtube_id').value == ''){
    $('video_youtube_id').className = 'fieldWithErrors';
    $('video_youtube_id_error_label').show();
  }
  else{
    $('video_youtube_id').className = '';
    $('video_youtube_id_error_label').hide();
  }

  if ($('video_description').value == ''){
    $('video_description').className = 'fieldWithErrors';
    $('video_description_error_label').show();
  }
  else{
    $('video_description').className = '';
    $('video_description_error_label').hide();
  }

  return ($('video_youtube_id').value != '' && $('video_description').value != '')
}

document.observe('dom:loaded', addTargetBlank);

function addTargetBlank(){
  links = $$('a.new_window');
  for (i=0; i < links.length; i++)
    links[i].setAttribute('target', "_blank");
}


// Login Box

function login_box_register(new_check_box){
  if (new_check_box.checked){
    $('login_fields').hide();
    $('login').removeClassName('login');
    $('login').addClassName('login_small');
    $('registration_fields').show();
    $('login_error').hide();
  }
  else{
    $('login_fields').show();
    $('login').addClassName('login');
    $('login').removeClassName('login_small');
    $('registration_fields').hide();
    $('login_error').hide();
  }
}

function submit_new_user(){
  if ($('user_email').value != ''){
    if (!email_filter.test($('user_email').value)) {
      $('join_error').innerHTML = 'Bitte gib eine gültige E-Mail an!';
      $('join_error').show();
    }
    else{
      $('join_form').submit();
    }
  }
  else{
    $('join_error').innerHTML = 'Bitte gib deine E-Mail an!';
    $('join_error').show();
  }
}


function join_with_and(array){
  if (array.length > 0){
    var joined = array[0];
    for (var i=1; i < array.length; i++)
      if (i == array.length - 1)
        joined += ' und ' + array[i];
      else
        joined += ', ' + array[i]
    return joined;
  }
  return '';
}


function validate_registration(looksForApprenticeshipMSGLocalized){
  var invalid_fields = [];

  //$('errors').hide();

  if ($('user_vorname').value == '') invalid_fields.push('Vorname');
  if ($('user_nachname').value == '') invalid_fields.push('Nachname');
  if ($('user_ausbildungsstatus').value == '') invalid_fields.push('Tätigkeit');
  if ($('user_looks_for_apprenticeship').value == '') invalid_fields.push(looksForApprenticeshipMSGLocalized);
  if (!$('user_over_14').checked && $('user_parent_email').value == '') invalid_fields.push('E-Mail eines Erziehungsberechtigten');

  var errors = [];

  if (!$('user_over_14').checked &&
      $('user_parent_email').value != '' &&
      !email_filter.test($('user_parent_email').value)) errors.push('E-Mail eines Erziehungsberechtigten ist ungültig.')
  if (!$('user_accept_agb').checked) errors.push('Bitte AGB akzeptieren!');

  if (invalid_fields.length > 0 || errors.length > 0 ){
    $('errors').innerHTML = '';
    if (invalid_fields.length > 0)
      $('errors').innerHTML = "<p>Bitte " + join_with_and(invalid_fields) + ' angeben!</p>';
    $('errors').innerHTML += "<p>" + errors.join("<p/><p>") + '</p>';
    $('errors').show();
    return false;
  }
  return true;
}

function showPasswordBox(element){
//  var form =  $(element).up('form')
//  form.down('.prompt_pw_field').hide();
//  form.down('.pw_field').show();
//  form.down('.pw_field').focus();
  $('prompt_pw_field').hide();
  $('pw_field').show();
  $('password').focus();
}

function restorePasswordPrompt(element){
  var form =  $(element).up('form');
  if (form.down('.pw_field').down().value == ''){
    form.down('.prompt_pw_field').show();
    form.down('.pw_field').hide();
  }
}

function prepareEMailField(element){
  if ($(element).value == 'E-Mail'){
    $(element).removeClassName('input_prompt');
    $(element).value = '';
  }
}

function restoreEMailField(element){
  if ($(element).value == ''){
    $(element).addClassName('input_prompt');
    $(element).value = 'E-Mail';
  }
}


function show_user_details_for_autocomplete(list_element){
  var user_id = list_element.down('input').value;
  var user_thumb_url = list_element.down('input').next('input', 0).value;
  var user_info = list_element.down('input').next('input', 1).value;
  var country_flag = list_element.down('input').next('input', 2).value;

  $('selected_user').innerHTML  = "<td><div class='avatar_thumb'><a href='/u/" + user_id + "'><img width='40' height='50' src='" + user_thumb_url + "'></a></div></td>";
  $('selected_user').innerHTML += "<td>" + user_info + "</td>";
  $('selected_user').innerHTML += "<td>" + country_flag + "</td>";
  $('selected_user').innerHTML = "<table class='default'><tr>" + $('selected_user').innerHTML + "</tr></table>"
}


/* User Messages */
function selectReceiver(selElement){
  $('receiver').selectedIndex = 0;
  $('user_message_receiver_id').value = selElement.down('input').value;
}

//function addObjectToEditableList(selElement, selObjectText, objectClassName, associatedObjectClassName){
//  var objectID = selElement.down('input').value;
//  var hiddenObjectIDField = new Element('input', { type: 'hidden', value: objectID, name: associatedObjectClassName + '[' + objectClassName + '_ids][]' });
//  var objectDiv = new Element('div', { 'class': 'editable_list_element'  });
//  var removeButton = new Element('div', { 'class': 'add_remove_button' });
//  var removeLink = new Element('a', { href: '#', onclick: "this.up().up().remove(); return false;" });
//  removeLink.insert('x')
//  removeButton.insert(removeLink)
//  var selObjDiv = new Element('div', { 'class': 'editable_list_element_text' } )
//  selObjDiv.insert(selObjectText);
//  objectDiv.insert(selObjDiv);
//  objectDiv.insert(removeButton);
//  objectDiv.insert(hiddenObjectIDField);
//  Element.insert($(objectClassName + '_list'), objectDiv );
//}

function updateCompanyForm(element){
  if(element.checked == true){
    switch(element){
      case $('company_is_customer'):
        $('company_coming_soon').checked = false;
        break;
      case $('company_coming_soon'):
        $('company_is_customer').checked = false;
        break;
    }
    clearDateSelect('company_published_from');
    clearDateSelect('company_published_until');
    $('published_container').hide();
  }else{
    $('published_container').show();
  }
}

function clearDateSelect(element){
  $(element + '_3i').clear();
  $(element + '_2i').clear();
  $(element + '_1i').clear();
}

function setTodayAtDateSelect(element){
  var today = new Date();
  $$('#' + element + '_3i option[value='+today.getDate()+']')[0].selected = true;
  $$('#' + element + '_2i option[value='+today.getMonth()+']')[0].selected = true;
  $$('#' + element + '_1i option[value='+today.getFullYear()+']')[0].selected = true;
}



