/*****************************************************************
 * Componente:  Chat AJAX
 * Version:     1.0
 * Autor:       Ivan Mattoni
 * Empresa:     MyDesign
 * Comentario:  Este es el archivo madre de este componente. 
 ****************************************************************/


var Class_Chat = function(options){
	// PROPERTIES PUBLIC
	this.login={
		username: 'ivan',
		coduser: 2,
		admin: 1
	}


	// METHODS PUBLIC
	this.start = function(){
		if( !validate() ) return;		
		
		// Open CSS
		var headID = document.getElementsByTagName("head")[0];
		if( !headID ) return;
		var cssNode = document.createElement('link');
			cssNode.type = 'text/css';
			cssNode.rel = 'stylesheet';
			cssNode.href = options.root+"/chat.style.css";
		/*var scriptJS = document.createElement('script');
			scriptJS.type = 'text/javascript';
			scriptJS.language = 'javascript';
			
			switch(options.language){
			case "spanish": default: namefile="spanish.js"; break;
			case "english":			 namefile="english.js"; break;
			}
			scriptJS.src = options.root+"/language/"+namefile;*/

		headID.appendChild(cssNode);
		//headID.appendChild(scriptJS);
				

		// Show WINDOW
		Window.init.root = options.path_script_window;
		Window.init.title = options.title;
		Window.init.width = options.width;
		Window.init.height = options.height;
		Window.init.include = options.path_include+"/chat.include.html";
		Window.init.skin = "skin_chat";
		Window.init.resizer_topX = parseInt(options.width);
		Window.init.resizer_topY = parseInt(options.height);
		
		Window.configure.buttons.minimize = false;
		Window.configure.buttons.maximize = true;
		Window.configure.wallpaper.enabled = false;
		Window.configure.align_window = options.position.align;
		Window.configure.left = options.position.left;
		Window.configure.top  = options.position.top;		
		Window.configure.wallpaper.enabled = options.wallpaper.enabled;
		Window.configure.wallpaper.background_color = options.wallpaper.background_color;
		Window.configure.wallpaper.opacity = options.wallpaper.opacity;
		
		Window.onload = function(){
			show_include();
		}
		
		Window.pad.close = function(){
			if( confirm(chat_language.msgbox.msg5) ){
				
				clearInterval(tempID);

				document.getElementById("chat_body").parentNode.removeChild(document.getElementById("chat_body"));

				GenFunc.remove_element(GenFunc.$("element_window"));
				GenFunc.remove_element(GenFunc.$("element_window_minimizer"));
				
				if( Window.configure.wallpaper.enabled ) GenFunc.remove_element(GenFunc.$("element_container"));
				document.onmousedown=null;
				document.onmouseup=null;
				document.onmousemove=null;
				GenFunc.remove_element(Window._nodeScript1);
				GenFunc.remove_element(Window._nodeScript2);
				GenFunc.remove_element(Window._nodeCSS);
				
				close_chat();
				
				document.body.style.overflow="";			
			}
		}
				
		Window.load();
		
		window.onbeforeunload = function(e) {
			if( This.$("element_window") ){			
				return chat_language.msgbox.msg7;
			}
		};
	}







	//------------------------------------------------------------------------------------------------------------------------
	//------------------------------------------------------------------------------------------------------------------------
	//------------------------------------------------------------------------------------------------------------------------







	
	// PROPERTIES PRIVATE
	var This = this;
	var overActive=false;
	var flag=0;
	var lastMessage={
		text: '',
		fontName: '',
		fontSize: '',
		fontStyle: '',
		fontWeight: '',
		textDecoration: '',
		fontColor: ''		
	}
	var tempID=false;
	var error=0;
	
	var _countMSG=0;
	var _countUser=0;
	var _statusUser=0;
	var _countUserChat=0;
	var _coduser_chat=0;
	
	var userchat={
		coduser: 0,
		username: ''
	}
	var Elements={
		containerMSN: false,
		input: false,
		combo_status: false,
		combo_status_container: false,
		combo_users: false,
		combo_users_container: false
	}
	var Colors={
		user_default: '#000000',
		user_online:  '#00CC00',
		user_active:  '#0066FF',
		admin:        '#8F3838'
	}
	var working=false;
	var first=false;
	var tempLI = false;
	
	var contar=0;
	
	var _emoticons = new Array();
	_emoticons[0] =  {filename: 'smile.png',       value: ':)',       value2: ':\\)'}
	_emoticons[1] =  {filename: 'grin.png',        value: ':D',       value2: ':D'}
	_emoticons[2] =  {filename: 'wink.png',        value: ';)',       value2: ';\\)'}
	_emoticons[3] =  {filename: 'embarassed.png',  value: ':[',       value2: ':\\['}
	_emoticons[4] =  {filename: 'sad.png',         value: ':(',       value2: ':\\('}
	_emoticons[5] =  {filename: 'cry.png',         value: ':\'(',     value2: ':\'\\('}
	_emoticons[6] =  {filename: 'cool.png',        value: '8-)',      value2: '8-\\)'}
	_emoticons[7] =  {filename: 'angry.png',       value: ':angry:',  value2: ':angry:'}
	_emoticons[8] =  {filename: 'serious.png',     value: ':|',       value2: ':\\|'}
	_emoticons[9] =  {filename: 'tongue.png',      value: ':P',       value2: ':P'}
	_emoticons[10] = {filename: 'heart.png',       value: ':heart:',  value2: ':heart:'}	
	
	
	

	// METHODS PRIVATE
	var validate = function(){
		if( first ) return true;		
		first=true;
		
		options = This.validate_options.validate(options, 
				  ["objectname",   		      "", 		    "required"],
				  ["root",          		  "", 		    "required"],
				  ["path_script_window",      "", 		    "required"],
				  ["path_script_connection",  "", 		    "required"],
				  ["path_include",            "",           "required"],
				  ["id",		         	  "chat_body",  "no-required"],
				  ["width",		              "479px",      "no-required"],
				  ["height",        		  "378px",      "no-required"],
				  ["title",         		  "Chat",       "no-required"],
				  ["language",      		  "spanish",    "no-required"]);
		if( !options ) return;

		options.position = This.validate_options.validate(options.position, 
						   ["align",  "right",  "no-required"],
						   ["left",   "0px",    "no-required"],
						   ["top",    "0px",    "no-required"]);
		if( !options.position ) return;


		options.Class = This.validate_options.validate(options.Class, 
						["chat_body",   			      "chat_body",   			       "no-required"],
						["chat_div_msn",			      "chat_div_msn",       	       "no-required"],
						["chat_div_msn_user",		      "chat_div_msn_user",       	   "no-required"],
						["chat_div_input",		          "chat_div_input",       	       "no-required"],
						["chat_div_buttons",		      "chat_div_buttons",     	       "no-required"],
						["chat_div_menu",	      		  "chat_div_menu",         	       "no-required"],
						["chat_div_combo_status", 	      "chat_div_combo_status",		   "no-required"],
						["chat_div_buttonsave",  		  "chat_div_buttonsave",		   "no-required"],
						["chat_div_list",  		   	      "chat_div_list",				   "no-required"],
						["chat_div_separator",    	      "chat_div_separator",		       "no-required"],
						["chat_button_bold_off",	      "chat_button_bold_off",          "no-required"],
						["chat_button_bold_on",	          "chat_button_bold_on",           "no-required"],
						["chat_button_italic_off",        "chat_button_italic_off",        "no-required"],
						["chat_button_italic_on",         "chat_button_italic_on",         "no-required"],
						["chat_button_underline_off",     "chat_button_underline_off",     "no-required"],
						["chat_button_underline_on",      "chat_button_underline_on",      "no-required"],
						["chat_button_fontname",   	      "chat_button_fontname",  	       "no-required"],
						["chat_button_fontsize",   	      "chat_button_fontsize",  	       "no-required"],
						["chat_button_fontcolor",  	      "chat_button_fontcolor",  	   "no-required"],
						["chat_button_fontcolor_square",  "chat_button_fontcolor_square",  "no-required"],
						["chat_button_emoticons",   	  "chat_button_emoticons",  	   "no-required"],
						["chat_button_emoticons_icon",    "chat_button_emoticons_icon",    "no-required"],
						["chat_container_msn", 	          "chat_container_msn",      	   "no-required"],
						["chat_container_fontname",	      "chat_container_fontname",       "no-required"],
						["chat_container_fontsize",	      "chat_container_fontsize",       "no-required"],
						["chat_container_fontcolor", 	  "chat_container_fontcolor",      "no-required"],
						["chat_container_emoticons",      "chat_container_emoticons",      "no-required"],
						["chat_container_combo_status",   "chat_container_combo_status",   "no-required"],
						["chat_container_combo_users",    "chat_container_combo_users",    "no-required"],
						["chat_selection_listuser", 	  "chat_selection_listuser", 	   "no-required"],
						["chat_div_combo_users",		  "chat_div_combo_users",		   "no-required"],
						["chat_text_combouser",			  "chat_text_combouser",		   "no-required"],
						["chat_button_logout",	 		  "chat_button_logout",			   "no-required"]);
		
		if( !options.Class ) return;
		
		options.fontDefault = This.validate_options.validate(options.fontDefault,
				 			  ["bold", 	     false,     "no-required"],
							  ["italic",  	 false,     "no-required"],
							  ["underline",  false,     "no-required"],
							  ["fontname",   "Tahoma",  "no-required"],
							  ["fontsize",   "12px",    "no-required"],
							  ["fontcolor",  "black",   "no-required"]);
		if( !options.fontDefault ) return;
		
	
		/*options.wallpaper = This.validate_options.validate(options.wallpaper, 
				  ["enabled",   		 false,  "no-required"],
				  ["background_color",  "#fff",  "no-required"],
				  ["opacity",        	 	 5,  "no-required"]);
		
		if( !options.wallpaper ) return;*/


		return true;
	}
	
	show_include = function(){
		var divBody = This.$(options.id);
		if( !divBody ){
			alert('ERROR EN EL COMPONENTE: Chat\n'+
				  'No se han encontrado el objeto DIV con Id "'+options.id+'"');
			return;
		}
		divBody.className = options.Class.chat_body;
		
		
		// Create Div MENU
		var divMenu = document.createElement("DIV");
			divMenu.id = options.Class.chat_div_menu;
			
			//------------- COMBO STATUS "BUTTON" ---------------
			var divComboStatus = document.createElement("DIV");
				divComboStatus.id = options.Class.chat_div_combo_status;
				divComboStatus.innerHTML = '<div>&nbsp;<img src="'+options.root+'/images/status/'+chat_language.combo_status[0].icon+'">&nbsp;'+chat_language.combo_status[0].status+"</div>";
				divComboStatus.onclick = get_functions.show_div(divComboStatus);
				Elements.combo_status = divComboStatus;
				
				//------------- COMBO STATUS "CONTAINER" ---------------
				var divComboContainer = document.createElement("DIV");
					divComboContainer.className = options.Class.chat_container_combo_status;
					divComboContainer.style.display="none";
					divComboContainer.onmouseover = function(){overActive=true;}
					divComboContainer.onmouseout  = function(){overActive=false;}
					divComboContainer.onblur  = get_functions.hidden_div(divComboContainer);
					divComboContainer.onclick = get_functions.combo_status_container_onclick();
					
					var ul=document.createElement("ul");
					for( var i=0; i<=chat_language.combo_status.length-1; i++ ){
						var li=document.createElement("li");
							li.onclick = function(){
								if( _countUser>0 ) change_status(this);
							}
							li.innerHTML = '<img src="'+options.root+'/images/status/'+chat_language.combo_status[i].icon+'">&nbsp;'+chat_language.combo_status[i].status;
							li.setAttribute("value", i);
							
						ul.appendChild(li);
					}
					divComboContainer.appendChild(ul);
					Elements.combo_status_container = divComboContainer;
					
				divComboStatus.appendChild(divComboContainer);
			
			//---------------- BUTTON "SAVE CONVERSATION" ----------------
			var divButton = document.createElement("DIV");
				divButton.className = options.Class.chat_div_buttonsave;
				divButton.title = chat_language.title_buttons.save;				
				divButton.onclick = get_functions.save_convesation();
				
			var iframe = document.createElement("iframe");
				iframe.style.display="none";
				iframe.style.position="absolute";
				iframe.style.visibility="hidden";
				Elements.ifrDownload = iframe;
				
			document.body.appendChild(iframe);

		//--------------  COMBO USERS "BUTTON" -------------------
		var divText = document.createElement("DIV");
			divText.className = options.Class.chat_text_combouser;
			divText.innerHTML = chat_language.text.txt1;
		
		if( This.login.admin==0 ){
			divText.innerHTML+= ':&nbsp;<span style="color:'+Colors.admin+'">'+chat_language.text.txt2+'</span>';
			Elements.text_user = divText;
		}
			
		
		if( This.login.admin==1 ){
			var divComboUsers = document.createElement("DIV");
				divComboUsers.id = options.Class.chat_div_combo_users;
				divComboUsers.innerHTML = "<div>"+chat_language.text.txt2+"</div>";
				divComboUsers.onclick = get_functions.show_combo_users(divComboUsers);
				divComboUsers.setAttribute("coduser", "0");
				Elements.combo_users = divComboUsers;
	
				//--------------  COMBO USERS "CONTAINER" -------------------
				var divComboContainer = document.createElement("DIV");
					divComboContainer.className = options.Class.chat_container_combo_users;
					divComboContainer.style.display="none";
					divComboContainer.onmouseover = function(){overActive=true;}
					divComboContainer.onmouseout  = function(){overActive=false;}
					divComboContainer.onblur  = get_functions.hidden_div(divComboContainer);
					Elements.combo_users_container = divComboContainer;
					
			divComboUsers.appendChild(divComboContainer);
	
			var divButtonLogout = document.createElement("DIV");
				divButtonLogout.className = options.Class.chat_button_logout;
				divButtonLogout.onclick = get_functions.logout();
		}
				
		
		divMenu.appendChild(divComboStatus);
		divMenu.appendChild(divButton);
		divMenu.appendChild(divText);
		if( This.login.admin==1 ){
			divMenu.appendChild(divComboUsers);
			divMenu.appendChild(divButtonLogout);
		}
			
			
			
		// Create Div Container Messager
		var divContainerMSN = document.createElement("DIV");
			divContainerMSN.id = options.Class.chat_container_msn;
		
			// Create Div Messager
			var divMSN = document.createElement("DIV");			
				divMSN.className = (This.login.admin==1) ? options.Class.chat_div_msn : options.Class.chat_div_msn_user;
				Elements.containerMSN = divMSN;
				
			// Create Div Separator
			if( This.login.admin==1 ){
				var divSeparator = document.createElement("DIV");
					divSeparator.className = options.Class.chat_div_separator;
					
				// Create Div List the Users
				var divList = document.createElement("DIV");
					divList.className = options.Class.chat_div_list;
				divList.appendChild(divSeparator);
			}
			divContainerMSN.appendChild(divMSN);
			if( This.login.admin==1 ) divContainerMSN.appendChild(divList);
			
			Elements.ListUser = divList;
					
			
		// Create Dialog Input Box
		var divInput = document.createElement("DIV");
			divInput.id = options.Class.chat_div_input;
		
		var input = document.createElement("TEXTAREA");
			input.style.fontWeight = (options.fontDefault.bold) ? "bold" : "normal";
			input.style.fontStyle = (options.fontDefault.italic) ? "italic" : "normal";
			input.style.textDecoration = (options.fontDefault.underline) ? "underline" : "none";
			input.style.fontFamily = options.fontDefault.fontname;
			input.style.fontSize = options.fontDefault.fontsize;
			input.style.color = options.fontDefault.fontcolor;			
			input.onkeypress = get_functions.inputbox_keypress();
			input.readOnly = true;
			Elements.input = input;
			
				
		// Create Div Panel Buttons
		var divPanelButtons = document.createElement("DIV");
			divPanelButtons.id = options.Class.chat_div_buttons;

		var divButton_bold = document.createElement("DIV");
			divButton_bold.className = options.Class.chat_button_bold_off;
			divButton_bold.title = chat_language.title_buttons.bold;
			divButton_bold.onclick = get_functions.button_change_style(divButton_bold, 
																	   options.Class.chat_button_bold_off, 
																	   options.Class.chat_button_bold_on,
																	   "bold");
		var divButton_italic = document.createElement("DIV");
			divButton_italic.className = options.Class.chat_button_italic_off;
			divButton_italic.title = chat_language.title_buttons.italic;
			divButton_italic.onclick = get_functions.button_change_style(divButton_italic, 
																		 options.Class.chat_button_italic_off, 
																		 options.Class.chat_button_italic_on,
																		 "italic");
		var divButton_underline = document.createElement("DIV");
			divButton_underline.className = options.Class.chat_button_underline_off;
			divButton_underline.title = chat_language.title_buttons.underline;
			divButton_underline.onclick = get_functions.button_change_style(divButton_underline, 
																			options.Class.chat_button_underline_off, 
																			options.Class.chat_button_underline_on,
																			"underline");

		// ------------ FONTNAME "BUTTON" -------------
		var divButton_fontname = document.createElement("DIV");
			divButton_fontname.className = options.Class.chat_button_fontname;
			divButton_fontname.title = chat_language.title_buttons.fontname;
			divButton_fontname.innerHTML = "<span>"+options.fontDefault.fontname+"</span>";
			divButton_fontname.onclick = get_functions.show_div(divButton_fontname);


		// --------- FONTNAME "CONTAINER" ----------
		var divContainer_fontname = document.createElement("DIV");
			divContainer_fontname.className = options.Class.chat_container_fontname;
		
		var arrayFont = ["Arial", "Comic Sans MS", "Courier New", "Garamond", "Georgia", "Impact", "Tahoma", "Times New Roman", "Verdana"];
		var ul = document.createElement("UL");
		for( var i=0; i<=arrayFont.length-1; i++ ){
			var li = document.createElement("LI");
				li.innerHTML = arrayFont[i];
				li.onclick = get_functions.fontname_li_onclick(li, divContainer_fontname);
				li.onmouseover = function(){overActive=true};
				li.onmouseout = function(){overActive=false};
			ul.appendChild(li);
		}
			divContainer_fontname.appendChild(ul);
			divContainer_fontname.onblur = get_functions.hidden_div(divContainer_fontname);
			divContainer_fontname.style.display="none";
			
			
		// --------------- FONTSIZE "BUTTON" --------------------
		var divButton_fontsize = document.createElement("DIV");
			divButton_fontsize.className = options.Class.chat_button_fontsize;
			divButton_fontsize.title = chat_language.title_buttons.fontsize;
			divButton_fontsize.innerHTML = "<span>"+parseInt(options.fontDefault.fontsize)+"</span>";
			divButton_fontsize.onclick = get_functions.show_div(divButton_fontsize);
		
			// ------------ FONTSIZE "CONTAINER" ---------------
			var divContainer_fontsize = document.createElement("DIV");
				divContainer_fontsize.className = options.Class.chat_container_fontsize;
				var ul = document.createElement("UL");
				for( var n=8; n<=24; n+=2 ){
					var li = document.createElement("LI");
						li.innerHTML = n;
						li.onclick = get_functions.fontsize_li_onclick(li, divContainer_fontsize);
						li.onmouseover = function(){overActive=true};
						li.onmouseout = function(){overActive=false};
					ul.appendChild(li);
				}			
				divContainer_fontsize.appendChild(ul);
				divContainer_fontsize.onblur = get_functions.hidden_div(divContainer_fontsize);
				divContainer_fontsize.style.display="none";


		// --------------- FONTCOLOR "BUTTON" ---------------------
		var divButton_fontcolor = document.createElement("DIV");
			divButton_fontcolor.className = options.Class.chat_button_fontcolor;
			divButton_fontcolor.title = chat_language.title_buttons.fontcolor;
			divButton_fontcolor.onclick = get_functions.show_div(divButton_fontcolor);

			var divButton_fontcolor_square = document.createElement("DIV");
				divButton_fontcolor_square.className = options.Class.chat_button_fontcolor_square;
				divButton_fontcolor_square.style.backgroundColor = options.fontDefault.fontcolor;
				divButton_fontcolor.appendChild(divButton_fontcolor_square);
						
				// --------------- FONTCOLOR "CONTAINER" ---------------------
				var divContainer_fontcolor = document.createElement("DIV");
					divContainer_fontcolor.className = options.Class.chat_container_fontcolor;
					divContainer_fontcolor.innerHTML = '<div style="background-color:#000000">&nbsp;</div>'+
													   '<div style="background-color:#B8B8B8">&nbsp;</div>'+
													   '<div style="background-color:#B4AD3B">&nbsp;</div>'+
													   '<div style="background-color:#BB5C54">&nbsp;</div>'+
													   '<div style="background-color:#755A5C">&nbsp;</div>'+
		
													   '<div style="background-color:#A9B5EF">&nbsp;</div>'+
													   '<div style="background-color:#D65A20">&nbsp;</div>'+
													   '<div style="background-color:#E39230">&nbsp;</div>'+
													   '<div style="background-color:#A71334">&nbsp;</div>'+
													   '<div style="background-color:#590099">&nbsp;</div>'+
		
													   '<div style="background-color:#D40088">&nbsp;</div>'+
													   '<div style="background-color:#0030AC">&nbsp;</div>'+
													   '<div style="background-color:#676F11">&nbsp;</div>'+
													   '<div style="background-color:#769321">&nbsp;</div>'+
													   '<div style="background-color:#3966FE">&nbsp;</div>';
					divContainer_fontcolor.style.display="none";
					divContainer_fontcolor.onblur = get_functions.hidden_div(divContainer_fontcolor);
					divContainer_fontcolor.onclick = get_functions.fontcolor_onclick(divContainer_fontcolor);
					divContainer_fontcolor.onmouseover = function(){overActive=true;}
					divContainer_fontcolor.onmouseout  = function(){overActive=false;}
		

			
		// --------------- EMOTICONS "BUTTON" -------------------
		var divButton_emoticons = document.createElement("DIV");
			divButton_emoticons.className = options.Class.chat_button_emoticons;
			divButton_emoticons.title = chat_language.title_buttons.emoticons;
			divButton_emoticons.onclick = get_functions.show_div(divButton_emoticons);
			
			var divButton_emoticons_icon = document.createElement("DIV");
				divButton_emoticons_icon.className = options.Class.chat_button_emoticons_icon;
				divButton_emoticons_icon.title = chat_language.title_buttons.emoticons;
				divButton_emoticons.appendChild(divButton_emoticons_icon);		
		
				// --------------- EMOTICONS "CONTAINER" -------------------
				var divContainer_emoticons = document.createElement("DIV");
					divContainer_emoticons.className = options.Class.chat_container_emoticons;
					
					for( var i=0; i<=_emoticons.length-1; i++ ){
		
						divContainer_emoticons.innerHTML += '<div value="'+_emoticons[i].value+'"><img src="'+options.root+'/images/emoticons/'+_emoticons[i].filename+'" style="padding-left:3px; padding-top:2px" /></div>';
		
						
					}
					
				divContainer_emoticons.onblur = get_functions.hidden_div(divContainer_emoticons);
				divContainer_emoticons.onclick = get_functions.emoticons_onclick(divContainer_emoticons);
				divContainer_emoticons.onmouseover = function(){overActive=true;}
				divContainer_emoticons.onmouseout  = function(){overActive=false;}
				divContainer_emoticons.style.display="none";



		

		
		// --------------- Appends Childs to divBody ---------------
			// Div Menu
			divBody.appendChild(divMenu);
			
			// Div Messages
			divBody.appendChild(divContainerMSN);
			
			// Panel Buttons
			// (bold, italic, underline)
			divPanelButtons.appendChild(divButton_bold);
			divPanelButtons.appendChild(divButton_italic);
			divPanelButtons.appendChild(divButton_underline);
			
			// (fontname)
			divButton_fontname.appendChild(divContainer_fontname);
			divPanelButtons.appendChild(divButton_fontname);
			
			// (fontsize)
			divButton_fontsize.appendChild(divContainer_fontsize);
			divPanelButtons.appendChild(divButton_fontsize);
			// (fontcolor)
			divButton_fontcolor.appendChild(divContainer_fontcolor);
			divPanelButtons.appendChild(divButton_fontcolor);
			// (emoticons)
			divButton_emoticons.appendChild(divContainer_emoticons);
			divPanelButtons.appendChild(divButton_emoticons);

			divBody.appendChild(divPanelButtons);
			
			// Input Box
			divInput.appendChild(input);
			divBody.appendChild(divInput);
			
			verifier();
	}

	var show_message = function(text, user, fontFamily, fontSize, fontStyle, fontWeight, textDecoration, fontColor, colorLabel){
		if( !Elements.containerMSN ) return;
		
		Elements.containerMSN.innerHTML += '<label style="color:'+colorLabel+'">['+This.getTimer()+'] '+user+':</label>';
		
		Elements.containerMSN.innerHTML+='&nbsp;<span style="font-family:'+fontFamily+';'+
											 'font-size:'+fontSize+';'+
											 'font-style:'+fontStyle+';'+
											 'font-weight:'+fontWeight+';'+
											 'text-decoration:'+textDecoration+';'+									   													 								         'color:'+fontColor+'">'+ get_emoticons(text) + '</span><br>';
		
		lastMessage.text = text;
		lastMessage.fontName = fontFamily;
		lastMessage.fontSize = fontSize;
		lastMessage.fontStyle = fontStyle;
		lastMessage.fontWeight = fontWeight;
		lastMessage.textDecoration = textDecoration;
		lastMessage.fontColor = fontColor;
		Elements.containerMSN.scrollTop = Elements.containerMSN.scrollHeight;
	}

	var send = function(){
		var text = This.trim(Elements.input.value);
		
		var color = (This.login.admin==1) ? Colors.admin : Colors.user_online;

		show_message(text, This.login.username, Elements.input.style.fontFamily, Elements.input.style.fontSize, Elements.input.style.fontStyle, Elements.input.style.fontWeight, Elements.input.style.textDecoration, Elements.input.style.color, color);
		
		save_message();
		Elements.input.value="";
		
		if( This.login.admin==1 ){
			if( tempLI.getAttribute("type")!=1 ) {
				Elements.combo_users.getElementsByTagName("div")[0].innerHTML = tempLI.getElementsByTagName("span")[0].innerHTML;
				Elements.combo_users.setAttribute("coduser", tempLI.getAttribute("coduser"));
			}
		}
	}
	
	var save_message = function(){
		This.Ajax.on_finalizer = function(){
			if( this.resultText=="logout_user" ){
				var color = (This.login.admin==1) ? Colors.admin : Colors.user_online;
				show_message(chat_language.msgbox.msg4, This.login.username, "Tahoma", "11px", "normal", "bold", "none", "red", color);
			}
			if( this.resultText=="logout_admin" ){
				var color = (This.login.admin==1) ? Colors.admin : Colors.user_online;
				show_message(chat_language.msgbox.msg10, This.login.username, "Tahoma", "11px", "normal", "bold", "none", "red", color);
			}else if( this.resultText!="logout_user" && this.resultText!="logout_admin" && this.resultText!="ok" ){
				alert(this.resultText);
				var color = (This.login.admin==1) ? Colors.admin : Colors.user_online;
				show_message(chat_language.msgbox.msg1, This.login.username, "Tahoma", "11px", "normal", "bold", "none", "red", color);
			}
		}
		
		var colorLabel = Colors.user_online;
		
		
		if( This.login.admin==1 ){
			if( tempLI.getAttribute("type")==1 ) colorLabel = Colors.admin;
		}
				
		This.Ajax.execute("POST", options.root+"/chat.ajax.php?action=save",
											   "path_connection="+options.path_script_connection+"&"+
											   "coduser_send="+This.login.coduser+"&"+
											   "coduser_receive="+userchat.coduser+"&"+
											   "message="+escape(lastMessage.text)+"&"+
											   "fontname="+lastMessage.fontName+"&"+
											   "fontsize="+lastMessage.fontSize+"&"+
											   "fontstyle="+lastMessage.fontStyle+"&"+
											   "fontweight="+lastMessage.fontWeight+"&"+
											   "textdecoration="+lastMessage.textDecoration+"&"+
											   "fontcolor="+escape(lastMessage.fontColor)+"&"+
											   "colorlabel="+escape(colorLabel)+"&"+
											   "admin="+This.login.admin,
											   This);
	}
	
	
	
	
	var get_functions={
		button_change_style: function(o, class1, class2, style){
			return function(){
				if( o.className==class1 ){ //On
					o.className=class2;
					switch(style.toLowerCase()){
					case "bold":      Elements.input.style.fontWeight = "bold";break;
					case "italic":    Elements.input.style.fontStyle  = "italic";break;
					case "underline": Elements.input.style.textDecoration = "underline";break;}
				}else{  //Off
					o.className=class1;
					switch(style.toLowerCase()){
					case "bold":      Elements.input.style.fontWeight = "";break;
					case "italic":    Elements.input.style.fontStyle  = "";break;
					case "underline": Elements.input.style.textDecoration = "";break;}
				}
				Elements.input.focus;
			}
		},
				
		inputbox_keypress: function(){
			return function(e){
				if( this.readOnly==true ) return;
				
				if (!e) var e = window.event;						
				if( e.keyCode ) {
					code = e.keyCode;  //DOM
				} else if( e.which ) { 
					code = e.which;    //NS 4 compatible
				} else if( e.charCode ) {		
					code = e.charCode; //also NS 6+, Mozilla 0.9+
				} else { //total failure, we have no way of obtaining the key code
					return;
				}
				if( code==13 ) {
					if( This.trim(Elements.input.value).length>0 )
						send();
						
					return false;
				}
			}
		},
		
		show_div: function(o){
			return function(){
				if( flag==0 ){
					var object = o.lastChild;
					object.style.display = "";
					object.focus();
				}else flag=0;
			}
		},
		hidden_div: function(o){
			return function(){								
				if( !overActive ) o.style.display = "none";
			}			
		},
		
		fontname_li_onclick: function(li, container){
			return function(){
				container.parentNode.getElementsByTagName("span")[0].innerHTML = li.innerHTML;
				overActive=false;
				flag=1;				
				Elements.input.style.fontFamily = li.innerHTML;
				container.style.display="none";
				Elements.input.focus();
			}			
		},

		fontsize_li_onclick: function(li, container){
			return function(){
				container.parentNode.getElementsByTagName("span")[0].innerHTML = li.innerHTML;
				overActive=false;
				flag=1;
				Elements.input.style.fontSize = li.innerHTML+"px";
				container.style.display="none";
				Elements.input.focus();
			}			
		},
		
		fontcolor_onclick: function(container){
			return function(e){
				if (!e) var e = window.event;
				if (e.target) targ = e.target;
				else if (e.srcElement) targ = e.srcElement;
				if (targ.nodeType == 3) // defeat Safari bug
					targ = targ.parentNode;
				
				flag=1;				
				if( targ.className != options.Class.chat_container_fontcolor ){
					overActive=false;
					Elements.input.style.color = targ.style.backgroundColor;
					container.parentNode.getElementsByTagName("div")[0].style.backgroundColor = targ.style.backgroundColor;
					container.style.display="none";
					Elements.input.focus();
				}
				
			}			
		},
		
		emoticons_onclick: function(container){
			return function(e){
				if (!e) var e = window.event;
				if (e.target) targ = e.target;
				else if (e.srcElement) targ = e.srcElement;
				if (targ.nodeType == 3) // defeat Safari bug
					targ = targ.parentNode;
				
				flag=1;
				if( targ.className != options.Class.chat_container_emoticons ){
					overActive=false;					
					value = (targ.nodeName=="IMG") ? targ.parentNode.getAttribute("value") : targ.getAttribute("value");					
					Elements.input.value+=value;
					container.style.display="none";
					Elements.input.focus();
				}
			}			
		},
				
		combo_status_container_onclick: function(){
			return function(e){
				if (!e) var e = window.event;
				if (e.target) targ = e.target;
				else if (e.srcElement) targ = e.srcElement;
				if (targ.nodeType == 3) // defeat Safari bug
					targ = targ.parentNode;
				
				flag=1;
				if( targ.className != options.Class.chat_container_combo_status && targ.nodeName!="IMG" ){
					overActive=false;
					Elements.combo_status.getElementsByTagName("div")[0].innerHTML = "&nbsp;"+targ.innerHTML;
					Elements.combo_status_container.style.display = "none";
				}				
			}
		},
		
		show_combo_users: function(o){
			return function(){
				var object = o.lastChild;				
				if( object.getElementsByTagName("ul").length==0 ) return;
				if( flag==0 ){
					object.style.display = "";
					object.focus();
				}else flag=0;
			}
		},
		
		combo_users_container_onclick: function(){
			return function(e){
				overActive=false;
				flag=1;
				
				var coduser = this.getAttribute("coduser");
				
				Elements.combo_users.getElementsByTagName("div")[0].innerHTML = this.innerHTML;
				Elements.combo_users.setAttribute("coduser", coduser);
				Elements.combo_users_container.style.display = "none";
				
				var li = Elements.ListUser.getElementsByTagName("li");
				if( tempLI ) tempLI.className="";
				for( var i=0; i<=li.length-1; i++ ){
					if( li[i].getAttribute("coduser") == coduser ){
						li[i].className = options.Class.chat_selection_listuser;
						tempLI = li[i];
						break;
					}
				}
					
			}
		},
		
		save_convesation: function(){
			return function(){
				var label = Elements.containerMSN.getElementsByTagName("label");
				var span = Elements.containerMSN.getElementsByTagName("span");
				var text="";
				
				for( var i=0; i<=label.length-1; i++ ){
					text+=label[i].childNodes[0].nodeValue+span[i].childNodes[0].nodeValue+"<br>";
				}
				
				clearInterval(tempID);
				This.Ajax.on_finalizer = function(){
					if( this.resultText.indexOf("error")>-1 ){
						alert(chat_language.msgbox.msg6);
						return;
					}
					
					Elements.ifrDownload.src = options.root+"/chat.download.php?filename="+this.resultText;
					
					verifier();
				}
				This.Ajax.execute("POST", options.root+"/chat.ajax.php?action=makefile",
										  "text="+text,
										  This);
			}
		},
		
		logout: function(){
			return function(){
				var coduser = Elements.combo_users.getAttribute("coduser");
				if( coduser==0 ) return;
				
				if( confirm(chat_language.msgbox.msg9) ){
					clearInterval(tempID);
					
					This.Ajax.on_finalizer = function(){
						/*var li = Elements.ListUser.getElementsByTagName("li");
						
						for( var i=0; i<=li.length-1; i++ ){
							if( li[i].getAttribute("coduser") == coduser ){
								li[i].className = "";
								break;
							}
						}*/
						
						if( tempLI.getAttribute("coduser")==coduser ){						
							userchat.coduser = 0;
							userchat.username = '';
							
							Elements.input.value="";
							Elements.input.readOnly=true;
						}
						
						verifier();
					}
					This.Ajax.execute("POST", options.root+"/chat.ajax.php?action=disconnect",
					"path_connection="+options.path_script_connection+"&"+
					"coduser_send="+This.login.coduser+"&"+
					"coduser_receive="+coduser,
					This);
				}
			}
		}
		
	}
	
	var get_emoticons = function(text){
		for( var i=0; i<=_emoticons.length-1; i++ ){
			if( text.indexOf(_emoticons[i].value)>-1 ){
				text = text.replace(RegExp(_emoticons[i].value2, "g"), '<img src="'+options.root+'/images/emoticons/'+_emoticons[i].filename+'" />');
			}
		}
		return text;
	}

	var verifier = function(){
		tempID = setInterval(verify_message, 1000);
	}

	var verify_message = function(){		
		if( working ) return;
		
		This.Ajax.on_finalizer = function(){
			var result = new Array();			
				result = this.resultText.split(":");
										
			var param_countMSG = parseInt(result[0]);
			var param_countUser = parseInt(result[1]);
			var param_statusUser = parseInt(result[2]);
			var param_countUserChat = parseInt(result[3]);
			var param_coduser_chat = parseInt(result[4]);
			var param_username_chat = result[5];
			
			document.title = this.resultText;
				
			if( param_countMSG > _countMSG ) {
				var dif = param_countMSG - _countMSG;
				read_message(dif);
				if( This.login.admin==0 ) Elements.input.readOnly=false;
				_countMSG = param_countMSG;
				working=false;
				return;
			}
			_countMSG = param_countMSG;
			
			if( This.login.admin==0 ){
				if( param_coduser_chat!=_coduser_chat ) {
					userchat.coduser = param_coduser_chat;
					userchat.username = param_username_chat;
					
					if( param_coduser_chat>0 ) {
						Elements.text_user.getElementsByTagName("span")[0].innerHTML = param_username_chat;
					}else{
						Elements.text_user.getElementsByTagName("span")[0].innerHTML = chat_language.text.txt2;
						Elements.input.value="";
						Elements.input.readOnly=true;
					}
						
					_coduser_chat = param_coduser_chat;
					working=false;
					return;
				}
			}
			_coduser_chat = param_coduser_chat;			
			
			
			if( This.login.admin==1 ){
				if( param_countUser!=_countUser ) {
					show_users();
					_countUser = param_countUser;
					_statusUser = param_statusUser;
					_countUserChat = param_countUserChat;					
					working=false;
					return;
				}
				_countUser = param_countUser;
				
				if( param_statusUser!=_statusUser ) {
					show_users();
					_statusUser = param_statusUser;
					_countUserChat = param_countUserChat;					
					working=false;
					return;
				}
				_statusUser = param_statusUser;
				
				if( param_countUserChat!=_countUserChat ) {
					show_users();
					_countUserChat = param_countUserChat;
					working=false;
					return;
				}
				_countUserChat = param_countUserChat;
			}
			working=false;
		}
		working=true;
		This.Ajax.execute("POST", options.root+"/chat.ajax.php?action=verify",
											   "path_connection="+options.path_script_connection+"&"+
											   "coduser_send="+This.login.coduser,
											   This);
	}

	var read_message = function(dif){
		working=true;
		clearInterval(tempID);
		
		This.Ajax.on_finalizer = function(){			
			if( this.resultText.toLowerCase().indexOf("error")>-1 || this.resultText.toLowerCase().indexOf("warning")>-1 ){
				alert(chat_language.msgbox.msg2);
				clearInterval(tempID);
				working=false;
				return;
			}
			
			
			if( this.resultText=="NA" ){
				var color = (This.login.admin==1) ? Colors.admin : Colors.user_online;
				show_message(chat_language.msgbox.msg4, This.login.username, "Tahoma", "11px", "normal", "bold", "none", "red", color);
			}else{
				xml = this.resultXML;
				if( xml==null ) {
					var color = (This.login.admin==1) ? Colors.admin : Colors.user_online;
					show_message(chat_language.msgbox.msg3, This.login.username, "Tahoma", "11px", "normal", "bold", "none", "red", color);
					working=false;
					return;
				}
				
				if( xml.documentElement.nodeName ){
					var rows = xml.getElementsByTagName("msg");
					
					for( var i=0; i<=rows.length-1; i++ ){
						var message = rows[i].getElementsByTagName("message")[0].childNodes[0].nodeValue;
						var username = rows[i].getElementsByTagName("username")[0].childNodes[0].nodeValue;
						var fontName = rows[i].getElementsByTagName("fontname")[0].childNodes[0].nodeValue;
						var fontSize = rows[i].getElementsByTagName("fontsize")[0].childNodes[0].nodeValue;
						var fontStyle = rows[i].getElementsByTagName("fontstyle")[0].childNodes[0].nodeValue;
						var fontWeight = rows[i].getElementsByTagName("fontweight")[0].childNodes[0].nodeValue;
						var textDecoration = rows[i].getElementsByTagName("textdecoration")[0].childNodes[0].nodeValue;
						var fontColor = rows[i].getElementsByTagName("fontcolor")[0].childNodes[0].nodeValue;
						
						if( This.login.admin==1 )
							var colorLabel = rows[i].getElementsByTagName("colorlabel")[0].childNodes[0].nodeValue;
						else
							var colorLabel = Colors.admin;
						
						show_message(message, username, fontName, fontSize, fontStyle, fontWeight, textDecoration, fontColor, colorLabel);
					}
				}
			}
			
			working=false;
			verifier();			
		}
		This.Ajax.execute("POST", options.root+"/chat.ajax.php?action=read",
											   "path_connection="+options.path_script_connection+"&"+
											   "coduser_send="+This.login.coduser+"&"+
											   "coduser_receive="+userchat.coduser+"&"+
											   "limitFrom="+_countMSG+"&"+
											   "limitTo="+dif,
											   This);		
	}

	var show_users = function(){
		if( !Elements.ListUser ) return;
		
		working=true;		
		clearInterval(tempID);
		
		This.Ajax.on_finalizer = function(){
			if( this.resultText.toLowerCase().indexOf("error")>-1 || this.resultText.toLowerCase().indexOf("warning")>-1 ) {
				working=false;
				return;			
			}
			if( this.resultText=="NA" ) {
				var ul = Elements.ListUser.getElementsByTagName("ul");
				if( ul.length>0 ) ul[0].parentNode.removeChild(ul[0]);
				Elements.input.value="";
				if( !Elements.input.readOnly ) Elements.input.readOnly=true;
				working=false;
				return;
			}
			
			xml = this.resultXML;
			if( xml==null ) {
				working=false;				
				return;
			}
			
			if( xml.documentElement.nodeName ){
				var rows = xml.getElementsByTagName("user");
				var ul = document.createElement("UL");
				var sumStatus=0;
				
				if( This.login.admin==1 ){
					var ul_old = Elements.combo_users_container.getElementsByTagName("ul");
					if( ul_old.length>0 ){
						ul_old[0].parentNode.removeChild(ul_old[0]);
					}					
				}
				
				for( var i=0; i<=rows.length-1; i++ ){
					var coduser = rows[i].getElementsByTagName("coduser")[0].childNodes[0].nodeValue;
					var username = rows[i].getElementsByTagName("username")[0].childNodes[0].nodeValue;
					var status = rows[i].getElementsByTagName("status")[0].childNodes[0].nodeValue;
					var admin = rows[i].getElementsByTagName("admin")[0].childNodes[0].nodeValue;
				    var ischat_coduseradmin = parseInt(rows[i].getElementsByTagName("ischat_coduseradmin")[0].childNodes[0].nodeValue);
					var ischat_username = rows[i].getElementsByTagName("ischat_username")[0].childNodes[0].nodeValue;
					
					var color = Colors.user_default;
					var type=0;
					
					// type
					// 0 = Default
					// 1 = Admin
					// 2 = User Active
					if( This.login.admin==1 ) {						
						if( admin==1 ) {
								color = Colors.admin;
								type=1;
						}else{
							if( ischat_coduseradmin!=0 ){								
								color = (ischat_coduseradmin==This.login.coduser) ? Colors.user_active : Colors.user_online;
								type=2;
								show_users_login(coduser, username);
							}
						}
					}
										
					var li = document.createElement("LI");
						li.setAttribute("coduser", coduser);
						li.setAttribute("type", type);
						li.setAttribute("attrColor", color);
						li.setAttribute("ischat_username", ischat_username);
						li.setAttribute("ischat_coduseradmin", ischat_coduseradmin);
						
						li.innerHTML = '<table cellpaddin=0 cellspacing=0 border=0><tr><td width="7px"><img src="'+options.root+'/images/status/'+chat_language.combo_status[status].icon+'" title="'+chat_language.combo_status[status].status+'"><td width="100px"><span style="color:'+color+'">'+username+'</span></td></tr></table>';
						
						li.onclick = function(){
							
							if( this.getAttribute("type")==2  ){
								if( This.login.coduser!=this.getAttribute("ischat_coduseradmin") ){
									alert( chat_language.msgbox.msg8 + '"'+this.getAttribute("ischat_username")+'"' );
									return;
								}
							}
							
							if( tempLI ) tempLI.className="";
							tempLI = this;
							this.className = options.Class.chat_selection_listuser;
							
							userchat.coduser = this.getAttribute("coduser");
							userchat.username = this.getElementsByTagName("span")[0].innerHTML;
							
							Elements.input.readOnly=false;
							Elements.input.focus();
						}
						
					ul.appendChild(li);
					
					sumStatus+=parseInt(status);
				}
				_statusUser=sumStatus;
				
				var ul_old = Elements.ListUser.getElementsByTagName("ul");
				
				if( ul_old.length>0 ){
					/*var coduser=null;
					for( var i=0; i<=ul_old[0].childNodes.length-1; i++ ){
						if( ul_old[0].childNodes[i].className==options.Class.chat_selection_listuser )
							coduser = ul_old[0].childNodes[i].getAttribute("coduser");
					}*/
										
					Elements.ListUser.removeChild(ul_old[0]);
					Elements.ListUser.appendChild(ul);
					
					if( coduser!=null ){
						li = Elements.ListUser.getElementsByTagName("li");
						for( var i=0; i<=li.length-1; i++ ){
							if( li[i].getAttribute("coduser") == userchat.coduser ){
								li[i].className=options.Class.chat_selection_listuser;
								tempLI = li[i];
								break;
							}
						}
					}
					
				}
				else Elements.ListUser.appendChild(ul);
				
			}

			working=false;
			verifier();
		}		
		This.Ajax.execute("POST", options.root+"/chat.ajax.php?action=login_listuser",
	  				      "path_connection="+options.path_script_connection+"&"+
	  				      "admin="+This.login.admin+"&"+
						  "coduser="+This.login.coduser,
						  This);		
	}
	
	var change_status = function(o){
		var value = o.getAttribute("value");
		
		clearInterval(tempID);
		This.Ajax.on_finalizer = function(){			
			verifier();
		}
		This.Ajax.execute("POST", options.root+"/chat.ajax.php?action=change_status",
	  				      "path_connection="+options.path_script_connection+"&"+
						  "status="+value+"&"+
						  "coduser="+This.login.coduser,
						  This);

	}
	
	var close_chat = function(){
		This.Ajax.on_finalizer = function(){
			var o1 = document.getElementById(options.Class.chat_div_menu);
		}
		This.Ajax.execute("POST", options.root + "/chat.ajax.php?action=logout",
												 "path_connection="+options.path_script_connection+"&"+
												 "coduser="+This.login.coduser,
												 This);
		
		//RESET VARIABLES
		flag=0;
		clearInterval(tempID);
		tempID=false;
		error=0;
		_countMSG=0;
		_countUser=0;
		_statusUser=0;
		_countUserChat=0;
		_coduser_chat=0;
		tempLI=false;
		working=false;
		for( el in Elements ) 
			eval("Elements."+el+"=false;");
		
		userchat.coduser=0;
		userchat.username='';
	
	}
	
	var show_users_login = function(coduser, username){		
		var ul = document.createElement("UL");
		var li = document.createElement("LI");
		
		var table = document.createElement("TABLE");
		var tr = document.createElement("TR");
		var td = document.createElement("TD");
			td.setAttribute("cellspacing", "0");
			td.setAttribute("cellpadding", "0");
			td.setAttribute("coduser", coduser);
			td.onclick = get_functions.combo_users_container_onclick();			
			td.innerHTML = username;
		
		tr.appendChild(td);
		table.appendChild(tr);
		li.appendChild(table);		
		ul.appendChild(li);
		
		Elements.combo_users_container.appendChild(ul);
	}

}
Class_Chat.prototype = new Class_Chat_Prototype();

