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,postparams) {
	
	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);

        if(postparams){
            ajaxReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
            ajaxReq.send(postparams);
        } else {
            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 displayErrMsg(elid,errmsg){
    errdiv=getEl(elid);
    errdiv.style.display='';
    errdiv.innerHTML=_invalid_input_img_html + errmsg;
}

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 validateRegEx(input, errorblockid, regEx, errmsg){
        var block = getEl(errorblockid);
	block.style.display='none';
	var valid = true;
        if(getEl(input).value.length < 1)
            return true; //don't validate if not set, use length validators for required input
        valid = regEx.test(getEl(input).value);
	if(!valid){
            if(errmsg)
                displayErrMsg(errorblockid, errmsg);
            else
                displayErrMsg(errorblockid, "Invalid, try removing spaces or other unexpected characters.");
	}
	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 imageExtArray = ['jpg','JPG','jpeg','JPEG'];

function validateUserForm(update){
	var ok = true;
        if(!validateInputLength(getEl('register_firstname'),1,null,'register_firstname_error')
            | !validateInputLength(getEl('register_surname'),2,null,'register_surname_error')
            | !validateInputLength(getEl('register_email'),4,null,'register_email_error'))
            ok=false;
	//values that may not be included in the user form e.g. password update is optional
	if(getEl('register_access')){
            if(!validateSelect(getEl('register_access'),'register_access_error'))
                ok=false;
	}
	
	if(getEl('register_username')){
            if(!validateInputLength(getEl('register_username'),4,null,'register_username_error'))
                ok=false;
            else {
                if(!validateUsername(getEl('register_username'),'register_username_error'))
                    ok=false;
            }
	}
	
	if(getEl('register_password')){
            if(!validateInputLength(getEl('register_password'),8,null,'register_password_error'))
                ok=false;
	}
	
	if(getEl('register_password_check')){
		if(!validateInputLength(getEl('register_password_check'),8,null,'register_password_check_error'))
                    ok=false;
		//password check if ok still true
		else {
			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 validateFixtureForm(update){
	var ok = true;
	if(!validateInputLength(getEl('fixture_team1'),1,null,'fixture_team1_error')
            | !validateInputLength(getEl('fixture_team2'),1,null,'fixture_team2_error')
            | !validateInputLength(getEl('fixture_details'),1,null,'fixture_details_error')
            | !validateInputLength(getEl('fixture_location'),1,null,'fixture_location_error')
            | !validateInputLength(getEl('fixture_type'),1,null,'fixture_type_error')
            | !validateInputLength(getEl('date_picker_value'),1,null,'fixture_date_error'))
            ok = false;
	//time values have a default value - can't validate
	return ok;
}

function validateEventForm(update){
	var ok = true;
	if(!validateInputLength(getEl('event_title'),1,null,'event_title_error')
            | !validateInputLength(getEl('event_description'),1,null,'event_description_error')
            | !validateInputLength(getEl('event_location'),1,null,'event_location_error')
            | !validateFileUploadName(getEl('event_image'),imageExtArray,'event_image_error')
            | !validateInputLength(getEl('date_picker_value'),1,null,'event_date_error'))
            ok=false;
	//time values have a default value - can't validate
	else {
		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 validateResultForm(update){
	var ok = true;
	//one outcome object must be selected
	if(!validateCheckboxSelected('result_outcome','result_outcome_error','No result option selected.'))
            ok=false;
	else {
		//team score not required if no result
		if(!getEl('result_outcome0').checked){
                    if(!validateInputLength(getEl('result_team1'),1,30,'result_outcome_error','Both team results required.')
                        | !validateInputLength(getEl('result_team2'),1,30,'result_outcome_error','Both team results required.'))
                    ok=false;
		}
	}
	if(!validateInputLength(getEl('result_headline'),1,null,'result_headline_error')
            | !validateInputLength(getEl('result_report'),1,null,'result_report_error')
            | !validateFileUploadName(getEl('result_img1'),imageExtArray,'result_img1_error')
            | !validateFileUploadName(getEl('result_img2'),imageExtArray,'result_img2_error')
            | !validateFileUploadName(getEl('result_scorecard'),imageExtArray,'result_scorecard_error'))
            ok=false;
	else{
		if(getEl('result_img1').value.length > 0){
			getEl('result_img1').style.display = 'none';
			getEl('result_img1_ip').style.display = '';	
		}
		if(getEl('result_img2').value.length > 0){
			getEl('result_img2').style.display = 'none';
			getEl('result_img2_ip').style.display = '';
		}
                if(getEl('result_scorecard').value.length > 0){
			getEl('result_scorecard').style.display = 'none';
			getEl('result_scorecard_ip').style.display = '';
		}
		
	}
	return ok;
}

function validateNewsForm(update){
	var ok = true;
	if(!validateInputLength(getEl('news_headline'),1,null,'news_headline_error')
            | !validateInputLength(getEl('news_article'),1,null,'news_article_error')
            | !validateFileUploadName(getEl('news_image'),imageExtArray,'news_image_error'))
            ok=false;
	else {
		if(getEl('news_image').value.length > 0){
			getEl('news_image').style.display = 'none';
			getEl('news_image_ip').style.display = '';	
		}
	}
	return ok;
}

function validateLinkForm(update){
	var ok = true;
	if(!validateInputLength(getEl('link_url'),1,null,'link_url_error')
            | !validateInputLength(getEl('link_title'),1,null,'link_title_error')
            | !validateInputLength(getEl('link_description'),1,1000,'link_description_error')
            | !validateFileUploadName(getEl('link_image'),imageExtArray,'link_image_error'))
            ok=false;
	else {
		if(getEl('link_image').value.length > 0){
			getEl('link_image').style.display = 'none';
			getEl('link_image_ip').style.display = '';
		}
	}
	return ok;
}

function validatePhotoForm(update){
	var ok = true;
	//check new photo has a file value, but not for update
	var ud = getEl('photo_update');
	if(!ud){
		if(!validateInputLength(getEl('photo_image'),1,null,'photo_image_error','No image file specified.'))
                    ok=false;
	}else {
		if(!validateFileUploadName(getEl('photo_image'),imageExtArray,'photo_image_error'))
                    ok=false;
	}
	if(!validateInputLength(getEl('photo_title'),1,null,'photo_title_error')
            | !validateInputLength(getEl('photo_description'),null,1000,'photo_description_error'))
            ok=false;
	//it a fileupload form, show progress
	if(ok){
		getEl('photo_image').style.display = 'none';
		getEl('photo_image_ip').style.display = '';
	}
	return ok;
}

function validateFieldValuesMatch(id1,id2,errid,errmsg){
    var f1val=getEl(id1).value;
    var f2val=getEl(id2).value;
    var block = getEl(errid);
    block.style.display='none';
    if(f1val == f2val){
        return true;
    } else {
        if(!errmsg) errmsg="Values don't match";
        displayErrMsg(errid, errmsg);
        return false;
    }
}

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;
	}
}

