String.prototype.Contains = function(x) { return this.indexOf(x.toString()) != -1; }
String.prototype.BeginsWith = function(x) { return this.indexOf(x.toString()) === 0; }
String.prototype.EndsWith = function(x) { var xs = x.toString(); var s = this.length-xs.length; return s < 0 ? false : (this.lastIndexOf(xs, s) == s); }
String.prototype.ContainsI = function(x) { return this.toLowerCase().indexOf(x.toString().toLowerCase()) != -1; }
String.prototype.BeginsWithI = function(x) { return this.toLowerCase().indexOf(x.toString().toLowerCase()) === 0; }
String.prototype.EndsWithI = function(x) { var xs = x.toString(); var s = this.length-xs.length; return s < 0 ? false : (this.toLowerCase().lastIndexOf(xs.toLowerCase(), s) == s); }
function Now() { return new Date();	}
function rw(x) { document.write(x); }

Cufon.replace('.scala, h1, h2');

// $.ajaxSetup({contentType:"application/x-www-form-urlencoded;charset=ISO-8859-1"});

$.fn.fancybox.defaults.padding = 0;
$.fn.fancybox.defaults.onComplete = PopupReady;
$.fn.fancybox.defaults.onClosed = PopupDone;

// placeholder
var DoReload = false;
var AxView = '';

$(document).ready( function() {
	// patch for safari readystate bug
	if( jQuery.browser.safari && document.readyState != "complete" ) {
		setTimeout( arguments.callee, 100 );
		return;
		}
	
	$loading = $('<img src="loading.gif" alt="loading">');
	
	// warn about unsupported browsers
	/*
	if( document.documentMode == 7 )
		alert("This website will not work with Internet Explorer 7 or earlier, or Internet Explorer 8 in Compatibility View.  Please disable Compatibility View if it is turned on.");
	*/

	$("a.popup,#login,#logout,#join,#invite a").fancybox();
	$("a[href^=ax.php]").address();
	$("#search").address();
	$("#search").submit(function(){
		this.mq.value = this.mq.value.replace("'","%27");
		})
	// removed watermarks, causes problems with IE
	//$("input:text").each(function(){$(this).watermark($(this).attr('title'))});
  //$('textarea.edit').change(function(){$.post('edit.php',{id:this.id,form:this.form ? this.form.name : '',name:this.name,value:this.value});});

	// menu updates
	var p = location.pathname.substring(1)+location.search;
	if( p=='' ) p = 'index.php';
	$("#menu1 a[href$='"+p+"']").addClass("current");
	var p2 = location.hash.substring(2);
	$("#menu2 a[href$='"+p2+"']").addClass("current");

	// autoslide menu2
  var m2 = $('#menu2o');
	if( m2.size() )
		{
		// note that m2 has a dummy li element at the right, for IE8 compatibility (IE8 won't respect the width property on #menu2 ul)
		var div = m2.find('#menu2'), ul = div.find('ul'), m2m = m2.find('#menu2m'), right = ul.find('li').slice(0,-1).last();
		right = right.position().left+right.width();
		var m = m2m.position().left;
		
		// hides first item under the More button, calced after first scrolling <left>
		function hidelast(left) {
			if( left == undefined ) left=0;
			ul.find('a').each(function(){
				var z = $(this);
				if( z.position().left+z.width() > m+left )
					{
					z.css('visibility','hidden');
					return false;
					}
				});
			}
		hidelast();

		// make more button work
		$('#menu2m').click(function(){
			// unhide all
			ul.find('a').css('visibility','visible');
			// walk right until we don't have <m> width left, or we hit the item under the More button
			var left = 0;
			var o = div.scrollLeft();
			ul.find('a').slice(0,-1).each(function(){
				var z = $(this);
				left = z.position().left;
				if( right-(left+o) <= m )
					return false;
				if( left+z.width() > m )
					return false;
				});
			if( left )
				left += o;
			hidelast(left);
			//div.scrollLeft(left);
			div.animate({scrollLeft:left},'slow');
			});
		}

	// fill page
	var diff = $(window).height()-$('body').height();
	if( diff > 0 )
		{
		var h = $('#col1').height();
		$('#col1').height(h+diff);
		}

	// fancy inputs
	$('input[type="text"],input[type="password"]')
		.focus(function(){
			var t = $(this);
			t.removeClass("idleField").addClass("focusField");
			})
		.blur(function(){
			var t = $(this);
			t.removeClass("focusField").addClass("idleField");
			})
		.blur();

	});

function AjaxPost(f)
	{
	$.post(f.action,$(f).serializeArray(),function(data){$.fancybox(data)});
	return false;
	}

function ContentReady(sel)
	{
	var f = $(sel);
	//f.find(':text,:password,textarea').each(function(){$(this).watermark($(this).attr('title'))});
	f.find('textarea').prettyComments();
	f.find('a.popup,#user a,#invite a,a[href=join.php],input.popup').fancybox();
	f.find('form.popup').bind('submit', function(x){
		$.post(this.action,$(this).serializeArray(),function(data){$.fancybox(data)});
		return false;
		});
	f.find('textarea.edit').change(function(){$.post('edit.php',{id:this.id,form:this.form ? this.form.name : '',name:this.name,value:this.value});});
	f.find('a.ax').address();
	// fancy inputs
	f.find('input[type="text"],input[type="password"]')
		.focus(function(){
			var t = $(this);
			t.removeClass("idleField").addClass("focusField");
			})
		.blur(function(){
			var t = $(this);
			t.removeClass("focusField").addClass("idleField");
			})
		.blur();
	f.find('input.selfedit').each(function(){
		var t = $(this); 
		t.attr('orig',$.trim(t.attr('value')));
		t.focus(function(){t.addClass("focus")});
		t.blur(function(){t.removeClass("focus"); SelfEdit(t);});
		t.hover(function(){t.addClass("hover")},function(){t.removeClass("hover")});
		});
	f.find('input.autogrow').autoGrowInput({minWidth:30,maxWidth:150});
	// login form url jump
	f.find('#loginform').append('<input type=hidden name=loc value="'+window.location+'">');
	ContentReadyAdmin(f);
	}

function xSelfEdit(t)
	{
	var v = $.trim(t.attr('value'));
	if( v == t.attr('orig') )
		return;
	$.post('/edit.php', { id:t.attr('id'), value:v });
	t.attr('orig',v);
	}

function SelfEdit(t)
	{
	var v = $.trim(t.attr('value'));
	var vo = $.trim(t.attr('orig'));
	if( v == vo )
		return;
	t.css('background-color','pink');
	$.post('/ajax.php', { what:'selfedit', target:t.attr('target'), field:t.attr('field'), value:v }, function(res){
		t.attr('orig',v);
		res = $.trim(res);
		if( res>'' )
			alert(res);
		else 
			t.css('background-color','beige');
		});
	}


function ContentReadyAdmin()
	{
	}

function PopupReady()
	{
	ContentReady("#fancybox-inner");
	}

function PopupDone()
	{
	if( typeof(DoReload) == 'string' )
		window.location = DoReload;
	else if( DoReload )	
		location.reload(true);
	}

$.address.change(function(event)
	{
	if( typeof DefView == 'undefined' )
		return;
	if( event.value<='/' )
		event.value = DefView;
	AxView = event.value;
	$('#col1').load(event.value.charAt(0)=='/' ? event.value.substring(1) : event.value);
	// redo menu2
	var p2 = event.value.substring(1);
	p2 = p2.replace(/&page=\d*/,'');
	$("#menu2 a").removeClass("current");
	$("#menu2 a[href$='"+p2+"']").addClass("current");
	}); 

function dlgtest()
	{
	$('<div id="dialog" title="Basic dialog"><p>This is the default dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the x icon.</div>').dialog();
	}


