/*
 * jQuery Bookmarklet - version 0.5
 * Written By: Brett Barros
 *
 * If you use this script, please link back to the source
 *
 * Copyright (c) 2010 Latent Motion (http://latentmotion.com/how-to-create-a-jquery-bookmarklet/)
 * Released under the Creative Commons Attribution 3.0 Unported License,
 * as defined here: http://creativecommons.org/licenses/by/3.0/
 *
 */

// Use this to switch between local and live for testing
// TODO - automate this
var buffer_env = '';
// var buffer_env = 'local.';

// Where can we get jQuery?
var jqPath="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js";

// Where is your CSS? Add versioning to prevent caching problems
var myCSS = "http://"+buffer_env+"bufferapp.com/css/bookmarklet.v3.css";

// What are your other required scripts (ie: jquery plugins)?
var js =["http://"+buffer_env+"bufferapp.com/js/libs/postmessage.js"];

// This function will be called after loading jQuery
function jqReady(){

	// This function will be called after loading all of your scripts
	function jqCustom(){
		
		var jqbuf = $.noConflict(true);
		
		jqbuf(document.createElement('link') ).attr({href: myCSS,rel: 'stylesheet'}).appendTo('head');
		
		// get elements with class "buffer-button"
		var button_elements = jqbuf('.buffer-add-button');
		
		// replace any links with buttons
		for(i=0; i<button_elements.length; i++) {
			button_element = button_elements[i];
			if(jqbuf(button_element).attr('data-no-replace') != 'true') {
				var buffer_button_url = jqbuf(button_element).attr('data-url');
				if(buffer_button_url == null) var buffer_button_url = window.location;

				var buffer_button_text = jqbuf(button_element).attr('data-text');
				if(buffer_button_text == null) {
					buffer_button_text = jqbuf("html head title").text();
				}
				buffer_button_text.toString().replace(/^\s\s*/, '').replace(/\s\s*$/, '');
				var buffer_query_string = "?url="+encodeURIComponent(buffer_button_url)+"&text="+encodeURIComponent(buffer_button_text);
				if(jqbuf(button_element).attr('data-via')) buffer_query_string += "&via="+jqbuf(button_element).attr('data-via');
				
				var buffer_button_height = 20;
				var buffer_button_width = 55;
				
				if(jqbuf(button_element).attr('data-count') == "horizontal") buffer_button_width = 110;
				if(jqbuf(button_element).attr('data-count') == "vertical") buffer_button_height = 62;
				
				buffer_query_string += "&count="+jqbuf(button_element).attr('data-count')+"&referral_token="+jqbuf(button_element).attr('data-referral-token');
				
				jqbuf(button_element).replaceWith(jqbuf('<iframe allowtransparency="true" frameborder="0" scrolling="no" tabindex="0" class="buffer-button" src="http://widgets.bufferapp.com/button'+buffer_query_string+'" style="width: '+buffer_button_width+'px; height: '+buffer_button_height+'px; " title="Buffer Button"></iframe>'));
			}
		}
		
		jqbuf('.buffer-add-button').click(function(e){

			e.preventDefault();

			var buffer_preset_button_url = jqbuf(this).attr('data-url');
			if(buffer_preset_button_url == null) var buffer_button_url = window.location;
			else var buffer_button_url = buffer_preset_button_url;

			var buffer_prefill_text = jqbuf(this).attr('data-text');
			if(buffer_prefill_text == null) {
				var prefill = getSelText();
				if(prefill.toString().length == 0) prefill = jqbuf("html head title").text();
			} else var prefill = buffer_prefill_text;
			prefill.toString().replace(/^\s\s*/, '').replace(/\s\s*$/, '');


			var buffer_url = jqbuf(this).attr('data-url');

			var google_reader_title_element = jqbuf('#current-entry div.entry-container h2.entry-title a');
			if(google_reader_title_element.length > 0) buffer_url = google_reader_title_element.attr('href');
			var prefill = getSelText();
			if(prefill.toString().length == 0 && google_reader_title_element.length > 0) prefill = google_reader_title_element.text();
			else if(prefill.toString().length == 0) prefill = jqbuf("html head title").text();
			prefill.toString().replace(/^\s\s*/, '').replace(/\s\s*$/, '');

			if(buffer_url == "") buffer_url = encodeURIComponent(window.location);
			var buffer_text = jqbuf(this).attr('data-text');
			if(buffer_text == "") buffer_text = encodeURIComponent(prefill);
			var buffer_source = jqbuf(this).attr('data-source');
			
			var buffer_query_string = "?url="+buffer_url+"&text="+buffer_text;
			if(buffer_source != undefined) buffer_query_string += "&source="+buffer_source;
			if(jqbuf(this).attr('data-via')) buffer_query_string += "&via="+jqbuf(this).attr('data-via');

			var iframe = jqbuf(document.createElement('iframe')).attr('allowtransparency', 'true').attr('src', 'http://'+buffer_env+'bufferapp.com/bookmarklet/'+buffer_query_string).attr('name', 'buffer_iframe').attr('id', 'buffer_iframe').attr('scrolling', 'no');
			jqbuf("body").append(iframe);


			bufferpm.bind("buffermessage", function(data) {
				jqbuf('#buffer_iframe').remove();
				// window.scroll(0,0);
			  	// return {hello:"world"};
				return false;
			});

		});

	}

	function prepare_tweet(text, url) {
		text = text.toString();
		var space_for_url = url.length+1;
		if(text.length > (140-space_for_url)) {

			text = text.substring(0, (140-(space_for_url+3)));
			text += "...";
		}
		text += " "+url;
		return text;
	}

	function getSelText()
	{
		var txt = '';
		if (window.getSelection) {
			txt = window.getSelection();
		} else if (document.getSelection) {
			txt = document.getSelection();
		} else if (document.selection) {
			txt = document.selection.createRange().text;
		} else return;
		return txt;
	}

	// If needed, load and wait for dependency scripts
	var b=js.length;
	if(b!==0) {
		var c=1,d=function(){c++==b&&jqCustom()};
		for(var e in js)
			$.getScript(js[e],d)
	} else jqCustom()

}

// Guts to load jQuery dynamically -> http://ow.ly/1tcA2
bufferapp_z=function(){bufferapp_z.getScript(jqPath);bufferapp_z.tryReady(0)};bufferapp_z.getScript=function(a){var b=document.createElement("script");b.setAttribute("type","text/javascript");b.setAttribute("src",a);typeof b!="undefined"&&document.getElementsByTagName("head")[0].appendChild(b)};
bufferapp_z.tryReady=function(a){if((typeof $=="undefined")||(typeof $.getScript=="undefined"))a<=5E3?setTimeout("bufferapp_z.tryReady("+(a+200)+")",200):alert("Timed out while calling jQuery.");else jqReady()};bufferapp_z();
