// -----------------------------------------------------
// 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( talkNowSearchPattern, availableCallback ) {
	new Ajax.Request(proxyURL , {
		method: 'post',
		parameters: 'url=' + lekaneServerURL + '/lekane/TalkNowStatus' + '&cmd=availability&deployment=' + encodeURIComponent(talkNowDeploymentId) + '&searchPattern=' + encodeURIComponent(talkNowSearchPattern),
	  	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( talkNowSearchPattern, talkNowData, talkNowMetadata, talkNowRequestCallback ) {
	var dataParams = createParameterStr( talkNowData );
	var metadataParams = createParameterStr( talkNowMetadata );
	
	new Ajax.Request(proxyURL , {
		method: 'post',
		parameters: 'url=' + lekaneServerURL + '/lekane/TalkNow3' + '&searchPattern=' + encodeURIComponent( talkNowSearchPattern ) + '&pid=' + getCookie( "_ltrp" ) + '&sid=' + getCookie( "_ltrs" ) + '&p=' + pageId + '&template=' + talkNowTemplate + '&entity=' + talkNowEntityId + '&deployment=' + encodeURIComponent( talkNowDeploymentId ) + '&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("|");
				talkNowRequestCallback( response[0], response[1], response[2] );
			} else {
				talkNowRequestCallback( 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( talkNowSearchPattern, talkNowWhoIsAvailableCallback ) {
	new Ajax.Request(proxyURL , {
		method: 'post',
		parameters: 'url=' + lekaneServerURL + '/lekane/TalkNowStatus' + '&cmd=details&deployment=' + encodeURIComponent(talkNowDeploymentId) + '&searchPattern=' + encodeURIComponent(talkNowSearchPattern),
	  	onSuccess: function( responseDetails ) {
	  		var availableArray = null;
	  		if( null != responseDetails.responseText  && responseDetails.responseText.length > 0 ) {
				availableArray = responseDetails.responseText.strip(); 
			}
	  		talkNowWhoIsAvailableCallback( availableArray );
		},
		onException: function(req, e) {
	    	//
	  	} 
	});
}

function getOfferDetails( talkNowPersonalOfferCallback ) {
	new Ajax.Request(proxyURL , {
		method: 'post',
		parameters: 'url=' + lekaneServerURL + '/lekane/TalkNowStatus' + '&cmd=offer' + '&pid=' + getCookie( "_ltrp" ) + '&sid=' + getCookie( "_ltrs" ) + '&p=' + pageId + '&deployment=' + encodeURIComponent(talkNowDeploymentId),
	  	onSuccess: function( responseDetails ) {
	  		var response = null;
	  		
	  		if( null != responseDetails.responseText  && responseDetails.responseText.length > 0 ) {
				response = responseDetails.responseText.strip().split("|");
				talkNowPersonalOfferCallback( response[0], response[1], response[2] );
			} else {
				talkNowPersonalOfferCallback( 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] ) : '-';
}

function getVal( variable ) {
	return typeof(variable) === 'undefined' ? '' : variable;
}

