/*
Project: Wasatch Mountain Club :: Lodge Reservations
Scope: UI and Ajax calls
Last updated: September 16, 2008 by Suresh Subasinghe

*/
/*================================================*/
/*         UI Element access functions            */
/*================================================*/
//Layers, Div Tages
function ShowLayer(id) {
	document.getElementById(id).style.display = "block"; 
}

function HideLayer(id) {
	document.getElementById(id).style.display = "none"; 
}

function ReverseDisplay(id) {
	if(document.getElementById(id).style.display == "none") { 
		document.getElementById(id).style.display = "block"; 
	}
	else { 
		document.getElementById(id).style.display = "none"; 
	}
}

//Radio Buttons
function unCheckRadio(oRadio) {
	  var or = document.getElementsByName(oRadio);
      for (var i = 0; i < or.length; i++) {
         or[i].checked = false;
     }
}

function getCheckedValue(radioObjName) {
	var radioObj = document.getElementById(radioObjName);
	
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

//misc
function setfocus(field){
	document.getElementById(field).focus();
}


/*================================================*/
/*         Data manipulation functions            */
/*================================================*/

//Validation Checks
function checkEmail(email) {
	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (!filter.test(email.value)) {
		return false;
	}
	return true;
}

function isEmpty(val) {
	if ( (trim(val)).length == 0 )
	{
		return true;
	}
	else
	{
		return false;
	}
}

function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}

function inRange(val,min_length,max_length)
{
	if ( ((trim(val)).length >= min_length) && ((trim(val)).length <= max_length) )
	{
		return true;
	}
	else
	{
		return false;
	}
}


/*================================================*/
/*         Lodge Forms specific functions         */
/*================================================*/

function SetDate(val) {
	document.getElementById('reserve_date').value = val;
	document.getElementById('reserve_date2').value = val;
	HideLayer('popup_calendar');
	document.getElementById("lblReservedDatesText").innerHTML = ShowDateDifferenceInWords(val, val);
	unCheckRadio('isMember');
	ShowLayer('member_q');
}

function SetDate2(val) {
	document.getElementById('reserve_date2').value = val;
	HideLayer('popup_calendar2');
	document.getElementById("lblReservedDatesText").innerHTML = ShowDateDifferenceInWords(document.getElementById('reserve_date').value, val);
	unCheckRadio('isMember');
	ShowLayer('member_q');
}

function UpdateProceedButtonStatus()
{
	var status = document.getElementById("rules").value;
	if( status == 'true' ) {
		document.getElementById("btn_submit").disabled = false;	
		document.getElementById("btn_submit").value = 'Confirm and proceed to Secure Payment >>';
	} 
	else {
		document.getElementById("btn_submit").disabled = true;	
		document.getElementById("btn_submit").value = 'Please read the Lodge Rules and Regulations to proceed';
	}
}

//Validate Submission form and Show Summary and Payment Screens
function ShowSummary()
{
	if ( ValidateForm() ) {
		CalculateAndShowFees();
		HideLayer('sel_date');
		HideLayer('member_q');
		HideLayer('membership_login');
		HideLayer('misc_questions');
		HideLayer('member_status');
		HideLayer('user_info');
		ShowLayer('Reservation_Summary');
	}
	return;	
}

//Validate Submission form and prompt user to complete missing fields.
function ValidateForm() {
	var name = document.getElementById("name").value;
	var addr1 = document.getElementById("addr1").value;
	var city = document.getElementById("city").value;
	var zip = document.getElementById("zip").value;
	var email = document.getElementById("email").value;
	var phone = document.getElementById("phone").value;
	var liability = getCheckedValue('liability');
	var ins_name = document.getElementById("ins_name").value;
	var ins_policy_no = document.getElementById("ins_policy_no").value;
	
	//alert(name+addr1+city+zip+email+phone+liability+ins_name+ins_policy_no);

	//Validate Client info
	if ( isEmpty(name) ) {
		setfocus('name');
		alert('Please enter your Full Name');	
		return false;
	}
	else if ( isEmpty(email) ) {
		setfocus('email');
		alert('Please enter your email address');	
		return false;
	}
	else if ( checkEmail(email) ) {
		setfocus('email');
		alert('Please enter a valid email address');	
		return false;
	}
	else if ( isEmpty(phone) ) {
		setfocus('phone');
		alert('Please enter your phone number');	
		return false;
	}
	else if ( isEmpty(addr1) ) {
		setfocus('addr1');
		alert('Please enter your Street Address');	
		return false;
	}

	else if ( isEmpty(city) ) {
		setfocus('city');
		alert('Please enter your City');	
		return false;
	}

	else if ( isEmpty(zip) ) {
		setfocus('zip');
		alert('Please enter your Zip Code');	
		return false;
	}
	
	else if ( !inRange(zip,5,10) ) {
		setfocus('zip');
		alert('Please enter a valid Zip Code');	
		return false;
	}

	//Validate Insurance Info
	else if (liability == 'true') {
		if ( isEmpty(ins_name) ) {
			setfocus('ins_name');
			alert('You indicated that you have Proof of Liability. Please enter the Name of homeowners insurance');	
			return false;
		}
		else if ( isEmpty(ins_policy_no) ) {
			setfocus('ins_policy_no');
			alert('You indicated that you have Proof of Liability. Please enter the Policy number and group');	
			return false;
		}
	}

	return true;
}


function CalculateAndShowFees() {
	
	var total_fee = 0;
	var date_str1 = document.getElementById('reserve_date').value;
	var date_str2 = document.getElementById('reserve_date2').value;
	var mem_status = 'false';
	var type = 'other';
	var clean = getCheckedValue('clean');
	var ins_name = document.getElementById('ins_name').value; 
	var ins_policy_no = document.getElementById('ins_policy_no').value;
	var member_id = document.getElementById('username').value;
	
	//Misc Line items
	document.getElementById("lblDate").innerHTML = ShowDateInWords(date_str1);
	//document.getElementById("lblDiscount").innerHTML = '$50';
	document.getElementById("lblInsurance").innerHTML = ins_name + '<br>' + ins_policy_no;

	//Security Deposit
	var deposit = GetParameterValue('deposit');
	document.getElementById("lblDeposit").innerHTML = '$' + deposit ;
	document.getElementById("deposit_amt").value = deposit ;
	total_fee += (deposit * 1);
	
	//if its a Wedding
	if ( getCheckedValue('isWedding') == 'true' ) {
		document.getElementById("lblEventType").innerHTML = 'Wedding';	
		type = 'wedding';
	}
	else {
		HideLayer("row_wedding");
		HideLayer("row_discount");
	}
	
	//Rate Fee Calculation
	if (document.getElementById('btnVerifyLogin').value != 'Verify Login') {
		mem_status = 'true';
	}
	
	var rental_fee = GetRentalFee(member_id, date_str1, date_str2, mem_status, type);
	total_fee += ( rental_fee * 1 );
	document.getElementById("lblRentalFee").innerHTML = '$' + rental_fee;
	document.getElementById("rental_fee").value = rental_fee ;

	//Cleaning charges
	if (clean == 'true') {
		var cleaning_fees = GetParameterValue('cleaning_fees');
		
		document.getElementById("lblCleaningFee").innerHTML = '$' + cleaning_fees  ;
		document.getElementById("cleaning_fee").value = cleaning_fees ;

		var precharge_for_cleaning = GetParameterValue('precharge_for_cleaning');
		if (precharge_for_cleaning == 'true') {
			total_fee += ( cleaning_fees  * 1 );
		}
	}
	else {
		document.getElementById("lblCleaningFee").innerHTML = 'Declined';
	}
	
	document.getElementById("lblTotal").innerHTML = '$' + total_fee;
	document.getElementById("total_amt").value = total_fee ;
}

function MakeChanges()
{
	ShowLayer('sel_date');
	if (document.getElementById('btnVerifyLogin').value == 'Verify Login') { //not logged in
		ShowLayer('member_q'); 
		
		var isMember = getCheckedValue('isMember');
		if (isMember == 'true') {
			ShowLayer('membership_login'); 
		}
	}
	
	ShowLayer('member_status');
	ShowLayer('user_info');
	ShowLayer('misc_questions');
	HideLayer('Reservation_Summary');
}


function VerifyLogin() {
	//Validate u and p
	if ( isEmpty(document.getElementById('username').value) ) {
		setfocus('username');
		alert('Please enter your WMC username');	
		return;
	}
	else if( isEmpty(document.getElementById('password').value) ) {
		setfocus('password');
		alert('Please enter your account password');	
		return;
	}
	
	$account_status = VerifyMembership( document.getElementById('username').value, 
						document.getElementById('password').value);

	/*
	if ( isEmpty($account_status) ) {
		alert('We were unable to verify your login credentials. Would you like to try again?');	
		return;	
	}
	else if ( $account_status == 'active' ) { //BUG this code repeats again, because this block doesn't get executed
		ShowLayer('member_status');
		ShowLayer('misc_questions');
		ShowLayer('user_info');	
	}
	else {
		alert('Sorry, We were unable to find a current membership for you. Perhaps try renewing your membership or select the Non Member Option');	
		return;	
	}

	/*Temp BUG FIX*/
	ShowLayer('member_status');
	ShowLayer('misc_questions');
	ShowLayer('user_info');	
}

function PopulateForm( fname , lname , addr1 , addr2 , city , state , zip , email , phone , status, member_id) {
	document.getElementById("name").value = fname + " " + lname;
	document.getElementById("addr1").value = addr1;
	document.getElementById("addr2").value = addr2;
	document.getElementById("city").value = city;
	document.getElementById("state").value = state;	
	document.getElementById("zip").value = zip;			
	document.getElementById("email").value = email;
	document.getElementById("phone").value = phone;		
	document.getElementById("member_id").value = member_id;		
	
	
	if( status == 'active')
	{
		DisableLogin();		
		document.getElementById("txtStatusMessage").innerHTML= "Welcome "+fname+", Your membership has been verified.";
	}
	else
	{
		document.getElementById("txtStatusMessage").innerHTML= "You do not have a Current WMC Membership";
	}

}

function DisableLogin() {
		document.getElementById('username').disabled = true;
		document.getElementById('password').disabled = true;	
		document.getElementById('btnVerifyLogin').value = 'Membership Verified';	
		document.getElementById('btnVerifyLogin').disabled = true;
		
		HideLayer('member_q');
		HideLayer('membership_login');
}
/*================================================*/
/*         AJAX functions for WMC                 */
/*================================================*/
//creating different XMLHTTP objects for different browsers.
function GetXmlHttpObject() {
	var xmlHttp=null;
	try
	{
  		// Firefox, Opera 8.0+, Safari
  		xmlHttp=new XMLHttpRequest();
  	}
	catch (e)
  	{
  		// Internet Explorer
  		try
    	{
    		xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    	}
  		catch (e)
    	{
    		xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    	}
  	}
	return xmlHttp;
}

//When state == 4, function has completed. Retrieve the data...
function VerifyMembership_stateChanged() { 
	var member_id = "";
	var fname = "";
	var lname = "";
	var addr1 = "";
	var addr2 = "";
	var city = "";
	var state = "";
	var zip = "";
	var email = "";
	var phone = "";
	var status = "";

	if (xmlHttp.readyState==4)
	{ 
		toUnserialize = xmlHttp.responseText; //Receive Serializes Array from Server 
        dataArr = PHP_Unserialize(toUnserialize); // explode using JS

		for (key in dataArr) 
		{
			switch (key)
			{
				case "fname":			
				fname = dataArr[key];
				break;

				case "lname":		
				lname = dataArr[key];	
				break;

				case "addr1":	
				addr1 = dataArr[key];		
				break;
				
				case "addr2":	
				addr2 = dataArr[key];		
				break;

				case "city":	
				city = dataArr[key];		
				break;

				case "state":	
				state = dataArr[key];		
				break;

				case "zip":	
				zip = dataArr[key];		
				break;

				case "email":	
				email = dataArr[key];		
				break;

				case "phone":	
				phone = dataArr[key];		
				break;

				case "status":	
				status = dataArr[key];		
				break;
				
				case "member_id":
				member_id = dataArr[key];		
				break;
				
			}
        }
		
		PopulateForm( fname , lname , addr1 , addr2 , city , state , zip , email , phone , status, member_id);
	}
	return status;
}

function VerifyMembership(login, pass)
{
	if ( (login.length==0) || (pass.length==0) ) { 
  		return;
 	}
	
	xmlHttp=GetXmlHttpObject();
	if (xmlHttp == null) {
  		alert ("Your browser does not support AJAX!");
  		return;
  	} 
	
	var url="LodgeAjaxLib.php";
	url= url + "?func=VerifyMembership&u=" + login + "&p=" + pass;
	
	xmlHttp.onreadystatechange = VerifyMembership_stateChanged;
	xmlHttp.open("GET",url,true); //True = asynchronous call, False = synchronous call
	xmlHttp.send(null);
}

function ShowDateInWords(date_str) {
	xmlHttp = GetXmlHttpObject();
	if (xmlHttp == null) {
  		alert ("Your browser does not support AJAX!");
  		return;
  	} 
	
	var url="LodgeAjaxLib.php";
	url= url + "?func=GetDateInWords&date=" + date_str;
	
	xmlHttp.open("GET", url, false); //True = asynchronous call, False = synchronous call
	xmlHttp.send(null);
	return xmlHttp.responseText;
}

function ShowDateDifferenceInWords(date_str1, date_str2) {
	xmlHttp = GetXmlHttpObject();
	if (xmlHttp == null) {
  		alert ("Your browser does not support AJAX!");
  		return;
  	} 
	
	var url="LodgeAjaxLib.php";
	url= url + "?func=ShowDateDifferenceInWords&date1=" + date_str1 + "&date2=" + date_str2;
	
	xmlHttp.open("GET", url, false); //True = asynchronous call, False = synchronous call
	xmlHttp.send(null);
	return xmlHttp.responseText;
}


function GetRentalFee(member_id, date_str1, date_str2, mem_status, type) {
	xmlHttp = GetXmlHttpObject();
	if (xmlHttp == null) {
  		alert ("Your browser does not support AJAX!");
  		return;
  	} 
	
	var url="LodgeAjaxLib.php";
	url = url + "?func=GetRentalFee&member_id=" + member_id + "&date1=" + date_str1 + "&date2=" + date_str2 + "&mem_status=" + mem_status + '&type=' + type;
	
	//xmlHttp.onreadystatechange = GetRentalFee_stateChanged;
	xmlHttp.open("GET", url, false); //True = asynchronous call, False = synchronous call
	xmlHttp.send(null);
	return xmlHttp.responseText;
}

function GetParameterValue(key) {
	xmlHttp = GetXmlHttpObject();
	if (xmlHttp == null) {
  		alert ("Your browser does not support AJAX!");
  		return;
  	} 
	
	var url="LodgeAjaxLib.php";
	url= url + "?func=GetParameterValue&key=" + key ;
	
	xmlHttp.open("GET", url, false); //True = asynchronous call, False = synchronous call
	xmlHttp.send(null);
	return xmlHttp.responseText;
}
