// JavaScript Document

/* Add method trim() into string object*/
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

function getallelement(f){
	for(e=0;e<f.elements.length;e++){
		var fe=f.elements[e];
		msg+="- "+e+"("+fe.id+") : "+fe.type+" = "+fe.value+'\n';
	}
	alert(msg);//return false;	
}

function selectAll(elem){
	elem.focus();
	elem.select();
}

//check / uncheck  for checkbox list
function checkAll(name,set_to){
	var checks = document.getElementsByName(name);
	var boxLength = checks.length;
	for ( i=0; i < boxLength; i++ ) {
        checks[i].checked = set_to;
    }
}

//set value to hiden field and submit form
function makeMode(value){
	rs=confirm("Are you sure for "+value+" Selected item.");
	if(rs==true){
		var elem=document.getElementById('mode');
		elem.value=value;
		elem.form.submit();
		return true;
	}else return false;
}

/**--------------------------------------------------------------
Begin Function for AJAX
*/

function startLoading() {
  // First we want to show the loading window then hide the content are we are loading into.
  //alert(document.getElementById('rs_ajax').value);
  Element.show("mainAreaLoading");
  Element.hide("mainAreaInternal");
}

function finishLoading() {
  setTimeout("Effect.toggle('mainAreaLoading');", 500);
}

function loadContent(frm) {
  // We make use of the Ajax.Updater function to load the external data from our file.
  // Start the loading window first by calling the function we made previously.
  //alert(document.getElementById('rs_ajax').value);
  startLoading();
new Ajax.Updater('mainAreaInternal', 'ajax_chk_back_link.php', {asynchronous:true, parameters:Form.serialize(frm),onComplete: succesRetourAjax});
}

function succesRetourAjax (t)
{
 	finishLoading();
	//alert(t.responseText);
 	document.getElementById('rs_ajax').value=t.responseText;
	document.getElementById('frm').submit();		
  // alert(t.responseText);
}

//show or hide input field for make new cateogires
function otherCat(val){
	if(val=='other') Element.show("other_cat");
	else Element.hide("other_cat");
}

//plus click statistic when click on the link with ajax
function lclick(id,url){
	new Ajax.Updater('clk'+id, url, {method: "post", postBody:"id="+id});
}
//update how many click with return value from ajax lclick();


/**----------------------------------------------------------------
Begin Function for Validatae Form
*/

// If the element's string matches the regular expression it is all numbers
function isNumeric(elem,sign){
	var sign = sign!='undefined'?sign:false; //default is false,
	var numericExpression = /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/;
	if(sign==true)	
	    numericExpression = /^(((\+|-)?\d+(\.\d*)?)|((\+|-)?(\d*\.)?\d+))$/;
	if(elem.value.match(numericExpression)){
		return true;
	}else{

		return false;
	}
}

// If the element's string matches the regular expression it is all integer
// secound agrument. if true the allowed -,+ in front
function isInt(elem,sign){
	var sign = sign!='undefined'?sign:false; //default is false,
	var intExpression =	/^\d+$/;
	if(sign==true)	
	    intExpression =	/^(\+|-)?\d+$/
	if(elem.value.match(intExpression)){
		return true;
	}else{

		return false;
	}
}

// If the element's string matches the regular expression it is all float
function isFloat(elem,sign){
	var sign = sign!='undefined'?sign:false; //default is false,
	var floatExpression = /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/;
	if(sign==true)	
	    floatExpression = /^(((\+|-)?\d+(\.\d*)?)|((\+|-)?(\d*\.)?\d+))$/;
	if(elem.value.match(floatExpression)){
		return true;
	}else{

		return false;
	}
}
// If the element's string matches the regular expression it is all letters
function isAlphabet(elem){
	var alphaExp = /^[a-zA-Z]+$/;
	if(elem.value.match(alphaExp)){
		return true;
	}else{
		return false;
	}
}

// If the element's string matches the regular expression it is numbers and letters
function isAlphanumeric(elem){
	var alphaExp = /^[0-9a-zA-Z]+$/;
	if(elem.value.match(alphaExp)){
		return true;
	}else{
		return false;
	}
}

// If the element's string matches the regular expression for zip code 
//it is numbers and letters and space
function isZip(elem){
	var alphaExp = /^[0-9a-zA-Z-+\s]+$/;
	if(elem.value.match(alphaExp)){
		return true;
	}else{
		return false;
	}
}

// If the element's string matches the regular expression for telephone number
//it is numbers and letters and space
function isTel(elem){
	var alphaExp = /^[0-9-+\s]+$/;
	if(elem.value.match(alphaExp)){
		return true;
	}else{
		return false;
	}
}

// check length of element value
function isLength(elem, lmin, lmax){
	var uInput = elem.value;
	if(uInput.length >= lmin && uInput.length <= lmax){ //correct
		return true;
	}else{//incorrect

		return false;
	}
}

//check Checked Checkbox
function isChecked(elem){
	var len= elem.length;
	var c=false;
	for(var i=0; i<len; i++){
		if(elem[i].checked==true){
			c=true; break;
		}
	}
	if(c==true){
		return true;
	}else{
		return false;
	}
}

//check selected listbox
function isSelected(elem){
	if(elem.value == "" || elem.value=='undefined'){ //empty selected value
		return false;
	}else if(elem.selectedIndex==0){//first option be selected
		//The most form is no value for first option
		return false;
	}else{
		return true;
	}
}

//check email pattern
function isEmail(elem){
	var emailExp = /^[a-zA-Z_]+[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
	elem.value=elem.value.trim();
	if(elem.value.match(emailExp)){

		return true;
	}else{

		return false;
	}
}

//check URL pattern
function isURL(elem){
	var urlExp=/^(http|https|ftp):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z0-9]{1,6}((:[0-9]{1,5})?\/.*)?$/i;
	elem.value=elem.value.trim();
	if(elem.value.match(urlExp)){		return true;
	}else{		return false;	}
}

//check HTML TAG pattern
function isTag(elem){
	var tagExp = /[<>]/;
	elem.value=elem.value.trim();
	if(elem.value.match(tagExp)){		return true;
	}else{		return false;	}
}

//check empty field  . if empty return true
function isEmpty(elem) {
	elem.value=elem.value.trim();
   	if ((elem.value.length==0) || (elem.value=="") || (elem.value==null))  
		return true;  //empty field return true
   	else { 
   	  	return false; //not empty return false
   	}
}	

/*Function for comparetion date
  option '=' : d1==d2
  		 '>' : d1>d2
		 '<' : d1<d2
  Return true when pasted input date form today
*/
function dateCompare(d1,d2,opt){
	var rs=false;
		Date1=new Date(); 
		var temp = new Array(); // create array object
		temp = d1.split('-'); 
		Date1.setFullYear(temp[2],(temp[1]-1),temp[0]);//set value to myDate object
		
		Date2=new Date(); 
		var temp = new Array(); // create array object
		temp = d2.split('-'); 
		Date2.setFullYear(temp[2],(temp[1]-1),temp[0]);
		
		if(opt==null) opt='=';
		switch(opt){
			case '=' : 
					if(Date1==Date2) rs=true;
					break;
			case '>' :  
					if(Date1>Date2)	rs=true;
					break;
			case '<' : 
					if(Date1<Date2)	rs=true;
					break;
			default : rs=false;
					break;
		}
	return rs;

}

/*Function for check date is the past date or not
  Return true when pasted input date form today
*/
function isPastDate(elem){
	if(!isEmpty(elem)){
		curDate=new Date(); // get today date
		myDate = new Date(); // create date object
		
		uDate=elem.value;
		var temp = new Array(); // create array object
		temp = uDate.split('-'); 
		myDate.setFullYear(temp[2],(temp[1]-1),temp[0]);//set value to myDate object
		
		if(myDate<curDate){
		
			return true;
		}else {
		
			return false;
			
		}
	}else 	{
		
		return false;
		}
}

function isFutureDate(elem){
	if(!isEmpty(elem)){
		curDate=new Date(); // get today date
		myDate = new Date(); // create date object
		
		uDate=elem.value;
		var temp = new Array(); // create array object
		temp = uDate.split('-'); 
		myDate.setFullYear(temp[2],(temp[1]-1),temp[0]);//set value to myDate object
		
		if(myDate>=curDate){
		
			return true;
		}else {
		
			return false;
		}
	}else{ 	
		
		return false;
	}
}

function isUsername(elem){
	var usExp =  /^[a-zA-Z0-9_-]{3,20}$/;
	elem.value=elem.value.trim();
	if(elem.value.match(usExp))	
		return true;
	else
		return false;
}

/**-----------------------------------------------------------------
form validate function
*/
function adminCheckNewMemberForm(f){
	var msg="";
	if(f.avi_id.value==0 || isEmpty(f.mid)){
		msg+="Please Check available Member ID. \n";
	}
	if(isEmpty(f.name)){
		msg+="Please enter Golfer/Team Name. \n";	
	}
	
	if(msg=="") return true;
	else{ alert(msg); return false;}
}

/* check lookup form for Member Register module(first step)*/
function chk_lookup_frm(f){
	var msg="";
	if(isEmpty(f.mid)){
		msg+="Please enter Member ID. \n";
	}
	if(isEmpty(f.name)){
		msg+="Please enter Golfer/Team Name. \n";	
	}
	
	if(msg=="") return true;
	else{ alert(msg); return false;}
}

/* check register form for Member Register module(first step)*/
function chk_register_frm(f){
	var msg="";
	if(isEmpty(f.mid)){
		msg="Please invalid Member ID. \n";
		alert(msg);
		window.location.href='index.php';
	}
	if(isEmpty(f.name)){
		msg+="Please enter Golfer/Team Name. \n";	
		selectAll(f.name);
	}
	if(!isSelected(f.country)){
		msg+="Please select Country. \n";	
	}

	if(!isEmpty(f.hd_index) && !isFloat(f.hd_index,true)){
		msg+="Handicap Index must be number only. \n";	
		selectAll(f.hd_index);
	} 
	if(f.mode.value=='register'){ //set password when register only
		if(isEmpty(f.passwd)){//empty password
			msg+="Please enter Password. \n";	
			selectAll(f.passwd);
		}else if(!isLength(f.passwd, 4, 16)){// too short or too long
			msg+="Password lenght is 4-16 letters.\n";
			selectAll(f.passwd);
		}else if(f.passwd.value!=f.passwd2.value){ //both password not same
			msg+="Both Password is not same. \n";	
			selectAll(f.passwd2);
		}
	}//end if mode=register
	if(isEmpty(f.captcha)){
		msg+="Please enter Security Code. \n";	
		selectAll(f.captcha);
	}
	
	if(msg=="") return true;
	else{ alert(msg); return false;}
}

/**
	member add score information
*/
function chk_score_frm(f){
	var msg="";
	var elem_gross=f.gross; //simple input
	var elem_hono=f.hono; //advance input

	if(typeof(elem_gross)  != 'undefined'){
		if(!isEmpty(f.gross) && !isInt(f.gross)){
			msg+="- Gross score must be number only. \n";
			selectAll(f.gross);
		}
		if(isEmpty(f.adj_gross)) {
			msg+="- Please enter Adjust gross score. \n";
			selectAll(f.adj_gross);
		}
		else if(!isInt(f.adj_gross)){
			msg+="- Adjust gross score must be number only. \n";
			selectAll(f.adj_gross);
		}
		
		if(!isEmpty(f.score_hole) && !isInt(f.score_hole)) {
			msg+="- Hole in one must be number only. \n";
			selectAll(f.score_hole);
		}
		if(!isEmpty(f.score_par) && !isInt(f.score_par)){
			msg+="- Par must be number only. \n";
			selectAll(f.score_par);
		}
		if(!isEmpty(f.score_eagle) && !isInt(f.score_eagle)){
			msg+="- Eagle must be number only. \n";
			selectAll(f.score_eagle);
		}
		if(!isEmpty(f.score_dbogie) && !isInt(f.score_dbogie)){
			msg+="- Double Bogie must be number only. \n";
			selectAll(f.score_dbogie);
		}
		if(!isEmpty(f.score_birdie) && !isInt(f.score_birdie)){
			msg+="- Birdie must be number only. \n";
			selectAll(f.score_birdie);
		}
		if(!isEmpty(f.score_bogie) && !isInt(f.score_bogie)){
			msg+="- Bogie must be number only. \n";
			selectAll(f.score_bogie);
		}
	}else{
		alert('Invalid Form Elements');
		return false;
	}	
	
	if(typeof(elem_hono)  != 'undefined'){
		var i=1;
		for(i=1; i<=elem_hono.value; i++){
			var elem_score=f.elements['s['+i+']'];	
			if(isEmpty(elem_score) || parseInt(elem_score.value)<1){
				msg+="- Score of Hole "+i+" must more than 0(zero). \n";
				selectAll(elem_score);
			}else if(!isInt(elem_score)) {
				msg+="- Score of Hole "+i+" must be number only. \n";
				selectAll(elem_score);
			}
		}//end for
	}

	if(msg==""){ //no error
		return true;
	}else{
		alert(msg);
		return false;
	}
	
}

/**
	member add club information
*/
function chk_add_club_frm(f){
	var msg="";
	if(isEmpty(f.name)){
		msg+="Please enter Club/Course Name. \n";
		selectAll(f.name);
	}
	if(!isSelected(f.country)){ //return true if made selection
		msg+="Please select Country. \n";
	}
	if(!isSelected(f.hole)){ //return true if made selection
		msg+="Please select Course hole. \n";
		selectAll(f.hole);
	}
	if(msg==''){
		return true;
	}else{
		alert(msg); return false;
	}
}

/**
	member add tee information
*/
function chk_add_tee_frm(f){
	var msg="";
	//check course-tee info--------------------------
	if(f.clu_hole.value==9){
		oc_max=fc_max; oc_min=fc_min; op_max=fp_max; op_min=fp_min;	
	}

	if(!isSelected(f.sel_tee)){//return true if made selection
		msg+="Please select Tee color. \n";
	}

	if(isEmpty(f.tot_o_course)){
		msg+="Please enter Overall course rating. \n";
		selectAll(f.tot_o_course);
	}else if(!isFloat(f.tot_o_course)){ //return true if number value
		msg+="Overall course rating must be number only. \n";
		selectAll(f.tot_o_course);
	}else if(!isBetween(parseFloat(f.tot_o_course.value),oc_min,oc_max)){
		msg+="Overall course rating must be between "+oc_min+" and "+oc_max+". \n";
		selectAll(f.tot_o_course);
	}
	
	if(isEmpty(f.tot_o_slope)){
		msg+="Please enter Overall slope rating. \n";
		selectAll(f.tot_o_slope);
	}else if(!isInt(f.tot_o_slope)){ //return true if number value
		msg+="Overall slope rating must be number only. \n";
		selectAll(f.tot_o_slope);
	}else if(!isBetween(parseInt(f.tot_o_slope.value),os_min,os_max)){
		msg+="Overall slope rating must be between "+os_min+" and "+os_max+". \n";
		selectAll(f.tot_o_slope);
	}
	
	if(isEmpty(f.tot_o_par)){
		msg+="Please enter Overall total par. \n";
		selectAll(f.tot_o_par);
	}else if(!isInt(f.tot_o_par)){ //return true if number value
		msg+="Overall total par must be number only. \n";
		selectAll(f.tot_o_par);
	}else if(!isBetween(parseInt(f.tot_o_par.value),op_min,op_max)){
		msg+="Overall total par must be between "+op_min+" and "+op_max+". \n";
		selectAll(f.tot_o_par);
	}
	//alert('end course . next is hole');
	//check hole info------------------------------
	var i=0; var cnt_esum=0; var total_ep=0;
	for(i=1; i<=parseInt(f.clu_hole.value);i++){
		var ey=f.elements['y['+i+']']; var ey_val=ey.value!=''?ey.value:0;
		var ep=f.elements['p['+i+']']; var ep_val=ep.value!=''?ep.value:0;
		var eh=f.elements['h['+i+']']; var eh_val=eh.value!=''?eh.value:0;
		var esum=parseInt(ey_val)+parseInt(ep_val)+parseInt(eh_val);
		if(esum>0){
			//alert('esum of '+i+' is '+esum);
			//yard value check.
			if(isEmpty(ey)){
				msg+="Please enter Yard of Hole "+i+". \n";
				selectAll(ey);
			}else if(!isInt(ey)){
				msg+="Yard of Hole "+i+" must be number only. \n";
				selectAll(ey);
			}
			//par value check.
			if(isEmpty(ep)){
				msg+="Please enter Par of Hole "+i+". \n";
				selectAll(ep);
			}else if(!isInt(ep)){
				msg+="Par of Hole "+i+" must be number only. \n";
				selectAll(ep);
			}else if(!isBetween(parseInt(ep_val),hp_min,hp_max)){
				msg+="Par of Hole "+i+" must be between "+hp_min+" and "+hp_max+". \n";
			}
			//handicap value check.
			if(!isEmpty(eh) && !isInt(eh)){
				msg+="Handicap of Hole "+i+" must be number only. \n";
				selectAll(ey);
			}
			cnt_esum++;
			total_ep+=parseInt(ep_val);
		}//end if esum>0
	}//end for
	if(cnt_esum>0 && cnt_esum!=parseInt(f.clu_hole.value)){
		msg+="Please enter all hole information or leave all blank.\n";
	}else if(total_ep>0 && total_ep!=parseInt(f.tot_o_par.value)){
		msg+="Overall Par must be equal Total par of holes.\n";
	}
	
	if(msg==''){
		return true;
	}else{
		alert(msg); return false;
	}
}


/**
	admin add tee information
*/
function chk_tee_frm(f){
	var msg="";
	if(isEmpty(f.name)){ //return true if number value
		msg+="Please enter Tee name. \n";
		selectAll(f.name);
	}
	if(isEmpty(f.code)){ //return true if number value
		msg+="Please enter Color code. \n";
		selectAll(f.code);
	}
	if(msg==''){
		return true;
	}else{
		alert(msg); return false;
	}
}

/*	check change password form */
function chk_change_password_frm(f){
	var msg="";
	if(isEmpty(f.cpasswd)){
		msg+="Please enter Current password. \n";	
		selectAll(f.cpasswd);
	}
	if(isEmpty(f.passwd)){
		msg+="Please enter New password. \n";	
		selectAll(f.passwd);
	}else if(!isLength(f.passwd, 4, 16)){// too short or too long
		msg+="Password lenght is 4-16 letters.\n";
		selectAll(f.passwd);
	}else if(f.passwd.value!=f.passwd2.value){ //both password not same
		msg+="Both Password is not same. \n";	
		selectAll(f.passwd2);
	}
	if(isEmpty(f.passwd2)){
		msg+="Please enter Re-enter password. \n";	
		selectAll(f.passwd2);
	}
	if(isEmpty(f.captcha)){
		msg+="Please enter Security code. \n";	
		selectAll(f.captcha);
	}
	if(msg!=""){ //have some error
		alert(msg); return false;
	}else return true; //no error
	
}

/*	check reset password form */
function chk_reset_password_frm(f){
	var msg="";
	if(isEmpty(f.mid)){
		msg+="Please enter Member Club No. \n";	
		selectAll(f.mid);
	}
	if(isEmpty(f.email)){
		msg+="Please enter Registered Email. \n";	
		selectAll(f.email);
	}else if(!isEmail(f.email)){
		msg+="Invalid Email Address\n";
		selectAll(f.email);
	}
	if(isEmpty(f.captcha)){
		msg+="Please enter Security code. \n";	
		selectAll(f.captcha);
	}
	if(msg!=""){ //have some error
		alert(msg); return false;
	}else return true; //no error
	
}

/* Link page */
/**-----------------------------------------------------------------
form validate function
*/
function chkAddLinkForm(f){
	var err=0;
	var msg="Input Validation.\n";
	if(isEmpty(f.title) || isTag(f.title)){
		err++;
		msg+=err+". Invalid Site Title\n";
	}
	if(isEmpty(f.cat_id)){
		err++;
		msg+=err+". Invalid Categories\n";
	}else if(f.cat_id.value=='other' && isEmpty(f.new_cat)){
		err++;
		msg+=err+". Please Specify Categories Name\n";
	}
	if(!isURL(f.web)){
		err++;
		msg+=err+". Invalid URL\n";
	}
/*	if(!isEmpty(f.img_url) && f.img_url.value.toLowerCase()!="http://" && !isURL(f.img_url)){
		err++;
		msg+=err+". Invalid Image URL\n";
	}*/
	if(!isURL(f.url_bk_link)){
		err++;
		msg+=err+". Invalid Link Back URL\n";
	}
	if(isEmpty(f.name) || isTag(f.name)){
		err++;
		msg+=err+". Invalid Contact Name\n";
	}
	if(!isEmail(f.email)){
		err++;
		msg+=err+". Invalid Email Address\n";
	}
	if(isTag(f.desc)){
		err++;
		msg+=err+". Invalid Description\n";
	}
	if(isEmpty(f.captcha)){
		err++;
		msg+=err+". Invalid Captcha\n";
	}
	
	if(err==0) return true; //no error
	else{
		alert(msg);
		return false;
	}
}

/**-----------------------------------------------------------------
form validate function FOR ADMIN ADD LINK
*/
function admin_chkAddLinkForm(f){
//	return confirm("admin chk from");
	var err=0;
	var msg="Input Validation.\n";
	if(isEmpty(f.title) || isTag(f.title)){
		err++;
		msg+=err+". Invalid Site Title\n";
	}
	if(isEmpty(f.cat_id)){
		err++;
		msg+=err+". Invalid Categories\n";
	}else if(f.cat_id.value=='other' && isEmpty(f.new_cat)){
		err++;
		msg+=err+". Please Specify Categories Name\n";
	}
	if(!isURL(f.web)){
		err++;
		msg+=err+". Invalid URL\n";
	}
/*	if(!isEmpty(f.img_url) && f.img_url.value.toLowerCase()!="http://" && !isURL(f.img_url)){
		err++;
		msg+=err+". Invalid Image URL\n";
	}
	if(!isURL(f.url_bk_link)){
		err++;
		msg+=err+". Invalid Link Back URL\n";
	}
	if(isEmpty(f.name) || isTag(f.name)){
		err++;
		msg+=err+". Invalid Contact Name\n";
	}
	if(!isEmail(f.email)){
		err++;
		msg+=err+". Invalid Email Address\n";
	}*/
	if(isTag(f.desc)){
		err++;
		msg+=err+". Invalid Description\n";
	}
	/*if(isEmpty(f.captcha)){
		err++;
		msg+=err+". Invalid Captcha\n";
	}*/
	
	if(err==0) return true; //no error
	else{
		alert(msg);
		return false;
	}
}
