﻿var ControlManager = new function() {
	
	this.baseUrl;
	this.listeners = [];
	this.loc_strings = {};
	
	this.callRemoteControl = function( oRequest ){
			if ( typeof oRequest.data == 'undefined' ) {
				oRequest.data = {};
			}
			if ( typeof oRequest.type == 'undefined' ) {
				oRequest.type = 'POST';
			}
			if ( typeof oRequest.dataType == 'undefined' ) {
				oRequest.dataType = 'html';
			}
			if ( typeof oRequest.callback == 'undefined' ) {
				oRequest.callback = false;
			}
			if ( typeof oRequest.container == 'undefined' ) {
				oRequest.container = false;
			}
			
			$('body').mask("Loading...");
			
			$.ajax({
				type: oRequest.type,
				url: this.baseUrl+'?'+oRequest.controlUrl,
				success: function(data, textStatus, XMLHttpRequest){
					$('body').unmask();
					if ( oRequest.container ) {
						$(oRequest.container).html( data );
					}
					
					if ( oRequest.callback ) {
						oRequest.callback( data, textStatus, XMLHttpRequest );
					}
				}, 
				error: function(data, textStatus, XMLHttpRequest){
					$('body').unmask();
					this.showDialog( self.getLocString('Error'), self.getLocString('Error request to the server. Try again') );
				},
				dataType: oRequest.dataType,
				data: oRequest.data
		});
	
	};

    this.dispatchEvent = function ( eventName, params, eventDispatcherClass, eventListenerClass ) {
    	
    	for ( var i in this.listeners) {
			
			if ( this.listeners[i].event == eventName ) {
				
				if ( (typeof eventDispatcherClass != 'undefined') && (typeof eventListenerClass != 'undefined') ) {
					if ( ( this.listeners[i].dispatcher == eventDispatcherClass ) && ( this.listeners[i].listener == eventListenerClass ) ) {
						this.listeners[i].handler( params );
					}
					continue;
				} else if ( (typeof eventDispatcherClass != 'undefined') && (typeof eventListenerClass == 'undefined') ) {
					if ( ( this.listeners[i].dispatcher == eventDispatcherClass ) ) {
						this.listeners[i].handler( params );
					}
					continue;
				} else if ( (typeof eventDispatcherClass == 'undefined') && (typeof eventListenerClass != 'undefined') ) {
					if ( ( this.listeners[i].listener == eventListenerClass ) ) {
						this.listeners[i].handler( params );
					}
					continue;
				} else {
					this.listeners[i].handler( params );
					continue;
				}
			}
		}
    	
    }; 
    
    this.addListener = function ( eventName, handler, eventDispatcherClass, eventListenerClass ) {
    	
    	var oListener = {};
    	oListener.event = eventName;
    	oListener.handler = handler;
    	
    	if ( (typeof eventDispatcherClass != 'undefined') ) {
    		oListener.dispatcher = eventDispatcherClass;
		} else {
			oListener.dispatcher = false;
		}
    	
    	if ( (typeof eventListenerClass != 'undefined') ) {
    		oListener.listener = eventListenerClass;
		} else {
			oListener.listener = false;
		}
    	
    	this.listeners.push( oListener );
    };
    
    this.showDialog = function( title, message ){
    	
    	if ( $('#dialogs').length == 0 ) {
			$('body').append('<div id="dialogs"></div>');
		}
    	
    	$('#dialogs').append( message ).dialog({
    		modal: true, 
			title: title, 
			resizable: false,
			draggable: false,
			close: function(){$('#dialogs').remove();},
			buttons: { "Close": function(){$('#dialogs').dialog( "destroy" ).remove();} }
		});
    };
    
    this.addTranslations = function( aTranslations ){
    	
    	for ( var key in aTranslations) {
    		if ( typeof this.loc_strings[key] == 'undefined' ) {
    			this.loc_strings[key] = aTranslations[key];
			}
		}
    	
    };
    
    this.getLocString = function( key ){
    
    	if ( this.loc_strings[key] ) {
			return this.loc_strings[key];
		}
    
    	return key;
    };
};
