jq = jQuery; //.noConflict();

var bg = {
	version: function() {
		return '0.1';
	},
	uid: function() {
		return (new Date).getTime();
	}
}

function Round(sel, opts) {
	if (!jQuery.browser.msie) {
		DD_roundies.addRule(sel, opts, true);
	}
}

function showFullscreen(obj) {
	var overlay = jq('#id-fullscreen');
	overlay.append(obj);
	overlay.find('.close').click(hideFullscreen);
	overlay.show();
}

function hideFullscreen() {
	var overlay = jq('#id-fullscreen');
	overlay.hide();
	overlay.children().remove();
}

function showSubscribeDialog(username) {
	jq('<div>').load('/control/contacts/add/' + username + '/').modal({
		containerId: 'id-modal-subscribe-container'
	});
}
function subscribe() {
	jq('#add-contact-form').ajaxSubmit({
		target: '#add-contact-status',
		beforeSubmit: function(data, form, options) {
			jq('#add-contact-status').html('Saving...');
			return true;
		}
	});
}

function ajaxFileUpload(obj, options) {
	var input = jq(obj);
	var id = uniqueID();
	input.after(jq('<iframe id="iframe-' + id + '" name="iframe-' + id + '" style="display:none">'));
	input.wrap(jq('<form id="form-' + id + '" method="post" enctype="multipart/form-data" action="' + options.url + '" target="iframe-' + id + '" style="display:inline">'));
	var iframe = jq('#iframe-' + id);
	iframe.load(function() {
		text = jq(iframe.get(0).contentWindow.document.body.innerHTML).text();
		if (text) {
			eval('data = ' + text);
			alert(data.result + ': ' + data.message);
			options.success(data);
		}
		else {
			options.error();
		}
	});
	var form = jq('#form-' + id);
	form.submit();
}
function initFileUploads() {
	/*var wrapper = new Element('div', {'class':'fileinputs'});
	var files = $$('input.file');
	wrapper.wraps(files[0]);
	if (!W3CDOM) return;
	var fakeFileUpload = document.createElement('div');
	fakeFileUpload.className = 'fakefile';
	fakeFileUpload.appendChild(document.createElement('input'));
	var image = document.createElement('img');
	image.className = 'fakefilebrowse';
	image.src='/media/img/browse';
	fakeFileUpload.appendChild(image);
	var x = document.getElementsByTagName('input');
	for (var i=0;i<x.length;i++) {
		if (x[i].type != 'file') continue;
		if (x[i].parentNode.className != 'fileinputs') continue;
		x[i].className = 'file hidden';
		var clone = fakeFileUpload.cloneNode(true);
		x[i].parentNode.appendChild(clone);
		x[i].relatedElement = clone.getElementsByTagName('input')[0];
		x[i].onchange = x[i].onmouseout = function () {
			this.relatedElement.value = this.value;
		}
	}*/
}

function murderEvent(evt) {
	evt.cancel=true;
	evt.returnValue=false;
	evt.cancelBubble=true;
	if (evt.stopPropagation) evt.stopPropagation();
	if (evt.preventDefault) evt.preventDefault();
	return false;
}
function doSearchIfEnter(evt) {
	if(evt.keyCode == 13 || evt.which == 13) {
		murderEvent(evt);
		doSearch();
	}
}
function doSearch() {
	// Start with initial query
	var query = jq('#search-text').attr('value');
	jq.trim(query);
	// Add exact phrase in quotes
	var phrase = jq('#search-exact-phrase').attr('value');
	jq.trim(phrase);
	if (phrase.length > 0)
		query += ' "' + phrase + '"';
	
	var words = [];
	jq(jq('#search-optional-words').attr('value').split(' ')).each(function(i){
		var term = this;
		jq.trim(this);
		if (term.length > 0) {
			words[words.length] = term;
		}
	});
	if (words.length > 0) {
		query += ' ';
		query += words.join(' | ');
	}
	jq(jq('#search-excluded-words').attr('value').split(' ')).each(function(i){
		var term = this;
		jq.trim(this);
		if (term.length > 0) {
			query += ' -' + term;
		}
	});
	jq.trim(query);
	if (query.length > 0) {
		location.href = '/search/media/' + query.replace(/\//g, ' ') + '/';
	}
}
function popupLogin() {
}
function doLogin(user, pass) {
	Cookie.write('username', user);
	Cookie.write('password', md5(pass));
	//$("login").slide("out");
	//$("user-nav").load("user-nav.php");
}
function doLogout() {
	Cookie.dispose('username');
	Cookie.dispose('password');
	//$("user-nav").load("user-nav.php");
}

function showReplyForm(formid, url, name) {
	jq(formid).load(url);
}
function externalLinks() {
	if (!document.getElementsByTagName)
		return;
	var anchors = document.getElementsByTagName("a");
	for (var i=0; i<anchors.length; i++) {
		var anchor = anchors[i];
		if (anchor.getAttribute("href") &&
				anchor.getAttribute("rel") == "external")
			anchor.target = "_blank";
	}
}
function popup(link, name, width, height) {
	var href;
	if (typeof(link) == 'string')
	   href = link;
	else
	   href = link.href;
	window.open(href, name, 'width=' + width + ',height=' + height + ',scrollbars=yes');
	return false;
}
function loadContent(id, url) {
	var el = jq(id);
	//var height = el.height();
	//el.html('<center><img src="/media/img/loading-level2.gif" alt="Loading.." /></center>');
	el.load(url);
}
function toggleSection(section_, toggle) {
	var section = jq(section_);
	var span = jq(toggle).children('span');
	if (span.length == 0)
		section.toggle();
	else {
		if (span.html() == 'show') {
			section.show();
			span.html('hide');
		}
		else {
			section.hide();
			span.html('show');
		}
	}
}
function toggleMe(a_) {
	var a = jq(a_);
	var section = null;
	if (a.attr('href').length == 0)
		section = a.next('div');
	else
		section = jq(a.attr('href'));
	var span = a.children('span');
	if (span.length == 0)
		section.toggle();
	else {
		if (span.html() == 'show') {
			section.show();
			span.html('hide');
		}
		else {
			section.hide();
			span.html('show');
		}
	}
	return false;
}
function flashEmbed(obj, data) {
	var div = jq(obj);
	var settings = {
		bgcolor: '#000000',
		quality: 'best',
		allowScriptAccess: 'always',
		allowFullScreen: 'true',
		wmode: 'transparent'
	};
	var vars = {};
	jq.each(data, function(k, v){
		switch(k) {
			case 'width':
			case 'height':
				settings[k] = v;
				vars[k] = v;
				break;
			case 'src':
			case 'id':
			case 'name':
			case 'bgcolor':
			case 'quality':
			case 'wmode':
			case 'allowScriptAccess':
			case 'allowFullScreen':
				settings[k] = v;
				break;
			default:
				vars[k] = v;
				break;
		}
	});
	settings.flashvars = vars;
	div.flash(settings, { version: 8 });
}
function initContent(el_) {
	// TODO: break up into components, not one monolithic function
	var el = jq(el_);
	el.find('.hidden').hide();
	
	// begin show/hide toggle
	el.find('.toggle').each(function() {
		var self = jq(this);
		var dv = null;
		if (self.attr('href').length == 0)
			dv = self.next('div');
		else
			dv = jq(self.attr('href'));
		var span = self.children('span');
		if (span.length == 0)
			span = self;
		self.click(function() {
			if (span.html() == 'show') {
				dv.show();
				span.html('hide');
			}
			else {
				dv.hide();
				span.html('show');
			}
			return false;
		});
		if (span.html() == 'show')
			dv.hide();
	});
	// end show/hide toggle
	
	// begin show/hide toggle
	el.find('.toggle-block').each(function() {
		var self = jq(this);
		var dv = null;
		if (self.attr('href').length == 0)
			dv = self.next('div');
		else
			dv = jq(self.attr('href'));
			
		self.click(function() {
			if (self.hasClass('toggle-block-hidden')) {
				dv.show();
				self.removeClass('toggle-block-hidden');
			}
			else {
				dv.hide();
				self.addClass('toggle-block-hidden');
			}
			return false;
		});
		if (self.hasClass('toggle-block-hidden'))
			dv.hide();
	});
	
	var invertedShowOrHideInput = function() {
		var self = jq(this);
		var data = self.metadata();
		var obj = jq(data.id);
		if (self.attr('checked')) {
			if (!data.invert) {
				obj.hide();
			}
			else {
				obj.show();
			}
		}
		else {
			if (!data.invert) {
				obj.show();
			}
			else {
				obj.hide();
			}
		}
	}
	var showOrHideInput = function() {
		var self = jq(this);
		var data = self.metadata();
		var obj = jq(data.id);
		if (self.attr('checked')) {
			if (data.invert) {
				obj.hide();
			}
			else {
				obj.show();
			}
		}
		else {
			if (data.invert) {
				obj.show();
			}
			else {
				obj.hide();
			}
		}
	}
	jq('.checkbox-toggle').each(showOrHideInput);
	jq('.checkbox-toggle').click(invertedShowOrHideInput);
	// end show/hide toggle
	if (jq.fn.corner != undefined) {
		el.find('.rounded').each(function(i) {
			var self = jq(this);
			var data = self.metadata();
			if (data.round)
				self.corner(data.round);
			else
				self.corner();
		});
	}
	
	if (jq.fn.flash != undefined) {
		el.find('.flash').each(function(i) {
			var self = jq(this);
			flashEmbed(self, self.metadata());
		});
	}
	if (jq.fn.flashembed != undefined) {
		el.find('.flashembed').each(function(i) {
			var self = jq(this);
			var data = self.metadata();
			self.flashembed({src:data.src, wmode:'opaque'}, data);
		});
	}
	if (jq.fn.overflow != undefined) {
		el.find('.overflow').overflow();
	}
	
	/*jq('#' + id + ' .toggle-display').each(function(el){
		el.addEvents({
			click: function() {
				var dv = $(this).getNext('div');
				var style = dv.getStyle('display');
				if (style == 'block')
					dv.setStyle('display', 'none');
				else
					dv.setStyle('display', 'block');
			}
		});
		//alert(t.get('html'));
	});*/
	
	// begin image preview
	/*xOffset = 10;
	yOffset = 30;
	el.find("a.preview").hover(function(e){
		this.t = this.title;
		this.title = "";	
		var c = (this.t != "") ? "<br/>" + this.t : "";
		jQuery("body").append("<p id='preview'><img src='"+ this.rel +"' alt='' />"+ c +"</p>");								 
		jQuery("#preview")
			.css("top",(e.pageY - xOffset) + "px")
			.css("left",(e.pageX + yOffset) + "px")
			.fadeIn("fast");						
	},
	function(){
		this.title = this.t;	
		jQuery("#preview").remove();
	});	
	el.find("a.preview").mousemove(function(e){
		jQuery("#preview")
			.css("top",(e.pageY - xOffset) + "px")
			.css("left",(e.pageX + yOffset) + "px");
	});*/
	// end image preview
}
/*function require(src) {
	var path = MEDIA_URL + 'js/' + src;
	var scripts = jq('head').find('script');
	for (int i = 0; i < scripts.length; ++i) {
		if (jq(scripts[i]).attr('src') == path)
			return;
	}
	document.write('<script src="' + path + '" type="text/javascript"></scr' + 'ipt>');
}*/
function elementFromURL(url, callback) {
	return jq('<div></div>').load(url, null, callback);
}

var loginDialog = null;
var loginDiv = null;
function showLogin() {
	if (!loginDialog) {
		loginDiv = elementFromURL('/login/ajax/');
		loginDialog = loginDiv.dialog({
			autoOpen: false,
			draggable: false,
			resizable: false,
			modal: true,
			overlay: {
				opacity: 0.5,
				background: 'black'
			},
			title: 'Login',
			buttons: {
				'Login':function(){
					jq('#login-form').submit();
				},
				'Cancel':function(){
					loginDialog.dialog('close');
				}
			}
		});
	}
	if (!loginDialog.dialog('isOpen'))
		loginDialog.dialog('open');
}
function post_comment(elm, form, result) {
	var self = jq(elm);
	self.attr('disabled','disabled');
	self.attr('value','Posting...');
	var url = form.attr('action');
	jq.post(url, form.serialize(),
		function(data, status){
			if (status == 'error') {
				result.html('There was an error processing your comment, please try again later.');
				self.attr('value','Post');
				self.removeAttr('disabled');
			}
			else if (status == 'success')
				result.html(data);
				//result.html(data);
		});
	return false;
}
function limitText(limitField, spanCount, limitNum) {
	var field = jq(limitField);
	if (field.attr('value').length > limitNum) {
		field.attr('value', field.attr('value').substring(0, limitNum));
	} else {
		spanCount.text(limitNum - field.attr('value').length);
	}
}
