(function(){
  var methods = {
    defaultValueActsAsHint: function(element){
      element = $(element);
      element._default = element.value;
      
      return element.observe('focus', function(){
        if(element._default != element.value) return;
        element.removeClassName('hint').value = '';
      }).observe('blur', function(){
        if(element.value.strip() != '') return;
        element.addClassName('hint').value = element._default;
      }).addClassName('hint');
    }
  };
   
  $w('input textarea').each(function(tag){ Element.addMethods(tag, methods) });
})();

var webRoot;

var curSlider = 1;
var sliderInterval = 5000;
var sliderTimer;

function nextSlider() {
	slider((curSlider % 8) + 1, false);
	sliderTimer = setTimeout("nextSlider()", sliderInterval);
}

var curBlogCat;
var aryTabs = [];
function setup(root) {
    webRoot = root;
    
	if($('username')) {
		$('username').defaultValueActsAsHint();
		$('password').defaultValueActsAsHint();
	}
	$('k').defaultValueActsAsHint();
	
	if($('slider')) {
		setTimeout("nextSlider()", sliderInterval);
	}
	
	var ary = $$("#blog-tabber ul li.tab");
	curBlogCat = ary[0];
	for(var i = 0; ary[i]; i++) {
		ary[i].onclick = function(event) {
			var e = window.event;
			if(!e) {
				e = event;
			}
			var t = e.target ? e.target : e.srcElement;
			
			if(t.href && t.href.charAt(t.href.length-1) == "#") {
				curBlogCat.removeClassName("active");
				var t = this;
				
				Effect.Fade(curBlogCat.getElementsByTagName("ul")[0], { duration: .3, afterFinish: function() {
					curBlogCat = t;
					curBlogCat.addClassName("active");
				
					Effect.Appear(curBlogCat.getElementsByTagName("ul")[0], { duration: .3 });
				}});
				
				return false;
			}
		}
	}
	
	ary = $$("ul.categories + .files .mid");
	for(var i = 0; i < ary.length; i++) {
		if(ary[i].clientHeight) {
			ary[i].style.minHeight = $$('ul.categories')[i].clientHeight + 10 + "px";
		}
	}
	
	ary = $$("ul.categories li");
	if(ary.length) {
		var curFileCat = (location.hash.replace(/#/, "") ? location.hash.replace(/#/, "") : ary[0].id.replace(/link_/, ""));
		for(var i = 0; ary[i]; i++) {
			var id = ary[i].id.replace(/link_/, "");
			if(id == curFileCat) {
				ary[i].addClassName("active");
				$('cat_' + id).style.display = "";
			
				var oldDiv = "cat_" + curFileCat;
				var newDiv = "cat_" + id;
				var id = ary[i].id.replace(/link_/, "");
			
				if($('link_' + id).hasClassName("photo")) {
					updateFileList(oldDiv, newDiv, id);
				}
			}
		
			ary[i].onclick = function() {
				var id = this.id.replace(/link_/, "");
				if(id == curFileCat) {
					return false;
				}
			
				var oldDiv = "cat_" + curFileCat;
				var newDiv = "cat_" + id;
			
				$('link_' + curFileCat).removeClassName("active");
				$('link_' + id).addClassName("active");
			
				updateFileList(oldDiv, newDiv, id);
			
				curFileCat = id;
			}
		}
	}
	
	ary = $$('.side-tab .handle');
	for(var i = 0; ary[i]; i++) {
		ary[i].onclick = function() {
			var obj = $(this.parentNode);
			
			new Ajax.Request(webRoot + "/ajax/toggleTab", {
			    method: "post",
			    parameters: { divName: obj.id, isOpen: !obj.hasClassName("active") }
			});
			
			if(obj.hasClassName("active")) {
				new Effect.Move(obj, { x: -155, y: 0, mode: 'relative', duration: .3, afterFinish: function() {
					aryTabs[obj.id] = false;
					obj.style.zIndex = 99998;
					obj.removeClassName("active");
				}});
			}
			else {
				new Effect.Move(obj, { x: 155, y: 0, mode: 'relative', duration: .3, afterFinish: function() {
					aryTabs[obj.id] = true;
					obj.style.zIndex = 999999;
					obj.addClassName("active");
				}});
			}
		}
	}
}

function updateFileList(oldDiv, newDiv, id) {
	Effect.SlideUp($(oldDiv), { duration: .3, afterFinish: function() {
		if($('link_' + id).hasClassName("photo")) {
			$(newDiv).innerHTML = "<div><\/div>";
			new Ajax.Request("photos/ajaxGallery/" + id, {
				method: 'post',
				onSuccess: function(transport) {
					var obj = transport.responseText.evalJSON(true);
					var photos = obj.photos;
					for(var i = 0; i < photos.length; i++) {
						var photo = photos[i];

						var div = Builder.node("div", { className: "photo" }, [
							Builder.node("a", { href: photo.src_big, title: photo.caption, rel: "lightbox[]" }, [
								Builder.node("img", { src: photo.src_small, alt: photo.caption, width: "100px" })
							])
						]);

						$(newDiv).childNodes[0].appendChild(div);

						if(i % 4 == 3) {
							$(newDiv).childNodes[0].appendChild(Builder.node("div", { className: "clear" }));
						}
					}
					$(newDiv).childNodes[0].appendChild(Builder.node("div", { className: "clear" }));

					Effect.SlideDown($(newDiv), { duration: .3, afterFinish: function() {
						Lightbox.prototype.updateImageList();
					}});
				}
			});
		}
		else {
			Effect.SlideDown($(newDiv), { duration: .3 });
		}
	}});
}

function slider(i, destroyTimer) {
	var div = $('slider-' + curSlider);
	
	$('slider-link-' + curSlider).removeClassName("active");
	$('slider-link-' + i).addClassName("active");
	
	Effect.Fade(div, { duration: .3, afterFinish: function() {
		curSlider = i;
		div = $('slider-' + curSlider);
		Effect.Appear(div, { duration: .3 });
	}});
	
	if(destroyTimer) {
		clearTimeout(sliderTimer);
	}
}

var active = null;
function showSubNav(id) {
	if(active) {
		active.style.display = "none";
	}
	
	active = $('subnav-' + id);
	active.style.display = "";
}

function confirmNav(url) {
	if(confirm("This action is irreversible. Do you wish to continue?")) {
		if(url != "" && url != "undefined" && url != null) {
			window.location = url;
		}
		else return true;
	}
}

function xml(xmlString) {
	var parser;
	var xmlDoc;
	try {
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.loadXML(xmlString);
	}
	catch(e) {
		try {
			parser = new DOMParser();
			xmlDoc = parser.parseFromString(xmlString,"text/xml");
		}
		catch(e) {
			alert(e.message);
			return false;
		}
	}
	
	return xmlDoc;
}

function makeRequest(url, targetDiv) {
	var httpRequest;
	
	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
		httpRequest = new XMLHttpRequest();
		if (httpRequest.overrideMimeType) {
			httpRequest.overrideMimeType('text/xml');
			// See note below about this line
		}
	} 
	else if (window.ActiveXObject) { // IE
		try {
			httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e) {
			try {
				httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch (e) {}
		}
	}

	if (!httpRequest) {
		alert('Giving up :( Cannot create an XMLHTTP instance');
		return false;
	}
	httpRequest.onreadystatechange = function() { 
		if(targetDiv == "undefined" || targetDiv == null)
			alertContents(httpRequest); 
		else {
			assignContents(httpRequest, targetDiv);
		}
	};
	httpRequest.open('GET', url, true);
	httpRequest.send('');
}

function makePostRequest(url, parameters, callback) {
	http_request = false;
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			// set type accordingly to anticipated content type
			//http_request.overrideMimeType('text/xml');
			http_request.overrideMimeType('text/html');
		}
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
	if (!http_request) {
		alert("Cannot create XMLHTTP instance");
		return false;
	}
	
	if(callback) {
		http_request.onreadystatechange = function() {
			if(http_request.readyState == 4) {
				callback(http_request);
			}
		}
	}
	else {
		http_request.onreadystatechange = function() {
			assignContents(http_request, "" + Math.random());
		}
	}
	http_request.open('POST', url, true);
	http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	http_request.setRequestHeader("Content-length", parameters.length);
	http_request.setRequestHeader("Connection", "close");
	http_request.send(parameters);
}

function getFormValues(fobj, valFunc) {
	var str = "";
	var valueArr = null;
	var val = "";
	var cmd = "";
	for(var i = 0;i < fobj.elements.length;i++) {
		// alert(fobj.elements[i].type);
		switch(fobj.elements[i].type) {
			case "hidden":
				str += fobj.elements[i].name +
					"=" + escape(fobj.elements[i].value) + "&";
				break;
			case "textarea":
				if(valFunc) {
					//use single quotes for argument so that the value of
					//fobj.elements[i].value is treated as a string not a literal
					cmd = valFunc + "(" + 'fobj.elements[i].value' + ")";
					val = eval(cmd)
				}
				str += fobj.elements[i].name +
					"=" + escape(fobj.elements[i].value) + "&";
				break;
			case "text":
				if(valFunc) {
					//use single quotes for argument so that the value of
					//fobj.elements[i].value is treated as a string not a literal
					cmd = valFunc + "(" + 'fobj.elements[i].value' + ")";
					val = eval(cmd)
				}
				str += fobj.elements[i].name +
					"=" + escape(fobj.elements[i].value) + "&";
				break;
			case "select-one":
				str += fobj.elements[i].name +
                	"=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&";
				break;
			case "radio":
				if(fobj.elements[i].checked) {
					str += fobj.elements[i].name +
						"=" + escape(fobj.elements[i].value) + "&";
				}
				break;
		}
	}
	str = str.substr(0,(str.length - 1));
	return str;
}

function alertContents(httpRequest) {
	if (httpRequest.readyState == 4) {
		if (httpRequest.status == 200) {
			doAjaxAlert(httpRequest.responseText);
		} else {
			alert("There was a problem with the request.");
		}
	}
}

function restoreOpac() {
	$('container').style.opacity = "1";
	$('footer').style.opacity = "1";
}

function assignContents(httpRequest, targetDiv) {
	if (httpRequest.readyState == 4) {
		var scroll = getScrollXY();
		
		// elem = document.getElementById(targetDiv);
		
		if (httpRequest.status == 200) {
			element = Builder.node('div',{classname:'ajax_target', id:targetDiv});
			element.innerHTML = httpRequest.responseText;
			
			WIDTH = "600";
			element.style.width = WIDTH;
			element.style.position = "absolute";
			element.style.top = (scroll[1] + 100) + "px";
			element.style.left = (document.body.clientWidth / 2) - (WIDTH / 2) + "px";
			element.style.display = "none";
			element.style.zIndex = 1000;
			
			new Draggable(element);
			$('ajaxTargets').appendChild(element);
			Effect.Appear(targetDiv,{duration:.3});
			// $(targetDiv).style.display = "";
			
			$('container').style.opacity = ".3";
			$('footer').style.opacity = ".3";
		} else {
			elem.innerHTML = "There was a problem with the request.";
		}
	}
}

function doAjaxAlert(contents) {
	makeRequest('/ajaxAlert/?ajax&contents=' + contents, 'alertDiv');
	Effect.Fade('semi_transparent',{duration:.3});
}

function getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}

function popup(targetDiv, file, callBack) {
	setOpac();
	
	new Ajax.Request(file, {
		method: 'get',
		onSuccess: function(transport) { 
			// $('loading-indicator').style.display = "none";
			if(transport.responseText.length == 0) {
				return;
			}
			
			var scroll = getScrollXY();
			
			var element = Builder.node('div', {id:targetDiv});
			element.innerHTML = transport.responseText;
			
			WIDTH = "100%";
			element.style.width = WIDTH;
			element.style.position = "absolute";
			element.style.left = (scroll[0]) + "px";
			element.style.top = (scroll[1] + 100) + "px";
			element.style.zIndex = 9999999;
			element.style.margin = "0 auto";
			
			document.body.appendChild(element);
			
			if(callBack) {
				callBack();
			}
		}
	});
}

function closePopup(divName) {
	var div = $(divName);
	if(div) {
		div.parentNode.removeChild(div);
		restoreOpac();
	}
}

var opacDiv = null;
function setOpac() {
	var scroll = getScrollXY();
	
	opacDiv = document.createElement('div');
	opacDiv.style.position = "absolute";
	opacDiv.style.left = "0px";
	opacDiv.style.top = "0px";
	opacDiv.style.width = document.body.clientWidth + scroll[0] + "px";
	opacDiv.style.height = document.body.clientHeight + scroll[1] + "px";
	opacDiv.style.backgroundColor = "#000000";
	opacDiv.style.zIndex = "999999";
	opacDiv.style.opacity = 0;
	opacDiv.style.mozOpacity = 0;
	document.body.appendChild(opacDiv);
	
	$(opacDiv).morph('opacity:.5; -moz-opacity: .5', { duration: .3 });
	
	window.onresize = resetOpac;
	window.onscroll = resetOpac;
}

function resetOpac() {
	var scroll = getScrollXY();
	opacDiv.style.width = document.body.clientWidth + scroll[0] + "px";
	opacDiv.style.height = document.body.clientHeight + scroll[1] + "px";
}

function restoreOpac() {
	opacDiv.parentNode.removeChild(opacDiv);
	window.onresize = null;
	window.onscroll = null;
}

function startPlayer() {
	flowplayer("player", webRoot + "/inc/flowplayer/flowplayer-3.1.0.swf",  {
		clip: {
			autoPlay: false,
			autoBuffering: false,
			scaling: 'orig'
		}
	});
}
