var WoesClass 		= Class.create();
//var Logger 			= new Log(Log.DEBUG, Log.consoleLogger);
var Woes;


Event.observe(window, 'load', main);
new PeriodicalExecuter(feedback, 1);

function main ()
{
	Woes = new WoesClass ();
	Event.observe(window, 'resize', Woes.scaleContentArea);
}
 
WoesClass.prototype = {
	template: null,
	initialize: function ()
	{
		if (placeSubHeaders) this.placeContentSubHeaders ();
		else this.killSubHeaders ();
		this.scaleContentArea ();
		this.prepareSearch ();
	},
	
	scaleContentArea: function ()
	{
		var dh = Position.Window.size()[1];
		var c = $('content');
		var ch = c.getHeight();
		var padding = 100;
		if (ch<(dh-padding))
		{
			c.setStyle (
				{
					height: (dh-padding)+'px'
				}
			);
		}
	},
	
	placeContentSubHeaders: function ()
	{
		var posts = this.getPosts();
		var _class = this;
		posts.each(function (post)
		{	
			var template = _class.getSubContentHeaderTemplate(post);
			var dividers = post.getElementsByClassName('cat-divider');
			if (dividers.length > 0 && dividers != undefined)
			{
				$R(dividers).each(function (el)
				{
					var newNode 	= template.cloneNode(true);
					var linknodes 	= $A(newNode.getElementsByTagName('a'));
					linknodes.each(function (a)
					{
						if (a.className.toLowerCase() == el.name.toLowerCase()) 
						{
							var custom_data = _class.getCustomData(a.className);
							if (custom_data != undefined) 
							{
								newNode.appendChild(custom_data);
							}
							a.addClassName ('selected');
						}
					});
					el.parentNode.insertBefore(newNode, el.nextSibling);

				});
				if (dividers.length > 0) _class.hideTemplate();
			}
		});
	},
	
	killSubHeaders: function ()
	{
		var posts = this.getPosts();
		var _class = this;
		posts.each(function (post)
		{	
			//var template = _class.getSubContentHeaderTemplate(post);
			var dividers = post.getElementsByClassName('cat-divider');
			if (dividers.length > 0)
			{
				$R(dividers).each(function (el)
				{
					el.hide();
				});
				_class.hideTemplate();
			}
		});
	},
	
	getPosts: function ()
	{
		return $A(document.getElementsByClassName('post'))
	},
	
	getSubContentHeaderTemplate: function (post)
	{
		var elements = $A(post.getElementsByClassName('post-subtitle'));
		var template = elements[0];
		return template;
	},
	
	getCustomData: function (category)
	{
		var data = $(document.body).getElementsByClassName('cat_'+category);
		for (var i=0; i<data.length; i++)
		{
			data[i].removeClassName ('cat_'+category);
			data[i].addClassName ('custom-data');
		}
		if (data.length > 0) return data[0];
	},
	
	prepareSearch: function ()
	{
		this.hideSearchButton(true);
		$("s").observe('focus', this.showSearchButton);
		$("s").observe('blur', this.hideSearchButton);
	},
	
	showSearchButton: function ()
	{
		//$("search_submit").show();		
		Effect.Appear ("search_submit");
	}, 
	
	hideSearchButton: function (now)
	{
		if (now!=true) Effect.Fade ("search_submit");
		else $("search_submit").hide();
	},
	
	hideTemplate: function ()
	{
		var posts = this.getPosts();
		_class = this;
		posts.each(function (post)
		{
			var e = _class.getSubContentHeaderTemplate(post);//.hide();
			if (e != undefined) e.hide();
		});
	}
}

Position.Window = {
    //extended prototypes position to return
    //the scrolled window deltas
    getDeltas: function() {
        var deltaX =  window.pageXOffset
            || document.documentElement.scrollLeft
            || document.body.scrollLeft
            || 0;
        var deltaY =  window.pageYOffset
            || document.documentElement.scrollTop
            || document.body.scrollTop
            || 0;
        return [deltaX, deltaY];
    },
    //extended prototypes position to
    //return working window's size, 
    //copied this code from the 
    size: function() {
        var winWidth, winHeight, d=document;
        if (typeof window.innerWidth!='undefined') {
            winWidth = window.innerWidth;
            winHeight = window.innerHeight;
        } else {
            if (d.documentElement && typeof d.documentElement.clientWidth!='undefined' && d.documentElement.clientWidth!=0) {
                winWidth = d.documentElement.clientWidth
                winHeight = d.documentElement.clientHeight
            } else {
                if (d.body && typeof d.body.clientWidth!='undefined') {
                    winWidth = d.body.clientWidth
                    winHeight = d.body.clientHeight
                }
            }
        }
        return [winWidth, winHeight];
    }
}

//my own custom effect that basically
//calls the Effect.Move Scriptaculous
//effect with the correct window offsets
Effect.KeepFixed = function(element, offsetx, offsety) {
    var _scroll = Position.Window.getDeltas();
    var _window = Position.Window.size();
    var elementDimensions = Element.getDimensions(element);
    var eWidth = elementDimensions.width;
    var eHeight = elementDimensions.height;
    /*var moveX = _window[0] - eWidth + _scroll[0] + offsetx;
    var moveY = _window[1] - eHeight + _scroll[1] + offsety;*/
	var moveX = 0;//_scroll[0]+offsetx;
	var moveY = _scroll[1]+offsety;
    return new Effect.Move(element, { x: moveX, y: moveY, mode: 'absolute' });
}

function feedback() {
    new Effect.KeepFixed('navigation', 0, 0);
}

