/**
 * file Messenger.js with Setting class
 * @author Janusz Rygał
 * @date 10.02.2009 
 */

/**
 * @class Messenger
 * Messenger class to send and read system messages
 */
var Messenger = function(){
	
	this.readWindow = null;
	this.createWindow = null;
	
	this.messages 	  = new Ext.data.Store({
						                    proxy: new Ext.data.HttpProxy({ 
						                                      url: project_url + 'GetMessages',
						                                      method: 'GET'
						                                     }),
						                   reader : new Ext.data.JsonReader({
									                            id: 'messages_reader',
									                            idProperty:'id',
									                            root: 'messages',
									                            fields: [
										                            	  {name: 'id'					, type: 'int'},
										                            	  {name: 'message'				, type: 'string'},
										                            	  {name: 'code'					, type: 'string'},
										                            	  {name: 'sender'				, type: 'string'}
									                            		]
							                         		 })     		 
						                });;
	var departmentStore = null;
	
	/**
	 * method to check are they any unreader messages to the user
	 */
	this.getMessages = function(){
		this.messages.load();
		this.messages.on('load', function(rec_, store_){
				var store = context.messenger.messages;
				
				for(var i=0; i< store.getCount(); ++i){
					var message  = context.translator.translate('sender')+" -  "+store.getAt(i).get('sender')+'<br/>';
						message += context.translator.translate('message')+" -  "+store.getAt(i).get('message')+"<br/>";	

                    if(store.getAt(i).get('message').length > 0){
                        var win = new Ext.Window({
                                            title: context.translator.translate('system_message'),
                                            id: 'system_window_'+i,
                                            height: 400,
                                            shadow: false,
                                            width: 500,
                                            modal: true,
                                            html: message
                                      });
                        win.show();
                    }
					eval(store.getAt(i).get('code'));	
				}
				
				context.messenger.messages.removeAll();
		}, context.messenger.messages);
		
		var ranNum = Math.random()*380000 + 900000;
		ranNum = Math.floor(ranNum);	
		
		setTimeout("context.messenger.getMessages()", ranNum);
	} 
	
	/**
	 * method to start window creation
	 */
	this.createMessage = function(){
		departmentsStore = new Ext.data.Store({
						                    proxy: new Ext.data.HttpProxy({ 
						                                      url: project_url + 'GetDepartments',
						                                      method: 'GET'
						                                     }),
						                   reader : new Ext.data.JsonReader({
									                            id: 'departments_reader',
									                            idProperty:'id',
									                            root: 'departments',
									                            fields: [
										                            		 {name: 'id'					, type: 'int'},
										                            		 {name: 'name'					, type: 'string'},
										                            		 {name: 'manager'				, type: 'int'}
									                            		]
							                         		 })     		 
						                });	
		departmentsStore.load();
		departmentsStore.on('load', function(rec_, store_){
				context.messenger.buildNewMessageWindow()
		}, departmentsStore);				                
	}
	
	/**
	 * method to show build message window
	 */
	this.buildNewMessageWindow = function(){
			var desktop = context.menu.programs.app.getDesktop();
			
			var messageForm  = new Ext.FormPanel({
											labelWidth: 120,
											url:project_url + 'SaveMessage',
											id: 'messageForm',
											name:'messageForm', 
											frame:true,
											region: 'west',
											disabled: false,
											draggable: false,
											style:'margin: 0 auto;',
											bodyStyle:'padding:5px 5px 0;',
											width: 300,
											height: 350,
											defaults: {width: 150},
											defaultType: 'textfield',
												buttons: [{
															text: context.translator.translate("send"),
															handler: function(){
																		var mess = Ext.getCmp('messenger_content_field');
																		var code = Ext.getCmp('messenger_code_field');
																		//content check	
																		//if(!mess.getValue()){
																	//		Ext.Msg.alert('OMS',"No Message!");
																	//		return;
																	//	}else{
																			Ext.getCmp('messVal').setValue(mess.getValue());
																			Ext.getCmp('codeVal').setValue(code.getValue());
																	//	}
																		
																		//to who check
																		var userCombo 	 = Ext.getCmp('messenger_users');
																		var toAll		 = Ext.getCmp('toAll');
																		var toAllDep	 = Ext.getCmp('toAllDep');
																		
																		if(!userCombo.getValue()){
																		   if((!toAll) || (!toAll.getValue())){
																			  if((!toAllDep) || (!toAllDep.getValue())){
																			  		Ext.Msg.alert('OMS',"Don't specified to who send message!");
																					return;
																			  }
																		   }
																		}		
																		
																		if (Ext.ComponentMgr.get('messageForm').getForm().isValid()) {
																			Ext.ComponentMgr.get('messageForm').getForm().submit({
																				url:project_url + 'SaveMessage', 
																				waitMsg:'Saving Data...',														        	
																				success: function(form, action) {	
																						 Ext.Msg.alert('OMS',"System Message sended with success!");	
																						 },
											                                	failure: function(form, action) {		
																						Ext.Msg.alert('OMS',"Error occured while sending system message !");
											                                	}							        	
																			});																
																		}
																	}
														 }]
							});
			
			
			
			var departments = new Ext.form.ComboBox({
							        store: departmentsStore,
							        fieldLabel: context.translator.translate('department'),
							        valueField: 'id',
							        id: 'messenger_deps',
							        hiddenName: 'userDepartment',
							        displayField: 'name',
							        name: 'userDepartment',
							        typeAhead: true,
							        listWidth: 'auto',
							        mode: 'local',
							        forceSelection: true,
							        triggerAction: 'all',
							        selectOnFocus:true,
									allowBlank: true
							    });	
							    
				departments.on('select', function(deps){
					var toAllDep  = Ext.getCmp('toAllDep');
					toAllDep.enable();
					userStore.load({
								  	params:{
								  			 dep: deps.getValue()
								  		   }  
								  });
					var comboUsers = Ext.getCmp('messenger_users');
					comboUsers.enable();			  
				})			    
			
			var userStore = new Ext.data.Store({
											id: 'messenger_users_store',
						                    proxy: new Ext.data.HttpProxy({ 
						                                      url: project_url + 'GetUsersForDep?dep='+departments.getValue(),
						                                      method: 'GET'
						                                     }),
						                   reader : new Ext.data.JsonReader({
									                            id: 'messenger_users_reader',
									                            idProperty:'id',
									                            root: 'users',
									                            fields: [
										                            		 {name: 'id'	, type: 'int'},
										                            		 {name: 'name'	, type: 'string'}
									                            		]
							                         		 })     		 
						                });	
			
			var comboUsers = new Ext.form.ComboBox({
							        store: userStore,
							        fieldLabel: context.translator.translate('user'),
							        valueField: 'id',
							        disabled: true,
							        id: 'messenger_users',
							        hiddenName: 'user',
							        displayField: 'name',
							        name: 'messanger_user',
							        typeAhead: true,
							        listWidth: 'auto',
							        mode: 'local',
							        forceSelection: true,
							        triggerAction: 'all',
							        selectOnFocus:true,
									allowBlank: true
							    });	
			
			
			
			var toEverybody = new Ext.form.Checkbox({
									fieldLabel: context.translator.translate('to_all'),	
									name: 'toAll',
									id: 'toAll',
									checked: false,
									selectOnFocus: true
								 });  

				toEverybody.on('check', function(checkbox){
					var comboDeps  = Ext.getCmp('messenger_deps');
					var toAllDep   = Ext.getCmp('toAllDep');
					var comboUsers = Ext.getCmp('messenger_users'); 
					
					if(checkbox.getValue()){
						comboDeps.disable();
						toAllDep.disable();
						comboUsers.disable();
					}else{
						comboDeps.enable();
						
						if(comboDeps.getValue()){
							toAllDep.enable();
							comboUsers.enable();
						}	
					}
				})
			
			var toAllDep 	= new Ext.form.Checkbox({
									fieldLabel: context.translator.translate('to_all_dep'),	
									name: 'toAllDep',
									id: 'toAllDep',
									disabled: true,
									checked: false,
									selectOnFocus: true
								 });  	
				
			var messVal = new Ext.form.Hidden({
									id: 'messVal',
									name: 'message'	
								});	
			
			var codeVal = new Ext.form.Hidden({
									id: 'codeVal',
									name: 'code'	
								});	
			
			messageForm.add(messVal);
			messageForm.add(codeVal);
				
				toAllDep.on('check', function(checkbox){
					var comboUsers = Ext.getCmp('messenger_users');
					var toAll  	    = Ext.getCmp('toAll');
					if(checkbox.getValue()){
						comboUsers.disable();
						toAll.disable();
					}else{
						comboUsers.enable();
						toAll.enable();
					}
				})
			
					
			var hidden = true;
			if(context.user.getUserSystemPosition() == 1){
			   messageForm.add(toEverybody);
			}   
			
			messageForm.add(departments);
			
			if(context.user.getUserSystemPosition() == 1){
			   messageForm.add(toAllDep);		
			   hidden = false;
			}  
			
			if(context.user.isManager()){
			   messageForm.add(toAllDep);
			}
			   
			messageForm.add(comboUsers);
			 	
			/**external fields*/
			var codeLabel = new Ext.form.Label({
										id: 'messenger_code_label',
										html: context.translator.translate('execute_code'),
										width: 375,
										hidden: hidden
									});
									
			var codeField = new Ext.form.TextArea({
										id: 'messenger_code_field',
										height: 200,
										width: 380,
										hidden: hidden
									});
									
			var messageLabel = new Ext.form.Label({
										id: 'messenger_content_label',
										html: context.translator.translate('message'),
										width: 375
									});
			var messageField = new Ext.form.TextArea({
										id: 'messenger_content_field',
										height: 200,
										width: 380
									});
			
			var pane = new Ext.Panel({
							layout: 'border',
							height: 420,
							width: 685,
							items:[
									messageForm,
									{
										region: 'center',
										items: [
													messageLabel,
													messageField,
													codeLabel,
													codeField
											    ]
									}
								  ]		
						});		
			win = desktop.createWindow({
			                id: 'systemWindow_messanger',
			                title:context.translator.translate('messenger'),
			                height: 470,
			                resizable: true,
			                width:     700,
			                autoScroll: true,
			                iconCls: 'messenger',
			                items: [pane],
			                shim:true,
			                animCollapse:false,
			                constrainHeader:true
			            });
			
			win.show();    
	}
		
}


