var	imagefx;
var upper_slider;
var middle_slider;
var galleries_slider;
var upper_url;
var middle_url;
var gallery;
var myTips = null;
var get_kat_list_allow = true;
var cachedTitles = [];

function menuGo(menuItem) {
	new Event().stop();
	$('menu_'+menuItem).fireEvent('click');
}

function myMooTools(){					
			upper_slider = new Fx.Slide('upper_container', {mode: 'horizontal'});			
			middle_slider = new Fx.Slide('middle_container');	
			imagefx = $('image').effect('opacity', {duration: 500});
			
			$$('.menu').addEvent('click', function(e) {
				 var path = this.id.substr(this.id.lastIndexOf('_')+1);

				 if (path == "art" || path == "contact" || path == "menu") return;
				 
 				 new Event(e).stop();				 
				 slide_out();
				 				 
				 upper_url = path + "/top.php";
				 middle_url = path + "/middle.php";				 
				 
				 setTimeout("load()", 600);
			});	
			
			$('menu_contact').addEvent('click', function(e){
				setTimeout("fancy_contacts()", 600);								
			});			

			about_results_helper();
			blah_links();
			pa_links();
			pa_thumblinks();
			guestbook_upper();		
			
			new SmoothScroll();
}

function slide_out() {
	slide_top_out();
	slide_middle_out();
	galleries_slider = null;
}

function slide_top_out() {
	$('upper_loading').style.display = "block";
	upper_slider.slideOut();
}

function slide_middle_out() {
	$('middle_loading').style.display = "block";
	middle_slider.slideOut();
}

function load() {
	load_top();
	load_middle();
	setTitle();
}

function load_top() {
		var upper_ajax = new Ajax(upper_url, {
			method: 'get',
			update: $('upper_container')
		});
		
		upper_ajax.request();

		upper_ajax.addEvent('onComplete', function (){					
			$('upper_loading').style.display = "none";
			upper_slider.slideIn();		
			
			if (upper_url.substr(0, 9) == "guestbook")
				guestbook_upper();												
				
			if (upper_url.substr(0, 2) == "pa" || upper_url.substr(0, 4) == "main")
				pa_links();			
				
			if (upper_url.substr(0, 4) == "blah") 
				blah_links();									
				
		});
}

function load_middle() {
		var middle_ajax = new Ajax(middle_url, {
			method: 'get',
			update: $('middle_container')
		});		
		
		middle_ajax.request();

		middle_ajax.addEvent('onComplete', function (){					
		$('middle_loading').style.display = "none";
			middle_slider.slideIn();			
			
			if (middle_url.substr(0, 2) == "pa")
				pa_thumblinks();		
				
			if (middle_url.substr(0, 5) == "about")
				about_results_helper();											
				
			if (middle_url.substr(0, 4) == "blah")
				new SmoothScroll();
			
			if (middle_url.substr(0, 4) == "main") {
				pa_links();
				about_results_helper();						
			}
		});
}

/* GUESTBOOK */

function guestbook_upper() {
	if ($('guestbook_sign') == null)
		return;

	var slider_text = new Fx.Slide('guestbook_sign');			
	var slider_form = new Fx.Slide('guestbook_form');			

	slider_form.hide();
	$('guestbook_form').style.display = "block";
	
	$('guestbook_sign_link').addEvent('click', function(e){
		slider_text.slideOut();
		slider_form.slideIn();
	});		
	
	$('myForm').addEvent('submit', function(e) {
		new Event(e).stop();
		if (guestbook_check_fields()) {
		
			 	slider_form.slideOut();
		 		$('upper_loading').style.display = "block";
		
			this.send({
				update: middle_container,
				onComplete: function() {
			 		$('upper_loading').style.display = "none";
			 		$('guestbook_sign').innerHTML = "Thank you!";
			 		slider_text.slideIn();
				}
			});
		}
	});		
}

function guestbook_check_fields() {
	var requiredFields = Array("name", "email", "spam", "message");

	var re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;

	for (i=0; i<requiredFields.length; i++) {
			var fx = new Fx.Styles(requiredFields[i], {duration:200, wait:false});

		if ( $(requiredFields[i]).value.length < 2 || (requiredFields[i] == "email" && !$(requiredFields[i]).value.match(re))) { 
			fx.start({'background-color': '#c0c0c0'});		
			$(requiredFields[i]).focus();
			return false;
		}
		else {
			fx.start({'background-color': '#FFFFFF'});
		}		

	}		
	
	return true;
}

/* CONTACTS */
function fancy_contacts() {
	var requiredFields = Array("icq_link", "gtalk_link", "yahoo_link", "msn_link", "aim_link", "skype_link", "mobile_link", "mail_link");

	for (i=0; i<requiredFields.length; i++) {
		var fx = new Fx.Styles(requiredFields[i], {duration:500, wait:false});
		var bla = requiredFields[i];
		fx.start({'color': '#ffffff', 
							'margin-right':'10px'}).chain(function(){
						this.start({
								'color': '#c0c0c0', 
								'margin-right':'0px'
						});						
			
		});
		
	}
}


/* GALLERIES */

function load_json_gallery(jsonurl) {	
		var json_ajax = new Ajax(jsonurl, {
			method: 'get',							
			onComplete: function(response) {
				gallery = Json.evaluate(response);
				cachedTitles = [];
				thumbs_append(0);
			}
	}).request();
}

function thumbs_append(start) {
	// Avoid duplicates on funky requests
	if (start == 0)
		$('middle_container').empty();

	for (i=start; i<start+50 && gallery[i]!=null; i++) {		
		var thumb_a = new Element("a", {
			'class':'thumbs',
			'href':gallery[i].url
		});	
		var thumb_img = new Element("img", {
			'width':100,
			'height':100,
			'src':'IMG/pa-thumbs/'+gallery[i].url.replace("IMG/pa/", "")
		});
		
		var tx_icon = false;
		if (gallery[i].title != null && gallery[i].title.trim() != '') {
			thumb_img.setProperty("class", "txTip");
			thumb_img.setProperty("title", gallery[i].title);
			tx_icon = true;
		}		
		thumb_a.adopt(thumb_img);
		$('middle_container').adopt(thumb_a);		
		
		if (tx_icon) {	
			var tx_img = new Element("img", {
				'src':'IMG/tx.png',
				'class':'tx'
			});
			$('middle_container').adopt(tx_img);		
		}
	}
	
	if (gallery.length > start+50) {
		var expander_div = new Element("div", {
			'class':'centered',
			'id':'expander_div'
		});
		var expander_a = new Element("a", {
			'href':'javascript:void(0)',
			'events':{
				'click':function() {
					$('expander_div').remove();
					thumbs_append(start+50);
				}
			}
		});
		expander_a.setText('See more');
		expander_div.adopt(expander_a);
		$('middle_container').adopt(expander_div);
	}
	
	$('middle_loading').style.display = "none";
	setTimeout("middle_slider.slideIn()", 600);
	
	pa_thumblinks();
}

function pa_links() {
	
	if ($('galleries') != null && galleries_slider == null)
			galleries_slider = new Fx.Slide('galleries');			

	var get = $get();  
	// If page has been directly accessed
	if (gallery == null && get.kat != null && $('load_thumbs') != null && $('load_thumbs').value == 1 && get_kat_list_allow == true) {		
		middle_slider.slideOut();
		slide_middle_out();			
		$('middle_container').empty();
	
		var jsonurl = "pa/json.php?dir="+URLDecode(get.kat);
		load_json_gallery(jsonurl);				
		get_kat_list_allow = false;
	}	
	else if (get.kat != null && $('load_thumbs') != null && $('load_thumbs').value == 0 && get_kat_list_allow == true) {
		galleries_slider.slideOut();
		var listurl = "pa/list.php?dir="+get.kat.replace("'", "^");
		setTimeout("pa_links_helper('"+listurl+"')", 600);								
		get_kat_list_allow = false;
	}

	// Categories that have subfolders
	$$('.pa_subfolders').addEvent('click', function(e) {
			new Event(e).stop();
			
			galleries_slider.slideOut();
			var kat = this.href.substr(this.href.lastIndexOf("=")+1).replace("'", "^");
			var listurl = "pa/list.php?dir="+kat;
			setTitle(kat);
			setTimeout("pa_links_helper('"+listurl+"')", 600);											
	});

	// Category links that lead straight to thumbnails
	$$('.pa_direct').addEvent('click', function(e) {
			new Event(e).stop();
			
			middle_slider.slideOut();
			slide_middle_out();			
			$('middle_container').empty();
			
			var kat = this.href.substr(this.href.lastIndexOf("=")+1);
			var jsonurl = "pa/json.php?dir="+kat;
			setTitle(kat);
			load_json_gallery(jsonurl);				
	});
	
	// Add one to the galleries link on the top
	if ($('galleries_heading') != null) {
		$('galleries_heading').addEvent('click', function(e){
			galleries_slider.slideOut();
			var listurl = "pa/list.php";
			setTitle();
			setTimeout("pa_links_helper('"+listurl+"')", 600);											
		});						
	}
}

function pa_links_helper(listurl) {
	listurl = listurl.replace("^", "'");
	var galleries_ajax = new Ajax(listurl, {
		method: 'get',
		update: $('galleries')
	});		

	galleries_ajax.request();
				
	galleries_ajax.addEvent('onComplete', function (){			
		galleries_slider.slideIn();
		pa_links();												
	});			
}

function pa_thumblinks() {
	thumblist_imagelinks();
}
function thumblist_imagelinks() {
	$$('.thimbs').removeEvent('click');
	$$('.thumbs').addEvent('click', function(e){
	
		pre_show_image(e);
		
		var imagepath = this.href.substr(this.href.lastIndexOf("IMG/pa"));			
		new Asset.image(imagepath, {id: 'asset', title: '', onload: function() {											
			show_image(this);
		}});			
		
	});	
	
	// Revitalize old tooltips after clicking "See more"
	$$('.txTip').each(function(item, index) {
		if (cachedTitles[index] == null)
			cachedTitles[index] = item.title;
		else
			item.title = cachedTitles[index];
	});
	myTips = new Tips($$('.txTip'), {
    'maxTitleChars': 120,
    'fixed': true,
    'offsets': {
    	x: 104,
    	y: 0        
    }
 	});
 	myTips.addEvent('onShow', function() { 	 		
 		if (this.toolTip.getPosition().x+this.options.offsets.x > window.getWidth()) { 			 			 			 			
 			this.toolTip.setStyle('left', this.toolTip.getPosition().x-105-this.options.offsets.x); 			 			
 		}
 	});
}

function pre_show_image(e) {
	if (e != null)
		new Event(e).stop();
		
	$('overlay').style.display = 'block';
	$('load').style.display = 'block';
	
	$('image').style.visibility = "hidden";
	$('image').style.display = "block";
	$('image').style.opacity = 0;
}

function hide_image() {
	$('image').style.display = 'none';
	$('image').innerHTML = "";
	$('load').style.display = "none";	
	$('overlay').style.display = 'none';		
}

function show_image(img) {
	$('image').empty();
	$('image').adopt(img);
			
	// Commands->
	var commands = new Element("div", {
		"id":"closenextprev",
		"styles":{
			"margin-top":(img.getCoordinates().height/2+13)*-1+'px',
			"margin-left":(img.getCoordinates().width/2+13)*-1+'px'
		}
	});
	
	var com_close = new Element("img", {
		"src":"IMG/closebox.png",
		"alt":"X",
		"width":30,
		"height":30,
		"id":"image_close", 
		"events":{
			"click":function(e){
				hide_image();
			}
		}
	});
	
	this.addEvent("click", hide_image);

	var title = null;
	var prev = null;
	var next = null;
	gallery.each(function(item,index) {
		
		if (Utf8.decode(URLDecode(img.src)).contains(item.url)) {
			title = item.title;
			if (gallery[index-1] != null)
				prev = gallery[index-1].url;
			if (gallery[index+1] != null)
				next = gallery[index+1].url;
		}
	});
	
	commands.adopt(com_close);
	
	if (prev != null) {
		var com_prev = new Element("img", {
			"src":"IMG/prev.png",
			"alt":"&lt;",
			"width":30,
			"height":30,
			"id":"image_prev",
			"events":{
				"click":function(e) {					
					pre_show_image(e);					
					var imagepath = prev;								
					new Asset.image(imagepath, {id: 'asset', title: '', onload: function() {											
						show_image(this);
					}});
				}
			}
		});		
		commands.adopt(com_prev);			
	}

	if (next != null) {
		var com_next = new Element("img", {
			"src":"IMG/next.png",
			"alt":"&lt;",
			"width":30,
			"height":30,
			"id":"image_next",
			"events":{
				"click":function(e) {
					pre_show_image(e);
					var imagepath = next;			
					new Asset.image(imagepath, {id: 'asset', title: '', onload: function() {											
						show_image(this);
					}});
				}
			}
		});		
		commands.adopt(com_next);			
	}	
	// <-Commands
		
	img.setStyles({
		"margin-top":img.getCoordinates().height/2*-1+'px',
		"margin-left":img.getCoordinates().width/2*-1+'px',
		"width":img.getCoordinates().width+'px',
		"height":img.getCoordinates().height+'px'
	});
	img.setProperty("class","bordered");
	
	$('image').adopt(commands);
	$('image').adopt(img);			
	
	if (title != null && title != '') {
		var title_div = new Element("div", {
			"class":"pa-tx",
			"styles":{
				"margin-left":img.getCoordinates().width/2*-1+8+'px',
				"width":img.getCoordinates().width-28+'px'	// -8 (border) -20 (padding-left+padding-right)
			}
		});
		title_div.setText(title);
		$('image').adopt(title_div);		
	}
	
	$('load').style.display = 'none';
	imagefx.start(1).chain(pa_imagelinks());
}

		
function pa_imagelinks() {
	// deprecated	
}

/* ABOUT */

function about_results_helper() {
	if ($('about_results') == null)
		return;	
		
	$('about_close').addEvent('click', function(e) {	
		$('about_results').style.display = 'none';
		$('overlay').style.display = 'none';
	});
	
	$$('.tests').addEvent('click', function(e) {
		new Event(e).stop();
		
		$('overlay').style.display = 'block';
		$('load').style.display = 'block';
				
		var about_ajax = new Ajax(this.href.substr(this.href.lastIndexOf('about/tests')), {
			method: 'get',
			update: $('about_results_text')
		});
		
		about_ajax.request();

		about_ajax.addEvent('onComplete', function (){					
			$('load').style.display = 'none';
			$('about_results').style.display = 'block';	
		});	
	});
	
}

/* BLAH */

function blah_links() {

	$$('.blah_cat').addEvent('click', function(e) {
				new Event(e).stop();
				middle_url = "blah/middle.php?what=category&category="+this.href.substr(this.href.lastIndexOf("=")+1);
				slide_middle_out();
				setTimeout("load_middle()", 600);		
	});
	
	$$('.blah_archive').addEvent('click', function(e) {
				new Event(e).stop();
				middle_url = "blah/middle.php?what=archive&archive="+this.href.substr(this.href.lastIndexOf("=")+1);
				slide_middle_out();
				setTimeout("load_middle()", 600);
	});
		
}

// Check whether anything is checked
function check_radio() {
	var retvalue = false;

	$$('input[type="radio"]').each(function(item){
		if (item.checked) {
			retvalue = true;
			return;
		}
	});
	return retvalue;
}

function poll_form_submit() {
	if (check_radio()) {
		Cookie.set('voted', $('poll_ID').value, {duration: 666});
		$('poll_form').send({update: 'poll_form'});
	}
}

function URLDecode (encodedString) {
  var output = encodedString;
  var binVal, thisString;
  var myregexp = /(%[^%]{2})/;
  while ((match = myregexp.exec(output)) != null
             && match.length > 1
             && match[1] != '') {
    binVal = parseInt(match[1].substr(1),16);
    thisString = String.fromCharCode(binVal);
    output = output.replace(match[1], thisString);
  }
  return output;
}

// Function by Jens Anders Bakke, webfreak.no 
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 setTitle(kat) {
	if (upper_url == null)
		return;

	var title = "";
		
	if (upper_url.contains("about"))					title = " : Who am I?";
	else if (upper_url.contains("skills"))		title = " : Skills";
	else if (upper_url.contains("sites"))			title = " : Sites";
	else if (upper_url.contains("blah"))			title = " : Blah";
	else if (upper_url.contains("music"))			title = " : Music";
	else if (upper_url.contains("guestbook")) title = " : Guestbook";
	else if (upper_url.contains("pa")) {
		title = " : Photos";
		if (kat != null) {
			title += " : "+URLDecode(kat).replace("/", " : ");
		}
	}
		
	$$('title').setText("Dachaz' Networks"+title);	
}

window.addEvent('domready', myMooTools); 

window.addEvent('keydown', function(event){
		event = new Event(event);
		if (event.key == 'esc') {
			hide_image();
			$('about_results').style.display = 'none';	
		}
		else if (event.key == 'left' && $('image_prev') != null) {
			$('image_prev').fireEvent('click');
		}
		else if (event.key == 'right' && $('image_next') != null) {
			$('image_next').fireEvent('click');
		}		
});