	// Document title
	var title = document.title;

	// Simple log
	var log = function(msg) {
	return;
		if (!$('.log').length) {
			$('<div class="log"></div>').appendTo('body');
		}
		$('.log').append(msg.replace(/^([^:]*):(.*)$/, '<p><b>$1:</b> <span class="$1">$2</span></p>'))
			.attr({scrollTop: $("div").attr('scrollHeight')})
			.find('p:nth-child(even)').addClass('even');
	}
	
	// Serialization utility
	var serialize = function(obj, re) {
		var result = [];
		$.each(obj, function(i, val) {
			if ((re && re.test(i)) || !re)
				result.push(i + ': ' + (typeof val == 'object' ? val.join 
					? '\'' + val.join(', ') + '\'' : serialize(val) : '\'' + val + '\''));
		});
		return '{' + result.join(', ') + '}';
	}
	
	// check base url
	// ------
	if ( document.URL ) {
		var url = document.URL.toString();
		var idx = url.lastIndexOf("download");
		var tail = url.substr(idx+8);
		if ( tail.indexOf("#") < 0 && tail.length > 1 ) {
			location.href = url.substring(0,idx+8) + "#" + tail;
		}
	}
	
	$(document).ready(function() {

		$('a[rel^="address"]').address(function() {
			return $(this).attr('rel').replace('address:', '');
		});

		// Init and change handlers
		$.address.init(function(event) {
			log('init: ' + serialize({
				value: $.address.value(), 
				path: $.address.path(),
				pathNames: $.address.pathNames(),
				parameterNames: $.address.parameterNames(),
				queryString: $.address.queryString()
			}));
		}).change(function(event) {
			log('change: ' + serialize(event, /parameters|parametersNames|path|pathNames|queryString|value/));

			var target = $('a[rel=address:' + event.value + ']');
			var subsect = event.value.substr(1);
			var id = "div#" + subsect + "-corner";

			$("div.download-area").hide();

			// show loading image
			$("#loading-panel").show();

			if ( target.length <= 0 ) {
				$("#download-corner").show();
				// back to normal
				$("#loading-panel").hide();
				$.address.title( title );
			}
			else {
				// clear and reset
				$("ul#page-buttons li a").removeClass('current');

				// get to work
				var url = $(target).attr('href');
				var pageContent = $("div#page-content");
				$("ul#page-buttons li#" + subsect + " a").addClass('current');
				
		    if ( $(id).length > 0 ) {
		      $(id).show();
					// back to normal
					$("#loading-panel").hide();
					subtitle = $(id).find("h3:first").html();
					$.address.title( title + " :: " + subtitle );
        }
        else {
					//return;
  				$.ajax({
  				  url: url,
  				  dataType: "html",
						cache: true,
						//async: false,
  				  success: function(data, status) {
              $(pageContent).append($("#page-content", data).html());

              var numOfBoxes = $("div.corner-box", id).length;
              var boxWidth = $("div.corner-box", id).width();
              if ( numOfBoxes > 0 ) {
                $("div.scrollbox", id).width(numOfBoxes * boxWidth);
              }

							// setup nav buttons
							var nav_p = $(id).find("a#prev_btn");
							var nav_n = $(id).find("a#next_btn");

							if ( $(nav_n).hasClass("active") ) {
								$(nav_n).click(function(event){
									var stage = $(this).parent().siblings('div.stage');
									var stageW = $(stage).width();
									var sbox = $(stage).find('div.scrollbox');
									var left = parseInt($(sbox).css('left'));
									if ( stageW < $(sbox).width() + left ) {
										left = left - stageW;
										$(sbox).animate({left:left+'px'}, 'fast');
										//$(sbox).css({'left':left+'px'});
									}
									if ( stageW > $(sbox).width() + left ) {
										$(this).hide();
									}
									if ( left < 0 ) {
										$(this).parents('.download-area').find('a#prev_btn').show();
									}
								});
								$(nav_p).click(function(event){
									var stage = $(this).parent().siblings('div.stage');
									var stageW = $(stage).width();
									var sbox = $(stage).find('div.scrollbox');
									var left = parseInt($(sbox).css('left'));
									if ( left < 0 ) {
										left = left + stageW;
										$(sbox).animate({left:left+'px'}, 'fast');
										//$(sbox).css({'left':left+'px'});
									}
									if ( left >= 0 ) {
										left = 0;
										$(this).hide();
									}
									if ( stageW < $(sbox).width() + left ) {
										$(this).parents('.download-area').find('a#next_btn').show();
									}
								});
							}
							
							$(id).show();
							// back to normal
							$("#loading-panel").hide();

							subtitle = $(id).find("h3:first").html();
							$.address.title( title + " :: " + subtitle );
            }
          });
        }
			}
		});
		
	});

