var solitude = {
	d: document,
	cl: function(){
		if ( window.console ) return console.log(Array.prototype.slice.call(arguments, 0, arguments.length));
		else return false;
	},
	css3transition:false,
	verCmp: function(cmpv){
		var ver = $.browser.version;
		if ( ver == cmpv ) return true;
		
		var varr = ver.split('.');
		var cmparr = cmpv.split('.');
		for (var i in varr) {
			if ( varr[i] >= cmparr[i] ) {
				return true;
			}
		}
	}
};

solitude._canvasBase = function(width,height){
	this.canvas = document.createElement('canvas');
	this.canvas.width = width;
	this.canvas.height = height;
	this.init();
};
solitude._canvasBase.prototype.init = function(){
	$('body').append(this.canvas);

	if ( $.browser.msie ) {
		if ( uuCanvas ) this.canvas = uuCanvas.init(this.canvas,true);
		else return false; //error
	}
	if ( !this.canvas || !this.canvas.getContext ) return false; //error
};

solitude._canvas = function(){
	this.canvases = {};
};
solitude._canvas.prototype = {
	_create: function(width,height){
		var canvas = new solitude._canvasBase(width,height);
		return canvas.canvas;
	},

	_redraw: function(){
	},

	closeButton: function(options){
		var opts = $.extend({},{
			size:20,
			bg:'rgba(0,0,0,1)'
		}, options);
		
		var width = opts.size;

		var line = Math.round(width/10*1000)/1000;
		var blur_size = Math.round(width/5*1000)/1000;
		var offset_y_size = Math.round(width/10*1000)/1000;

		var shadow_color = '0,0,0';
		var shadow_color_opacity = 0.5;
		
		var canvas_width = width + blur_size;
		var canvas_height = canvas_width + offset_y_size;
		
		var canvas = this._create(canvas_width, canvas_height);
		var ctx = canvas.getContext('2d');
		
		ctx.beginPath();

		if ( blur_size || offset_y_size ) {
			if ( $.browser.safari || ( $.browser.mozilla && solitude.verCmp('1.9.1') ) ) {
				ctx.shadowBlur = blur_size;
				ctx.shadowColor = 'rgba('+shadow_color+','+shadow_color_opacity+')';
				ctx.shadowOffsetY = offset_y_size;
			} else {
				ctx.fillStyle = 'rgba('+shadow_color+','+shadow_color_opacity+')';
				ctx.arc(canvas_width/2, (canvas_width/2+offset_y_size), (width/2), 0, Math.PI*2, false);
				ctx.fill();
				ctx.beginPath();
			}
		}
		
		ctx.fillStyle = 'rgba(255,255,255,1)';
		ctx.arc(canvas_width/2, canvas_width/2, (width/2), 0, Math.PI*2, false);
		ctx.fill();
		
		ctx.beginPath();
		ctx.shadowBlur = 0;
		ctx.shadowOffsetY = 0;
		ctx.fillStyle = opts.bg;
		ctx.arc(canvas_width/2, canvas_width/2, (width/2 - line), 0, Math.PI*2, false);
		ctx.fill();

		ctx.beginPath();
		ctx.lineWidth = width/9;
		ctx.strokeStyle = 'rgba(255,255,255,1)';
		
		ctx.moveTo((canvas_width/2-width/6), (canvas_width/2-width/6));
		ctx.lineTo(canvas_width-(canvas_width/2-width/6), canvas_width-(canvas_width/2-width/6));
		ctx.moveTo(canvas_width-(canvas_width/2-width/6), (canvas_width/2-width/6));
		ctx.lineTo((canvas_width/2-width/6), canvas_width-(canvas_width/2-width/6));
		ctx.stroke();

		return canvas;
	}
};
solitude.canvas = new solitude._canvas();


solitude.hashFix = function(){
	fix(location.hash);
	$(window).bind('click', function(e){
		var t = e.target;
		if ( t.tagName == 'A' && location.host == t.host && location.pathname == t.pathname && t.hash ) {
			solitude.cl(e.target);
			fix(e.target.hash);
			return false;
		}
	});

	function fix(hash){
		var $target = $(hash);
		if ( hash && $target.get(0) ) {
			var margin = 10;
			var top_height = $('#top').outerHeight();
			var pos = $target.position();

			setTimeout(function(){
				$(window).scrollTop(Math.round(pos.top) - top_height - margin);
			},0);
		}
	}
}

solitude.topbutton = function(){
	var $body = $('body');
	var $win = $(window);
	
	var scroll = function(){
		if ( $win.scrollTop() > 0 ) solitude.$scroller.animate({scrollTop:0}, $win.scrollTop()*0.5);
	};

	var arrow = solitude.canvas.closeButton();

	var $top_link = $('<p>').css({
		cursor: 'pointer',
		position: 'fixed',
		right: 0,
		bottom: 0,
		padding: '0.5em',
		background: '#ccc'
	}).addClass('top-link').append(arrow).bind('click', scroll).hide();
	
	$body.append($top_link);
	
	var hidenseek = function(){
		if ( $win.height() < $body.height() ) {
			$top_link.show();
		} else {
			$top_link.hide();
		}

		$top_link.css({
			opacity: 0.25 + 0.75*($win.scrollTop() / ($body.height() - $win.height()))
		});
		//$top_link.text($win.scrollTop())
	};

	$win.bind('scroll resize', hidenseek);
	hidenseek();
};

$.extend({
	scro11: function($node,margin,duration){
		var $win = $(window);
		var $sc = solitude.$scroller;
		$node = $node || $('body');
		margin = margin || 0;
		duration = duration || Math.abs($win.scrollTop() - $node.offset().top - margin)*0.25;

		//solitude.cl(margin,duration,$node.offset().top,$win.scrollTop())
		/*if ( $win.scrollTop() > 0 )*/ $sc.animate({scrollTop: $node.offset().top + margin}, duration);
	},

	modal: function(options){
		var opts = $.extend({},{
			modalClassName: 'modalbox',
			duration:350,
			click_to_close:true,
			show:null,
			show_after:null,
			close:null,
			close_after:null
		}, options);
		
		var $win = $(window);
		
		var $modalbox = $('body > div.' + opts.modalClassName);

		var resize = function(e){
			$modalbox.css({
				width: $win.width(),
				height: $win.height()
			});
		}
		
		var close = function(e){
			if ( opts.close && typeof(opts.close) === 'function' ) opts.close();
			$modalbox.fadeOut(opts.duration, function(){
				$(this).remove();
				if ( opts.close_after && typeof(opts.close_after) === 'function' ) opts.close_after();
			});
			
			$win.unbind('resize.modal', resize);
		}
		
		if ( $modalbox.length > 0 ){
			close();
		} else {
			var $modalbox = $('<div>').addClass(opts.modalClassName).css({
				position: solitude.ie6 ? 'absolute' : 'fixed',
				top: (solitude.ie6 ? $win.scrollTop() : 0) + 'px',
				left: (solitude.ie6 ? $win.scrollLeft() : 0) + 'px',
				backgroundColor: '#000000',
				opacity: 0.85,
				zIndex: 999,
				width: $win.width(),
				height: $win.height(),
				padding:0,
				margin:0
			})
			.iff( opts.click_to_close )
				.bind('click.modal', close).end()
			.hide();
	
			$win.bind('resize.modal', resize);
			$('body').append($modalbox);

			if ( opts.open && typeof(opts.open) === 'function' ) opts.open();
			
			$modalbox.fadeIn(opts.duration, function(){
				if ( opts.open_after && typeof(opts.open_after) === 'function' ) opts.open_after();
			});
		}
	}
});

$.fn.extend({
	// after fadeIn | animate/opacity:1
	clear_type_fix: function(){
		if ( $.browser.msie ) {
			return this.each(function(){
				this.style.removeAttribute('filter');
				this.style.visibility = 'hidden';
				this.style.visibility = 'visible';
			});
		} else {
			return this;
		}
	},
	
	// image zoom plugin
	z00m: function(options){
		var opts = $.extend({},{
			duration:350,
			slideshow:false,
			filter:[],
			className:'z00m',
			padding:10,
			border:1,
			click_to_close:true,
			scroll_to_close:true,
			modalClassName: 'modalbox'
		}, options);
		
		var caches = [];

		return this.filter('a[href$="gif"], a[href$="jpg"], a[href$="jpeg"], a[href$="png"]' + opts.filter.join(',')).each(function() {
			var $this = $(this);
			var $win = $(window);

			var init = function(e){
				var $z00m = $('body > img.' + opts.className);
				
				var href = e.currentTarget.href;// + '?'+(new Date().getDate());//e.target.href || ;
				$this.data('href', href);
				
				if ( !href ) return false; //error
				
				if ( !$z00m.length ) {
					// generate modalbox
					$.modal({
						close:close
					});
					
					open();
				} else {
					close();

					if ( $z00m.attr('src') != href ) {
						open();
					}
				}
				
				e.preventDefault();
			}

			var open = function(){
				preload($this.data('href'), function($img){
					if ( !$img.length ) return false; //error

					$this.data('$img', $img);
					show();
				});
			};
			
			var show = function(){
				var $img = $this.data('$img');
				
				img_css();
				
				$img
					.addClass(opts.className)
					.iff( opts.click_to_close )
						.bind('click.z00m', close)
						.end()
					.animate({ opacity:1 }, opts.duration, function(){
						$(this).clear_type_fix();
						show_close_button();
					});

				$win.bind('resize.z00m', img_css);
				
				if ( opts.scroll_to_close ) $win.bind('scroll.z00m', close);
			};

			var img_css = function(){
				var $img = $this.data('$img');

				$img.css({width:'auto',height:'auto'}); // size reset
				
				var blank = opts.padding*2 + opts.border*2;
				var win = { w: ($win.width() - blank)*0.9, h: ($win.height() - blank)*0.9 };
				var img = { w: $img.width(), h: $img.height() };
				var exp = Math.min((Math.min(win.w, img.w)/img.w), (Math.min(win.h, img.h)/img.h));
				var size = { w: Math.round(img.w*exp), h: Math.round(img.h*exp) };
				
				$img.css({
					cursor: (opts.click_to_close ? 'pointer' : 'auto'),
					width:size.w +'px',
					height:size.h +'px',
					position: solitude.ie6 ? 'absolute' : 'fixed',
					top: Math.round(($win.height() - size.h - blank)/2) + (solitude.ie6 ? $win.scrollTop() : 0) + 'px',
					left: Math.round(($win.width() - size.w - blank)/2) + (solitude.ie6 ? $win.scrollLeft() : 0) + 'px',
					zIndex:1000,
					visibility:'visible',
					//WebkitBorderRadius:Math.round(opts.padding/3) +'px',
					//MozBorderRadius:Math.round(opts.padding/3) + 'px',
					//WebkitBoxShadow:'0 5px 15px rgba(0,0,0,0.4)',
					//MozBoxShadow:'0 5px 15px rgba(0,0,0,0.4)',
					backgroundColor:'#fff',
					padding:opts.padding + 'px',
					border:opts.border + 'px solid #ddd'
				});
			}

			var close = function(e){
				var $img = $this.data('$img');
				var $btn = $this.data('$btn');
				
				if ( opts.scroll_to_close ) $win.unbind('scroll.z00m', close);
				$win.unbind('resize.z00m');
				
				if ( $btn ) {
					$btn.fadeOut(opts.duration, function(){
						$(this).remove();
					});
				}
				
				$img.fadeOut(opts.duration, function(){
					$(this).remove();
				});
				
				if (e) $.modal();
			};

			var slideList = function(){
			};

			var slide = function(){
			};

			var addIcon = function(){
			};

			var loading = function(){
			}

			var show_close_button = function(){
				var $img = $this.data('$img');
				var $btn = $(solitude.canvas.closeButton(/*{size:24}*/)).css({opacity:0});
				$this.data('$btn', $btn);
				
				$('body').append($btn);

				close_button_css();

				$btn
					.bind('click', close)
					.animate({opacity:0.75}, opts.duration)
					.hover(function(){
						$(this).animate({opacity:1}, Math.round(opts.duration/2));
					}, function(){
						$(this).animate({opacity:0.75}, Math.round(opts.duration/2));
					});
					/*.animate({opacity:1}, opts.duration, function(){
						$(this).clear_type_fix();
					});*/
					
				$win.bind('resize.z00m', close_button_css);
			};
			var close_button_css = function(){
				var $btn = $this.data('$btn');
				var $img = $this.data('$img');
				
				$btn.css({
					cursor:'pointer',
					position:solitude.ie6 ? 'absolute' : 'fixed',
					zIndex:1001,
					top:parseFloat($img.css('top')) - $btn.outerHeight()/2,
					left:parseFloat($img.css('left')) + (solitude.macos ? ($btn.outerWidth()/2 * -1) : ($img.width() + $btn.outerWidth()/2))
				});
			}

			var preload = function(href, callback){
				if ( typeof(href) !== 'string' || typeof(callback) !== 'function' ) return false;
				
				var $img = $('<img style="-ms-interpolation-mode:bicubic;"/>').attr('src',href).css({ width:'auto', height:'auto', opacity:0, top:0, left:0, position:'absolute', visibility:'hidden' });

				//cache check
				if ( $.inArray(href, caches) >= 0 ) {
					$('body').append($img);
					callback($img);
				} else {
					$img.load(function(){
						caches.push(href);
						callback($img);
					}).error(function(){
						callback();
					});
					
					$('body').append($img);
				}
			};

			$this.bind('click', init);
		});
	},

	friendfeed_lifestream: function(options){
		var opts = $.extend({},{
			duration:350,
			username: null,
			num:30,
			namespace: 'friendfeed_lifestream',
			className: 'friendfeed_lifestream',
			margin:20,
			resize_animate_wait:300
		}, options);

		var endpoint = 'http://friendfeed-api.com/v2';
		var feedinfo_path = '/feedinfo';
		var feed_path = '/feed';
		var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];

		return this.each(function(){
			var $this = $(this);
			var $win = $(window);
			
			var init = function(e){
				$.modal({
					duration:opts.duration,
					close:close
				});

				$this.data('start',0);
				
				load();
				
				e.preventDefault();
			}

			var load = function(){
				var start = $this.data('start');

				if ( !$this.data('feed'+start) ){
					$this.data('loading',true);
					
					$.getJSON(endpoint + feed_path + '/' + opts.username + '?num=' + opts.num + '&start=' + start + '&callback=?', function(data){
						$this.data('feed'+start, data.entries);
						sort();
						open();
						
						setTimeout(function(){
							$this.data('loading',false);
							paginate();
						},0);
						
						//$.getJSON(endpoint + feedinfo_path + '/' + opts.username + '?callback=?', function(data){
						//	$this.data('feedinfo', data);	
						//});
					});
				} else {
					open();
				}
			}

			var sort = function(){
				var start = $this.data('start');
				var entries = $this.data('feed'+start);
				
				entries.sort(function(a,b){
					return a.date < b.date ? 1 : -1;
				});
				
				$this.data('feed'+start, entries);
			}

			var open = function(){
				var start = $this.data('start');
				var entries = $this.data('feed'+start);
				
				var $box = start == 0 ? $('<div>').addClass(opts.className).css({opacity:0}) : $this.data('$box');
				var $header = start == 0 ? $('<div>').addClass('header fix').append('<p class="title left">Lifestream</p>') : $this.data('$header');
				var $main = start == 0 ? $('<div>').addClass('main') : $this.data('$main');

				//initialize
				if ( start == 0 ) {
					$this.data('$box', $box);
					$this.data('$header', $header);
					$this.data('$main', $main);

					$box.append($header).append($main);
					$('body').append($box);

					var prev_next = function(e){
						var $target = $(e.target);

						var scroll_dir;
						
						if ( $target.hasClass('prev') && $main.scrollLeft() > 0 ) scroll_dir = '-=';
						else if ( $target.hasClass('next') ) scroll_dir = '+=';
						
						if ( scroll_dir ) {
							var $entry = $main.find('.entry').eq(0);
							var width = $entry.outerWidth() + parseFloat($entry.css('marginLeft')) + parseFloat($entry.css('marginRight'));

							$main.animate({scrollLeft:scroll_dir + Math.round(width)},opts.duration/4, 'linear', fin);
						}
						
						function fin(){
							if ( $main.scrollLeft() <= 0 ) {
								$header.find('p.prev').addClass('disable').removeClass('enable').css('opacity',0.33);
							} else {
								$header.find('p.prev').addClass('enable').removeClass('disable').css('opacity',1);
							}
							
							paginate();
						}
					}

					var $prev = $('<p class="prev disable left">&lt;</p>').bind('click.'+opts.namespace, prev_next).css('opacity',0.33);
					var $next = $('<p class="next enable left">&gt;</p>').bind('click.'+opts.namespace, prev_next);
					$header.append($prev).append($next);

					$win.bind('resize.'+opts.namespace, set_css);

					$box.animate({opacity:1}, opts.duration, function(){
						$(this).clear_type_fix();
						show_close_button();
					});
				}
				
				if ( entries ) {
					$(entries).each(function(i){
						var d = entries[i];
						//var date = new Date(d.date);
						var date = new Date(d.date.replace(/\-/g,'/').replace(/T/,' ').replace('Z',' GMT'));
						var date_str = months[date.getMonth()] +' '+ (function(){
							var dd = ''+date.getDate();
							var ddd = dd.match(/\d$/);
							return ddd == 1 ? dd+'st' : ddd == 2 ? dd+'nd' : ddd == 3 ? dd+'rd' : dd+'th';
						})() +', '+ date.getFullYear();

						
						var url = d.via ? ( d.via.name == 'Twitter' ? d.via.url : $(d.body).eq(0).attr('href') ) : d.url;

						var thumb = (function(){
							if (d.thumbnails) {
								if (d.thumbnails[0].width) {
									return '<a href="'+url+'"><img src="'+d.thumbnails[0].url+'" width="'+d.thumbnails[0].width+'" height="'+d.thumbnails[0].height+'" /></a>';
								} else {
									return '<a href="'+url+'" style="display:block;height:100px;width:100%;background:url('+d.thumbnails[0].url+') center left no-repeat;"></a>';
								}
							}
						})();
						
						var body = thumb ? d.body.replace(/[\s\-]+<a\s.+\/a>/g,''): d.body;
						var via = d.via ? d.via.name : 'FriendFeed';
						
						var $entry = $('<div class="entry feed'+start+'">');
						var $entry_inner = $('<div class="entry_inner">');
						$entry.append($entry_inner);

						$entry_inner
							.append('<p class="body">'+body+'</p>'+(thumb ? '<p class="thumbnails">'+thumb+'</p>':'')+'<p class="date">'+date_str+'</p>'+'<p class="via">'+via+'</p>')
							.bind('click.'+opts.namespace, function(e){
								var link = e.target.tagName == 'A' ? e.target.href : url;
								window.open(link);
								e.preventDefault();
							});
						
						$main.append($entry);
					});

					set_css(start == 0 ? 'init' : null);
				} else {
					//err
				}
			}

			var set_css = function(e){
				var $box = $this.data('$box');
				var $header = $this.data('$header');
				var $main = $this.data('$main');

				// initialize
				if ( typeof(e) === 'string' && e == 'init' ) {
					$box.css({
						position: solitude.ie6 ? 'absolute' : 'fixed',
						zIndex:1000
					});
					
					if (solitude.macos) $header.find('.title').css({textIndent:opts.margin});

					$main.css({
						padding:opts.margin/6,
						overflow:'hidden',
						position:'relative'
					});
				}

				$main.find('.entry').css({
					margin:opts.margin/6
				});
				
				$main.find('.entry .entry_inner p').css({
					margin:opts.margin/2.5
				});
				
				$box.css({
					width:$win.width() - opts.margin*2,
					height:$win.height() - opts.margin*2,
					top: (solitude.ie6 ? $win.scrollTop() : 0) + opts.margin,
					left: (solitude.ie6 ? $win.scrollLeft() : 0) + opts.margin
				});
				
				$main.css({
					height:parseFloat($box.css('height')) - $header.height() - opts.margin
				});

				entry_shuffle(e);
			}

			var entry_shuffle = function(e){
				var start = $this.data('start')
				var $main = $this.data('$main');

				var $entries = $main.find('.entry');

				var main_h = $main.height();
				var main_pos_t = first_pos_t = parseFloat($main.css('paddingTop'));
				var main_pos_l = first_pos_l = parseFloat($main.css('paddingLeft'));

				//add
				if ( !e ) {
					var $past_last_entry = $entries.filter(':not(.feed'+start+'):last');
					
					//var width = $past_last_entry.outerWidth() + parseFloat($past_last_entry.css('marginLeft')) + parseFloat($past_last_entry.css('marginRight'));
					var height = $past_last_entry.outerHeight() + parseFloat($past_last_entry.css('marginTop')) + parseFloat($past_last_entry.css('marginBottom'));
					
					first_pos_t = parseFloat($past_last_entry.css('top')) + height;
					first_pos_l = parseFloat($past_last_entry.css('left'));
					
					$entries = $main.find('.entry.feed'+start);
				}

				var poss = [];
				
				$entries.each(function(i){
					var $entry = $(this);
					
					//var top = $entry.position().top - parseFloat($entry.css('marginTop'));
					//var left = $entry.position().left - parseFloat($entry.css('marginLeft'));
					var width = $entry.outerWidth(/*{margin:true}*/) + parseFloat($entry.css('marginLeft')) + parseFloat($entry.css('marginRight'));
					var height = $entry.outerHeight(/*{margin:true}*/) + parseFloat($entry.css('marginTop')) + parseFloat($entry.css('marginBottom'));

					var pos = {t:main_pos_t,l:main_pos_l,w:width,h:height};
					
					if ( i > 0 ){
						var t = poss[i-1].t + poss[i-1].h;
						var l = poss[i-1].l;
						
						t = t + height > main_h ? pos.t : t; 
						l = t == pos.l ? l + width : l;
						
						pos.t = t;
						pos.l = l;
					} else if ( !e ) {
						pos.t = first_pos_t + height > main_h ? pos.t : first_pos_t;
						pos.l = pos.t == pos.l ? first_pos_l + width : first_pos_l;
					}
					
					poss.push(pos);
				});
				
				$entries.each(function(i){
					var $entry = $(this);
					if ( !e ) {
						$entry.css({
							position:'absolute',
							top:poss[i].t,
							left:poss[i].l,
							opacity:0
						});

						$entry.animate({
							opacity:1
						}, opts.duration, function(){
							$(this).clear_type_fix();
							paginate();
						});
					} else if ( typeof(e) === 'string' && e == 'init' ) {
						$entry.css({
							position:'absolute',
							top:poss[i].t,
							left:poss[i].l
						});
					} else {
						setTimeout(function(){
							$entry.queue([]);
							$entry.stop();
							$entry.css({position:'absolute'});
							
							$entry
								.animate({
									top:poss[i].t,
									left:poss[i].l
								},opts.duration*1.5,function(){
									$(this).clear_type_fix();
									paginate();
								})
							;
						}, opts.resize_animate_wait);
					}
				});
			}

			var paginate = function(){
				//loading check
				if ( $this.data('loading') ) return false;
				
				var $main = $this.data('$main');

				var $entries = $main.find('.entry')
				var $last_entry = $entries.eq($entries.length -1);
				
				var last_entry_pos_l = parseFloat($last_entry.css('left'));
				
				if ( $main.scrollLeft() + $main.width() >= last_entry_pos_l ) {
					var start = $this.data('start');
					$this.data('start', start + opts.num);
					load();
					//solitude.cl('loading...');
				}
			}
			
			var show_close_button = function(){
				var $btn = $(solitude.canvas.closeButton({size:opts.margin})).css({opacity:0});
				$this.data('$btn', $btn);
				
				$('body').append($btn);

				close_button_css();
				$win.bind('resize.'+opts.namespace, close_button_css);
				
				$btn
					.bind('click', close)
					.animate({opacity:0.75}, opts.duration)
					.hover(function(){
						$(this).animate({opacity:1}, Math.round(opts.duration/2));
					}, function(){
						$(this).animate({opacity:0.75}, Math.round(opts.duration/2));
					});
			};
			var close_button_css = function(){
				var $btn = $this.data('$btn');
				var $box = $this.data('$box');
				
				$btn.css({
					cursor:'pointer',
					position:solitude.ie6 ? 'absolute' : 'fixed',
					zIndex:1001,
					top:parseFloat($box.css('top')) - $btn.outerHeight()/2,
					left:parseFloat($box.css('left')) + (solitude.macos ? ($btn.outerWidth()/2*-1) : ($box.width() - $btn.outerWidth()/2))
				});
			}
			
			var close = function(e){
				var $box = $this.data('$box');
				var $btn = $this.data('$btn');
				
				$win.unbind('resize.'+opts.namespace, set_css);
				
				$box.fadeOut(opts.duration, function(){
					$(this).remove();
				});

				if ( $btn ) {
					$btn.fadeOut(opts.duration, function(){
						$(this).remove();
					})
				}
				
				if (e) $.modal();
			}

			$this.bind('click.' + opts.namespace, init);
		});
	}
});

solitude.expGradient = function($node){
	if ( $.browser.msie ) return;
	
	// !!! see style.css !!!  
	if ( !solitude.css3gradient && !$node ) {
		$('#top_p_f').each(function(){setGradient(this,'#eeeeee','#cccccc',0)});
		$('#top ul.menu').each(function(){setGradient(this,'#ffffff','#dddddd',0)});
		$('#lifestream').each(function(){setGradient(this,'#999999','#555555',0)});
		$('#content .post .body a.more-link, #paginate ul li p a, #paginate ul li.current p').each(function(){setGradient(this,'#ffffff','#cccccc',0)});
		$('#comment_form .button input').each(function(){setGradient(this,'#cccccc','#999999',0)});
	} else if ( !solitude.css3gradient && $node ) {
		$node.find('.body a.more-link').each(function(){setGradient(this,'#ffffff','#cccccc',0)});
	}
};

solitude.posts = function(e){
	var $node = e ? ( e.target ? $(e.target) : null ) : null;
	
	if ( !$node ) {
		solitude.expGradient();
		$('#content .posts .post .body a').z00m();
		$('a[rel*="external"]').click(function(){ this.target = '_blank'; });
	} else {
		solitude.expGradient($node);
		$node.find('.body a').z00m();
		$node.find('a[rel*="external"]').click(function(){ this.target = '_blank'; });
	}
	
	//solitude.hashFix();
	//if ( !solitude.ie6 ) solitude.topbutton();
}

$(function(){
	solitude.$scroller = $.browser.safari ? $('body') : $('html');

	solitude.ie6 = ($.browser.msie && $.browser.version == '6.0') ? true : false;

	solitude.macos = navigator.userAgent.match(/Mac\sOS/);
	
	solitude.css3transition = (function(){
		var div = $('<div style="transition:0s;-webkit-transition:0s;-moz-transition:0s;"></div>').get(0);
		if ( div.style.transision || div.style.WebkitTransition || div.style.MozTransition ) return true;
		else return false;
	})();

	solitude.css3gradient = (function(){
		var div = $('<div style="background:linear-gradient(left top,left bottom,from(#fff),to(#fff));background:gradient(linear,left top,left bottom,from(#fff),to(#fff));background:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#fff));background:-moz-linear-gradient(#fff,#fff);"></div>').get(0);
		if ( div.style.background.indexOf('gradient') != -1 ) {return true;}
		else return false;
	})();

	$('#lifestream a').friendfeed_lifestream({
		username:'yasutaka'/*,
		duration:1500*/
	});
	
	setTimeout(solitude.posts,0);
	$('body').bind('AutoPagerize_DOMNodeInserted',solitude.posts);
	/*	var node = e.target;
		var requestURL = e.newValue;
		var parentNode = e.relatedNode;
	*/

	// click to content top
	$('#top .content_title').bind('click', function(e){
		$.scro11($('#content'), $('#top').height() -10);
	});

	//searchbox placeholder
	(function(){
		var ph_word = 'Search';
		var ph_class_name = 'placeholder';
		var $input = $('#s');
		var search_page_flag = (function(){if ( $('body').get(0).id == 'search' ) return true;})();

		if ( $.browser.safari && solitude.macos /* not use for windows */ ) {
			var $inputc = $input.clone();
			$inputc.attr({ type: 'search' });

			$input.after($inputc);
			$input.remove();
			$input = $inputc;
		}

		if ( $input.attr('placeholder') != undefined ) {
			$input.attr({ placeholder: ph_word });
		} else {
			if ( (!$input.val() || $input.val() == ph_word) && !search_page_flag ) $input.val(ph_word).addClass(ph_class_name);

			var e_chg = function(e){
				if ( e && e.type == 'focus' && $input.val() == ph_word ) {
					$input.removeClass(ph_class_name).addClass('unko').val('');
					//alert(1)
				} else if ( e && e.type == 'blur' && !$input.val() ) {
					$input.val(ph_word).addClass(ph_class_name);
				}/* else if ( (!e || !e.type) && $input.val() == ph_word && !search_page_flag ) {
					$input.addClass(ph_class_name);
				}*/
			}

			$input.bind('focus blur', e_chg);
			//e_chg();
		}
	})();
});






