(function($) {
	$.fn.bitly = function(settings) {
		var defaults = {
			version: "3.0",
			login: "xilion",
			apiKey: "R_8b13b3e89ffbf8e6510e3b1ceb273af1",
			url: "http://www.google.com",
			direction: "shorten",
			onFinish: function() {}
		};

		var o = $.extend(defaults, settings || {});
		
		var encodedUrl = $.encodeURL(o.url);
		
		var shorten = "http://api.bit.ly/v3/shorten?login=" + o.login + "&apiKey=" + o.apiKey + "&longUrl=" + encodedUrl + "&format=json&callback=?";
		var expand = "http://api.bit.ly/v3/expand?login=" + o.login + "&apiKey=" + o.apiKey + "&shortUrl=" + encodedUrl + "&format=json&callback=?" ;
		var clicks = "http://api.bit.ly/v3/clicks?login=" + o.login + "&apiKey=" + o.apiKey + "&shortUrl=" + encodedUrl + "&format=json&callback=?" ;
		
		//$("#encoded_url").val( encodedUrl );

		return this.each(function() {
			var obj = this;
			if ( o.direction == "shorten" )
				var func = shorten;
			else if ( o.direction == "expand" )
				var func = expand ;

			$.getJSON(func, function (response) {
                		if ( o.direction == "shorten" )
					var u = response.data.url ;
				else if (o.direction == "expand") {
					var e = response.data.expand;
					var u = e.long_url;
				}
				
				if ( $(obj).attr("href") != undefined )
					$(obj).attr("href", u);
				else if ( $(obj).attr("value") != undefined ) 
					$(obj).val( u );
				
				if (o.onFinish) {
					o.onFinish.call(this);	
				} 
                       	});
		});
	}
	
	
	$.encodeURL = function(url) {
			var tmpS = url;
	        tmpS = tmpS.replace(/\//gi, "%2F");
        	tmpS = tmpS.replace(/!/gi, "%21");
        	tmpS = tmpS.replace(/\*/gi, "%2A");
        	tmpS = tmpS.replace(/\'/gi, "%27");
        	tmpS = tmpS.replace(/\(/gi, "%28");
        	tmpS = tmpS.replace(/\)/gi, "%29");
        	tmpS = tmpS.replace(/\;/gi, "%3B");
        	tmpS = tmpS.replace(/\:/gi, "%3A");
        	tmpS = tmpS.replace(/\@/gi, "%40");
        	tmpS = tmpS.replace(/\&/gi, "%26");
        	tmpS = tmpS.replace(/\=/gi, "%3D");
        	tmpS = tmpS.replace(/\+/gi, "%2B");
        	tmpS = tmpS.replace(/\$/gi, "%24");
        	tmpS = tmpS.replace(/\,/gi, "%2C");
        	tmpS = tmpS.replace(/\?/gi, "%3F");
        	//tmpS = tmpS.replace(/\%/gi, "%25");
        	tmpS = tmpS.replace(/\#/gi, "%23");
        	tmpS = tmpS.replace(/\[/gi, "%5B");
        	tmpS = tmpS.replace(/\]/gi, "%5D");
			tmpS = tmpS.replace(/\-/gi, "%2D");
			tmpS = tmpS.replace(/\_/gi, "%5F");
			tmpS = tmpS.replace(/\^/gi, "%5E");
			tmpS = tmpS.replace(/\"/gi, "%22");
			tmpS = tmpS.replace(/\./gi, "%2E");
			tmpS = tmpS.replace(/\|/gi, "%7C");
			tmpS = tmpS.replace(/\</gi, "%3C");
			tmpS = tmpS.replace(/\>/gi, "%3E");
			tmpS = tmpS.replace(/\~/gi, "%7E");
			tmpS = tmpS.replace(/\`/gi, "%60");

        	return tmpS;
	}
})(jQuery);

