// JavaScript Document
var dyn 				= /dyn_(\d*?)_/i
var proxyURL			= new String( "themeproxy.php" );
var waitImage			= new String(  "<img src='templates/system/visual/images/wait.gif'>" );
var suggestionTimer;
var suggestionCache;
var suggestionsShown	= 0;
var	suggestionsClicked	= 0;

/**
 * Fetch a form radio select value
 */
function getRadioValue( controlName, formObj ){	

	if( formObj )		
		for( var i = 0 ; i < formObj[controlName].length ; i++ )
			if( formObj[controlName][i].checked )
				return formObj[controlName][i].value;
		
	return null;
}

/**
 * JSON decoder
 */
function decode(json){
	return eval("(" + json + ')');
};

/**
 * Fetch a form select value
 */
function getSelectValue( selectObj ){
	for( var i = 0 ; i < selectObj.options.length ; i++ )
		if( selectObj.options[i].selected )
			return selectObj.options[i].value;
			
	return null;
}

/**
 * Retrieve dynamic entries whose values start with dyn_x_
 */
function ticketFormDynamicSelect( fieldName ){
	
	var result  = dyn.exec( getSelectValue( Ext.get( fieldName ).dom ) );
	var	dynid	= 0;
	if( result && result[1] )
		dynid	= result[1];

	var explode		= fieldName.split( "_" );
	var block 		= Ext.get( 'cformexpand_' + explode[1] );
	
	if( dynid )
		block.update( waitImage );
	else
		block.update( "" );
	
	
	// fire the request
	var c = new Ext.data.Connection();
	c.request({
		url: proxyURL,
		method: 'post',
		params: { action: 'ticket_dynamicform', trigger: fieldName, valueTrigger: dynid, category : ticket_category },
		headers: { 'Accept' : 'application/json' },
		callback: function( options, success, transport ){
			if( success ){
				if( dynid ){
					var json = decode( transport.responseText );
					block.update( json.text );
				}
			}
			else{
				ticketFormDynamicSelect( fieldName );	
			}
		}				  
	});				
}

/**
 * Trigger the alteration of the ticket form based on dynamic field activity
 */
function ticketFormDynamicRadio( fieldName ){
	var dyn 	= /dyn_(\d*?)_/i
	var value	= getRadioValue( fieldName, Ext.get( 'ticket_form' ).dom );
	
	if( value ){
		var result  = dyn.exec( value );
		var	dynid	= 0;
		if( result && result[1] )
			dynid	= result[1];
		
		// fire the request
		var c = new Ext.data.Connection();
		c.request({
			url: proxyURL,
			method: 'post',
			params: { action: 'ticket_dynamicform', trigger: fieldName, valueTrigger: dynid, category : ticket_category },
			headers: { 'Accept' : 'application/json' },
			callback: function( options, success, transport ){
				if( success ){
					var json = decode( transport.responseText );
					if( json.parent ){
						var x = Ext.get( 'cformexpand_' + json.parent );
						x.update( json.text );
						x.setVisible( true, true );
					}
				}
				else{
					ticketFormDynamicRadio( fieldName );
				}	
			}				  
		});			
	}
}

function ticketFormDynamicCheckbox( fieldName ){
	var	dynid	= 0;
	
	if( Ext.get( fieldName ).dom.checked ){
		var dyn 	= /dyn_(\d*?)_/i
		var result  = dyn.exec( Ext.get( fieldName ).dom.value );
		if( result && result[1] )
			dynid	= result[1];
	}
		
		
	// fire the request
	var c = new Ext.data.Connection();
	c.request({
		url: proxyURL,
		method: 'post',
		params: { action: 'ticket_dynamicform', trigger: fieldName, valueTrigger: dynid, category : ticket_category },
		headers: { 'Accept' : 'application/json' },
		callback: function( options, success, transport ){
			if( success ){
				var json = decode( transport.responseText );
				if( json.parent ){
					var x = Ext.get( 'cformexpand_' + json.parent );
					x.update( json.text );
					x.setVisible( true, true );
				}
			}
			else{
				ticketFormDynamicCheckbox( fieldName );
			}	
		}				  
	});	
}

/**
 * Check to see if an email address exists
 */
function ticketEmailUserCheck(){
	// fire the request
	var c = new Ext.data.Connection();
	c.request({
		url: proxyURL,
		method: 'post',
		params: { action: 'ticket_emailcheck', email: Ext.get( 'email' ).getValue() },
		headers: { 'Accept' : 'application/json' },
		callback: function( options, success, transport ){
			if( success ){
				if( !transport.responseText )
					return;
				
				var json = decode( transport.responseText );
				if( json.exists ){
					Ext.get( 'undiv' ).setVisible( false, true );
					Ext.get( 'username' ).dom.value = "";
				}
				else{
					if( !Ext.get( 'undiv' ).isVisible() ){
						Ext.get( 'undiv' ).setVisible( true, true );
						Ext.get( 'username' ).focus();
					}
				}
			}
			else{
				ticketEmailUserCheck();
			}	
		}				  
	});				
}

function showValidationWarning( tid ){
	ticketPanel.body.load({
		url: 'index.php',
		method: 'post',
		params: { tsrc: 'ticket_send_validate', "tid" : tid },
		callback: function( oElement, bSuccess, oResponse ){
			if( !bSuccess )
				showValidationWarning( tid );
		}		
	});	
}


function showTicketConfirmation( ticketID, authkey ){
	ticketPanel.body.load({
		url: 'index.php',
		method: 'post',
		params: { tsrc: 'ticket_send_confirm', tid: ticketID, "authkey": authkey },
		callback: function( oElement, bSuccess, oResponse ){
			if( !bSuccess )
				showTicketConfirmation( ticketID, authkey );
		}		
	});	
}



function ticketSuggestionEngine(){
	var mField		= Ext.get( 'message' );
	
	if( !mField ){
		suggestionTimer = setTimeout( ticketSuggestionEngine, 3000 );
		return;		
	}
		
	var mText 	= mField.getValue();
	
	if( mText && mText != suggestionCache ){
		suggestionCache = mText;
		ticketSuggestionRequest( suggestionCache );	
	}
	else{
		suggestionTimer = setTimeout( ticketSuggestionEngine, 3000 );
	}
}


function ticketSuggestionRequest( text ){
	Ext.get( 'wait_icon' ).update( waitImage );
	var c = new Ext.data.Connection();
	c.timeout = 8000;
	c.request({
		url: proxyURL,
		method: 'post',
		params: { action: 'ticket_suggestion_list', "text": text },
		headers: { 'Accept' : 'application/json' },
		callback: function( options, success, transport ){
			if( success ){
				var json = decode( transport.responseText );
				if( json.result ){					
					if( json.result == 'noresult' ){
						Ext.get( 'suggestion_area' ).update( "" );
					}
					else if( json.result != "nochange" ){		
						suggestionsShown = json.total;
						Ext.get( 'suggestion_area' ).update( json.text );											
					}
				}
				Ext.get( 'wait_icon' ).update( "" );
				suggestionTimer = setTimeout( ticketSuggestionEngine, 3000 );
			}
			else{
				ticketSuggestionRequest( text )	
			}
		}				  
	});	
}

function validateTicketForm(){
	var errors = "";
	for( value in required ){
		if( !Ext.get( value ) )
			continue;
			
		var type  = required[value];			
		var regex = /^e_(\d*?)_(.*?)$/i
		var	list  = regex.exec( value );
		var name  = list[2];
		
		switch( type ){			
			case 'radio':
				if( !getRadioValue( value, Ext.get( 'ticket_form' ).dom ) )
					errors += '\n- ' + jsl.validate_select + ' \'' + name + '\'.';					
			break;
			
			case 'checkbox':
				if( !Ext.get( value ).dom.checked )
					errors += '\n- ' + jsl.validate_check + ' \'' + name + '\' checkbox.';			
			break;
			
			case 'select':
				if( !getSelectValue( Ext.get( value ).dom ) )
					errors += '\n- ' + jsl.validate_select + ' \'' + name + '\'.';			
			break;
			
			default:
				if( Ext.get( value ).dom.value.length == 0 )
					errors += '\n- ' + jsl.validate_field_1 + ' \'' + name + '\' ' + jsl.validate_field_2;
			break;
		}
	}
	
	if( Ext.get('subject').getValue().length == 0 || Ext.get('message').getValue().length == 0 )
		errors += '\n- ' + jsl.validate_subject_message;

	if( errors.length > 0 ){
		alert( jsl.validate_errors + "\n\n" + errors );
		return false;
	}

	return true;	
}


Ext.onReady( function(){
	suggestionTimer = setTimeout( ticketSuggestionEngine, 3000 );						
});