function scroll_to(target) {
	var window_scroller = new Fx.Scroll(window, {
		wheelStops:false,
		offset: {'x': 0, 'y': -75},
		transition: Fx.Transitions.Quad.easeInOut
	});
	window_scroller.toElement(target);
}

function scroll_gallery_to(gallery,target,old_target) {
	var window_scroller = new Fx.Scroll(gallery, {
		wheelStops:false,
		offset: {'x': -100, 'y': 0},
		transition: Fx.Transitions.Quad.easeInOut,
		onComplete: function() {
			remoozify(gallery,target,old_target);
		}
	});
	if(Browser.Engine.trident) {
		window_scroller.start((target.getOffsets(window).x)-(gallery.getPosition().x));
		position = (target.getOffsets(window).x-100)-(gallery.getPosition().x);
	} else {
		position = Math.round(target.getCoordinates(gallery).left)-100;
		window_scroller.toElement(target);
	}
	move_knob(gallery,position);
}

function move_knob(gallery,position) {
	knob = gallery.getParent().getElement('.knob');	
	try {
		more = gallery.getChildren('.more');
		slider_width = more[0].getPrevious().getSize().x;
		slider_steps = (gallery.getScrollSize().x-1610-slider_width)-(more[0].getSize().x+10);
	}
	catch(err) {
		last = gallery.getLast();
		slider_width = last.getPrevious().getSize().x;
		slider_steps = (gallery.getScrollSize().x-1610-slider_width);
	}
	knob.tween('left',((slider_width-10) * Math.abs(-position)) / slider_steps);
}

function remoozify(gallery,new_post,old_post) {
	try {
		gallery.current_remooz.close();
	}
	catch(err) {}
	try {
		delete gallery.current_remooz;
		old_remooz_image = old_post.getElement('img');
		old_remooz_image.removeEvents('click');
		old_remooz_image.erase('class');
	}
	catch(err) {}
	if(new_post.getFirst().className != 'post') {
		try {
			remooz_image = new_post.getElement('img');
			filetype = remooz_image.src.substring(remooz_image.src.lastIndexOf('.'), remooz_image.src.length); 
			link = remooz_image.src.substring(0,remooz_image.src.lastIndexOf('-'))+filetype; 
		
			gallery.current_remooz = new ReMooz(remooz_image, {
										'link': link,
			            				'origin': 'img',
										'shadow': 'onOpenEnd',
										'resizeFactor': 0.9,
										'cutOut': false,
										'opacityResize': 0.4,
										'dragging': false,
										'centered': true
			        				});
		}
		catch(err) {}
	}
}

function gallery_make_current(post,gallery) {
	sibling = gallery.getElement('li.current');
	sibling.className = '';
	sibling.setStyle('opacity','.5');
	comments_remove(sibling);
	post.className = 'current';
	post.style.opacity = 1;
	window.location.hash=post.id.replace(/post-/,'').replace(/timeline-/,'');
	scroll_gallery_to(gallery,post,sibling);
	if(post.getFirst().className == 'post') {
		comment_form_load(post);
		comment_list_load(post);
	}
	try {
		post.getElement('.overlay').dispose();
		post.setStyle('position','');
	}
	catch(err) {}
}

function video_items(gallery) {
	var video_items = gallery.getElements('.video_embed');
	video_items.each(function(element) {
		element.addEvent('mousemove', function(){
			if(element.getParent().className != 'current') {
				var overlay = new Element('div', {'class':'overlay'});
				element.getParent().setStyle('position','relative');
				try {
					overlay.replaces(element.getParent().getElement('.overlay'));
				}
				catch(err) {
					element.getParent().adopt(overlay);
				}
			}
		});
	});
}

function gallery_slider(gallery,init) {
	try {
		more = gallery.getChildren('.more');
		gallery.slider_width = more[0].getPrevious().getSize().x;
		gallery.slider_steps = (gallery.getScrollSize().x-1610-gallery.slider_width)-(more[0].getSize().x+10);
	}
	catch(err) {
		last = gallery.getLast();
		gallery.slider_width = last.getPrevious().getSize().x;
		gallery.slider_steps = (gallery.getScrollSize().x-1610-gallery.slider_width);
	}
			
	var slider = gallery.getParent().getElement('.slider');
	var knob = gallery.getParent().getElement('.knob');
	
	var slider_tween = new Fx.Tween(slider);
	slider_tween.start('width',gallery.slider_width).chain(function() {
		if(init == 'yes') {
			gallery.slider = new Slider(slider, knob, {
				steps: gallery.slider_steps,
				onChange: function(value){
					gallery.scrollTo(value,0);
				}
			});
		} else {
				gallery.slider.full = gallery.slider_width-10;
				gallery.slider.drag.options.limit.x[1] = gallery.slider_width-10;
				gallery.slider.drag.value.now.x = gallery.slider_width-10;
				gallery.slider.max = gallery.slider_steps;
				gallery.slider.range = gallery.slider_steps;
				gallery.slider.steps = gallery.slider_steps;
				gallery.slider.stepWidth = (gallery.slider_width-10)/gallery.slider_steps;
				gallery.slider.setOptions({steps: gallery.slider_steps});
		}
	});
}

function gallery_items(gallery) {
	var gallery_items = gallery.getParent().getElements('.gallery>li');
	gallery_items.each(function(element) {
	
		var tween = new Fx.Tween(element, {duration:250, wait:false});
		element.addEvent('mouseenter', function(){
			if(element.className != 'current' && element.className != 'last' && element.className != 'more') {
				tween.start('opacity','.5','1');
			}
		});
		element.addEvent('mouseleave', function(){
			if(element.className != 'current' && element.className != 'last' && element.className != 'more') {
				tween.start('opacity','.5');
			}
		});
		element.addEvent('click', function(){
			if(element.className != 'current' && element.className != 'last' && element.className != 'more') {
				gallery_make_current(element,gallery);
			}
		});
	});
}

function menu_items() {
	$(document.body).getElements('#menu a').addEvent('click', function(e){
		new Event(e).stop();
		scroll_to(this.href.split(/#/)[1]);
	});
}

function top_links() {
	$(document.body).getElements('.top').addEvent('click', function(e){
		new Event(e).stop();
		scroll_to(this.href.split(/#/)[1]);
	});
}

function sort_option_links() {
	$(document.body).getElements('.sort_options a').addEvent('click', function(e){
		
		new Event(e).stop();
		var gallery = this.parentNode.parentNode.getElement('.gallery');
		
		if(this.className == 'inactive') {
			this.className = '';
		} else {
			this.className = 'inactive'
		}
		
		active_links = $(this.parentNode).getElements('a[class!=inactive]');
		
		active_links_list = new Array(); 
		for(i=0;i<active_links.length;i++) {
			active_links_list.push(active_links[i].rel);
		}
				
		var req = new Request.HTML({ 
			url: '/moo/wp-content/themes/default/post.php', 
			method: 'get', 
			update: gallery,
			onRequest: function () {
				gallery.fade('out');
			},
			onComplete: function() { 
				gallery.fade('in');
				remoozify_links(gallery);
				gallery_init(gallery);
				scroll_gallery_to(gallery,gallery.firstChild);
			}
		}).get({'gallery': this.parentNode.parentNode.id, 'actives': active_links_list });
	});
}

function more_links(gallery) {
	gallery.getElements('li.more a').addEvent('click', function(e){
		new Event(e).stop();
		var gallery = this.parentNode.parentNode;
		
		this.parentNode.fade('out').dispose();
		
		var active_links = $(gallery.parentNode.parentNode).getElements('.sort_options a[class!=inactive]');
		
		active_links_list = new Array(); 
		for(i=0;i<active_links.length;i++) {
			active_links_list.push(active_links[i].rel);
		}
					
		var req = new Request.HTML({ 
			url: '/moo/wp-content/themes/default/post.php', 
			method: 'get', 
			onSuccess: function(tree, el, html) {
				temp = new Element('div');
				temp.set('html', html);
				remoozify_links(temp);
				$$(temp.childNodes).set('opacity',0).inject(gallery.getLast(), 'before').fade('.5');
				try {
					gallery.getElement('.more').fade('1');
				}
				catch(err) {}
				gallery_init(gallery);
				position = Math.round(gallery.getScroll().x);
				move_knob(gallery,position);
			}
		}).get({'gallery': gallery.parentNode.parentNode.id, 'actives': active_links_list, 'offset': (gallery.childNodes.length - 3)});
	});
}

function email_link() {
	email_link = $(document.body).getElement('.email');
	email_link.addEvent('mouseenter', function(){
		email_link.href = 'mailto:silkjaer@theundersigned.net';
	});
	email_link.addEvent('mouseleave', function(){
		email_link.href = 'mailto:silkjaer@theundersigned.net';
	});
}

function pulse_knobs() {
	function pulse_in(what) {
		pulseFx = new Fx.Tween(what, {
			duration: 1000,
			onComplete: function() {
				pulse_out(what);
			}
		});
		pulseFx.start('opacity','1');
	}
	
	function pulse_out(what) {
		pulseFx = new Fx.Tween(what, {
			duration: 1000,
			onComplete: function() {
				pulse_in(what);	
			}
		});
		pulseFx.start('opacity','.2');
	}
	
	pulse_knobs = $(document.body).getElements('.knob');
	pulse_knobs.each(function(element) {
		pulse_out(element);
	});
}

function comment_form_ajax(element) {
	element.getElement('.commentform').addEvent('submit', function(e) {
		new Event(e).stop();
		this.set('send', {
			onFailure: function(request){
				if (request.responseText.search(/<title>WordPress &rsaquo; Error<\/title>/) != -1) {
					var data = request.responseText.match(/<p>(.*)<\/p>/);
					alert(data[1]);
				} else {
					var data = request.responseText;
					alert(data[1]);
				}
			},
			onComplete: function() {
				comment_list_load(element);
			}
		});
		this.send();
	});
	
	inputs = $(document.body).getElements('.current .comments input.text');
	inputs.each(function(input) {
		input.addEvent('focus', function(){
			if(input.value == 'Name' || input.value == 'Website' || input.value == 'E-mail') {
				input.value = '';
			}
		});
		input.addEvent('blur', function(){
			if(input.value == '') {
				input.value = input.title;
			}
		});
	});
}

function comment_form_load(element) {
	comment_form = element.getElement('.comment_form');
	var req = new Request.HTML({ 
		url: '/moo/wp-content/themes/default/comment_form.php', 
		method: 'get', 
		update: comment_form,
		onRequest: function () {
			comment_form.fade('out');
		},
		onComplete: function() { 
			comment_form.fade('in');
			comment_form_ajax(element);
		}
	}).get({'postid': element.id.replace(/post-/,'').replace(/timeline-/,'')});
}

function comment_list_load(element) {
	comment_list = element.getElement('.comment_list');
	var req = new Request.HTML({ 
		url: '/moo/wp-content/themes/default/comment_list.php', 
		method: 'get', 
		update: comment_list,
		onRequest: function () {
			comment_list.fade('out');
		},
		onComplete: function() { 
			comment_list.fade('in');
		}
	}).get({'postid': element.id.replace(/post-/,'').replace(/timeline-/,'')});
}

function comments_remove(element) {
	try {
		comment_list = element.getElement('.comment_list');
		comment_form = element.getElement('.comment_form');
		comment_list.fade('out');
		comment_form.fade('out');
	}
	catch(err) {}
}

function $get(key,url){  
    if(arguments.length < 2) url =location.href;  
    if(arguments.length > 0 && key != ""){  
        if(key == "#"){  
            var regex = new RegExp("[#]([^$]*)");  
        } else if(key == "?"){  
            var regex = new RegExp("[?]([^#$]*)");  
        } else {  
            var regex = new RegExp("[?&]"+key+"=([^&#]*)");  
        }  
        var results = regex.exec(url);  
        return (results == null )? "" : results[1];  
    } else {  
        url = url.split("?");  
        var results = {};  
            if(url.length > 1){  
                url = url[1].split("#");  
                if(url.length > 1) results["hash"] = url[1];  
                url[0].split("&").each(function(item,index){  
                    item = item.split("=");  
                    results[item[0]] = item[1];  
                });  
            }  
        return results;  
    }  
}

function get_parameters() {
	postid = $get("#");
	if(postid != '') {
		try {
			post = $(document.body).getElement('#post-'+postid);
			if(post != null) {
				post_gallery = post.parentNode;
				post_page = post_gallery.parentNode.parentNode;
				scroll_to(post_page);
				gallery_make_current(post,post_gallery);
				comment_forms();
			} else {
				var req = new Request({ 
					url: '/moo/wp-content/themes/default/post_offset.php', 
					method: 'get', 
					onSuccess: function(response) {
						if(response != '') {
							response_array = response.split(",");
							gallery = $(document.body).getElement('#'+response_array[0]+' .gallery')
							var req = new Request.HTML({ 
								url: '/moo/wp-content/themes/default/post.php', 
								method: 'get',
								update: gallery,
								onRequest: function() {
									scroll_to(gallery);
									gallery.fade('out');
								},
								onSuccess: function() {
									gallery.fade('in');
									remoozify_links(gallery);
									gallery_make_current(gallery.getElement('#post-'+postid),gallery);
									gallery_init(gallery);
									comment_forms();
								}
							}).get({'cat': response_array[1], 'posts':response_array[2]});
						}
					}
				}).get({'p': postid});
			}
		}
		catch(err) { }
	} else {
		comment_forms();
	}
}

function comment_forms() {
	elements = $(document.body).getElements('.commentform');
	elements.each(function(element) {
		element_parent = element.parentNode.parentNode.parentNode;
		comment_form_ajax(element_parent);
	});
}

function remoozify_links(parent) {
	parent.getElements('a.zoom').each(function(element) {
        new ReMooz(element, {
			'origin': 'img',
			'shadow': 'onOpenEnd',
			'resizeFactor': 0.9,
			'cutOut': false,
			'opacityResize': 0.4,
			'dragging': false,
			'centered': true
   		});
    });
}

function gallery_init(gallery,init) {
	gallery_slider(gallery,init);
	gallery_items(gallery);
	more_links(gallery);
	video_items(gallery);
	remoozify(gallery,gallery.getElement('.current'));
}

window.addEvent('domready', function() {
	if(Browser.Engine.trident) {
		if(Browser.Engine.version <= 4) {
			$$('.gallery').each(function(el){
			    el.setStyle('width', window.getSize().x-100);
			});
		}
	}
	
	var galleries = $$('.gallery');
	galleries.each(function(gallery) {
		gallery_init(gallery,'yes');
	});
	
	menu_items();
	top_links();
	sort_option_links();
	email_link();
	pulse_knobs();
	get_parameters();
	
	remoozify_links($(document.body));
});
