var _invalid_input_img_html="<img src='img/wrong.gif' style='vertical-align:middle' title='Invalid Input' alt='invalid input'/>&nbsp;";
var _ajax_loading_img_html="<img src='img/ajax-loader.gif'/>"

/* space savers */
function getEl(id){
	return document.getElementById(id);
}

/*
 AJAX
*/
//e.g call setAjaxHTML('GET','panelbody/form_login.html','body_div')

function getAjaxHttpObject() {
	var xmlHttp=null;
	// Firefox, Opera 8.0+, Safari
	if(window.XMLHttpRequest){
		xmlHttp=new XMLHttpRequest();
	} else {
		// Internet Explorer
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e) {
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}

function setAjaxHTML(method,url,divid,imgid,imgsrc) {
	
	if(imgid){
		startAjaxImage(imgid);
	}
	//unique id to prevent avoid cached file usage
	var uid = Math.random();
	url.indexOf('?') > -1 ? url+=("&uid="+uid) : url+=("?uid="+uid);
	
	ajaxReq = getAjaxHttpObject();
	ajaxReq.onreadystatechange = function(){
		if(ajaxReq.readyState == "4" || ajaxReq.readyState == "complete"){
			if(ajaxReq.status == 200) {
				if(divid){
					getEl(divid).innerHTML = ajaxReq.responseText;	
				}
			} else {
				//TODO add some kind of warning?
			}
			if(imgid) stopAjaxImage(imgid);
		}		
	};
	ajaxReq.open(method,url,true);
	ajaxReq.send(null);
}

function startAjaxImage(id,img){
	if(!img) img = "img/ajax-loader.gif";
	obj = getEl(id);
	if(obj){
		obj.src = img;	
	}
	
}
function stopAjaxImage(id,img){
	if(!img) img = "img/blank.gif";
	obj = getEl(id);
	if(obj){
		obj.src = img;	
	}
}

/*
 * AJAX UI METHODS
 */
function showHideContent(control,showLabel,hideLabel,contentDivId,uri){
	
	var cItem = getEl(contentDivId);
	
	if(cItem.innerHTML == ""){
		//display
		cItem.style.display="";
		setAjaxHTML("GET",uri,contentDivId);
		control.innerHTML = hideLabel;
	} else {
		//hide
		cItem.innerHTML = "";
		cItem.style.display="none";
		control.innerHTML = showLabel;
	}
}

function showContent(contentDivId,uri,imgid,imgsrc){
	var cItem = getEl(contentDivId);
	cItem.style.display="";
	setAjaxHTML("GET",uri,contentDivId,imgid,imgsrc);
}
/*
 * NON AJAX
 */
function showItem(id){
	getEl(id).style.display="";
}

function hideItem(id){
	getEl(id).style.display="none";
}

/*
INPUT VALIDATION METHODS
*/
function validateInputLength(input,minlength,maxlength,errorblockid,errmsg){
	var len = input.value.length;
	var block = getEl(errorblockid);
	block.style.display='none';
	if(minlength){
		if(len < minlength){
			block.style.display='';
			if(!errmsg) errmsg = 'Value too short.'
			if(len > 0){
				block.innerHTML=_invalid_input_img_html + errmsg;
			} else {
				block.innerHTML=_invalid_input_img_html + errmsg;
			}
			return false;
		}
	}
	if(maxlength){
		if(len > maxlength){
			block.style.display='';
			block.innerHTML=_invalid_input_img_html + "Value too long, maximum length is " + maxlength;
			return false;
		}
	}
	return true;
}

function validateFileUploadName(input,extarray,errorblockid){
	//for now hardcoding just to allow jpeg and gif files
	var block = getEl(errorblockid);
	block.style.display='none';
	var fname = input.value;
	if(fname && fname.length > 0){
		var x = fname.lastIndexOf(".");
		var suffix;
		if(x < 0){
			suffix='xxx';
		} else {
			suffix = fname.substr(x+1,fname.length);
		}
		var valid = false;
		for(var i = 0;i < extarray.length;i++){
		  if(suffix == extarray[i]){
		      valid = true;
		      break;
		  }
		}
		
		if(!valid) {
			block.style.display='';
			block.innerHTML=_invalid_input_img_html + "This file type is not accepted.";
			return false;
		}
		
	}
	return true;
	
}

function validateNumericValue(input,errorblockid){
	var block = getEl(errorblockid);
	block.style.display='none';
	var val = input.value;
	var validchars = "0123456789";
	var valid = true;
	for(i = 0;i < val.length;i++){
		if(validchars.indexOf(val.charAt(i)) == -1){
			valid = false;
			break;
		}
	}
	if(!valid){
		block.style.display='';
		block.innerHTML=_invalid_input_img_html + "Value should be a number (spaces not allowed either!)";
	}
	return valid;
}

function validateUsername(input,errorblockid){
	var block = getEl(errorblockid);
	block.style.display='none';
	var valid = true;
	if(!input.value.match(/^[a-zA-Z0-9_-]+$/)){
		valid = false;
	}
	if(!valid){
		block.style.display='';
		block.innerHTML=_invalid_input_img_html + "Only letters, numbers, underscores and hyphens allowed for username.";
	}
	return valid;
}

function validateSelect(select,errorblockid){
	var block = getEl(errorblockid);
	block.style.display = 'none';
	if(select.selectedIndex < 1 || select.options[select.selectedIndex].value == 'none'){
		block.style.display = '';
		block.innerHTML=_invalid_input_img_html + "No option selected.";
		return false;
	}
	return true;
}

function validateCheckboxSelected(cbname,errorblockid,errmsg){
	var cbs = document.getElementsByName(cbname);
	var valid = false;
	for(var i = 0;i < cbs.length;i++){
		if(cbs[i].checked){
			valid = true;
			break;
		}
	}
	var block = getEl(errorblockid);
	block.style.display = 'none';
	if(!valid){
		block.style.display = '';
		if(!errmsg) errmsg = 'Required option not selected.';
		block.innerHTML=_invalid_input_img_html + errmsg;
		return valid;
	}	
	return valid;
}

/*
APPLICATION'S INVIDUAL FORM VALIDATION
*/
var ok = true;
var imageExtArray = ['jpg','JPG','jpeg','JPEG','gif','GIF'];

function validateUserForm(update){
	ok = true;
	var x = validateInputLength(getEl('register_firstname'),1,null,'register_firstname_error');
	(ok && !x)?ok = false:ok;
	x = validateInputLength(getEl('register_surname'),2,null,'register_surname_error');
	(ok && !x)?ok = false:ok;
	x = validateInputLength(getEl('register_email'),4,null,'register_email_error');
	(ok && !x)?ok = false:ok;
	
	//values that may not be included in the user form e.g. password update is optional
	if(getEl('register_access')){
		x = validateSelect(getEl('register_access'),'register_access_error');
		(ok && !x)?ok = false:ok;	
	}
	
	if(getEl('register_username')){
		x = validateInputLength(getEl('register_username'),4,null,'register_username_error');
		(ok && !x)?ok = false:ok;
		if(x){
			x = validateUsername(getEl('register_username'),'register_username_error');
			(ok && !x)?ok = false:ok;
		}
	}
	
	if(getEl('register_password')){
		x = validateInputLength(getEl('register_password'),8,null,'register_password_error');
		(ok && !x)?ok = false:ok;
	}
	
	if(getEl('register_password_check')){
		x = validateInputLength(getEl('register_password_check'),8,null,'register_password_check_error');
		(ok && !x)?ok = false:ok;
		
		//password check if ok still true
		if(ok){
			var a = getEl('register_password').value;
			var b = getEl('register_password_check').value;
			block = getEl('register_password_check_error');
			block.style.display = 'none';
			if(a != b){
				ok = false;
				block.style.display = '';
				block.innerHTML = _invalid_input_img_html + "Mismatch, please enter passwords again.";
			}
		}
	}

	return ok;
}

function validateEventForm(update){
	ok = true;
	var x = validateInputLength(getEl('event_title'),1,null,'event_title_error');
	(ok && !x)?ok = false:ok;
	var x = validateInputLength(getEl('event_description'),1,300,'event_description_error');
	(ok && !x)?ok = false:ok;
	var x = validateInputLength(getEl('event_location'),1,null,'event_location_error');
	(ok && !x)?ok = false:ok;
	x = validateFileUploadName(getEl('event_image'),imageExtArray,'event_image_error');
	(ok && !x)?ok = false:ok;
	//date
	x = validateInputLength(getEl('date_picker_value'),1,null,'event_date_error');
	(ok && !x)?ok = false:ok;
	//time values have a default value - can't validate
	if(ok){
		if(getEl('event_image').value.length > 0){
			getEl('event_image').style.display = 'none';
			getEl('event_image_ip').style.display = '';	
		}
		
	}
	return ok;
}

function doResultCheckbox(cb){
	if(cb.id == 'result_outcome0'){
		getEl('result_outcome1').checked = false;
		getEl('result_outcome2').checked = false;
		getEl('noresultdiv').style.backgroundColor = '#FFD4D4';
		getEl('team1div').style.backgroundColor = '#FFF';
		getEl('team2div').style.backgroundColor = '#FFF';
	} else if(cb.id == 'result_outcome1'){
		getEl('result_outcome0').checked = false;
		getEl('result_outcome2').checked = false;
		getEl('noresultdiv').style.backgroundColor = '#FFF';
		getEl('team1div').style.backgroundColor = '#FFD4D4';
		getEl('team2div').style.backgroundColor = '#FFF';
	} else if(cb.id == 'result_outcome2'){
		getEl('result_outcome0').checked = false;
		getEl('result_outcome1').checked = false;
		getEl('noresultdiv').style.backgroundColor = '#FFF';
		getEl('team1div').style.backgroundColor = '#FFF';
		getEl('team2div').style.backgroundColor = '#FFD4D4';
	}
}

function validateNewsForm(update){
	ok = true;
	var x = validateInputLength(getEl('news_headline'),1,null,'news_headline_error');
	(ok && !x)?ok = false:ok;
	var x = validateInputLength(getEl('news_article'),1,1000,'news_article_error');
	(ok && !x)?ok = false:ok;
	x = validateFileUploadName(getEl('news_image'),imageExtArray,'news_image_error');
	(ok && !x)?ok = false:ok;
	if(ok){
		if(getEl('news_image').value.length > 0){
			getEl('news_image').style.display = 'none';
			getEl('news_image_ip').style.display = '';	
		}
	}
	return ok;
}

function validateLinkForm(update){
	ok = true;
	var x = validateInputLength(getEl('link_url'),1,null,'link_url_error');
	(ok && !x)?ok = false:ok;
	var x = validateInputLength(getEl('link_title'),1,null,'link_title_error');
	(ok && !x)?ok = false:ok;
	var x = validateInputLength(getEl('link_description'),1,180,'link_description_error');
	(ok && !x)?ok = false:ok;
	x = validateFileUploadName(getEl('link_image'),imageExtArray,'link_image_error');
	(ok && !x)?ok = false:ok;
	if(ok){
		if(getEl('link_image').value.length > 0){
			getEl('link_image').style.display = 'none';
			getEl('link_image_ip').style.display = '';
		}
	}
	return ok;
}

function validatePhotoForm(update){
	ok = true;
	//check new photo has a file value, but not for update
	var ud = getEl('photo_update');
	if(!ud){
		var x = validateInputLength(getEl('photo_image'),1,null,'photo_image_error','No image file specified.');
		(ok && !x)?ok = false:ok;
	}else {
		var x = validateFileUploadName(getEl('photo_image'),imageExtArray,'photo_image_error');
		(ok && !x)?ok = false:ok;	
	}
	var x = validateInputLength(getEl('photo_title'),1,null,'photo_title_error');
	(ok && !x)?ok = false:ok;
	var x = validateInputLength(getEl('photo_description'),null,300,'photo_description_error');
	(ok && !x)?ok = false:ok;
	//it a fileupload form, show progress
	if(ok){
		getEl('photo_image').style.display = 'none';
		getEl('photo_image_ip').style.display = '';
	}
	return ok;
}

function doItem(itemtype,itemid,outdiv){
	if(itemid && itemtype){
		var url;
		if(itemtype == 'loginreminder'){
			url = "do.php?f=phpscript&p=action_login_reminder&email=" + escape(itemid);
		}
		if(!url)return;
		var el = getEl(outdiv);
		setAjaxHTML("GET",url,el.id);
		el.style.display = "";
		el.innerHTML = _ajax_loading_img_html;
	}
}
