// -----------------------------------------------------
// Lekane TalkNow
// Copyright Lekane 2010
// Version 3
// -----------------------------------------------------

/****************************** MAIN METHODS *************************************/

/**
 * Request to see if someone is available.
 * The server's response of true or false is passed to the availableCallback method.
 * @param searchPattern the pattern defining which users to target
 * @param availableCallback the function to call with the response.
 */
function isAvailable( searchPattern, availableCallback ) {
	new Ajax.Request(proxyURL , {
		method: 'post',
		parameters: 'url=' + lekaneServerURL + '/lekane/TalkNowStatus' + '&cmd=availability&deployment=' + encodeURIComponent(deploymentId) + '&searchPattern=' + encodeURIComponent(searchPattern),
	  	onSuccess: function( responseDetails ) {sidebar
	  		var available = -1 != responseDetails.responseText.indexOf('true');
			availableCallback( available );
		},
		onException: function(req, e) {
	    	 //
	  	} 
	});
}

/**
 * Send a call request
 * @param searchPattern the pattern defining which users to target
 * @param data[][] a 2xn dimensional array containing key - value data to send
 * @param requestCallback the function to call with the response
 */
function sendCallRequest( searchPattern, data, metadata, requestCallback ) {
	var dataParams = createParameterStr( data );
	var metadataParams = createParameterStr( metadata );
	
	new Ajax.Request(proxyURL , {
		method: 'post',
		parameters: 'url=' + lekaneServerURL + '/lekane/TalkNow3' + '&searchPattern=' + encodeURIComponent(searchPattern) + '&pid=' + getCookie( "_ltrp" ) + '&sid=' + getCookie( "_ltrs" ) + '&p=' + pageId + '&deployment=' + encodeURIComponent(deploymentId) + '&data=' + encodeURIComponent(dataParams) + '&metadata=' + encodeURIComponent(metadataParams),
	  	onSuccess: function( responseDetails ) {
	  		var response = null;
	  		
	  		if( null != responseDetails.responseText  && responseDetails.responseText.length > 0 ) {
				response = responseDetails.responseText.strip().split("|");
				requestCallback( response[0], response[1], response[2] );
			} else {
				requestCallback( null, null, null );
			}
		},
		onException: function(req, e) {
	    	 //
	  	} 
	});
}

/**
 * Request for who is available.
 * The server's responds with an array of available user unique search patterns and names which are passed to the whoIsAvailableCallback method
 * @param searchPattern the pattern defining which users to target
 * @param whoIsAvailableCallback the function to call with the response.
 */
function whoIsAvailable( searchPattern, whoIsAvailableCallback ) {
	new Ajax.Request(proxyURL , {
		method: 'post',
		parameters: 'url=' + lekaneServerURL + '/lekane/TalkNowStatus' + '&cmd=details&deployment=' + encodeURIComponent(deploymentId) + '&searchPattern=' + encodeURIComponent(searchPattern),
	  	onSuccess: function( responseDetails ) {
	  		var availableArray = null;
	  		if( null != responseDetails.responseText  && responseDetails.responseText.length > 0 ) {
				availableArray = responseDetails.responseText.strip(); 
			}
			whoIsAvailableCallback( availableArray );
		},
		onException: function(req, e) {
	    	//
	  	} 
	});
}

function getPersonalOfferDetails( personalOfferCallback ) {
	new Ajax.Request(proxyURL , {
		method: 'post',
		parameters: 'url=' + lekaneServerURL + '/lekane/TalkNowStatus' + '&cmd=personal' + '&pid=' + getCookie( "_ltrp" ) + '&sid=' + getCookie( "_ltrs" ) + '&p=' + pageId + '&deployment=' + encodeURIComponent(deploymentId),
	  	onSuccess: function( responseDetails ) {
	  		var response = null;
	  		
	  		if( null != responseDetails.responseText  && responseDetails.responseText.length > 0 ) {
				response = responseDetails.responseText.strip().split("|");
				personalOfferCallback( response[0], response[1], response[2] );
			} else {
				personalOfferCallback( null, null, null );
			}
		},
		onException: function(req, e) {
	    	 //
	  	} 
	});
}

/****************************** HELPER METHODS *************************************/

function createParameterStr( paramArray ) {
	// Iterate through the passed in paramArray[][] and build a URL encoded param to send to server.
	var paramStr = '';
	var keyLength = paramArray[0].length;

	for ( i=0; i<keyLength; i=i+1 ) {
    	var currentKey = paramArray[0][i];
    	var currentValue = paramArray[1][i];
    	if ( currentValue.length == 0 ) {
    		currentValue = ' ';
    	}
    	if (i > 0) {
    		paramStr = paramStr + '|';
    	}
    	paramStr = paramStr + currentKey + '|' + currentValue;
	}	
	
	return paramStr;
}

function getCookie ( cookieName ) {
	var results = document.cookie.match ( '(^|;) ?' + cookieName + '=([^;]*)(;|$)' );
	return results ? unescape ( results[2] ) : '-';
}

