//=WW=======================================================
// CheckEmail(obj, classname)
// Basic email validation check, uses timer so it can be 'live'
// Usage: onkeyup=CheckEmail('id_of_inputbox', 'bademail')
//
// inputid		- inputbox element ID
// classname	- classname to add to inputbox if email invalid
//==========================================================
function CheckEmail(inputid, classname) {
	if(checktimer > 0) window.clearTimeout(checktimer);
	checktimer = window.setTimeout('CheckEmail_Callback("'+inputid+'", "'+classname+'")', 1000);
}
function CheckEmail_Callback(inputid, classname) {
	obj = document.getElementById(inputid);
	if(obj.value.length == 0) {
		if(typeof classname !== undefined)
   			obj.removeClass(classname);
   		return true;
	}
	var reg = /^([A-Za-z0-9_\-\.\+])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	if(reg.test(obj.value) == false) {
		if(typeof classname !== undefined)
			obj.addClass(classname);
		return false;
	} else {
		if(typeof classname !== undefined)
   			obj.removeClass(classname);
   		return true;
	}
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0

   var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

//=WW=======================================================
// CreateElement(data)
// Creates a DOM element by passing an object with all 
// the information you want for the element in it.
// To avoid memory leaks in IE, pass one field as parent with a
// string identifying the ID of the parent DOM element to add to
//
// e.g. to create a tr with a class of 'header'
//		tr = CreateElement({tagtype: 'tr', className: 'header'});
//
// or to create a div with text inside
//		div = CreateElement({tagtype: 'div', text: 'Some text'});
//
// or to create a div containing two images
//		div = CreateElement(tagtype: 'div', children: 
//			[{tagtype: 'img', src: 'image1.jpg'}, {tagtype: 'img', src: 'image2.jpg'}]);
//
// Function returns the element to be used in an append
// e.g. table.appendChild(tr);
//==========================================================
function CreateElement(data)
{
	var e = document.createElement(data.tagtype);
	if(data.tagtype == 'input') e.type = (data.type == undefined ? 'text' : data.type);
	if(typeof data.parent == 'string') data.parent = document.getElementById(data.parent);
	if(data.parent != undefined) data.parent.appendChild(e);
	for(var key in data)
		if(key == 'style') for(var s in data.style) eval('e.style.'+s+' = data.style.'+s);
		else if(key == 'text') e.appendChild(document.createTextNode(data.text));
		else if(key == 'children') for(var i=0;i<data.children.length;i++) {data.children[i].parent = e; CreateElement(data.children[i]);}
		else if(key.substr(0,2) == 'on') {$(e).setAttribute('ev'+key.substr(2), eval('data.'+key).replace(/\"/g, '\\"'));$(e).addEvent(key.replace('on', ''), function(event){eval($(this).getAttribute('ev'+event.type))})}
		else if(key != 'parent') eval('e.'+key+' = data.'+key);
	if(data.parent == undefined) return e;
}

//=WW=======================================================
// IsValidDate(date, direction)
// Attempts to validate a date. Depending on the date, can 
// take into account dd/mm or mm/dd. Will also accept 2 or 4
// year dates and the use of - or / as the separator.
// Can also check if the date is before/after today.
//
// date			- string to validate
// direction	- optional. if specified will check if the date
//					is before or after today. Specify -1 for
//					before today, 1 for after today.
//
// Returns false if invalid or yyyy-mm-dd if valid.
//==========================================================
function IsValidDate(date, direction) {
	while(date.indexOf('-') > -1) date = date.replace('-', '/');
	while(date.indexOf(' ') > -1) date = date.replace(' ', '');
	date = date.split('/');
	
	if(date.length != 3) return false;
		
	if(isNaN(date[0]) || isNaN(date[1]) || isNaN(date[2])) return false;
		
	date[0] = parseInt(date[0]); date[1] = parseInt(date[1]); date[2] = parseInt(date[2]);
	
	if(date[0] < 1 || date[1] < 1 || date[2] < 1) return false;
	
	if(date[2].toString().length <= 2 && date[2] < parseInt(new Date("yy"))) date[2] = 2000 + date[2];
	else if (date[2].toString().length <= 2) date[2] = 1900 + date[2];
	
	if(date[1] > 12 && date[0] <= 12) {
		t = date[1];
		date[1] = date[0];
		date[0] = t;	
	}
	
	daysinmonths = new Array(31,(((date[2] % 4 == 0) && ( (!(date[2] % 100 == 0)) || (date[2] % 400 == 0))) ? 29 : 28 ),31,30,31,30,31,31,30,31,30,31);
	if(date[1] > 12 || date[0] > daysinmonths[date[1]-1]) return false;
	
	if(date[0].toString().length == 1) date[0] = '0' + date[0].toString()
	if(date[1].toString().length == 1) date[1] = '0' + date[1].toString()
		
	date = date[2] + '-' + date[1] + '-' + date[0];
	
	real_date = new Date(date.replace('-', '/').replace('-', '/'))
	now = new Date();
		
	if(direction == -1) if(real_date > now) return false;
	else if (direction == 1) if(real_date < now) return false;
	
	return date;
}

//=WW=======================================================
// CheckUsername(args)
// Validates a username against a database via AJAX
//==========================================================
function CheckUsername(args) {
	var scripturl = rooturl+'webapp/framework/includes/CheckUsername.php';
	args.input = typeof args.inputid == 'string' ? $(args.inputid) : args.input;
	args.scripturl = typeof args.scripturl == 'undefined' ? scripturl : args.scripturl;
	if(args.input.value == args.defaultvalue) {
		$(args.nomatchelement) !== null ? $(args.nomatchelement).style.display = 'none' : null;
		$(args.matchelement)   !== null ? $(args.matchelement).style.display   = 'none' : null;
		if(typeof args.matchclassname   !== 'undefined') args.input.removeClass(args.matchclassname);
		if(typeof args.nomatchclassname !== 'undefined') args.input.removeClass(args.nomatchclassname);
	} else {		
		new Ajax(args.scripturl, {method: 'post', 
			postBody: 'type='+args.type+'&username='+args.input.value, 
			onSuccess: function(t) {
			if(t.indexOf('exists') > -1) {
				$(args.nomatchelement) !== null ? $(args.nomatchelement).style.display = 'none' : null;
				$(args.matchelement)   !== null ? $(args.matchelement).style.display   = ''     : null;
				if(typeof args.matchclassname   !== 'undefined') args.input.addClass(args.matchclassname);
				if(typeof args.nomatchclassname !== 'undefined') args.input.removeClass(args.nomatchclassname);
			} else if(t.indexOf('unique') > -1) {
				$(args.nomatchelement) !== null ? $(args.nomatchelement).style.display = ''     : null;
				$(args.matchelement)   !== null ? $(args.matchelement).style.display   = 'none' : null;
				if(typeof args.matchclassname   !== 'undefined') args.input.removeClass(args.matchclassname);
				if(typeof args.nomatchclassname !== 'undefined') args.input.addClass(args.nomatchclassname);
			} else {
				$(args.nomatchelement) !== null ? $(args.nomatchelement).style.display = 'none' : null;
				$(args.matchelement)   !== null ? $(args.matchelement).style.display   = 'none' : null;
				if(typeof args.matchclassname   !== 'undefined') args.input.removeClass(args.matchclassname);
				if(typeof args.nomatchclassname !== 'undefined') args.input.removeClass(args.nomatchclassname);
			}
			},
			onFailure: function(t) {
			$(args.nomatchelement) !== null ? $(args.nomatchelement).style.display = 'none' : null;
			$(args.matchelement)   !== null ? $(args.matchelement).style.display   = 'none' : null;
			if(typeof args.matchclassname   !== 'undefined') args.input.removeClass(args.matchclassname);
			if(typeof args.nomatchclassname !== 'undefined') args.input.removeClass(args.nomatchclassname);
		}}).request();
	}
}
