function js_cal_get_xml(url) {
	if (window.XMLHttpRequest) {
		xmlhttp=new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		if (new ActiveXObject("Microsoft.XMLHTTP")) {
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		} else {
			xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
	}
	xmlhttp.open("GET",'includes/caller_program.php?'+url,false);
	xmlhttp.send(null);
	var txt=xmlhttp.responseText;
	return txt;
}

function js_cal_reg_move(objPrm) {
	var txt=js_cal_get_xml('cal_reg_move='+objPrm);
	document.getElementById('regular_calendar_table').innerHTML=txt;
	js_cal_event_display(0);
}

function js_cal_sm_move(objPrm) {
	var txt=js_cal_get_xml('cal_data_sm='+objPrm);
	document.getElementById('smlCalendarDiv').innerHTML=txt;
}

function js_cal_event_read(objPrm) {
	var txt=js_cal_get_xml('cal_data_event_sm='+objPrm);
	document.getElementById('dateEvents-sm').innerHTML=txt;
}

//function js_cal_event_display(eventId) {
//	var txt=js_cal_get_xml('cal_cal_event_display='+objPrm);
//	document.getElementById('dateEvents-sm').innerHTML=txt;
//}

function js_cal_event_create(eventId,approvedFlag,deletedFlag) {
	var n = new Array(21);  //ids of inputs for data to be sent
	n[0]="event_title";
	n[1]="start_date";
	n[2]="end_date";
	n[3]="country";
	n[4]="state";
	n[5]="city";
	n[6]="contact_name";
	n[7]="contact_email";
	n[8]="description";
	n[9]="event_venue";
	n[10]="address_1";
	n[11]="zip";
	n[12]="contact_phone";
	n[13]="event_url";
	n[14]="camping_event_flag";
	n[15]="hotel_event_flag";
	n[16]="camping_near_flag";
	n[17]="hotel_near_flag";
	n[18]="notes";
	n[19]='event_gps_coord';
	n[20]='camping_rustic_flag';	
//event_id
//approved_flag
//deleted_flag
	var r = new Array(8);  //screen names of required inputs
	r[0]="Event Title";
	r[1]="Event Start Date";
	r[2]="Event End Date";
	r[3]="Event Country";
	r[4]="Event State";
	r[5]="Event City";
	r[6]="Event Contact Person";
	r[7]="E-mail Address";
	var vl='';
	var url='';
	var err='';
	for (var i=0;i<n.length;i++) {
		vl=js_control_value(n[i]);
		if (i<r.length) {
			if (vl=='') { 
				err=err+'\n'+r[i];
				document.getElementById('span_'+n[i]).innerHTML='<span class="zoneRed"> Req.</span>';
			} else {
				document.getElementById('span_'+n[i]).innerHTML='';
			}
		}
		url=url+vl+'~!~';
	}
	if (err != '') {
		alert('Missing required information:'+err);
		return;
	}
	url=url+eventId+'~!~'+approvedFlag+'~!~'+deletedFlag;
	url='cal_event_create='+urlencode(url);
	if (deletedFlag=='x') {
		if (! confirm('Click OK if you are sure you want\nto flag this event as deleted?')) return;
	}
	err=js_cal_get_xml(url);
	if (parseInt(eventId)>0) {
		window.location.reload(true);
		return;
	}
	if (err=='0') {
		alert('Thank you.\nThis event has been submitted.\nYou will recieve an email notice when your event is approved.');
		window.location='calendar';
	} else {
		switch (err) {
		case '-1':
			alert('The Event Start Date is not valid.');
			break;
		case '-2':
			alert('The Event End Date is not valid.');
			break;
		case '-3':
			alert('The Event Start and End Dates are not valid.');
			break;
		case '-4':
			alert('The Event Start Date is after the End Date.');
			break;
		default:
			alert('There has been an error updating this record.\nPlease try again, or contact customer service.');		
			break;
		}
	}
}

function js_cal_event_display(eventId) {
	var txt='cal_event_display='+eventId;
	txt=js_cal_get_xml(txt);
	var tx=txt.split('~!~'); 
	LastMapAddress=tx[1];
	LastMapCoords=tx[2];
	document.getElementById('cal_full_event_display').innerHTML=tx[0];
	if (parseInt(eventId)>0) {
		window.scroll(0,js_element_y_pos('cal_full_event_display'));
		js_showMap(LastMapAddress,LastMapCoords);
	}
}

function js_control_value(objId) {
	var vl='';
	switch (document.getElementById(objId).type) {
	case 'checkbox':
		if (document.getElementById(objId).checked) vl=document.getElementById(objId).value;
		break;
	case 'select-one':
		//vl=document.getElementById(objId).value;
		if (document.getElementById(objId).selectedIndex>0) {
			vl=document.getElementById(objId).options[document.getElementById(objId).selectedIndex].value;
		} else {
			vl='';
		}
		break;
	case 'text':
		vl=document.getElementById(objId).value;
		break;
	case 'textarea':
		vl=document.getElementById(objId).value;
		break;
	default:
		//alert(document.getElementById(objId).type);
		break;	
	}
	return vl;
}

function urlencode(str) {
    var histogram = {}, tmp_arr = [];
    var ret = str.toString();
    var replacer = function(search, replace, str) {
        var tmp_arr = [];
        tmp_arr = str.split(search);
        return tmp_arr.join(replace);
    };
    histogram["'"]   = '%27';
    histogram['(']   = '%28';
    histogram[')']   = '%29';
    histogram['*']   = '%2A';
    histogram['~']   = '%7E';
    histogram['!']   = '%21';
    histogram['%20'] = '+';
    ret = encodeURIComponent(ret);
    for (search in histogram) {
        replace = histogram[search];
        ret = replacer(search, replace, ret) // Custom replace. No regexing
    }
    return ret.replace(/(\%([a-z0-9]{2}))/g, function(full, m1, m2) {
        return "%"+m2.toUpperCase();
    });
    return ret;
}

function js_element_y_pos(objId){
	var el=document.getElementById(objId);
	var ps=el.offsetTop;
	while((el=el.offsetParent) != null){
		ps+=el.offsetTop;
	}
	return ps;
}

function js_showMap(address,coords) {
	var res=false;
	if (coords.length>0) res=js_showMap_by_coords(coords);
	if (! res) js_showMap_by_address(address); 
}


function js_showMap_by_address(address) {
	var resFlag=false;
	var map = new GMap2(document.getElementById("mapcanvas"));
	var geocoder = new GClientGeocoder();
	if (geocoder) {
		geocoder.getLatLng(address,
			function(point) {
				if (!point) {
//					document.getElementById('get_dir_'+ctrl).style.display='none'
//					alert(address + " not found");
				} else {
					map.setCenter(point, 13);
					map.addOverlay(new GMarker(point));
			        map.addControl(new GMapTypeControl());
			        map.addControl(new GSmallMapControl());
					resFlag=true;
				}
			}
		);
	}
	return resFlag;
}

function js_showMap_by_coords(coords) {
	var crd=coords.split(','); 
	var latitude=parseFloat(crd[0]);
	var longitude=parseFloat(crd[1]);
	var resFlag=false;
	var map = new GMap2(document.getElementById("mapcanvas"));
	var geocoder = new GClientGeocoder();
	if (geocoder) {
		var point=new GLatLng(latitude,longitude);
		if (point) {
			map.setCenter(point, 13);
			map.addOverlay(new GMarker(point));
			map.addControl(new GMapTypeControl());
			map.addControl(new GSmallMapControl());
			resFlag=true;
		}
	}
	return resFlag;
}

