$(document).ready(function() {
    handle_resize($('#sidebar.discover .categories ul'));
    handle_resize($('#sidebar ul.mixes'));
});

function handle_resize(s_anchor) {
    min_height = 200;
    if(s_anchor.size()) {    
        s_offset = s_anchor.offset().top;

        gj_resize(min_height, s_offset, s_anchor);
    
        $(window).resize(function() {
            gj_resize(min_height, s_offset, s_anchor);
        });
 	} else {
        gj_resize(min_height, 180, null);
        $(window).resize(function() {
            gj_resize(min_height, 180, null);
        });
    }
}

function gj_resize(min_height, s_offset, s_anchor) {
    var size_diff = $(window).height() - $('#footer .content').height() - 10;

    if(size_diff > s_offset + min_height) {
        $('#footer').css({ top : size_diff });
        new_height = size_diff - s_offset;
        if(s_anchor) s_anchor.css({ height : new_height });
    } else {
        new_top = s_offset + min_height;
        $('#footer').css({ top : new_top });
        if(s_anchor) s_anchor.css({ height : min_height });
    }
}

$.fn.showNotifications = function(message) { 
    return this.each(function()
    {
    	$("#notification-bar").find('.message').text(message);
        $("#notification-bar").slideDown('fast', function() {});
        var notification_close_timer = setTimeout(function() { 
        	$(this).hideNotifications();
        }, 5000)
    });
}

$.fn.hideNotifications = function() { 
    return this.each(function()
    {
        $("#notification-bar").slideUp('fast', function() {});
        $("#notification-bar .message").text('');
    });
}

/* lightbox */
function createLightbox(options) {
    if($('#screen-dim').length == 0) {
        if(options) {
            extra_classes = options.class;
        } else {
            extra_classes = [];
        }
        $('body').append('<div id="screen-dim"><div id="lightbox-container" class="' + extra_classes.join(' ') + '"><a href="#" class="close"></a><div class="loader right"></div><div class="container"></div></div></div>');
        $("#screen-dim").css("height", $(document).height());
        $(window).resize(function() {
            fitLightbox();
        });
        
        $('#lightbox-container .close').live('click', function() {
            dismissLightbox();
        });
        
        var KEYCODE_ENTER = 13;
        var KEYCODE_ESC = 27;

        $(document).keyup(function(e) {
            //if (e.keyCode == KEYCODE_ENTER) { $('.save').click(); } 
            if (e.keyCode == KEYCODE_ESC) { dismissLightbox(); } 
        });
    }
    return $('#lightbox-container');
}

function summonLightbox(data, options) {

    $("body").css("overflow", "hidden");
    lightbox = createLightbox(options);
    $("#screen-dim").fadeIn('300');
    lightbox.find('.container').append(data);
    lightbox.find('.loader').hide();
	fitLightbox();
}

function fitLightbox() {
    lightbox = $("#lightbox-container");
    child_container = lightbox.find(".container");
    lightbox.width(child_container.width());
    center_x = $(document).width() / 2 - child_container.width() / 2;
    lightbox.css({'left' : center_x + 'px' });
}

function dismissLightbox() {
    $("#screen-dim").fadeOut('300', function() { $("body").css("overflow", "auto"); $(this).replaceWith(''); });
}

/* deal with cookies */

createCookie = function(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

readCookie = function(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

eraseCookie = function(name) {
	createCookie(name,"",-1);
}

function extractParamFromUri(uri, paramName) {
  if (!uri) {
    return;
  }
  var uri = uri.split('#')[0];  // Remove anchor.
  var parts = uri.split('?');  // Check for query params.
  if (parts.length == 1) {
    return;
  }
  var query = decodeURI(parts[1]);

  // Find url param.
  paramName += '=';
  var params = query.split('&');
  for (var i = 0, param; param = params[i]; ++i) {
    if (param.indexOf(paramName) === 0) {
      return unescape(param.split('=')[1]);
    }
  }
}

function getHash() {
  var hash = window.location.hash;
  return hash.substring(1); // remove #
}

function summonDropdown(data, options, attach) {

    dropdown = createDropdown(options, attach);
    dropdown.find('.content').html(data);
    container = $('#dropdown-container .content');
    padding = 5; 
    width = options.width;
    left = options.pos.left;
    right = options.pos.right;
    
    container.css({ 'width' : width });
    container.find('.wrap').css({ 'width' : width - 10 });
    backgroundPosition =  container.width() / 2 - 10;
    
    if(right) {
        rightOffset = right - container.width() / 2;
        if(rightOffset < 0) {
            adjust = -rightOffset + padding;
            rightOffset += adjust;
            backgroundPosition += adjust - 10; // 10 = half width of the pointer
        }
        dropdown.css({ 'right' : rightOffset });
    } else if(left) {
        leftOffset = left - container.width() / 2;
        if(leftOffset < 0) {
            adjust = -leftOffset + padding;
            leftOffset += adjust;
            backgroundPosition -= adjust + 10;
        }
        dropdown.css({ 'left' : leftOffset });
    }
    
    dropdown.css({ 'top' : options.pos.top, 'backgroundPositionX' : backgroundPosition });
    dropdown.fadeIn(300);
}

function createDropdown(options, attach_point) {
    if($('#dropdown-container').length == 0) {
        extra_classes = options.class;
        attach_point.append('<div id="dropdown-container" class="' + extra_classes.join(' ') + '"><div class="content"></div></div>');
        var KEYCODE_ESC = 27;
        $('html').click(function() {
            dismissDropdown();
        });
        $('#dropdown-container').click(function(e) {
            e.stopPropagation();
        });
        $(document).keyup(function(e) {
            if (e.keyCode == KEYCODE_ESC) { dismissDropdown(); } 
        });
    }
    return $('#dropdown-container');
}


function dismissDropdown() {
    $('html').unbind('click');
    $("#dropdown-container").fadeOut('300', function() { $(this).replaceWith(''); });
}

