jQuery.fn.extend({
  scrollTo : function(speed, easing) {
    return this.each(function() {
      var targetOffset = $(this).offset().top;
      $('html,body').animate({scrollTop: targetOffset}, speed, easing);
    });
  }
});

function onclickTest() {
  alert("LINK PRESSED");
}
 
function submitFlag(comment_id) {
 
  url = "/comments/" + comment_id + "/flags"
  
  //CREATE FLAG
  $.ajax({
    type: 'post',
    dataType: 'xhr',
    url: url,
    data: {
      'authenticity_token': auth_token
    },
    success: function(data) {
     //alert("You have flagged this comment for moderation");
     //replace the flag comment link with a message
     id = "flag_comment_" + comment_id;
     $("#"+id).replaceWith("You have flagged this comment");
     }
  })
  return false;
}

function setupConversationLinks() {
	
	var conversationLinks = $('.conversation-options li');

  conversationLinks.mouseout(function() {
    document.body.style.cursor = 'default';
  });

  conversationLinks.mouseover(function() {
    document.body.style.cursor = 'default';
  })

  $(conversationLinks).mousedown(function() {
	  
	
    //if(loginScreen()) {
      var textarea = $('.conversation-input textarea');
      var klass = $(this).attr('class');
      $('.conversation-options').find('li').each(function(i, li) {
        var li_klass = $(li).attr('class');
        $(li).removeClass().addClass(li_klass.replace(/(.*)-over/, '$1'));
      })

      $(this).removeClass().addClass(klass + '-over');
      $('#hidden_conversation_choice').val($(this).attr('rel'));
      if(!window.changedConversation) {
        textarea.val('');
        window.changedConversation = true;
      }      
    //}
  });
  
  $('.conversation-input textarea').click(function() {
		//if(!logged_in) {
			//loginScreen();
			//return false
		//} else {
	    if(!window.changedConversation) {
	      $(this).val('');
	      window.changedConversation = true;
	    }			
		//}
  });
  
  conversationLinks.click(function() {
		// if(!logged_in) {
		// 			loginScreen();
		// 			return false
		// 		} else {
	    var textarea = $('.conversation-input textarea');
	    textarea.focus();
	    if(!window.changedConversation) {
	      textarea.val('');
	    }			
		// }
  });
  
  //$('#conversation-form').submit(submitConversation);
  prepareConversationForm();
  new InitializeLoginLinks();
  new InitializeComplexRatingSelectors();  
  new InitializeExtendedRatingSelectors();
  new InitializeSimpleRatingSelectors();
	
}

$(document).ready(function() { 
  
  setupConversationLinks();
  
});

function prepareConversationForm() {
  blurAllConversationTypes();
  window.changedConversation = false;
  $('#conversation-order').change(function() {
    var href = window.location.href;
    href = href.split('?')[0];
    if(this.selectedIndex == 0) { // order by date
      window.location.href = href + '?order=date'
    } else {
      window.location.href = href + '?order=rating'
    }
  })
}



function blurAllConversationTypes() {
  $('.conversation-options li').each(function(i, li) {
    if($(this).attr('rel') == "1") {
      $(this).attr('class', 'review-button-over');
    } else {
      var klass = $(li).attr('class');
      if(klass.match('-over')) {
        var new_klass = klass.replace(/(.*)-over/, '$1');
        $(li).removeClass().addClass(new_klass);
      }
    }
  })
}

function InitializeLoginLinks() {
  $('a[href$="/signup"], .join-button').click(function() {
    var div = document.createElement('div');
    var h1 = document.createElement('h1');
    h1.appendChild(document.createTextNode("Sign up as a new user - it's free!"));    
    div.appendChild(h1);
    
    var form = document.createElement('form');
    $(form).attr('action', '/users');
    $(form).attr('method', 'post');

    var input = document.createElement('input');
    $(input).attr('name', 'user[pt1]');
    $(input).attr('type', 'hidden');
    $(input).attr('value', '1');
    form.appendChild(input);
    
    var input = document.createElement('input');
    $(input).attr('name', 'authenticity_token');
    $(input).attr('type', 'hidden');
    $(input).attr('value', auth_token);
    form.appendChild(input);
    
    var p = document.createElement('p');
    var label = document.createElement('label')
    var strong = document.createElement('strong');
    var txt = document.createTextNode('Your email address');
    strong.appendChild(txt);
    label.appendChild(strong);
    input = document.createElement('input');
    $(input).attr('name', 'user[email]');
    $(input).attr('type', 'text');
    label.appendChild(input);
    p.appendChild(label);
    form.appendChild(p);
    
    p = document.createElement('p');
    input = document.createElement('input');
    $(input).attr('type', 'submit');
    $(input).attr('value', 'Sign up to ThePet.net');
    p.appendChild(input);
    form.appendChild(p);
    
    div.appendChild(form);
        
    $.facebox(div);
    
    $('#facebox input[type="text"]').focus();
    
    return false;
  })
}

function InitializeExtendedRatingSelectors() {
  var extended_rating_selectors = 'img.extended_rating_link'
  var img_on = '/images/paw.png'
  var img_off = '/images/paw_off.png'
  $(extended_rating_selectors).livequery('click', clickExtended);
  
  function clickExtended() {
    if(!logged_in) {
      window.location.href = '/login';
      return
    }
    
    $(this).parent().blur();
    
    var id = $(this).attr('id')
    var pieces = id.split('-')
    var klass = pieces[2];
    var pid = pieces[3];
    var score = pieces[4];
    var url = '/' + klass + '/' + pid + '/' + 'rating';
    
    if($(this).is('.selected')) {
      // DESTROY RATING
      $(this).removeClass('selected');
      
      // remove images
      for(var i=1; i <= 5; i++) {
        var basename = "extended-rating-" + klass + '-' + pid + '-';
        $('#' + basename + i).attr('src', img_off)
      }
              
      $.ajax({
        type: 'delete',
        url: url,
        data: {
          'authenticity_token': auth_token,
          'type': 'extended'
        }
      })
      
      return false;
    } else {
      // CREATE RATING
      
      $(this).addClass('selected');
      
      var myform = document.createElement('form');
      var select = document.createElement('select')
      var option = document.createElement('option');
      var auth = document.createElement('input');
      auth.setAttribute('type', 'hidden');
      auth.setAttribute('name', 'authenticity_token');
      auth.setAttribute('value', auth_token)
      myform.appendChild(auth);

      option.setAttribute('value', score);
      option.setAttribute('selected', 'selected');
      select.appendChild(option)
      select.setAttribute('name', "score")
      myform.appendChild(select)

      myform = $(myform)
      myform.attr('action', url);

      for(var i=1; i <= 5; i++) {
        var basename = "extended-rating-" + klass + '-' + pid + '-';
        if(i <= score) {
          $('#' + basename + i).attr('src', img_on)
        } else {
          $('#' + basename + i).attr('src', img_off)
        }
      }

      $.ajax({
        type: 'post',
        dataType: 'xhr',
        url: url,
        data: myform.serialize(),
        success: function(data) {

        }
      })
      
      return false;
    }
  }
}


function InitializeComplexRatingSelectors() {
    var complex_rating_selectors = 'img.complex_rating_selector';
    var img_on = '/images/paw.png'
    var img_off = '/images/paw_off.png'
    var states = {}
    
    $(complex_rating_selectors).click(click);

    function click() {
      if(!logged_in) {
        window.location.href = '/login';
        return
      }
      $(this).parent().blur();
      
      var id = $(this).attr('id');
      var pieces = id.split('-');
      var klass = pieces[2];
      var pid   = pieces[3];
      var group = pieces[4];
      var score = pieces[5];
      var url = '/' + klass + '/' + pid + '/rating';
      
      if($(this).is('.selected')) {
        $(this).removeClass('selected');
        
        // remove images
        for(var i=1; i <= 5; i++) {
          var basename = "complex-rating-" + klass + '-' + pid + '-' + group + '-';
          $('#' + basename + i).attr('src', img_off)
        }
                
        $.ajax({
          type: 'delete',
          url: url,
          data: {
            'authenticity_token': auth_token,
            'group': group,
            'type': 'complex'
          }
        })
        
        return false;
      } else {
        // CREATE NEW RATING
        $(this).addClass('selected');

        var myform = document.createElement('form');
        var select = document.createElement('select')
        var option = document.createElement('option');
        var auth = document.createElement('input');
        auth.setAttribute('type', 'hidden');
        auth.setAttribute('name', 'authenticity_token');
        auth.setAttribute('value', auth_token)
        myform.appendChild(auth);

        option.setAttribute('value', score);
        option.setAttribute('selected', 'selected');
        select.appendChild(option)
        select.setAttribute('name', "score["+group+"]")
        myform.appendChild(select)
        myform = $(myform)
        myform.attr('action', url);

				//alert($(this));

        for(var i=1; i <= 5; i++) {
          var basename = "complex-rating-" + klass + '-' + pid + '-' + group + '-';
          
          if(i <= score) {
            $('#' + basename + i).attr('src', img_on)

          } else {
            $('#' + basename + i).attr('src', img_off)
          }
        }

				for(var i=1; i <= 5; i++) {
          var basename = "complex-rating-" + klass + '-' + pid + '-' + group + '-';
          
          if(i <= score) {
            $('#facebox #' + basename + i).attr('src', img_on)

          } else {
            $('#facebox #' + basename + i).attr('src', img_off)
          }
        }

        $.ajax({
          type: 'post',
          dataType: 'xhr',
          url: url,
          data: myform.serialize()
        })
        
        return false;
      }
      
    }
}


function InitializeSimpleRatingSelectors() {
  var simple_rating_selectors = 'a.simple_rating_link'
  $(simple_rating_selectors).livequery('click', clickSimple);
  
  function clickSimple() {
    if(!logged_in) {
      window.location.href = '/login';
      return false
    }
    
    $(this).after(createMiniLoader());
    
    var href = $(this).attr('href');  // href to something/ratings/new
    var pieces = href.split('/');     // split it up
    var id = pieces[2];               // sql ID
    var url = '/' + pieces[1] + '/' + id + '/rating'; // reconstruct the right url for posting
    var bits = pieces[4].split('=');  // split the params to find out if..
    var way = bits[bits.length - 1];  // its an up or down vote
    if(way == 'up') {
      score = '1'
    } else {
      score = '-1'
    };

    var form = document.createElement('form')

    var auth = document.createElement('input');
    auth.setAttribute('type', 'hidden');
    auth.setAttribute('name', 'authenticity_token');
    auth.setAttribute('value', auth_token)
    form.appendChild(auth);

    form.setAttribute('action', url)

    var hidden = document.createElement('input')
    hidden.setAttribute('type', 'hidden');
    hidden.setAttribute('name', 'comment_id');
    hidden.setAttribute('value', id)
    form.appendChild(hidden)

    var scoreelement = document.createElement('input');
    scoreelement.setAttribute('type', 'hidden');
    scoreelement.setAttribute('name', 'score')
    scoreelement.setAttribute('value', score)
    form.appendChild(scoreelement);
    
    $.ajax({
      type: 'post',
      dataType: 'xhr',
      url: url,
      data: $(form).serialize(),
      success: function(data) {
        data = evaluate(data);
        $('#' + data.partial_id).replaceWith(data.partial)
      }
    })
    return false;
  }
}

function evaluate(data) {
  return eval('(' + data + ')')
}

function createLoader() {
  hideLoaders();
  var img = document.createElement('img');
  img.setAttribute('src', '/images/loading.gif');
  img.className = 'loader';
  return img;
}

function createMiniLoader() {
  hideLoaders();
  var img = document.createElement('img');
  img.setAttribute('src', '/images/smallloader.gif');
  img.className = 'smallloader';
  return img;
}

function hideLoaders() {
  $('img[src$="images/loading.gif"]').remove();
}

function hideBox() {
  jQuery(document).trigger('close.facebox'); 
  return false;
}

function NewComment(t) {
  var trigger = t, form;

  if(logged_in) {
    displayMain();
  } else {
    window.location.href = '/login' 
  }
  
  function displayMain() {
    $.facebox(function() {
      $.get(trigger.href, function(data) {
        prepareNewCommentForm(data)
      })      
    })
  }
  
  function prepareNewCommentForm(data) {
    var element = $(data);

    var isConversation = (element.find('#choose-conversation').length == 1)        
    if(isConversation) { // switch to AJAX selectors
      element.find('#choose-conversation').remove();
      element.find('#choose-conversation-ajax').css('display', 'block');
      element.find('form').prepend('<input type="hidden" name="conversation[conversation_type]" id="hidden_conversation_choice" value="1"');
    }
  
    $.facebox(element)
  
    // bindings
    form = $('#facebox form');
    form.submit(submitForm);
    
    if(isConversation) {
      $('.conversation-choice').mouseover(mouseOverConversationType)
      $('.conversation-choice').mouseout(mouseOutConversationType)          
      $('.conversation-choice').click(clickConversationType)          
    }
    
    $('#facebox a.cancel').click(close);

    if(isConversation) {
      $('#facebox input[type="text"]').focus();        
    } else {
      $('#facebox textarea').focus();  
    }
    
    return element
  }
  
  function clickConversationType() {
    $('.conversation-choice').removeClass('conversation-selected').removeClass('conversation-hover');
    $(this).addClass('conversation-selected');
    $('#hidden_conversation_choice').val($(this).attr('rel'));
    return false;
  }
  
  function mouseOverConversationType() {
    $(this).addClass('conversation-hover')
  }
  
  function mouseOutConversationType() {
    $(this).removeClass('conversation-hover')
  }
  
  function close() {
    hideBox();
    return false
  }
  

}


/* jQuery googleMap Copyright Dylan Verheul <dylan@dyve.net>
 * Licensed like jQuery, see http://docs.jquery.com/License
 */

$.googleMap = {
 maps: {},
 marker: function(m) {
   if (!m) {
     return null;
   } else if (m.lat == null && m.lng == null) {
     return $.googleMap.marker($.googleMap.readFromGeo(m));
   } else {
     var marker = new GMarker(new GLatLng(m.lat, m.lng));
     if (m.txt) {
       GEvent.addListener(marker, "click", function() {
           marker.openInfoWindowHtml(m.txt);
         });
     }
     return marker;
   }
 },
 readFromGeo: function(elem) {
   var latElem = $(".latitude", elem)[0];
   var lngElem = $(".longitude", elem)[0];
   if (latElem && lngElem) {
     return { lat:parseFloat($(latElem).attr("title")), lng:parseFloat($(lngElem).attr("title")), txt:$(elem).attr("title") }
   } else {
     return null;
   }
 },
 mapNum: 1
};

$.fn.googleMap = function(lat, lng, zoom, options) {

 // If we aren't supported, we're done
 if (!window.GBrowserIsCompatible || !GBrowserIsCompatible()) return this;

 // Default values make for easy debugging
 if (lat == null) lat = 37.4419;
 if (lng == null) lng = -122.1419;
 if (!zoom) zoom = 13;

 // Sanitize options
 if (!options || typeof options != 'object') options = {};
 options.mapOptions = options.mapOptions || {};
 options.markers = options.markers || [];
 options.controls = options.controls || {};

 // Map all our elements
 return this.each(function() {
   // Make sure we have a valid id
   if (!this.id) this.id = "gMap" + $.googleMap.mapNum++;
   // Create a map and a shortcut to it at the same time
   var map = $.googleMap.maps[this.id] = new GMap(this, options.mapOptions);
   map.removeMapType(G_HYBRID_MAP);
   map.removeMapType(G_SATELLITE_MAP);
   
   // Center and zoom the map
         map.setCenter(new GLatLng(lat, lng), zoom);
         // Add controls to our map
         for (var i = 0; i < options.controls.length; i++) {
         var c = options.controls[i];
         eval("map.addControl(new " + c + "());");
         }
         // If we have markers, put them on the map
         var marker = null;
         for (var i = 0; i < options.markers.length; i++) {
         if (marker = $.googleMap.marker(options.markers[i])) map.addOverlay(marker);
         }
    });
};

// show and hide flash container
$(function(){
  $('#flash_container').hide().fadeIn(500);
  setTimeout(function(){$('#flash_container').fadeOut(500)},3000);
});

// show system notice flash container - does not fade out - must be dismissed by user
$(function(){
	$('#system_notice_container').hide().fadeIn(500);
	$('#dismiss_notice').click(function() {
		$('#system_notice_container').fadeOut(500);
	});
});

// 
function loginScreen() {
  if(logged_in) {
    return true;
  } else {
    var div = document.createElement('div');  
    var strong = document.createElement('strong');
    var txtnode = document.createTextNode("You must be signed in to carry out this action.");

    var p = document.createElement('p');
    strong.appendChild(txtnode);
    p.appendChild(strong);
    div.appendChild(p);

    var form = document.createElement('form');
    $(form).attr('action', '/session')
    $(form).attr('method', 'post')
    
    var redirect = document.createElement('input');
    $(redirect).attr('name', 'redirect_to');
    $(redirect).attr('value', window.location.href);
    $(redirect).attr('type', 'hidden');
    form.appendChild(redirect);
    
    var auth = document.createElement('input');
    $(auth).attr('name', 'authenticity_token');
    $(auth).attr('value', auth_token);
    $(auth).attr('type', 'hidden');
    form.appendChild(auth);

    p = document.createElement('p');
    var label = document.createElement('label');
    label.appendChild(document.createTextNode('Username or Email'));
    label.appendChild(document.createElement('br'));
    var username = document.createElement('input');
    $(username).attr('type', 'text');
    $(username).attr('name', 'login');
    $(username).attr('id', 'lightbox_login');


    label.appendChild(username)
    p.appendChild(label);
    form.appendChild(p);

    p = document.createElement('p');
    label = document.createElement('label');
    label.appendChild(document.createTextNode('Password'));
    label.appendChild(document.createElement('br'));
    var input = document.createElement('input');
    $(input).attr('type', 'password');
    $(input).attr('name', 'password');
    label.appendChild(input)
    p.appendChild(label);
    form.appendChild(p);

    p = document.createElement('p');
    input = document.createElement('input');
    $(input).attr('type', 'submit');
    $(input).attr('value', 'Sign in to ThePet.net');
    form.appendChild(input);

    div.appendChild(form);
    $.facebox(div);
    setTimeout(function() {
      $('#lightbox_login').focus();
    }, 500)
    return(false);
  }
}

