
/**
 * post version of getJSON
 */
$.postJSON = function(url, data, callback) {
	$.post(url, data, callback, "json");
};


jQuery.validator.setDefaults({
	errorPlacement: function(error, element) {
			error.appendTo( element.parent().parent().find(".formitemerror"));
		 	}
	,onkeyup: false
});

jQuery.validator.addMethod('identifier', function(value, element) { 
		var re = /^[0-9a-zA-Z_]{1,}$/;
		return this.optional(element) || re.test(value) ; 
}, 'please enter at least 1 letter, number or underscore');

jQuery.validator.addMethod('email', function(value, element) { 
	value = value.replace(/\s*/g, '');
	$(element).val(value); 
	
	var re = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);
		
	return this.optional(element) || re.test(value) ; 
}, 'please enter a valid email');


jQuery.validator.addMethod('username', function(value, element) { 
	var re = new RegExp('(?!^[0-9]*$)(?!^[_]*$)^([a-zA-Z0-9_]{8,15})$');
		return this.optional(element) || re.test(value) ; 
}, 'please enter a username between 8 and 15 characters, using only letters, numbers and underscores');

jQuery.validator.addMethod('password', function(value, element) { 
	var re = new RegExp('(?!^[0-9]*$)(?!^[a-zA-Z]*$)(?!^[_]*$)^([a-zA-Z0-9_]{8,15})$');
		return this.optional(element) || re.test(value) ; 
}, 'please enter a password between 8 and 15 characters, using only letters, numbers and underscores, but at least one letter and one number');


/*
 * TODO Adrian: add flickraccount, twitteraccount, youetubeaccount, analyticstracker, banksortcode, bankaccount, phone, postcode, money, integer
 * 
 */





function showError(str)
{
	showMessage('Error', str); 
	
}

function showMessage(title, str)
{
	alert(str); 
	
}


function getconfirmation(evt, message, onconfirm, oncancel)
{
	//show message box, attach events
	//remove any previous messagebox
	$('#messagebox').remove(); 
	
	var x; 
	var y; 
	//get position
	if(evt.pageX)
		x = evt.pageX; 
	else
		x = $(document).width()/2; 
	
	if(evt.pageY)
		y = evt.pageY; 
	else
		y = 200; 
	
	var div = $('<div class="messagebox" id="messagebox"></div>').appendTo('body').show().css('top', y).css('left', x); 
	div.append('<div class="message">'+message+'</div>'); 
	var buttondiv = $('<div class="messagebuttons"></div>').appendTo(div); 
	var ok = $('<a class="button btn_ok" href="#" title="ok"></a>').appendTo(buttondiv);
	var cancel = $('<a class="button btn_cancel" href="#" title="cancel"></a>').appendTo(buttondiv);
	
	ok.click(function(evt){
		evt.preventDefault(); 
		onconfirm(); 
		div.remove(); 
	}); 
	cancel.click(function(evt){
		evt.preventDefault(); 
		if(oncancel)
			oncancel();
		div.remove(); 
	}); 
	return false; 
}




function arraytooptions(arr, currentvalue)
{
	alert(num);
	for(i=0; i<num; i++)
	{
		var name = ''; 
		if(!relevantpages[i]['name'])
			name = relevantpages[i]['identifier']; 
			
		if(relevantpages[i]['identifier'] == currentvalue)
		{
			pageselect.append('<option selected value="'+relevantpages[i]['identifier']+'">'+name+'</option>'); 
		}
		else
		{
			pageselect.append('<option value="'+relevantpages[i]['identifier']+'">'+name+'</option>'); 
		}
		
		

	}
	
	
}




Date.prototype.format = function(f)
{
    if (!this.valueOf())
        return ' ';

    var d = this;

    return f.replace(/(yy|mmmm|mmm|mm|dddd|ddd|dd|d|zh|hh|HH|nn|ss|a\/p|sup)/g,
        function($1)
        {
            switch ($1.toLowerCase())
            {
            case 'yy': return d.getFullYear();
            case 'mmmm': return gsMonthNames[d.getMonth()];
            case 'mmm':  return gsMonthNames[d.getMonth()].substr(0, 3);
            case 'mm':   return (d.getMonth() + 1).zf(2);
            case 'dddd': return gsDayNames[d.getDay()];
            case 'ddd':  return gsDayNames[d.getDay()].substr(0, 3);
            case 'dd':   return d.getDate().zf(2);
            case 'd': return d.getDate();
            case 'zh':   return ((h = d.getHours() % 12) ? h : 12).zf(2);
			case 'hh': 		return ((h = d.getHours() % 12) ? h : 12);
			case 'HH': 		return d.getHours(); 
            case 'nn':   return d.getMinutes().zf(2);
            case 'ss':   return d.getSeconds().zf(2);
            case 'a/p':  return d.getHours() < 12 ? 'a' : 'p';
			case 'sup':  
				switch (d.getDate())
					{
					case 1:
					case 21:
					case 31:
						return "st";
					case 2:
					case 22:
						return "nd";
					case 3:
					case 23:
						return "rd";
					default:
						return "th";
					}
			}
            
        }
    	);
}