/**************************************************************************************
* File: dataServices.js
*
* These are the backend data service calls to retrieve data for the UI.
*
***************************************************************************************/

//var DataServiceBackEnd.DUMMY_DATA = true;
//var GAME_SERVER_URL = "/vbgame/gameserver.htm";

var DataServiceBackEnd = {
	DUMMY_DATA:false,

	GAME_SERVER_URL:"/vbgame/gameserver.htm",
	
	toString:function () {
		return "DUMMY_DATA: " + this.DUMMY_DATA + ", GAME_SERVER_URL: " + this.GAME_SERVER_URL;
	}
};

/****************************************************************
*
* "GET_EMAIL_CONTACT_LIST" User From Game Server Data
*
*****************************************************************/


function getEmailContactList ( callback, userEmail, userEmailPassword ) {
	var requestXML = "<vbrequest code='GET_EMAIL_CONTACT_LIST' userEmail='" + userEmail + "' userEmailPassword='" + userEmailPassword + "' />";
	var url = "/videocube/getEmailContactList.jsp"; //DataServiceBackEnd.GAME_SERVER_URL; // "./dummyData/getUserInfo.xml"
	
	
//alert ( "NOT USING DUMMY" );

	///DataServiceBackEnd.GAME_SERVER_URL;
	//if ( DataServiceBackEnd.DUMMY_DATA ) {
	//url = "./dummyData/getEmailContacts.xml"
	//}
	
	var expectedResponseCodes = [
		"GET_EMAIL_CONTACT_LIST_OK", "GET_EMAIL_CONTACT_LIST_ERROR"
	]
	
//alert ( "FOO" );


	callDataService ( requestXML, WebEmailContactListResponse, url , callback, expectedResponseCodes );
}



/****************************************************************
*
* "GET_USER_STATS" User From Game Server Data
*
*****************************************************************/


function getUserStats ( callback, userId ) {
	var requestXML = "<vbrequest code='GET_USER_STATS' pjuid='" + userId + "' origin='site' />";
	var url = DataServiceBackEnd.GAME_SERVER_URL; // "./dummyData/getUserInfo.xml"
	
	///DataServiceBackEnd.GAME_SERVER_URL;
	if ( DataServiceBackEnd.DUMMY_DATA ) {
		url = "./dummyData/getUserStats.xml"
	}
	
	var expectedResponseCodes = [
		"GET_USER_STATS_OK"
	]
	
	callDataService ( requestXML, GetUserStatsResponse, url , callback, expectedResponseCodes );
}



/****************************************************************
*
* "LOGOUT" User From Game Server Data
*
*****************************************************************/


function logOutFromGameServer ( callback ) {
	var requestXML = "<vbrequest code='LOGOUT' />";
	var url = DataServiceBackEnd.GAME_SERVER_URL; // "./dummyData/getUserInfo.xml"
	
	///DataServiceBackEnd.GAME_SERVER_URL;
	//if ( DataServiceBackEnd.DUMMY_DATA ) {
	//	url = "./dummyData/getDrawingWinners.xml"
	//}
	
	var expectedResponseCodes = [
		"OK"
	]
	
	callDataService ( requestXML, LogOutUserFromGameServerResponse, url , callback, expectedResponseCodes );
}




/****************************************************************
*
* "GET_USER" Data
*
*****************************************************************/


function getUserInfo ( callback ) {
	var requestXML = "<vbrequest code='GET_USER' />";
	var url = DataServiceBackEnd.GAME_SERVER_URL; // "./dummyData/getUserInfo.xml"
	
	///DataServiceBackEnd.GAME_SERVER_URL;
	//if ( DataServiceBackEnd.DUMMY_DATA ) {
	//	url = "./dummyData/getDrawingWinners.xml"
	//}
	
	var expectedResponseCodes = [
		"GET_USER_OK", "UNREGISTERED_USER"
	]
	
	callDataService ( requestXML, GetUserInfoResponse, url , callback, expectedResponseCodes );
}





/****************************************************************
*
* "LANDING PAGE HIT GAMES" Data
*
*****************************************************************/
function getLandingPageHitGames ( callback ) {
	var requestXML = "<vbrequest code='GET_LANDING_PAGE_HIT_GAMES' />";
	var url = "./data/getLandingPageHitGames.xml"
	
	///DataServiceBackEnd.GAME_SERVER_URL;
	//if ( DataServiceBackEnd.DUMMY_DATA ) {
	//	url = "./dummyData/getDrawingWinners.xml"
	//}
	
	var expectedResponseCodes = [
		"GET_LANDING_PAGE_HIT_GAMES_OK"
	]
	
	
	
	callDataService ( requestXML, LandingPageHitGamesResponse, url , callback, expectedResponseCodes );
}



/****************************************************************
*
* "Drawing Winners" Data
*
*****************************************************************/
function getDrawingWinners ( callback ) {
	var requestXML = "<vbrequest code='GET_DRAWING_WINNERS' />";
	var url = DataServiceBackEnd.GAME_SERVER_URL;
	if ( DataServiceBackEnd.DUMMY_DATA ) {
		url = "./dummyData/getDrawingWinners.xml"
	}
	
	var expectedResponseCodes = [
		"GET_DRAWING_WINNERS_OK"
	]
	callDataService ( requestXML, DrawingWinnersResponse, url , callback, expectedResponseCodes );
}

/****************************************************************
*
* Winning Questions Data
*
*****************************************************************/
function getSubmitQuestionWinner( callback ) {
	var requestXML = "<vbrequest code='GET_SUBMIT_QUESTION_WINNER' />";
	var url = DataServiceBackEnd.GAME_SERVER_URL;
	if ( DataServiceBackEnd.DUMMY_DATA ) {
		url = "./dummyData/getSubmitQuestionWinner.xml"
	}
	
	var expectedResponseCodes = [
		"GET_SUBMIT_QUESTION_WINNER_OK"
	]
	callDataService ( requestXML, WinningQuestionResponse, url , callback, expectedResponseCodes );
}



/****************************************************************
*
* "HIT" Questions List
*
*****************************************************************/
function getHitQuestions ( callback ) {
	var requestXML = "<vbrequest code='GET_HIT_QUESTIONS' />";
	var url = DataServiceBackEnd.GAME_SERVER_URL;
	if ( DataServiceBackEnd.DUMMY_DATA ) {
		url = "./dummyData/getHitQuestions.xml"
	}
	
	var expectedResponseCodes = [
		"GET_HIT_QUESTIONS_OK"
	]
	callDataService ( requestXML, HitQuestionsResponse, url , callback, expectedResponseCodes );
}




/****************************************************************
*
* "Recent Qualifiers" Data
*
*****************************************************************/
function getQualifiers ( callback ) {
	
	// alert ( "RECEIVED CALL" );
	
	var requestXML = "<vbrequest code='GET_QUALIFIERS' />";
	var url = DataServiceBackEnd.GAME_SERVER_URL;
	if ( DataServiceBackEnd.DUMMY_DATA ) {
		url = "./dummyData/getRecentQualifiers.xml";
	}
	
	var expectedResponseCodes = [
		"GET_QUALIFIERS_OK"
	]
	
	// alert ( "ABOUT TO CALL" );
	
	callDataService ( requestXML, QualifiersResponse, url , callback, expectedResponseCodes );
}


/****************************************************************
*
* "High Scores" Data
*
*****************************************************************/
function getHighScores ( callback ) {
	
	var requestXML = "<vbrequest code='GET_HIGH_SCORES' origin='site' />";
	var url = DataServiceBackEnd.GAME_SERVER_URL;
	if ( DataServiceBackEnd.DUMMY_DATA ) {
		url = "./dummyData/getHighScores.xml"
	}
	
	var expectedResponseCodes = [
		"GET_HIGH_SCORES_OK"
	]
	callDataService ( requestXML, HighScoresResponse, url , callback, expectedResponseCodes );
}


/****************************************************************
*
* "Hit Games" Data
*
*****************************************************************/
function getHitGameInfo ( callback ) {
	
	var requestXML = "<vbrequest code='GET_HIT_GAME_INFO' />";
	var url = DataServiceBackEnd.GAME_SERVER_URL;
	if ( DataServiceBackEnd.DUMMY_DATA ) {
		url = "./dummyData/getHitGameInfo.xml"
	}
	
	var expectedResponseCodes = [
		"GET_HIT_GAME_INFO_OK"
	]
	callDataService ( requestXML, HitGameInfoResponse, url , callback, expectedResponseCodes );
}


function getFirstNonProcessingChild ( element ) {
	
//alert ( "CALLED: getFirstNonProcessingChild " );

	var firstChild = element.firstChild;
	
//alert ( "FIRST CHILD: " + firstChild );

	// If not a processing instruction, this is it!
	if ( firstChild.nodeType != 7 ) {
		return firstChild;
	}
	
	var children =element.childNodes;
    for (i=0;i<children.length;i++) {
		var child = children[i];
		if ( child.nodeType != 7 ) {
			firstChild = child;
			break;
		}
	}
	
	return firstChild;
}


/****************************************************************
*
* Data Services Infrastructure
*
*****************************************************************/

function callDataService ( requestXML, responseClass, endPointURL, callback, expectedResponseCodes ) {


//alert ( " callDataService called, " + callback.extraData );

   var ajaxCallParms = { 
      method: 'post',
	  
	  postBody:requestXML,
	  
      onComplete: function ( originalRequest ) {
	 
		try {
	
	      var errStringPreStuff = "";
		  
		  
	     // errStringPreStuff += " originalRequest: " + originalRequest;
		  errStringPreStuff += " invalid XML returned by server = \"" + originalRequest.responseText + "\"";
	
			var genericResponse = new GenericResponse ();
			genericResponse.parseXML ( getFirstNonProcessingChild (originalRequest.responseXML) ); // originalRequest.responseXML.firstChild );
			
	//errStringPreStuff += "SURVIVED PARSE" ;	
			
			var isExpectedResponseCode = false;
			for ( var idx = 0; idx < expectedResponseCodes.length; idx++ ) {
				var expectedCode = expectedResponseCodes[idx];
				if ( genericResponse.code == expectedCode ) {
					isExpectedResponseCode = true;
					break;
				}
			}
			
	// alert ( "BLA isExpectedResponseCode: " + isExpectedResponseCode );
			
			if ( !isExpectedResponseCode ) {
				alert ( "*** SERVER ERROR ***  code from server=\"" + genericResponse.code + "\" message from server: \"" + genericResponse.msg + "\"" );
			   // alert ( "REQUEST: " + requestXML );
			//	alert ( "EXPECTED RESONSES: " + expectedResponseCodes.length );
				//for ( var idx = 0; idx < expectedResponseCodes.length; idx++ ) {
				//   var expectedCode = expectedResponseCodes[idx];
				//   alert ( "EXPECTED CODE: " + expectedCode );
			   //  }
			
			} else {
			
			// alert ( "GOT DATA" );
			
			//errStringPreStuff += "THINKS ALL IS OK";
			
	//alert ( "ABOUT TO GET RESPONSE CLASS" );
	
			   var responseObject = new responseClass ();
			   
// alert ( " responseObject: "  + responseObject );

			   responseObject.parseXML (  getFirstNonProcessingChild (originalRequest.responseXML) ); //originalRequest.responseXML.firstChild );
			   
			//errStringPreStuff += "SURVIVED THAT";
			  
			// alert ( "CALL DATA SERVICE, callback.extraData: " ); //+ callback.extraData );
			
//	alert ( "ABOUT TO CALL CALLBACK" );
			  
			   callback ( responseObject, originalRequest.responseText , callback.extraData );
			   
			 //  errStringPreStuff += " SURVIVED CALL TO CALLBACK ";
			}
		} catch ( exc ) {
			//alert ( "EXC: " + exc );
			//alert ( "*** DATA ERROR *** " + errStringPreStuff );
			//var errorString = "";
			//for ( p in exc ) {
			//	errorString += (p + " : [" + exc[p] + "], ");
			//}
		    //alert ( "DATA ERROR? DEBUG STR [" + errStringPreStuff + "] EXCEPTION " + errorString );
		}	

      } 
	};
				 
	/**
	* Append a unique id to the end of this call.  This is in an attempt to prevent any Ajax caching.
	*/
	endPointURL += ( "?uniqueCallId=" + getNextUniqueCallId () );
	
	//alert ( "END POINT: " + endPointURL );
	
	
    myAjax = new Ajax.Request( endPointURL, ajaxCallParms );
	
}

/****************************************************************
*
* "SEND USER FEEDBACK"
*
*****************************************************************/

function dataService_userFeedback ( callback, emailAddress, feedback ) {
	var requestXML = "<vbrequest code='USERFEEDBACK' fromAddr='" + emailAddress + "' comments=" + "'" + feedback + "' />";
	var url = DataServiceBackEnd.GAME_SERVER_URL;
       if ( DataServiceBackEnd.DUMMY_DATA ) {
			url = "./dummyData/RateQuestionOk.xml"; 
		   }
    var expectedResponseCodes = [                                
				"OK"
		   ]

	callDataService ( requestXML, GenericResponse, url , callback, expectedResponseCodes );

}


/****************************************************************
*
* "INVITE PEOPLE TO THE SITE"
*
*****************************************************************/
	
function dataService_emailInvites ( callback, pjuid, name, origin, toEmailAddresses, message, landingPageUrl ) {
	var requestXML = "<vbrequest code='EMAIL_INVITES' pjuid='" + pjuid + "' name='" + name + "' origin='" + origin + "' to=" + "'" + toEmailAddresses + "' "
	requestXML += " message='" + message + "' url='" + landingPageUrl + "' />";
	var url = DataServiceBackEnd.GAME_SERVER_URL;
      
	if ( DataServiceBackEnd.DUMMY_DATA ) {
		url = "./dummyData/RateQuestionOk.xml"; 
    }
    var expectedResponseCodes = [ "OK" ]

	callDataService ( requestXML, GenericResponse, url , callback, expectedResponseCodes );

}


