diff --git a/cim_for_mina/1.5.VERSION b/cim_for_mina/1.5.VERSION new file mode 100644 index 0000000..400122e --- /dev/null +++ b/cim_for_mina/1.5.VERSION @@ -0,0 +1 @@ +1.5 \ No newline at end of file diff --git a/cim-core/.classpath b/cim_for_mina/cim-core/.classpath similarity index 100% rename from cim-core/.classpath rename to cim_for_mina/cim-core/.classpath diff --git a/cim-core/.project b/cim_for_mina/cim-core/.project similarity index 100% rename from cim-core/.project rename to cim_for_mina/cim-core/.project diff --git a/cim-core/src/com/farsunset/cim/client/android/CIMConnectorManager.java b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMConnectorManager.java similarity index 100% rename from cim-core/src/com/farsunset/cim/client/android/CIMConnectorManager.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMConnectorManager.java diff --git a/cim-core/src/com/farsunset/cim/client/android/CIMDataConfig.java b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMDataConfig.java similarity index 100% rename from cim-core/src/com/farsunset/cim/client/android/CIMDataConfig.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMDataConfig.java diff --git a/cim-core/src/com/farsunset/cim/client/android/CIMEnventListenerReceiver.java b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMEnventListenerReceiver.java similarity index 100% rename from cim-core/src/com/farsunset/cim/client/android/CIMEnventListenerReceiver.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMEnventListenerReceiver.java diff --git a/cim-core/src/com/farsunset/cim/client/android/CIMListenerManager.java b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMListenerManager.java similarity index 100% rename from cim-core/src/com/farsunset/cim/client/android/CIMListenerManager.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMListenerManager.java diff --git a/cim-core/src/com/farsunset/cim/client/android/CIMMessageReceiveComparator.java b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMMessageReceiveComparator.java similarity index 100% rename from cim-core/src/com/farsunset/cim/client/android/CIMMessageReceiveComparator.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMMessageReceiveComparator.java diff --git a/cim-core/src/com/farsunset/cim/client/android/CIMPushManager.java b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMPushManager.java similarity index 96% rename from cim-core/src/com/farsunset/cim/client/android/CIMPushManager.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMPushManager.java index 63f561d..8e149b3 100644 --- a/cim-core/src/com/farsunset/cim/client/android/CIMPushManager.java +++ b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMPushManager.java @@ -1,186 +1,186 @@ -package com.farsunset.cim.client.android; -import android.content.Context; -import android.content.Intent; -import android.telephony.TelephonyManager; - -import com.farsunset.cim.nio.constant.CIMConstant; -import com.farsunset.cim.nio.mutual.SentBody; - -/** - * CIM 功能接口 - * - * @author 3979434@qq.com - */ -public class CIMPushManager { - - - static String ACTION_CONNECTION ="ACTION_CONNECTION"; - - static String ACTION_CONNECTION_STATUS ="ACTION_CONNECTION_STATUS"; - - static String ACTION_SENDREQUEST ="ACTION_SENDREQUEST"; - - static String ACTION_DISCONNECTION ="ACTION_DISSENDREQUEST"; - - static String ACTION_DESTORY ="ACTION_DESTORY"; - - static String SERVICE_ACTION ="SERVICE_ACTION"; - - static String KEY_SEND_BODY ="KEY_SEND_BODY"; - - static String KEY_CIM_CONNECTION_STATUS ="KEY_CIM_CONNECTION_STATUS"; - - /** - * 初始化,连接服务端,在程序启动页或者 在Application里调用 - * @param context - * @param ip - * @param port - */ - public static void init(Context context,String ip,int port){ - - CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED, false); - - Intent serviceIntent = new Intent(context, CIMPushService.class); - serviceIntent.putExtra(CIMDataConfig.KEY_CIM_SERVIER_HOST, ip); - serviceIntent.putExtra(CIMDataConfig.KEY_CIM_SERVIER_PORT, port); - serviceIntent.putExtra(SERVICE_ACTION, ACTION_CONNECTION); - context.startService(serviceIntent); - CIMDataConfig.putString(context, CIMDataConfig.KEY_CIM_SERVIER_HOST, ip); - CIMDataConfig.putInt(context, CIMDataConfig.KEY_CIM_SERVIER_PORT, port); - } - - protected static void init(Context context){ - - String host = CIMDataConfig.getString(context, CIMDataConfig.KEY_CIM_SERVIER_HOST); - int port =CIMDataConfig.getInt(context, CIMDataConfig.KEY_CIM_SERVIER_PORT); - - init(context,host,port); - - } - - - /** - * 设置一个账号登录到服务端 - * @param account 用户唯一ID - */ - public static void setAccount(Context context,String account){ - - if(account==null || account.trim().length()==0) - { - return ; - } - CIMDataConfig.putString(context,CIMDataConfig.KEY_ACCOUNT, account); - - - boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED); - if(isManualDestory || account==null){ - return ; - } - - - String imei = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId(); - SentBody sent = new SentBody(); - sent.setKey(CIMConstant.RequestKey.CLIENT_BIND); - sent.put("account", account); - sent.put("deviceId",imei); - sent.put("channel", "android"); - sent.put("device",android.os.Build.MODEL); - - sendRequest(context,sent); - - - } - - protected static void setAccount(Context context){ - - String account = CIMDataConfig.getString(context,CIMDataConfig.KEY_ACCOUNT); - setAccount(context,account); - } - - protected static void clearAccount(Context context){ - - CIMDataConfig.putString(context,CIMDataConfig.KEY_ACCOUNT, null); - } - - /** - * 发送一个CIM请求 - * @param context - * @body - */ - public static void sendRequest(Context context,SentBody body){ - - boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED); - if(isManualDestory){ - return ; - } - - Intent serviceIntent = new Intent(context, CIMPushService.class); - serviceIntent.putExtra(KEY_SEND_BODY, body); - serviceIntent.putExtra(SERVICE_ACTION, ACTION_SENDREQUEST); - context.startService(serviceIntent); - - } - - /** - * 停止接受推送,将会退出当前账号登录,端口与服务端的连接 - * @param context - */ - public static void stop(Context context){ - - boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED); - if(isManualDestory){ - return ; - } - - CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_MANUAL_STOP, true); - - Intent serviceIntent = new Intent(context, CIMPushService.class); - serviceIntent.putExtra(SERVICE_ACTION, ACTION_DISCONNECTION); - context.startService(serviceIntent); - - } - - - /** - * 完全销毁CIM,一般用于完全退出程序,调用resume将不能恢复 - * @param context - */ - public static void destory(Context context){ - - - CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED, true); - CIMDataConfig.putString(context,CIMDataConfig.KEY_ACCOUNT, null); - - Intent serviceIntent = new Intent(context, CIMPushService.class); - serviceIntent.putExtra(SERVICE_ACTION, ACTION_DESTORY); - context.startService(serviceIntent); - - } - - - /** - * 重新恢复接收推送,重新连接服务端,并登录当前账号 - * @param context - */ - public static void resume(Context context){ - - boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED); - if(isManualDestory){ - return ; - } - - setAccount(context); - } - - - /** - * 异步获取与服务端连接状态,将会在广播中收到onConnectionStatus(boolean f) - * @param context - */ - public static void detectIsConnected(Context context){ - Intent serviceIntent = new Intent(context, CIMPushService.class); - serviceIntent.putExtra(SERVICE_ACTION, ACTION_CONNECTION_STATUS); - context.startService(serviceIntent); - } - +package com.farsunset.cim.client.android; +import android.content.Context; +import android.content.Intent; +import android.telephony.TelephonyManager; + +import com.farsunset.cim.nio.constant.CIMConstant; +import com.farsunset.cim.nio.mutual.SentBody; + +/** + * CIM 功能接口 + * + * @author 3979434@qq.com + */ +public class CIMPushManager { + + + static String ACTION_CONNECTION ="ACTION_CONNECTION"; + + static String ACTION_CONNECTION_STATUS ="ACTION_CONNECTION_STATUS"; + + static String ACTION_SENDREQUEST ="ACTION_SENDREQUEST"; + + static String ACTION_DISCONNECTION ="ACTION_DISSENDREQUEST"; + + static String ACTION_DESTORY ="ACTION_DESTORY"; + + static String SERVICE_ACTION ="SERVICE_ACTION"; + + static String KEY_SEND_BODY ="KEY_SEND_BODY"; + + static String KEY_CIM_CONNECTION_STATUS ="KEY_CIM_CONNECTION_STATUS"; + + /** + * 初始化,连接服务端,在程序启动页或者 在Application里调用 + * @param context + * @param ip + * @param port + */ + public static void init(Context context,String ip,int port){ + + CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED, false); + + Intent serviceIntent = new Intent(context, CIMPushService.class); + serviceIntent.putExtra(CIMDataConfig.KEY_CIM_SERVIER_HOST, ip); + serviceIntent.putExtra(CIMDataConfig.KEY_CIM_SERVIER_PORT, port); + serviceIntent.putExtra(SERVICE_ACTION, ACTION_CONNECTION); + context.startService(serviceIntent); + CIMDataConfig.putString(context, CIMDataConfig.KEY_CIM_SERVIER_HOST, ip); + CIMDataConfig.putInt(context, CIMDataConfig.KEY_CIM_SERVIER_PORT, port); + } + + protected static void init(Context context){ + + String host = CIMDataConfig.getString(context, CIMDataConfig.KEY_CIM_SERVIER_HOST); + int port =CIMDataConfig.getInt(context, CIMDataConfig.KEY_CIM_SERVIER_PORT); + + init(context,host,port); + + } + + + /** + * 设置一个账号登录到服务端 + * @param account 用户唯一ID + */ + public static void setAccount(Context context,String account){ + + if(account==null || account.trim().length()==0) + { + return ; + } + CIMDataConfig.putString(context,CIMDataConfig.KEY_ACCOUNT, account); + + + boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED); + if(isManualDestory || account==null){ + return ; + } + + + String imei = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId(); + SentBody sent = new SentBody(); + sent.setKey(CIMConstant.RequestKey.CLIENT_BIND); + sent.put("account", account); + sent.put("deviceId",imei); + sent.put("channel", "android"); + sent.put("device",android.os.Build.MODEL); + + sendRequest(context,sent); + + + } + + protected static void setAccount(Context context){ + + String account = CIMDataConfig.getString(context,CIMDataConfig.KEY_ACCOUNT); + setAccount(context,account); + } + + protected static void clearAccount(Context context){ + + CIMDataConfig.putString(context,CIMDataConfig.KEY_ACCOUNT, null); + } + + /** + * 发送一个CIM请求 + * @param context + * @body + */ + public static void sendRequest(Context context,SentBody body){ + + boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED); + if(isManualDestory){ + return ; + } + + Intent serviceIntent = new Intent(context, CIMPushService.class); + serviceIntent.putExtra(KEY_SEND_BODY, body); + serviceIntent.putExtra(SERVICE_ACTION, ACTION_SENDREQUEST); + context.startService(serviceIntent); + + } + + /** + * 停止接受推送,将会退出当前账号登录,端口与服务端的连接 + * @param context + */ + public static void stop(Context context){ + + boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED); + if(isManualDestory){ + return ; + } + + CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_MANUAL_STOP, true); + + Intent serviceIntent = new Intent(context, CIMPushService.class); + serviceIntent.putExtra(SERVICE_ACTION, ACTION_DISCONNECTION); + context.startService(serviceIntent); + + } + + + /** + * 完全销毁CIM,一般用于完全退出程序,调用resume将不能恢复 + * @param context + */ + public static void destory(Context context){ + + + CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED, true); + CIMDataConfig.putString(context,CIMDataConfig.KEY_ACCOUNT, null); + + Intent serviceIntent = new Intent(context, CIMPushService.class); + serviceIntent.putExtra(SERVICE_ACTION, ACTION_DESTORY); + context.startService(serviceIntent); + + } + + + /** + * 重新恢复接收推送,重新连接服务端,并登录当前账号 + * @param context + */ + public static void resume(Context context){ + + boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED); + if(isManualDestory){ + return ; + } + + setAccount(context); + } + + + /** + * 异步获取与服务端连接状态,将会在广播中收到onConnectionStatus(boolean f) + * @param context + */ + public static void detectIsConnected(Context context){ + Intent serviceIntent = new Intent(context, CIMPushService.class); + serviceIntent.putExtra(SERVICE_ACTION, ACTION_CONNECTION_STATUS); + context.startService(serviceIntent); + } + } \ No newline at end of file diff --git a/cim-core/src/com/farsunset/cim/client/android/CIMPushService.java b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMPushService.java similarity index 100% rename from cim-core/src/com/farsunset/cim/client/android/CIMPushService.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMPushService.java diff --git a/cim-core/src/com/farsunset/cim/client/android/CIMSessionDisableException.java b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMSessionDisableException.java similarity index 100% rename from cim-core/src/com/farsunset/cim/client/android/CIMSessionDisableException.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMSessionDisableException.java diff --git a/cim-core/src/com/farsunset/cim/client/android/NetWorkDisableException.java b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/NetWorkDisableException.java similarity index 100% rename from cim-core/src/com/farsunset/cim/client/android/NetWorkDisableException.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/client/android/NetWorkDisableException.java diff --git a/cim-core/src/com/farsunset/cim/client/android/OnCIMMessageListener.java b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/OnCIMMessageListener.java similarity index 100% rename from cim-core/src/com/farsunset/cim/client/android/OnCIMMessageListener.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/client/android/OnCIMMessageListener.java diff --git a/cim-core/src/com/farsunset/cim/client/android/WriteToClosedSessionException.java b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/WriteToClosedSessionException.java similarity index 100% rename from cim-core/src/com/farsunset/cim/client/android/WriteToClosedSessionException.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/client/android/WriteToClosedSessionException.java diff --git a/cim-core/src/com/farsunset/cim/nio/constant/CIMConstant.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/constant/CIMConstant.java similarity index 100% rename from cim-core/src/com/farsunset/cim/nio/constant/CIMConstant.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/constant/CIMConstant.java diff --git a/cim-core/src/com/farsunset/cim/nio/filter/ClientMessageCodecFactory.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ClientMessageCodecFactory.java similarity index 100% rename from cim-core/src/com/farsunset/cim/nio/filter/ClientMessageCodecFactory.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ClientMessageCodecFactory.java diff --git a/cim-core/src/com/farsunset/cim/nio/filter/ClientMessageDecoder.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ClientMessageDecoder.java similarity index 100% rename from cim-core/src/com/farsunset/cim/nio/filter/ClientMessageDecoder.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ClientMessageDecoder.java diff --git a/cim-core/src/com/farsunset/cim/nio/filter/ClientMessageEncoder.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ClientMessageEncoder.java similarity index 100% rename from cim-core/src/com/farsunset/cim/nio/filter/ClientMessageEncoder.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ClientMessageEncoder.java diff --git a/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageCodecFactory.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageCodecFactory.java similarity index 100% rename from cim-core/src/com/farsunset/cim/nio/filter/ServerMessageCodecFactory.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageCodecFactory.java diff --git a/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java similarity index 100% rename from cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java diff --git a/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageEncoder.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageEncoder.java similarity index 100% rename from cim-core/src/com/farsunset/cim/nio/filter/ServerMessageEncoder.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageEncoder.java diff --git a/cim-core/src/com/farsunset/cim/nio/handle/CIMRequestHandler.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/handle/CIMRequestHandler.java similarity index 100% rename from cim-core/src/com/farsunset/cim/nio/handle/CIMRequestHandler.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/handle/CIMRequestHandler.java diff --git a/cim-core/src/com/farsunset/cim/nio/handle/HeartbeatHandler.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/handle/HeartbeatHandler.java similarity index 100% rename from cim-core/src/com/farsunset/cim/nio/handle/HeartbeatHandler.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/handle/HeartbeatHandler.java diff --git a/cim-core/src/com/farsunset/cim/nio/handle/MainIOHandler.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/handle/MainIOHandler.java similarity index 100% rename from cim-core/src/com/farsunset/cim/nio/handle/MainIOHandler.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/handle/MainIOHandler.java diff --git a/cim-core/src/com/farsunset/cim/nio/mutual/Message.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/mutual/Message.java similarity index 100% rename from cim-core/src/com/farsunset/cim/nio/mutual/Message.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/mutual/Message.java diff --git a/cim-core/src/com/farsunset/cim/nio/mutual/ReplyBody.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/mutual/ReplyBody.java similarity index 100% rename from cim-core/src/com/farsunset/cim/nio/mutual/ReplyBody.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/mutual/ReplyBody.java diff --git a/cim-core/src/com/farsunset/cim/nio/mutual/SentBody.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/mutual/SentBody.java similarity index 100% rename from cim-core/src/com/farsunset/cim/nio/mutual/SentBody.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/mutual/SentBody.java diff --git a/cim-core/src/com/farsunset/cim/nio/session/CIMSession.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/session/CIMSession.java similarity index 100% rename from cim-core/src/com/farsunset/cim/nio/session/CIMSession.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/session/CIMSession.java diff --git a/cim-core/src/com/farsunset/cim/nio/session/DefaultSessionManager.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/session/DefaultSessionManager.java similarity index 100% rename from cim-core/src/com/farsunset/cim/nio/session/DefaultSessionManager.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/session/DefaultSessionManager.java diff --git a/cim-core/src/com/farsunset/cim/nio/session/SessionManager.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/session/SessionManager.java similarity index 100% rename from cim-core/src/com/farsunset/cim/nio/session/SessionManager.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/session/SessionManager.java diff --git a/ichat-server/.classpath b/cim_for_mina/ichat-server/.classpath similarity index 100% rename from ichat-server/.classpath rename to cim_for_mina/ichat-server/.classpath diff --git a/ichat-server/.mymetadata b/cim_for_mina/ichat-server/.mymetadata similarity index 100% rename from ichat-server/.mymetadata rename to cim_for_mina/ichat-server/.mymetadata diff --git a/ichat-server/.project b/cim_for_mina/ichat-server/.project similarity index 100% rename from ichat-server/.project rename to cim_for_mina/ichat-server/.project diff --git a/ichat-server/.settings/org.eclipse.core.resources.prefs b/cim_for_mina/ichat-server/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from ichat-server/.settings/org.eclipse.core.resources.prefs rename to cim_for_mina/ichat-server/.settings/org.eclipse.core.resources.prefs diff --git a/ichat-server/WebRoot/META-INF/MANIFEST.MF b/cim_for_mina/ichat-server/WebRoot/META-INF/MANIFEST.MF similarity index 100% rename from ichat-server/WebRoot/META-INF/MANIFEST.MF rename to cim_for_mina/ichat-server/WebRoot/META-INF/MANIFEST.MF diff --git a/ichat-server/WebRoot/WEB-INF/classes/log4j.properties b/cim_for_mina/ichat-server/WebRoot/WEB-INF/classes/log4j.properties similarity index 100% rename from ichat-server/WebRoot/WEB-INF/classes/log4j.properties rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/classes/log4j.properties diff --git a/ichat-server/WebRoot/WEB-INF/classes/spring-cim.xml b/cim_for_mina/ichat-server/WebRoot/WEB-INF/classes/spring-cim.xml similarity index 100% rename from ichat-server/WebRoot/WEB-INF/classes/spring-cim.xml rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/classes/spring-cim.xml diff --git a/ichat-server/WebRoot/WEB-INF/classes/spring-config.xml b/cim_for_mina/ichat-server/WebRoot/WEB-INF/classes/spring-config.xml similarity index 100% rename from ichat-server/WebRoot/WEB-INF/classes/spring-config.xml rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/classes/spring-config.xml diff --git a/ichat-server/WebRoot/WEB-INF/classes/spring-push.xml b/cim_for_mina/ichat-server/WebRoot/WEB-INF/classes/spring-push.xml similarity index 100% rename from ichat-server/WebRoot/WEB-INF/classes/spring-push.xml rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/classes/spring-push.xml diff --git a/ichat-server/WebRoot/WEB-INF/classes/struts.xml b/cim_for_mina/ichat-server/WebRoot/WEB-INF/classes/struts.xml similarity index 100% rename from ichat-server/WebRoot/WEB-INF/classes/struts.xml rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/classes/struts.xml diff --git a/ichat-server/WebRoot/WEB-INF/lib/Spring.aop-3.0.2.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.aop-3.0.2.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/Spring.aop-3.0.2.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.aop-3.0.2.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/Spring.asm-3.0.2.RELEASE.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.asm-3.0.2.RELEASE.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/Spring.asm-3.0.2.RELEASE.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.asm-3.0.2.RELEASE.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/Spring.beans-3.0.2.RELEASE.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.beans-3.0.2.RELEASE.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/Spring.beans-3.0.2.RELEASE.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.beans-3.0.2.RELEASE.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/Spring.context-3.0.2.RELEASE.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.context-3.0.2.RELEASE.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/Spring.context-3.0.2.RELEASE.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.context-3.0.2.RELEASE.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/Spring.core-3.0.2.RELEASE.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.core-3.0.2.RELEASE.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/Spring.core-3.0.2.RELEASE.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.core-3.0.2.RELEASE.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/Spring.expression-3.0.2.RELEASE.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.expression-3.0.2.RELEASE.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/Spring.expression-3.0.2.RELEASE.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.expression-3.0.2.RELEASE.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/Spring.jdbc-3.0.2.RELEASE.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.jdbc-3.0.2.RELEASE.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/Spring.jdbc-3.0.2.RELEASE.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.jdbc-3.0.2.RELEASE.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/Spring.orm-3.0.2.RELEASE.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.orm-3.0.2.RELEASE.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/Spring.orm-3.0.2.RELEASE.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.orm-3.0.2.RELEASE.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/Spring.transaction-3.0.2.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.transaction-3.0.2.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/Spring.transaction-3.0.2.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.transaction-3.0.2.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/Spring.web-3.0.2.RELEASE.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.web-3.0.2.RELEASE.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/Spring.web-3.0.2.RELEASE.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/Spring.web-3.0.2.RELEASE.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/antlr-2.7.6.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/antlr-2.7.6.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/antlr-2.7.6.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/antlr-2.7.6.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/asm.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/asm.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/asm.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/asm.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/aspectjweaver.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/aspectjweaver.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/aspectjweaver.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/aspectjweaver.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/cim-core.1.5.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/cim-core.1.5.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/cim-core.1.5.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/cim-core.1.5.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/commons-fileupload-1.2.1.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/commons-fileupload-1.2.1.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/commons-fileupload-1.2.1.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/commons-fileupload-1.2.1.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/commons-io-2.4.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/commons-io-2.4.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/commons-io-2.4.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/commons-io-2.4.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/commons-lang-2.3.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/commons-lang-2.3.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/commons-lang-2.3.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/commons-lang-2.3.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/commons-logging-1.0.4.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/commons-logging-1.0.4.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/commons-logging-1.0.4.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/commons-logging-1.0.4.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/freemarker-2.3.15.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/freemarker-2.3.15.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/freemarker-2.3.15.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/freemarker-2.3.15.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/gson-2.1.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/gson-2.1.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/gson-2.1.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/gson-2.1.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/httpclient-4.3.4.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/httpclient-4.3.4.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/httpclient-4.3.4.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/httpclient-4.3.4.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/httpcore-4.3.2.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/httpcore-4.3.2.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/httpcore-4.3.2.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/httpcore-4.3.2.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/jstl-1.2.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/jstl-1.2.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/jstl-1.2.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/jstl-1.2.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/log4j.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/log4j.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/log4j.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/log4j.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/mina-core-2.0.7.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/mina-core-2.0.7.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/mina-core-2.0.7.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/mina-core-2.0.7.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/mina-integration-beans-2.0.0-RC1.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/mina-integration-beans-2.0.0-RC1.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/mina-integration-beans-2.0.0-RC1.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/mina-integration-beans-2.0.0-RC1.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/ognl-2.7.3.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/ognl-2.7.3.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/ognl-2.7.3.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/ognl-2.7.3.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/slf4j-api-1.7.5.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/slf4j-api-1.7.5.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/slf4j-api-1.7.5.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/slf4j-api-1.7.5.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/slf4j-nop-1.7.5.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/slf4j-nop-1.7.5.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/slf4j-nop-1.7.5.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/slf4j-nop-1.7.5.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/spring-context-support.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/spring-context-support.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/spring-context-support.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/spring-context-support.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/struts2-core-2.1.8.1.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/struts2-core-2.1.8.1.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/struts2-core-2.1.8.1.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/struts2-core-2.1.8.1.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/xstream-1.3.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/xstream-1.3.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/xstream-1.3.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/xstream-1.3.jar diff --git a/ichat-server/WebRoot/WEB-INF/lib/xwork-core-2.1.6.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/xwork-core-2.1.6.jar similarity index 100% rename from ichat-server/WebRoot/WEB-INF/lib/xwork-core-2.1.6.jar rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/xwork-core-2.1.6.jar diff --git a/ichat-server/WebRoot/WEB-INF/web.xml b/cim_for_mina/ichat-server/WebRoot/WEB-INF/web.xml similarity index 100% rename from ichat-server/WebRoot/WEB-INF/web.xml rename to cim_for_mina/ichat-server/WebRoot/WEB-INF/web.xml diff --git a/ichat-server/WebRoot/console/header.jsp b/cim_for_mina/ichat-server/WebRoot/console/header.jsp similarity index 100% rename from ichat-server/WebRoot/console/header.jsp rename to cim_for_mina/ichat-server/WebRoot/console/header.jsp diff --git a/ichat-server/WebRoot/console/index.jsp b/cim_for_mina/ichat-server/WebRoot/console/index.jsp similarity index 100% rename from ichat-server/WebRoot/console/index.jsp rename to cim_for_mina/ichat-server/WebRoot/console/index.jsp diff --git a/ichat-server/WebRoot/console/nav.jsp b/cim_for_mina/ichat-server/WebRoot/console/nav.jsp similarity index 100% rename from ichat-server/WebRoot/console/nav.jsp rename to cim_for_mina/ichat-server/WebRoot/console/nav.jsp diff --git a/ichat-server/WebRoot/console/session/manage.jsp b/cim_for_mina/ichat-server/WebRoot/console/session/manage.jsp similarity index 100% rename from ichat-server/WebRoot/console/session/manage.jsp rename to cim_for_mina/ichat-server/WebRoot/console/session/manage.jsp diff --git a/ichat-server/WebRoot/index.jsp b/cim_for_mina/ichat-server/WebRoot/index.jsp similarity index 100% rename from ichat-server/WebRoot/index.jsp rename to cim_for_mina/ichat-server/WebRoot/index.jsp diff --git a/ichat-server/WebRoot/resource/bootstrap/css/bootstrap-theme.min.css b/cim_for_mina/ichat-server/WebRoot/resource/bootstrap/css/bootstrap-theme.min.css similarity index 100% rename from ichat-server/WebRoot/resource/bootstrap/css/bootstrap-theme.min.css rename to cim_for_mina/ichat-server/WebRoot/resource/bootstrap/css/bootstrap-theme.min.css diff --git a/ichat-server/WebRoot/resource/bootstrap/css/bootstrap.min.css b/cim_for_mina/ichat-server/WebRoot/resource/bootstrap/css/bootstrap.min.css similarity index 100% rename from ichat-server/WebRoot/resource/bootstrap/css/bootstrap.min.css rename to cim_for_mina/ichat-server/WebRoot/resource/bootstrap/css/bootstrap.min.css diff --git a/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.eot b/cim_for_mina/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.eot similarity index 100% rename from ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.eot rename to cim_for_mina/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.eot diff --git a/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.svg b/cim_for_mina/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.svg similarity index 100% rename from ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.svg rename to cim_for_mina/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.svg diff --git a/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.ttf b/cim_for_mina/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.ttf rename to cim_for_mina/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.ttf diff --git a/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.woff b/cim_for_mina/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.woff rename to cim_for_mina/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.woff diff --git a/ichat-server/WebRoot/resource/bootstrap/js/bootstrap.min.js b/cim_for_mina/ichat-server/WebRoot/resource/bootstrap/js/bootstrap.min.js similarity index 100% rename from ichat-server/WebRoot/resource/bootstrap/js/bootstrap.min.js rename to cim_for_mina/ichat-server/WebRoot/resource/bootstrap/js/bootstrap.min.js diff --git a/ichat-server/WebRoot/resource/css/base-ui.css b/cim_for_mina/ichat-server/WebRoot/resource/css/base-ui.css similarity index 100% rename from ichat-server/WebRoot/resource/css/base-ui.css rename to cim_for_mina/ichat-server/WebRoot/resource/css/base-ui.css diff --git a/ichat-server/WebRoot/resource/css/dialog.css b/cim_for_mina/ichat-server/WebRoot/resource/css/dialog.css similarity index 100% rename from ichat-server/WebRoot/resource/css/dialog.css rename to cim_for_mina/ichat-server/WebRoot/resource/css/dialog.css diff --git a/ichat-server/WebRoot/resource/css/login.css b/cim_for_mina/ichat-server/WebRoot/resource/css/login.css similarity index 100% rename from ichat-server/WebRoot/resource/css/login.css rename to cim_for_mina/ichat-server/WebRoot/resource/css/login.css diff --git a/ichat-server/WebRoot/resource/css/main-layout.css b/cim_for_mina/ichat-server/WebRoot/resource/css/main-layout.css similarity index 100% rename from ichat-server/WebRoot/resource/css/main-layout.css rename to cim_for_mina/ichat-server/WebRoot/resource/css/main-layout.css diff --git a/ichat-server/WebRoot/resource/css/table.css b/cim_for_mina/ichat-server/WebRoot/resource/css/table.css similarity index 100% rename from ichat-server/WebRoot/resource/css/table.css rename to cim_for_mina/ichat-server/WebRoot/resource/css/table.css diff --git a/ichat-server/WebRoot/resource/css/webbase.css b/cim_for_mina/ichat-server/WebRoot/resource/css/webbase.css similarity index 100% rename from ichat-server/WebRoot/resource/css/webbase.css rename to cim_for_mina/ichat-server/WebRoot/resource/css/webbase.css diff --git a/ichat-server/WebRoot/resource/img/avatar-hover-bg.png b/cim_for_mina/ichat-server/WebRoot/resource/img/avatar-hover-bg.png similarity index 100% rename from ichat-server/WebRoot/resource/img/avatar-hover-bg.png rename to cim_for_mina/ichat-server/WebRoot/resource/img/avatar-hover-bg.png diff --git a/ichat-server/WebRoot/resource/img/blue_line.jpg b/cim_for_mina/ichat-server/WebRoot/resource/img/blue_line.jpg similarity index 100% rename from ichat-server/WebRoot/resource/img/blue_line.jpg rename to cim_for_mina/ichat-server/WebRoot/resource/img/blue_line.jpg diff --git a/ichat-server/WebRoot/resource/img/disk-spr.png b/cim_for_mina/ichat-server/WebRoot/resource/img/disk-spr.png similarity index 100% rename from ichat-server/WebRoot/resource/img/disk-spr.png rename to cim_for_mina/ichat-server/WebRoot/resource/img/disk-spr.png diff --git a/ichat-server/WebRoot/resource/img/icon.png b/cim_for_mina/ichat-server/WebRoot/resource/img/icon.png similarity index 100% rename from ichat-server/WebRoot/resource/img/icon.png rename to cim_for_mina/ichat-server/WebRoot/resource/img/icon.png diff --git a/ichat-server/WebRoot/resource/img/icon_admin.png b/cim_for_mina/ichat-server/WebRoot/resource/img/icon_admin.png similarity index 100% rename from ichat-server/WebRoot/resource/img/icon_admin.png rename to cim_for_mina/ichat-server/WebRoot/resource/img/icon_admin.png diff --git a/ichat-server/WebRoot/resource/img/icon_error.png b/cim_for_mina/ichat-server/WebRoot/resource/img/icon_error.png similarity index 100% rename from ichat-server/WebRoot/resource/img/icon_error.png rename to cim_for_mina/ichat-server/WebRoot/resource/img/icon_error.png diff --git a/ichat-server/WebRoot/resource/img/icon_group_admin.png b/cim_for_mina/ichat-server/WebRoot/resource/img/icon_group_admin.png similarity index 100% rename from ichat-server/WebRoot/resource/img/icon_group_admin.png rename to cim_for_mina/ichat-server/WebRoot/resource/img/icon_group_admin.png diff --git a/ichat-server/WebRoot/resource/img/icon_hint.png b/cim_for_mina/ichat-server/WebRoot/resource/img/icon_hint.png similarity index 100% rename from ichat-server/WebRoot/resource/img/icon_hint.png rename to cim_for_mina/ichat-server/WebRoot/resource/img/icon_hint.png diff --git a/ichat-server/WebRoot/resource/img/icon_loading_small.gif b/cim_for_mina/ichat-server/WebRoot/resource/img/icon_loading_small.gif similarity index 100% rename from ichat-server/WebRoot/resource/img/icon_loading_small.gif rename to cim_for_mina/ichat-server/WebRoot/resource/img/icon_loading_small.gif diff --git a/ichat-server/WebRoot/resource/img/icon_success.png b/cim_for_mina/ichat-server/WebRoot/resource/img/icon_success.png similarity index 100% rename from ichat-server/WebRoot/resource/img/icon_success.png rename to cim_for_mina/ichat-server/WebRoot/resource/img/icon_success.png diff --git a/ichat-server/WebRoot/resource/img/icon_super_admin.png b/cim_for_mina/ichat-server/WebRoot/resource/img/icon_super_admin.png similarity index 100% rename from ichat-server/WebRoot/resource/img/icon_super_admin.png rename to cim_for_mina/ichat-server/WebRoot/resource/img/icon_super_admin.png diff --git a/ichat-server/WebRoot/resource/img/login-box.png b/cim_for_mina/ichat-server/WebRoot/resource/img/login-box.png similarity index 100% rename from ichat-server/WebRoot/resource/img/login-box.png rename to cim_for_mina/ichat-server/WebRoot/resource/img/login-box.png diff --git a/ichat-server/WebRoot/resource/img/login_bg.png b/cim_for_mina/ichat-server/WebRoot/resource/img/login_bg.png similarity index 100% rename from ichat-server/WebRoot/resource/img/login_bg.png rename to cim_for_mina/ichat-server/WebRoot/resource/img/login_bg.png diff --git a/ichat-server/WebRoot/resource/img/nav_selected_bg.png b/cim_for_mina/ichat-server/WebRoot/resource/img/nav_selected_bg.png similarity index 100% rename from ichat-server/WebRoot/resource/img/nav_selected_bg.png rename to cim_for_mina/ichat-server/WebRoot/resource/img/nav_selected_bg.png diff --git a/ichat-server/WebRoot/resource/img/sprite_dialog.gif b/cim_for_mina/ichat-server/WebRoot/resource/img/sprite_dialog.gif similarity index 100% rename from ichat-server/WebRoot/resource/img/sprite_dialog.gif rename to cim_for_mina/ichat-server/WebRoot/resource/img/sprite_dialog.gif diff --git a/ichat-server/WebRoot/resource/img/step-spr.png b/cim_for_mina/ichat-server/WebRoot/resource/img/step-spr.png similarity index 100% rename from ichat-server/WebRoot/resource/img/step-spr.png rename to cim_for_mina/ichat-server/WebRoot/resource/img/step-spr.png diff --git a/ichat-server/WebRoot/resource/img/toolbar.png b/cim_for_mina/ichat-server/WebRoot/resource/img/toolbar.png similarity index 100% rename from ichat-server/WebRoot/resource/img/toolbar.png rename to cim_for_mina/ichat-server/WebRoot/resource/img/toolbar.png diff --git a/ichat-server/WebRoot/resource/img/top-bg.png b/cim_for_mina/ichat-server/WebRoot/resource/img/top-bg.png similarity index 100% rename from ichat-server/WebRoot/resource/img/top-bg.png rename to cim_for_mina/ichat-server/WebRoot/resource/img/top-bg.png diff --git a/ichat-server/WebRoot/resource/img/wallpaper_a.jpg b/cim_for_mina/ichat-server/WebRoot/resource/img/wallpaper_a.jpg similarity index 100% rename from ichat-server/WebRoot/resource/img/wallpaper_a.jpg rename to cim_for_mina/ichat-server/WebRoot/resource/img/wallpaper_a.jpg diff --git a/ichat-server/WebRoot/resource/js/framework.js b/cim_for_mina/ichat-server/WebRoot/resource/js/framework.js similarity index 100% rename from ichat-server/WebRoot/resource/js/framework.js rename to cim_for_mina/ichat-server/WebRoot/resource/js/framework.js diff --git a/ichat-server/WebRoot/resource/js/jquery-1.8.3.min.js b/cim_for_mina/ichat-server/WebRoot/resource/js/jquery-1.8.3.min.js similarity index 100% rename from ichat-server/WebRoot/resource/js/jquery-1.8.3.min.js rename to cim_for_mina/ichat-server/WebRoot/resource/js/jquery-1.8.3.min.js diff --git a/ichat-server/src/main/java/com/farsunset/ichat/admin/action/SessionAction.java b/cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/admin/action/SessionAction.java similarity index 100% rename from ichat-server/src/main/java/com/farsunset/ichat/admin/action/SessionAction.java rename to cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/admin/action/SessionAction.java diff --git a/ichat-server/src/main/java/com/farsunset/ichat/api/action/MessageAction.java b/cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/api/action/MessageAction.java similarity index 100% rename from ichat-server/src/main/java/com/farsunset/ichat/api/action/MessageAction.java rename to cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/api/action/MessageAction.java diff --git a/ichat-server/src/main/java/com/farsunset/ichat/cim/handler/BindHandler.java b/cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/cim/handler/BindHandler.java similarity index 100% rename from ichat-server/src/main/java/com/farsunset/ichat/cim/handler/BindHandler.java rename to cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/cim/handler/BindHandler.java diff --git a/ichat-server/src/main/java/com/farsunset/ichat/cim/handler/LogoutHandler.java b/cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/cim/handler/LogoutHandler.java similarity index 100% rename from ichat-server/src/main/java/com/farsunset/ichat/cim/handler/LogoutHandler.java rename to cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/cim/handler/LogoutHandler.java diff --git a/ichat-server/src/main/java/com/farsunset/ichat/cim/handler/SessionClosedHandler.java b/cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/cim/handler/SessionClosedHandler.java similarity index 100% rename from ichat-server/src/main/java/com/farsunset/ichat/cim/handler/SessionClosedHandler.java rename to cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/cim/handler/SessionClosedHandler.java diff --git a/ichat-server/src/main/java/com/farsunset/ichat/cim/push/CIMMessagePusher.java b/cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/cim/push/CIMMessagePusher.java similarity index 100% rename from ichat-server/src/main/java/com/farsunset/ichat/cim/push/CIMMessagePusher.java rename to cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/cim/push/CIMMessagePusher.java diff --git a/ichat-server/src/main/java/com/farsunset/ichat/cim/push/DefaultMessagePusher.java b/cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/cim/push/DefaultMessagePusher.java similarity index 100% rename from ichat-server/src/main/java/com/farsunset/ichat/cim/push/DefaultMessagePusher.java rename to cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/cim/push/DefaultMessagePusher.java diff --git a/ichat-server/src/main/java/com/farsunset/ichat/cim/push/SystemMessagePusher.java b/cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/cim/push/SystemMessagePusher.java similarity index 100% rename from ichat-server/src/main/java/com/farsunset/ichat/cim/push/SystemMessagePusher.java rename to cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/cim/push/SystemMessagePusher.java diff --git a/ichat-server/src/main/java/com/farsunset/ichat/cim/session/ClusterSessionManager.java b/cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/cim/session/ClusterSessionManager.java similarity index 100% rename from ichat-server/src/main/java/com/farsunset/ichat/cim/session/ClusterSessionManager.java rename to cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/cim/session/ClusterSessionManager.java diff --git a/ichat-server/src/main/java/com/farsunset/ichat/common/util/Constants.java b/cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/common/util/Constants.java similarity index 100% rename from ichat-server/src/main/java/com/farsunset/ichat/common/util/Constants.java rename to cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/common/util/Constants.java diff --git a/ichat-server/src/main/java/com/farsunset/ichat/common/util/ContextHolder.java b/cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/common/util/ContextHolder.java similarity index 100% rename from ichat-server/src/main/java/com/farsunset/ichat/common/util/ContextHolder.java rename to cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/common/util/ContextHolder.java diff --git a/ichat-server/src/main/java/com/farsunset/ichat/common/util/MessageDispatcher.java b/cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/common/util/MessageDispatcher.java similarity index 100% rename from ichat-server/src/main/java/com/farsunset/ichat/common/util/MessageDispatcher.java rename to cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/common/util/MessageDispatcher.java diff --git a/ichat-server/src/main/java/com/farsunset/ichat/common/util/StringUtil.java b/cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/common/util/StringUtil.java similarity index 100% rename from ichat-server/src/main/java/com/farsunset/ichat/common/util/StringUtil.java rename to cim_for_mina/ichat-server/src/main/java/com/farsunset/ichat/common/util/StringUtil.java diff --git a/ichat-server/src/main/resource/log4j.properties b/cim_for_mina/ichat-server/src/main/resource/log4j.properties similarity index 100% rename from ichat-server/src/main/resource/log4j.properties rename to cim_for_mina/ichat-server/src/main/resource/log4j.properties diff --git a/ichat-server/src/main/resource/spring-cim.xml b/cim_for_mina/ichat-server/src/main/resource/spring-cim.xml similarity index 100% rename from ichat-server/src/main/resource/spring-cim.xml rename to cim_for_mina/ichat-server/src/main/resource/spring-cim.xml diff --git a/ichat-server/src/main/resource/spring-config.xml b/cim_for_mina/ichat-server/src/main/resource/spring-config.xml similarity index 100% rename from ichat-server/src/main/resource/spring-config.xml rename to cim_for_mina/ichat-server/src/main/resource/spring-config.xml diff --git a/ichat-server/src/main/resource/spring-push.xml b/cim_for_mina/ichat-server/src/main/resource/spring-push.xml similarity index 100% rename from ichat-server/src/main/resource/spring-push.xml rename to cim_for_mina/ichat-server/src/main/resource/spring-push.xml diff --git a/ichat-server/src/main/resource/struts.xml b/cim_for_mina/ichat-server/src/main/resource/struts.xml similarity index 100% rename from ichat-server/src/main/resource/struts.xml rename to cim_for_mina/ichat-server/src/main/resource/struts.xml diff --git a/mchat-simple/.classpath b/cim_for_mina/mchat-simple/.classpath similarity index 100% rename from mchat-simple/.classpath rename to cim_for_mina/mchat-simple/.classpath diff --git a/mchat-simple/.project b/cim_for_mina/mchat-simple/.project similarity index 100% rename from mchat-simple/.project rename to cim_for_mina/mchat-simple/.project diff --git a/mchat-simple/.settings/org.eclipse.core.resources.prefs b/cim_for_mina/mchat-simple/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from mchat-simple/.settings/org.eclipse.core.resources.prefs rename to cim_for_mina/mchat-simple/.settings/org.eclipse.core.resources.prefs diff --git a/mchat-simple/AndroidManifest.xml b/cim_for_mina/mchat-simple/AndroidManifest.xml similarity index 100% rename from mchat-simple/AndroidManifest.xml rename to cim_for_mina/mchat-simple/AndroidManifest.xml diff --git a/mchat-simple/gen/com/farsunset/ichat/example/BuildConfig.java b/cim_for_mina/mchat-simple/gen/com/farsunset/ichat/example/BuildConfig.java similarity index 100% rename from mchat-simple/gen/com/farsunset/ichat/example/BuildConfig.java rename to cim_for_mina/mchat-simple/gen/com/farsunset/ichat/example/BuildConfig.java diff --git a/mchat-simple/gen/com/farsunset/ichat/example/R.java b/cim_for_mina/mchat-simple/gen/com/farsunset/ichat/example/R.java similarity index 100% rename from mchat-simple/gen/com/farsunset/ichat/example/R.java rename to cim_for_mina/mchat-simple/gen/com/farsunset/ichat/example/R.java diff --git a/mchat-simple/libs/android-support-v4.jar b/cim_for_mina/mchat-simple/libs/android-support-v4.jar similarity index 100% rename from mchat-simple/libs/android-support-v4.jar rename to cim_for_mina/mchat-simple/libs/android-support-v4.jar diff --git a/mchat-simple/libs/cim-core.1.4.jar b/cim_for_mina/mchat-simple/libs/cim-core.1.4.jar similarity index 100% rename from mchat-simple/libs/cim-core.1.4.jar rename to cim_for_mina/mchat-simple/libs/cim-core.1.4.jar diff --git a/mchat-simple/libs/fastjson-1.1.34.android.jar b/cim_for_mina/mchat-simple/libs/fastjson-1.1.34.android.jar similarity index 100% rename from mchat-simple/libs/fastjson-1.1.34.android.jar rename to cim_for_mina/mchat-simple/libs/fastjson-1.1.34.android.jar diff --git a/mchat-simple/libs/httpmime-4.1.1.jar b/cim_for_mina/mchat-simple/libs/httpmime-4.1.1.jar similarity index 100% rename from mchat-simple/libs/httpmime-4.1.1.jar rename to cim_for_mina/mchat-simple/libs/httpmime-4.1.1.jar diff --git a/mchat-simple/libs/mina-core-2.0.7.jar b/cim_for_mina/mchat-simple/libs/mina-core-2.0.7.jar similarity index 100% rename from mchat-simple/libs/mina-core-2.0.7.jar rename to cim_for_mina/mchat-simple/libs/mina-core-2.0.7.jar diff --git a/mchat-simple/libs/slf4j-api-1.7.5.jar b/cim_for_mina/mchat-simple/libs/slf4j-api-1.7.5.jar similarity index 100% rename from mchat-simple/libs/slf4j-api-1.7.5.jar rename to cim_for_mina/mchat-simple/libs/slf4j-api-1.7.5.jar diff --git a/mchat-simple/libs/slf4j-nop-1.7.5.jar b/cim_for_mina/mchat-simple/libs/slf4j-nop-1.7.5.jar similarity index 100% rename from mchat-simple/libs/slf4j-nop-1.7.5.jar rename to cim_for_mina/mchat-simple/libs/slf4j-nop-1.7.5.jar diff --git a/mchat-simple/lint.xml b/cim_for_mina/mchat-simple/lint.xml similarity index 100% rename from mchat-simple/lint.xml rename to cim_for_mina/mchat-simple/lint.xml diff --git a/mchat-simple/proguard.cfg b/cim_for_mina/mchat-simple/proguard.cfg similarity index 100% rename from mchat-simple/proguard.cfg rename to cim_for_mina/mchat-simple/proguard.cfg diff --git a/mchat-simple/project.properties b/cim_for_mina/mchat-simple/project.properties similarity index 100% rename from mchat-simple/project.properties rename to cim_for_mina/mchat-simple/project.properties diff --git a/mchat-simple/res/anim/activity_back.xml b/cim_for_mina/mchat-simple/res/anim/activity_back.xml similarity index 100% rename from mchat-simple/res/anim/activity_back.xml rename to cim_for_mina/mchat-simple/res/anim/activity_back.xml diff --git a/mchat-simple/res/anim/activity_finish.xml b/cim_for_mina/mchat-simple/res/anim/activity_finish.xml similarity index 100% rename from mchat-simple/res/anim/activity_finish.xml rename to cim_for_mina/mchat-simple/res/anim/activity_finish.xml diff --git a/mchat-simple/res/anim/activity_new.xml b/cim_for_mina/mchat-simple/res/anim/activity_new.xml similarity index 100% rename from mchat-simple/res/anim/activity_new.xml rename to cim_for_mina/mchat-simple/res/anim/activity_new.xml diff --git a/mchat-simple/res/anim/activity_out.xml b/cim_for_mina/mchat-simple/res/anim/activity_out.xml similarity index 100% rename from mchat-simple/res/anim/activity_out.xml rename to cim_for_mina/mchat-simple/res/anim/activity_out.xml diff --git a/mchat-simple/res/anim/appear.xml b/cim_for_mina/mchat-simple/res/anim/appear.xml similarity index 100% rename from mchat-simple/res/anim/appear.xml rename to cim_for_mina/mchat-simple/res/anim/appear.xml diff --git a/mchat-simple/res/anim/disappear.xml b/cim_for_mina/mchat-simple/res/anim/disappear.xml similarity index 100% rename from mchat-simple/res/anim/disappear.xml rename to cim_for_mina/mchat-simple/res/anim/disappear.xml diff --git a/mchat-simple/res/anim/disappear_del.xml b/cim_for_mina/mchat-simple/res/anim/disappear_del.xml similarity index 100% rename from mchat-simple/res/anim/disappear_del.xml rename to cim_for_mina/mchat-simple/res/anim/disappear_del.xml diff --git a/mchat-simple/res/anim/extension_appear_from_bottom_to_top.xml b/cim_for_mina/mchat-simple/res/anim/extension_appear_from_bottom_to_top.xml similarity index 100% rename from mchat-simple/res/anim/extension_appear_from_bottom_to_top.xml rename to cim_for_mina/mchat-simple/res/anim/extension_appear_from_bottom_to_top.xml diff --git a/mchat-simple/res/anim/extension_disappear_from_top_to_bottom.xml b/cim_for_mina/mchat-simple/res/anim/extension_disappear_from_top_to_bottom.xml similarity index 100% rename from mchat-simple/res/anim/extension_disappear_from_top_to_bottom.xml rename to cim_for_mina/mchat-simple/res/anim/extension_disappear_from_top_to_bottom.xml diff --git a/mchat-simple/res/anim/rotate.xml b/cim_for_mina/mchat-simple/res/anim/rotate.xml similarity index 100% rename from mchat-simple/res/anim/rotate.xml rename to cim_for_mina/mchat-simple/res/anim/rotate.xml diff --git a/mchat-simple/res/anim/slide_in_from_bottom.xml b/cim_for_mina/mchat-simple/res/anim/slide_in_from_bottom.xml similarity index 100% rename from mchat-simple/res/anim/slide_in_from_bottom.xml rename to cim_for_mina/mchat-simple/res/anim/slide_in_from_bottom.xml diff --git a/mchat-simple/res/anim/slide_in_from_left.xml b/cim_for_mina/mchat-simple/res/anim/slide_in_from_left.xml similarity index 100% rename from mchat-simple/res/anim/slide_in_from_left.xml rename to cim_for_mina/mchat-simple/res/anim/slide_in_from_left.xml diff --git a/mchat-simple/res/anim/slide_out_to_bottom.xml b/cim_for_mina/mchat-simple/res/anim/slide_out_to_bottom.xml similarity index 100% rename from mchat-simple/res/anim/slide_out_to_bottom.xml rename to cim_for_mina/mchat-simple/res/anim/slide_out_to_bottom.xml diff --git a/mchat-simple/res/anim/slide_out_to_right.xml b/cim_for_mina/mchat-simple/res/anim/slide_out_to_right.xml similarity index 100% rename from mchat-simple/res/anim/slide_out_to_right.xml rename to cim_for_mina/mchat-simple/res/anim/slide_out_to_right.xml diff --git a/mchat-simple/res/color/login_text_button_selector.xml b/cim_for_mina/mchat-simple/res/color/login_text_button_selector.xml similarity index 100% rename from mchat-simple/res/color/login_text_button_selector.xml rename to cim_for_mina/mchat-simple/res/color/login_text_button_selector.xml diff --git a/mchat-simple/res/drawable-320dpi/action_sheet_base_9.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/action_sheet_base_9.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/action_sheet_base_9.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/action_sheet_base_9.9.png diff --git a/mchat-simple/res/drawable-320dpi/add_contacts_create_troop.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/add_contacts_create_troop.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/add_contacts_create_troop.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/add_contacts_create_troop.png diff --git a/mchat-simple/res/drawable-320dpi/add_contacts_look_for_similarity.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/add_contacts_look_for_similarity.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/add_contacts_look_for_similarity.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/add_contacts_look_for_similarity.png diff --git a/mchat-simple/res/drawable-320dpi/add_contacts_look_for_troop.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/add_contacts_look_for_troop.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/add_contacts_look_for_troop.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/add_contacts_look_for_troop.png diff --git a/mchat-simple/res/drawable-320dpi/aio_friend_bg_nor.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/aio_friend_bg_nor.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/aio_friend_bg_nor.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/aio_friend_bg_nor.9.png diff --git a/mchat-simple/res/drawable-320dpi/aio_friend_bg_pressed.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/aio_friend_bg_pressed.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/aio_friend_bg_pressed.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/aio_friend_bg_pressed.9.png diff --git a/mchat-simple/res/drawable-320dpi/aio_user_bg_nor.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/aio_user_bg_nor.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/aio_user_bg_nor.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/aio_user_bg_nor.9.png diff --git a/mchat-simple/res/drawable-320dpi/aio_user_bg_pressed.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/aio_user_bg_pressed.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/aio_user_bg_pressed.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/aio_user_bg_pressed.9.png diff --git a/mchat-simple/res/drawable-320dpi/card_avatar.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/card_avatar.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/card_avatar.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/card_avatar.9.png diff --git a/mchat-simple/res/drawable-320dpi/chat_tool_camera.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/chat_tool_camera.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/chat_tool_camera.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/chat_tool_camera.png diff --git a/mchat-simple/res/drawable-320dpi/chat_tool_location.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/chat_tool_location.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/chat_tool_location.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/chat_tool_location.png diff --git a/mchat-simple/res/drawable-320dpi/chat_tool_photo.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/chat_tool_photo.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/chat_tool_photo.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/chat_tool_photo.png diff --git a/mchat-simple/res/drawable-320dpi/chat_tool_send_file.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/chat_tool_send_file.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/chat_tool_send_file.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/chat_tool_send_file.png diff --git a/mchat-simple/res/drawable-320dpi/common_loading_0.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_0.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/common_loading_0.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_0.png diff --git a/mchat-simple/res/drawable-320dpi/common_loading_1.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_1.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/common_loading_1.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_1.png diff --git a/mchat-simple/res/drawable-320dpi/common_loading_10.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_10.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/common_loading_10.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_10.png diff --git a/mchat-simple/res/drawable-320dpi/common_loading_11.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_11.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/common_loading_11.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_11.png diff --git a/mchat-simple/res/drawable-320dpi/common_loading_2.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_2.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/common_loading_2.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_2.png diff --git a/mchat-simple/res/drawable-320dpi/common_loading_3.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_3.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/common_loading_3.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_3.png diff --git a/mchat-simple/res/drawable-320dpi/common_loading_4.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_4.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/common_loading_4.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_4.png diff --git a/mchat-simple/res/drawable-320dpi/common_loading_5.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_5.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/common_loading_5.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_5.png diff --git a/mchat-simple/res/drawable-320dpi/common_loading_6.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_6.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/common_loading_6.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_6.png diff --git a/mchat-simple/res/drawable-320dpi/common_loading_7.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_7.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/common_loading_7.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_7.png diff --git a/mchat-simple/res/drawable-320dpi/common_loading_8.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_8.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/common_loading_8.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_8.png diff --git a/mchat-simple/res/drawable-320dpi/common_loading_9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/common_loading_9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/common_loading_9.png diff --git a/mchat-simple/res/drawable-320dpi/ic_date_time.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/ic_date_time.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/ic_date_time.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/ic_date_time.png diff --git a/mchat-simple/res/drawable-320dpi/ic_read.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/ic_read.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/ic_read.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/ic_read.png diff --git a/mchat-simple/res/drawable-320dpi/icon_addfriend.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/icon_addfriend.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/icon_addfriend.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/icon_addfriend.png diff --git a/mchat-simple/res/drawable-320dpi/icon_face_click.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/icon_face_click.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/icon_face_click.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/icon_face_click.png diff --git a/mchat-simple/res/drawable-320dpi/icon_face_nor.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/icon_face_nor.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/icon_face_nor.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/icon_face_nor.png diff --git a/mchat-simple/res/drawable-320dpi/icon_joinfroup.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/icon_joinfroup.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/icon_joinfroup.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/icon_joinfroup.png diff --git a/mchat-simple/res/drawable-320dpi/icon_more.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/icon_more.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/icon_more.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/icon_more.png diff --git a/mchat-simple/res/drawable-320dpi/icon_recent_sysmsg.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/icon_recent_sysmsg.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/icon_recent_sysmsg.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/icon_recent_sysmsg.png diff --git a/mchat-simple/res/drawable-320dpi/input_box_bg.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/input_box_bg.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/input_box_bg.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/input_box_bg.9.png diff --git a/mchat-simple/res/drawable-320dpi/list_head_border_whitebg.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/list_head_border_whitebg.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/list_head_border_whitebg.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/list_head_border_whitebg.9.png diff --git a/mchat-simple/res/drawable-320dpi/login_default_avatar.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/login_default_avatar.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/login_default_avatar.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/login_default_avatar.png diff --git a/mchat-simple/res/drawable-320dpi/mchat_navbar_tab_m_normal.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/mchat_navbar_tab_m_normal.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/mchat_navbar_tab_m_normal.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/mchat_navbar_tab_m_normal.9.png diff --git a/mchat-simple/res/drawable-320dpi/mchat_navbar_tab_m_pressed.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/mchat_navbar_tab_m_pressed.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/mchat_navbar_tab_m_pressed.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/mchat_navbar_tab_m_pressed.9.png diff --git a/mchat-simple/res/drawable-320dpi/profile_photowall_avatar_frame_nor.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/profile_photowall_avatar_frame_nor.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/profile_photowall_avatar_frame_nor.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/profile_photowall_avatar_frame_nor.9.png diff --git a/mchat-simple/res/drawable-320dpi/profile_photowall_bg_female.jpg b/cim_for_mina/mchat-simple/res/drawable-320dpi/profile_photowall_bg_female.jpg similarity index 100% rename from mchat-simple/res/drawable-320dpi/profile_photowall_bg_female.jpg rename to cim_for_mina/mchat-simple/res/drawable-320dpi/profile_photowall_bg_female.jpg diff --git a/mchat-simple/res/drawable-320dpi/profile_photowall_bg_male.jpg b/cim_for_mina/mchat-simple/res/drawable-320dpi/profile_photowall_bg_male.jpg similarity index 100% rename from mchat-simple/res/drawable-320dpi/profile_photowall_bg_male.jpg rename to cim_for_mina/mchat-simple/res/drawable-320dpi/profile_photowall_bg_male.jpg diff --git a/mchat-simple/res/drawable-320dpi/skin_aio_input_bar_bg.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_aio_input_bar_bg.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_aio_input_bar_bg.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_aio_input_bar_bg.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_aio_more_nor.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_aio_more_nor.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_aio_more_nor.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_aio_more_nor.png diff --git a/mchat-simple/res/drawable-320dpi/skin_aio_more_pressed.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_aio_more_pressed.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_aio_more_pressed.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_aio_more_pressed.png diff --git a/mchat-simple/res/drawable-320dpi/skin_aio_send_button_normal.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_aio_send_button_normal.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_aio_send_button_normal.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_aio_send_button_normal.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_aio_send_button_pressed.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_aio_send_button_pressed.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_aio_send_button_pressed.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_aio_send_button_pressed.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_bottom_bar_background.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_bottom_bar_background.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_bottom_bar_background.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_bottom_bar_background.png diff --git a/mchat-simple/res/drawable-320dpi/skin_common_btn_blue_bg_pressed.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_blue_bg_pressed.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_common_btn_blue_bg_pressed.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_blue_bg_pressed.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_common_btn_blue_unpressed.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_blue_unpressed.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_common_btn_blue_unpressed.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_blue_unpressed.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_common_btn_green_disable.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_green_disable.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_common_btn_green_disable.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_green_disable.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_common_btn_green_normal.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_green_normal.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_common_btn_green_normal.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_green_normal.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_common_btn_green_pressed.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_green_pressed.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_common_btn_green_pressed.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_green_pressed.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_common_btn_red_disabled.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_red_disabled.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_common_btn_red_disabled.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_red_disabled.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_common_btn_red_pressed.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_red_pressed.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_common_btn_red_pressed.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_red_pressed.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_common_btn_red_unpressed.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_red_unpressed.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_common_btn_red_unpressed.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_red_unpressed.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_common_btn_white_disabled.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_white_disabled.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_common_btn_white_disabled.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_white_disabled.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_common_btn_white_pressed.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_white_pressed.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_common_btn_white_pressed.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_white_pressed.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_common_btn_white_unpressed.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_white_unpressed.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_common_btn_white_unpressed.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_common_btn_white_unpressed.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_contact_add_btn_normal.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_contact_add_btn_normal.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_contact_add_btn_normal.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_contact_add_btn_normal.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_contact_add_btn_press.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_contact_add_btn_press.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_contact_add_btn_press.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_contact_add_btn_press.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_header_bar_bg.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_bar_bg.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_header_bar_bg.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_bar_bg.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_header_btn_back_normal.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_btn_back_normal.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_header_btn_back_normal.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_btn_back_normal.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_header_btn_back_press.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_btn_back_press.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_header_btn_back_press.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_btn_back_press.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_header_btn_disable.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_btn_disable.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_header_btn_disable.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_btn_disable.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_header_btn_indicative_normal.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_btn_indicative_normal.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_header_btn_indicative_normal.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_btn_indicative_normal.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_header_btn_indicative_press.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_btn_indicative_press.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_header_btn_indicative_press.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_btn_indicative_press.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_header_btn_normal.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_btn_normal.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_header_btn_normal.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_btn_normal.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_header_btn_press.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_btn_press.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_header_btn_press.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_btn_press.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_header_icon_group.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_icon_group.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_header_icon_group.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_icon_group.png diff --git a/mchat-simple/res/drawable-320dpi/skin_header_icon_single.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_icon_single.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_header_icon_single.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_icon_single.png diff --git a/mchat-simple/res/drawable-320dpi/skin_header_tab_left_normal.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_tab_left_normal.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_header_tab_left_normal.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_tab_left_normal.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_header_tab_left_pressed.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_tab_left_pressed.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_header_tab_left_pressed.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_tab_left_pressed.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_header_tab_right_normal.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_tab_right_normal.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_header_tab_right_normal.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_tab_right_normal.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_header_tab_right_pressed.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_tab_right_pressed.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_header_tab_right_pressed.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_header_tab_right_pressed.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_tab_icon_contact_normal.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_icon_contact_normal.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_tab_icon_contact_normal.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_icon_contact_normal.png diff --git a/mchat-simple/res/drawable-320dpi/skin_tab_icon_contact_selected.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_icon_contact_selected.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_tab_icon_contact_selected.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_icon_contact_selected.png diff --git a/mchat-simple/res/drawable-320dpi/skin_tab_icon_conversation_normal.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_icon_conversation_normal.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_tab_icon_conversation_normal.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_icon_conversation_normal.png diff --git a/mchat-simple/res/drawable-320dpi/skin_tab_icon_conversation_selected.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_icon_conversation_selected.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_tab_icon_conversation_selected.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_icon_conversation_selected.png diff --git a/mchat-simple/res/drawable-320dpi/skin_tab_icon_plugin_normal.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_icon_plugin_normal.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_tab_icon_plugin_normal.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_icon_plugin_normal.png diff --git a/mchat-simple/res/drawable-320dpi/skin_tab_icon_plugin_selected.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_icon_plugin_selected.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_tab_icon_plugin_selected.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_icon_plugin_selected.png diff --git a/mchat-simple/res/drawable-320dpi/skin_tab_icon_setup_normal.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_icon_setup_normal.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_tab_icon_setup_normal.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_icon_setup_normal.png diff --git a/mchat-simple/res/drawable-320dpi/skin_tab_icon_setup_selected.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_icon_setup_selected.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_tab_icon_setup_selected.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_icon_setup_selected.png diff --git a/mchat-simple/res/drawable-320dpi/skin_tab_newmessage.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_newmessage.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_tab_newmessage.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_newmessage.png diff --git a/mchat-simple/res/drawable-320dpi/skin_tab_newmessage2.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_newmessage2.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_tab_newmessage2.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tab_newmessage2.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_tabbar_tab_select.9.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tabbar_tab_select.9.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_tabbar_tab_select.9.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tabbar_tab_select.9.png diff --git a/mchat-simple/res/drawable-320dpi/skin_tabbar_tab_select_left.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tabbar_tab_select_left.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_tabbar_tab_select_left.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tabbar_tab_select_left.png diff --git a/mchat-simple/res/drawable-320dpi/skin_tabbar_tab_select_right.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tabbar_tab_select_right.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/skin_tabbar_tab_select_right.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/skin_tabbar_tab_select_right.png diff --git a/mchat-simple/res/drawable-320dpi/tab_new.png b/cim_for_mina/mchat-simple/res/drawable-320dpi/tab_new.png similarity index 100% rename from mchat-simple/res/drawable-320dpi/tab_new.png rename to cim_for_mina/mchat-simple/res/drawable-320dpi/tab_new.png diff --git a/mchat-simple/res/drawable-hdpi/aicon_error.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/aicon_error.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/aicon_error.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/aicon_error.png diff --git a/mchat-simple/res/drawable-hdpi/app_main_bg.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/app_main_bg.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/app_main_bg.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/app_main_bg.png diff --git a/mchat-simple/res/drawable-hdpi/arrow.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/arrow.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/arrow.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/arrow.png diff --git a/mchat-simple/res/drawable-hdpi/blue_button_normal.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/blue_button_normal.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/blue_button_normal.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/blue_button_normal.9.png diff --git a/mchat-simple/res/drawable-hdpi/blue_button_pressed.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/blue_button_pressed.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/blue_button_pressed.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/blue_button_pressed.9.png diff --git a/mchat-simple/res/drawable-hdpi/bodylisttop.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/bodylisttop.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/bodylisttop.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/bodylisttop.9.png diff --git a/mchat-simple/res/drawable-hdpi/bottom.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/bottom.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/bottom.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/bottom.9.png diff --git a/mchat-simple/res/drawable-hdpi/btn_check_off.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/btn_check_off.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/btn_check_off.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/btn_check_off.png diff --git a/mchat-simple/res/drawable-hdpi/btn_check_on.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/btn_check_on.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/btn_check_on.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/btn_check_on.png diff --git a/mchat-simple/res/drawable-hdpi/chat_time_block.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/chat_time_block.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/chat_time_block.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/chat_time_block.9.png diff --git a/mchat-simple/res/drawable-hdpi/close_del.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/close_del.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/close_del.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/close_del.png diff --git a/mchat-simple/res/drawable-hdpi/close_pressed.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/close_pressed.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/close_pressed.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/close_pressed.png diff --git a/mchat-simple/res/drawable-hdpi/colorful_line.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/colorful_line.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/colorful_line.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/colorful_line.png diff --git a/mchat-simple/res/drawable-hdpi/conversation_loading_icon.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/conversation_loading_icon.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/conversation_loading_icon.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/conversation_loading_icon.png diff --git a/mchat-simple/res/drawable-hdpi/conversation_net_error_icon.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/conversation_net_error_icon.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/conversation_net_error_icon.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/conversation_net_error_icon.png diff --git a/mchat-simple/res/drawable-hdpi/cutline.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/cutline.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/cutline.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/cutline.png diff --git a/mchat-simple/res/drawable-hdpi/edittext_bg.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/edittext_bg.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/edittext_bg.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/edittext_bg.9.png diff --git a/mchat-simple/res/drawable-hdpi/f000.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f000.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f000.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f000.gif diff --git a/mchat-simple/res/drawable-hdpi/f001.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f001.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f001.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f001.gif diff --git a/mchat-simple/res/drawable-hdpi/f002.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f002.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f002.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f002.gif diff --git a/mchat-simple/res/drawable-hdpi/f003.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f003.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f003.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f003.gif diff --git a/mchat-simple/res/drawable-hdpi/f004.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f004.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f004.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f004.gif diff --git a/mchat-simple/res/drawable-hdpi/f005.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f005.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f005.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f005.gif diff --git a/mchat-simple/res/drawable-hdpi/f006.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f006.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f006.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f006.gif diff --git a/mchat-simple/res/drawable-hdpi/f007.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f007.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f007.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f007.png diff --git a/mchat-simple/res/drawable-hdpi/f008.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f008.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f008.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f008.png diff --git a/mchat-simple/res/drawable-hdpi/f009.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f009.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f009.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f009.gif diff --git a/mchat-simple/res/drawable-hdpi/f010.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f010.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f010.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f010.gif diff --git a/mchat-simple/res/drawable-hdpi/f011.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f011.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f011.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f011.gif diff --git a/mchat-simple/res/drawable-hdpi/f012.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f012.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f012.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f012.gif diff --git a/mchat-simple/res/drawable-hdpi/f013.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f013.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f013.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f013.gif diff --git a/mchat-simple/res/drawable-hdpi/f014.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f014.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f014.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f014.gif diff --git a/mchat-simple/res/drawable-hdpi/f015.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f015.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f015.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f015.gif diff --git a/mchat-simple/res/drawable-hdpi/f016.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f016.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f016.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f016.png diff --git a/mchat-simple/res/drawable-hdpi/f017.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f017.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f017.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f017.gif diff --git a/mchat-simple/res/drawable-hdpi/f018.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f018.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f018.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f018.gif diff --git a/mchat-simple/res/drawable-hdpi/f019.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f019.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f019.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f019.gif diff --git a/mchat-simple/res/drawable-hdpi/f020.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f020.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f020.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f020.gif diff --git a/mchat-simple/res/drawable-hdpi/f021.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f021.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f021.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f021.gif diff --git a/mchat-simple/res/drawable-hdpi/f022.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f022.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f022.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f022.gif diff --git a/mchat-simple/res/drawable-hdpi/f023.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f023.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f023.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f023.gif diff --git a/mchat-simple/res/drawable-hdpi/f024.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f024.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f024.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f024.gif diff --git a/mchat-simple/res/drawable-hdpi/f025.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f025.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f025.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f025.gif diff --git a/mchat-simple/res/drawable-hdpi/f026.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f026.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f026.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f026.gif diff --git a/mchat-simple/res/drawable-hdpi/f027.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f027.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f027.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f027.gif diff --git a/mchat-simple/res/drawable-hdpi/f028.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f028.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f028.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f028.png diff --git a/mchat-simple/res/drawable-hdpi/f029.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f029.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f029.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f029.gif diff --git a/mchat-simple/res/drawable-hdpi/f030.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f030.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f030.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f030.gif diff --git a/mchat-simple/res/drawable-hdpi/f031.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f031.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f031.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f031.gif diff --git a/mchat-simple/res/drawable-hdpi/f032.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f032.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f032.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f032.png diff --git a/mchat-simple/res/drawable-hdpi/f033.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f033.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f033.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f033.gif diff --git a/mchat-simple/res/drawable-hdpi/f034.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f034.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f034.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f034.gif diff --git a/mchat-simple/res/drawable-hdpi/f035.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f035.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f035.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f035.gif diff --git a/mchat-simple/res/drawable-hdpi/f036.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f036.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f036.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f036.gif diff --git a/mchat-simple/res/drawable-hdpi/f037.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f037.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f037.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f037.gif diff --git a/mchat-simple/res/drawable-hdpi/f038.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f038.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f038.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f038.gif diff --git a/mchat-simple/res/drawable-hdpi/f039.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f039.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f039.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f039.png diff --git a/mchat-simple/res/drawable-hdpi/f040.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f040.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f040.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f040.gif diff --git a/mchat-simple/res/drawable-hdpi/f041.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f041.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f041.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f041.gif diff --git a/mchat-simple/res/drawable-hdpi/f042.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f042.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f042.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f042.gif diff --git a/mchat-simple/res/drawable-hdpi/f043.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f043.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f043.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f043.gif diff --git a/mchat-simple/res/drawable-hdpi/f044.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f044.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f044.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f044.gif diff --git a/mchat-simple/res/drawable-hdpi/f045.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f045.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f045.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f045.gif diff --git a/mchat-simple/res/drawable-hdpi/f046.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f046.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f046.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f046.gif diff --git a/mchat-simple/res/drawable-hdpi/f047.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f047.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f047.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f047.png diff --git a/mchat-simple/res/drawable-hdpi/f048.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f048.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f048.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f048.gif diff --git a/mchat-simple/res/drawable-hdpi/f049.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f049.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f049.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f049.gif diff --git a/mchat-simple/res/drawable-hdpi/f050.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f050.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f050.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f050.gif diff --git a/mchat-simple/res/drawable-hdpi/f051.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f051.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f051.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f051.gif diff --git a/mchat-simple/res/drawable-hdpi/f052.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f052.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f052.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f052.gif diff --git a/mchat-simple/res/drawable-hdpi/f053.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f053.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f053.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f053.gif diff --git a/mchat-simple/res/drawable-hdpi/f054.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f054.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f054.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f054.gif diff --git a/mchat-simple/res/drawable-hdpi/f055.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f055.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f055.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f055.gif diff --git a/mchat-simple/res/drawable-hdpi/f056.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f056.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f056.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f056.gif diff --git a/mchat-simple/res/drawable-hdpi/f057.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f057.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f057.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f057.png diff --git a/mchat-simple/res/drawable-hdpi/f058.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f058.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f058.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f058.png diff --git a/mchat-simple/res/drawable-hdpi/f059.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f059.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f059.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f059.gif diff --git a/mchat-simple/res/drawable-hdpi/f060.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f060.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f060.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f060.png diff --git a/mchat-simple/res/drawable-hdpi/f061.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f061.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f061.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f061.gif diff --git a/mchat-simple/res/drawable-hdpi/f062.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f062.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f062.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f062.gif diff --git a/mchat-simple/res/drawable-hdpi/f063.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f063.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f063.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f063.gif diff --git a/mchat-simple/res/drawable-hdpi/f064.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f064.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f064.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f064.png diff --git a/mchat-simple/res/drawable-hdpi/f065.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f065.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f065.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f065.gif diff --git a/mchat-simple/res/drawable-hdpi/f066.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f066.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f066.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f066.gif diff --git a/mchat-simple/res/drawable-hdpi/f067.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f067.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f067.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f067.png diff --git a/mchat-simple/res/drawable-hdpi/f068.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f068.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f068.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f068.png diff --git a/mchat-simple/res/drawable-hdpi/f069.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f069.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f069.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f069.png diff --git a/mchat-simple/res/drawable-hdpi/f070.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f070.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f070.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f070.gif diff --git a/mchat-simple/res/drawable-hdpi/f071.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f071.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f071.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f071.png diff --git a/mchat-simple/res/drawable-hdpi/f072.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f072.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f072.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f072.gif diff --git a/mchat-simple/res/drawable-hdpi/f073.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f073.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f073.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f073.gif diff --git a/mchat-simple/res/drawable-hdpi/f074.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f074.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f074.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f074.gif diff --git a/mchat-simple/res/drawable-hdpi/f075.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f075.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f075.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f075.png diff --git a/mchat-simple/res/drawable-hdpi/f076.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f076.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f076.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f076.png diff --git a/mchat-simple/res/drawable-hdpi/f077.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f077.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f077.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f077.gif diff --git a/mchat-simple/res/drawable-hdpi/f078.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f078.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f078.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f078.png diff --git a/mchat-simple/res/drawable-hdpi/f079.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f079.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f079.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f079.gif diff --git a/mchat-simple/res/drawable-hdpi/f080.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f080.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f080.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f080.png diff --git a/mchat-simple/res/drawable-hdpi/f081.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f081.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f081.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f081.gif diff --git a/mchat-simple/res/drawable-hdpi/f082.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f082.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f082.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f082.gif diff --git a/mchat-simple/res/drawable-hdpi/f083.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f083.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f083.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f083.gif diff --git a/mchat-simple/res/drawable-hdpi/f084.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f084.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f084.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f084.gif diff --git a/mchat-simple/res/drawable-hdpi/f085.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f085.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f085.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f085.gif diff --git a/mchat-simple/res/drawable-hdpi/f086.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f086.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f086.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f086.gif diff --git a/mchat-simple/res/drawable-hdpi/f087.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f087.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f087.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f087.gif diff --git a/mchat-simple/res/drawable-hdpi/f088.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f088.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f088.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f088.gif diff --git a/mchat-simple/res/drawable-hdpi/f089.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f089.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f089.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f089.gif diff --git a/mchat-simple/res/drawable-hdpi/f090.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f090.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f090.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f090.gif diff --git a/mchat-simple/res/drawable-hdpi/f091.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f091.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f091.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f091.gif diff --git a/mchat-simple/res/drawable-hdpi/f092.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f092.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f092.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f092.gif diff --git a/mchat-simple/res/drawable-hdpi/f093.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f093.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f093.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f093.gif diff --git a/mchat-simple/res/drawable-hdpi/f094.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f094.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f094.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f094.gif diff --git a/mchat-simple/res/drawable-hdpi/f095.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f095.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f095.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f095.gif diff --git a/mchat-simple/res/drawable-hdpi/f096.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f096.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f096.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f096.gif diff --git a/mchat-simple/res/drawable-hdpi/f097.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f097.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f097.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f097.gif diff --git a/mchat-simple/res/drawable-hdpi/f098.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f098.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f098.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f098.gif diff --git a/mchat-simple/res/drawable-hdpi/f099.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f099.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f099.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f099.gif diff --git a/mchat-simple/res/drawable-hdpi/f100.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f100.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f100.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f100.gif diff --git a/mchat-simple/res/drawable-hdpi/f101.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f101.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f101.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f101.gif diff --git a/mchat-simple/res/drawable-hdpi/f102.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f102.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f102.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f102.gif diff --git a/mchat-simple/res/drawable-hdpi/f103.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f103.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f103.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f103.gif diff --git a/mchat-simple/res/drawable-hdpi/f104.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f104.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f104.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f104.gif diff --git a/mchat-simple/res/drawable-hdpi/f105.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f105.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f105.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f105.gif diff --git a/mchat-simple/res/drawable-hdpi/f106.gif b/cim_for_mina/mchat-simple/res/drawable-hdpi/f106.gif similarity index 100% rename from mchat-simple/res/drawable-hdpi/f106.gif rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f106.gif diff --git a/mchat-simple/res/drawable-hdpi/f_static_000.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_000.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_000.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_000.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_001.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_001.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_001.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_001.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_002.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_002.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_002.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_002.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_003.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_003.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_003.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_003.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_004.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_004.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_004.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_004.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_005.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_005.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_005.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_005.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_006.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_006.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_006.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_006.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_007.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_007.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_007.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_007.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_008.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_008.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_008.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_008.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_009.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_009.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_009.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_009.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_010.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_010.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_010.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_010.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_011.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_011.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_011.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_011.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_012.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_012.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_012.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_012.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_013.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_013.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_013.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_013.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_014.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_014.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_014.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_014.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_015.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_015.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_015.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_015.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_016.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_016.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_016.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_016.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_017.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_017.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_017.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_017.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_018.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_018.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_018.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_018.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_019.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_019.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_019.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_019.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_020.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_020.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_020.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_020.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_021.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_021.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_021.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_021.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_022.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_022.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_022.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_022.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_023.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_023.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_023.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_023.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_024.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_024.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_024.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_024.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_025.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_025.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_025.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_025.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_026.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_026.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_026.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_026.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_027.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_027.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_027.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_027.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_028.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_028.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_028.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_028.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_029.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_029.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_029.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_029.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_030.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_030.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_030.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_030.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_031.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_031.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_031.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_031.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_032.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_032.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_032.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_032.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_033.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_033.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_033.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_033.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_034.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_034.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_034.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_034.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_035.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_035.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_035.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_035.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_036.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_036.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_036.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_036.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_037.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_037.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_037.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_037.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_038.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_038.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_038.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_038.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_039.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_039.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_039.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_039.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_040.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_040.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_040.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_040.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_041.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_041.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_041.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_041.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_042.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_042.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_042.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_042.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_043.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_043.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_043.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_043.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_044.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_044.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_044.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_044.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_045.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_045.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_045.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_045.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_046.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_046.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_046.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_046.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_047.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_047.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_047.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_047.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_048.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_048.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_048.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_048.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_049.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_049.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_049.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_049.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_050.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_050.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_050.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_050.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_051.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_051.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_051.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_051.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_052.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_052.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_052.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_052.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_053.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_053.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_053.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_053.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_054.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_054.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_054.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_054.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_055.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_055.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_055.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_055.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_056.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_056.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_056.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_056.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_057.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_057.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_057.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_057.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_058.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_058.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_058.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_058.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_059.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_059.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_059.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_059.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_060.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_060.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_060.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_060.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_061.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_061.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_061.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_061.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_062.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_062.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_062.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_062.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_063.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_063.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_063.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_063.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_064.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_064.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_064.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_064.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_065.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_065.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_065.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_065.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_066.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_066.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_066.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_066.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_067.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_067.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_067.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_067.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_068.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_068.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_068.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_068.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_069.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_069.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_069.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_069.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_070.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_070.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_070.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_070.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_071.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_071.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_071.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_071.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_072.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_072.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_072.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_072.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_073.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_073.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_073.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_073.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_074.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_074.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_074.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_074.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_075.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_075.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_075.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_075.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_076.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_076.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_076.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_076.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_077.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_077.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_077.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_077.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_078.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_078.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_078.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_078.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_079.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_079.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_079.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_079.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_080.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_080.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_080.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_080.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_081.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_081.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_081.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_081.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_082.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_082.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_082.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_082.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_083.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_083.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_083.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_083.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_084.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_084.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_084.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_084.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_085.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_085.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_085.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_085.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_086.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_086.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_086.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_086.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_087.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_087.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_087.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_087.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_088.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_088.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_088.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_088.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_089.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_089.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_089.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_089.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_090.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_090.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_090.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_090.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_091.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_091.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_091.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_091.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_092.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_092.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_092.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_092.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_093.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_093.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_093.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_093.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_094.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_094.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_094.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_094.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_095.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_095.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_095.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_095.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_096.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_096.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_096.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_096.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_097.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_097.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_097.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_097.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_098.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_098.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_098.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_098.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_099.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_099.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_099.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_099.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_100.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_100.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_100.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_100.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_101.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_101.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_101.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_101.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_102.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_102.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_102.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_102.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_103.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_103.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_103.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_103.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_104.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_104.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_104.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_104.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_105.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_105.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_105.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_105.png diff --git a/mchat-simple/res/drawable-hdpi/f_static_106.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_106.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/f_static_106.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/f_static_106.png diff --git a/mchat-simple/res/drawable-hdpi/grouphead_normal.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/grouphead_normal.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/grouphead_normal.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/grouphead_normal.png diff --git a/mchat-simple/res/drawable-hdpi/h033.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/h033.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/h033.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/h033.png diff --git a/mchat-simple/res/drawable-hdpi/icon.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/icon.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/icon.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/icon.png diff --git a/mchat-simple/res/drawable-hdpi/icon_away.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/icon_away.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/icon_away.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/icon_away.png diff --git a/mchat-simple/res/drawable-hdpi/icon_error.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/icon_error.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/icon_error.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/icon_error.png diff --git a/mchat-simple/res/drawable-hdpi/icon_invisiable.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/icon_invisiable.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/icon_invisiable.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/icon_invisiable.png diff --git a/mchat-simple/res/drawable-hdpi/icon_logo.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/icon_logo.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/icon_logo.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/icon_logo.png diff --git a/mchat-simple/res/drawable-hdpi/icon_normal.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/icon_normal.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/icon_normal.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/icon_normal.png diff --git a/mchat-simple/res/drawable-hdpi/icon_notify.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/icon_notify.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/icon_notify.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/icon_notify.png diff --git a/mchat-simple/res/drawable-hdpi/icon_offline.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/icon_offline.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/icon_offline.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/icon_offline.png diff --git a/mchat-simple/res/drawable-hdpi/icon_online.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/icon_online.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/icon_online.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/icon_online.png diff --git a/mchat-simple/res/drawable-hdpi/icon_share.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/icon_share.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/icon_share.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/icon_share.png diff --git a/mchat-simple/res/drawable-hdpi/icon_success.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/icon_success.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/icon_success.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/icon_success.png diff --git a/mchat-simple/res/drawable-hdpi/image_empty.jpg b/cim_for_mina/mchat-simple/res/drawable-hdpi/image_empty.jpg similarity index 100% rename from mchat-simple/res/drawable-hdpi/image_empty.jpg rename to cim_for_mina/mchat-simple/res/drawable-hdpi/image_empty.jpg diff --git a/mchat-simple/res/drawable-hdpi/input.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/input.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/input.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/input.9.png diff --git a/mchat-simple/res/drawable-hdpi/input_over.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/input_over.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/input_over.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/input_over.9.png diff --git a/mchat-simple/res/drawable-hdpi/list_blockbg.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/list_blockbg.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/list_blockbg.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/list_blockbg.9.png diff --git a/mchat-simple/res/drawable-hdpi/list_divider_line.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/list_divider_line.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/list_divider_line.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/list_divider_line.png diff --git a/mchat-simple/res/drawable-hdpi/listitem_hover.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/listitem_hover.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/listitem_hover.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/listitem_hover.9.png diff --git a/mchat-simple/res/drawable-hdpi/loading_1.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_1.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_1.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_1.png diff --git a/mchat-simple/res/drawable-hdpi/loading_10.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_10.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_10.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_10.png diff --git a/mchat-simple/res/drawable-hdpi/loading_11.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_11.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_11.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_11.png diff --git a/mchat-simple/res/drawable-hdpi/loading_12.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_12.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_12.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_12.png diff --git a/mchat-simple/res/drawable-hdpi/loading_13.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_13.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_13.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_13.png diff --git a/mchat-simple/res/drawable-hdpi/loading_14.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_14.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_14.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_14.png diff --git a/mchat-simple/res/drawable-hdpi/loading_15.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_15.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_15.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_15.png diff --git a/mchat-simple/res/drawable-hdpi/loading_16.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_16.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_16.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_16.png diff --git a/mchat-simple/res/drawable-hdpi/loading_17.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_17.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_17.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_17.png diff --git a/mchat-simple/res/drawable-hdpi/loading_18.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_18.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_18.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_18.png diff --git a/mchat-simple/res/drawable-hdpi/loading_19.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_19.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_19.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_19.png diff --git a/mchat-simple/res/drawable-hdpi/loading_2.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_2.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_2.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_2.png diff --git a/mchat-simple/res/drawable-hdpi/loading_20.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_20.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_20.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_20.png diff --git a/mchat-simple/res/drawable-hdpi/loading_21.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_21.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_21.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_21.png diff --git a/mchat-simple/res/drawable-hdpi/loading_22.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_22.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_22.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_22.png diff --git a/mchat-simple/res/drawable-hdpi/loading_23.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_23.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_23.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_23.png diff --git a/mchat-simple/res/drawable-hdpi/loading_24.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_24.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_24.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_24.png diff --git a/mchat-simple/res/drawable-hdpi/loading_3.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_3.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_3.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_3.png diff --git a/mchat-simple/res/drawable-hdpi/loading_4.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_4.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_4.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_4.png diff --git a/mchat-simple/res/drawable-hdpi/loading_5.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_5.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_5.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_5.png diff --git a/mchat-simple/res/drawable-hdpi/loading_6.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_6.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_6.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_6.png diff --git a/mchat-simple/res/drawable-hdpi/loading_7.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_7.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_7.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_7.png diff --git a/mchat-simple/res/drawable-hdpi/loading_8.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_8.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_8.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_8.png diff --git a/mchat-simple/res/drawable-hdpi/loading_9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_9.png diff --git a/mchat-simple/res/drawable-hdpi/loading_bg.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_bg.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_bg.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_bg.png diff --git a/mchat-simple/res/drawable-hdpi/loading_coffee.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/loading_coffee.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/loading_coffee.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/loading_coffee.png diff --git a/mchat-simple/res/drawable-hdpi/login_bg.jpg b/cim_for_mina/mchat-simple/res/drawable-hdpi/login_bg.jpg similarity index 100% rename from mchat-simple/res/drawable-hdpi/login_bg.jpg rename to cim_for_mina/mchat-simple/res/drawable-hdpi/login_bg.jpg diff --git a/mchat-simple/res/drawable-hdpi/login_input.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/login_input.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/login_input.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/login_input.9.png diff --git a/mchat-simple/res/drawable-hdpi/message_hint.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/message_hint.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/message_hint.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/message_hint.png diff --git a/mchat-simple/res/drawable-hdpi/msg_tips_bg_normal.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/msg_tips_bg_normal.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/msg_tips_bg_normal.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/msg_tips_bg_normal.9.png diff --git a/mchat-simple/res/drawable-hdpi/msg_tips_bg_pressed.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/msg_tips_bg_pressed.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/msg_tips_bg_pressed.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/msg_tips_bg_pressed.9.png diff --git a/mchat-simple/res/drawable-hdpi/narrow.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/narrow.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/narrow.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/narrow.9.png diff --git a/mchat-simple/res/drawable-hdpi/narrow_select.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/narrow_select.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/narrow_select.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/narrow_select.9.png diff --git a/mchat-simple/res/drawable-hdpi/scrollbar.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/scrollbar.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/scrollbar.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/scrollbar.9.png diff --git a/mchat-simple/res/drawable-hdpi/set_list_bottom.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/set_list_bottom.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/set_list_bottom.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/set_list_bottom.9.png diff --git a/mchat-simple/res/drawable-hdpi/set_list_bottom_pre.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/set_list_bottom_pre.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/set_list_bottom_pre.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/set_list_bottom_pre.9.png diff --git a/mchat-simple/res/drawable-hdpi/set_list_middle.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/set_list_middle.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/set_list_middle.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/set_list_middle.9.png diff --git a/mchat-simple/res/drawable-hdpi/set_list_middle_pre.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/set_list_middle_pre.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/set_list_middle_pre.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/set_list_middle_pre.9.png diff --git a/mchat-simple/res/drawable-hdpi/set_list_single.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/set_list_single.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/set_list_single.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/set_list_single.9.png diff --git a/mchat-simple/res/drawable-hdpi/set_list_single_pre.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/set_list_single_pre.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/set_list_single_pre.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/set_list_single_pre.9.png diff --git a/mchat-simple/res/drawable-hdpi/set_list_top.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/set_list_top.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/set_list_top.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/set_list_top.9.png diff --git a/mchat-simple/res/drawable-hdpi/set_list_top_pre.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/set_list_top_pre.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/set_list_top_pre.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/set_list_top_pre.9.png diff --git a/mchat-simple/res/drawable-hdpi/show.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/show.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/show.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/show.png diff --git a/mchat-simple/res/drawable-hdpi/skin_icon_arrow_right_normal.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/skin_icon_arrow_right_normal.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/skin_icon_arrow_right_normal.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/skin_icon_arrow_right_normal.png diff --git a/mchat-simple/res/drawable-hdpi/skin_icon_arrow_right_pressed.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/skin_icon_arrow_right_pressed.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/skin_icon_arrow_right_pressed.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/skin_icon_arrow_right_pressed.png diff --git a/mchat-simple/res/drawable-hdpi/skin_msgbox_bg_nor.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/skin_msgbox_bg_nor.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/skin_msgbox_bg_nor.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/skin_msgbox_bg_nor.9.png diff --git a/mchat-simple/res/drawable-hdpi/skin_msgbox_bg_pressed.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/skin_msgbox_bg_pressed.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/skin_msgbox_bg_pressed.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/skin_msgbox_bg_pressed.9.png diff --git a/mchat-simple/res/drawable-hdpi/skin_msgbox_bg_top.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/skin_msgbox_bg_top.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/skin_msgbox_bg_top.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/skin_msgbox_bg_top.9.png diff --git a/mchat-simple/res/drawable-hdpi/splash_bg.jpg b/cim_for_mina/mchat-simple/res/drawable-hdpi/splash_bg.jpg similarity index 100% rename from mchat-simple/res/drawable-hdpi/splash_bg.jpg rename to cim_for_mina/mchat-simple/res/drawable-hdpi/splash_bg.jpg diff --git a/mchat-simple/res/drawable-hdpi/success.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/success.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/success.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/success.png diff --git a/mchat-simple/res/drawable-hdpi/tab2_normal.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/tab2_normal.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/tab2_normal.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/tab2_normal.png diff --git a/mchat-simple/res/drawable-hdpi/tab2_over.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/tab2_over.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/tab2_over.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/tab2_over.png diff --git a/mchat-simple/res/drawable-hdpi/tab3_normal.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/tab3_normal.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/tab3_normal.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/tab3_normal.png diff --git a/mchat-simple/res/drawable-hdpi/tab3_over.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/tab3_over.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/tab3_over.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/tab3_over.png diff --git a/mchat-simple/res/drawable-hdpi/table_arrow.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/table_arrow.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/table_arrow.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/table_arrow.png diff --git a/mchat-simple/res/drawable-hdpi/toast_bg.9.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/toast_bg.9.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/toast_bg.9.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/toast_bg.9.png diff --git a/mchat-simple/res/drawable-hdpi/topface_back.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/topface_back.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/topface_back.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/topface_back.png diff --git a/mchat-simple/res/drawable-hdpi/troop_default_head_1.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/troop_default_head_1.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/troop_default_head_1.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/troop_default_head_1.png diff --git a/mchat-simple/res/drawable-hdpi/troop_default_head_2.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/troop_default_head_2.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/troop_default_head_2.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/troop_default_head_2.png diff --git a/mchat-simple/res/drawable-hdpi/troop_default_head_3.png b/cim_for_mina/mchat-simple/res/drawable-hdpi/troop_default_head_3.png similarity index 100% rename from mchat-simple/res/drawable-hdpi/troop_default_head_3.png rename to cim_for_mina/mchat-simple/res/drawable-hdpi/troop_default_head_3.png diff --git a/mchat-simple/res/drawable/common_button_blue.xml b/cim_for_mina/mchat-simple/res/drawable/common_button_blue.xml similarity index 100% rename from mchat-simple/res/drawable/common_button_blue.xml rename to cim_for_mina/mchat-simple/res/drawable/common_button_blue.xml diff --git a/mchat-simple/res/drawable/common_msgbox_bg.xml b/cim_for_mina/mchat-simple/res/drawable/common_msgbox_bg.xml similarity index 100% rename from mchat-simple/res/drawable/common_msgbox_bg.xml rename to cim_for_mina/mchat-simple/res/drawable/common_msgbox_bg.xml diff --git a/mchat-simple/res/drawable/top_back_left_selector.xml b/cim_for_mina/mchat-simple/res/drawable/top_back_left_selector.xml similarity index 100% rename from mchat-simple/res/drawable/top_back_left_selector.xml rename to cim_for_mina/mchat-simple/res/drawable/top_back_left_selector.xml diff --git a/mchat-simple/res/layout/activity_login.xml b/cim_for_mina/mchat-simple/res/layout/activity_login.xml similarity index 100% rename from mchat-simple/res/layout/activity_login.xml rename to cim_for_mina/mchat-simple/res/layout/activity_login.xml diff --git a/mchat-simple/res/layout/activity_splansh.xml b/cim_for_mina/mchat-simple/res/layout/activity_splansh.xml similarity index 100% rename from mchat-simple/res/layout/activity_splansh.xml rename to cim_for_mina/mchat-simple/res/layout/activity_splansh.xml diff --git a/mchat-simple/res/layout/activity_system_chat.xml b/cim_for_mina/mchat-simple/res/layout/activity_system_chat.xml similarity index 100% rename from mchat-simple/res/layout/activity_system_chat.xml rename to cim_for_mina/mchat-simple/res/layout/activity_system_chat.xml diff --git a/mchat-simple/res/layout/item_chat_sysmsg.xml b/cim_for_mina/mchat-simple/res/layout/item_chat_sysmsg.xml similarity index 100% rename from mchat-simple/res/layout/item_chat_sysmsg.xml rename to cim_for_mina/mchat-simple/res/layout/item_chat_sysmsg.xml diff --git a/mchat-simple/res/layout/layout_global_top_header.xml b/cim_for_mina/mchat-simple/res/layout/layout_global_top_header.xml similarity index 100% rename from mchat-simple/res/layout/layout_global_top_header.xml rename to cim_for_mina/mchat-simple/res/layout/layout_global_top_header.xml diff --git a/mchat-simple/res/raw/classic.mp3 b/cim_for_mina/mchat-simple/res/raw/classic.mp3 similarity index 100% rename from mchat-simple/res/raw/classic.mp3 rename to cim_for_mina/mchat-simple/res/raw/classic.mp3 diff --git a/mchat-simple/res/values/arrays.xml b/cim_for_mina/mchat-simple/res/values/arrays.xml similarity index 100% rename from mchat-simple/res/values/arrays.xml rename to cim_for_mina/mchat-simple/res/values/arrays.xml diff --git a/mchat-simple/res/values/attrs.xml b/cim_for_mina/mchat-simple/res/values/attrs.xml similarity index 100% rename from mchat-simple/res/values/attrs.xml rename to cim_for_mina/mchat-simple/res/values/attrs.xml diff --git a/mchat-simple/res/values/color.xml b/cim_for_mina/mchat-simple/res/values/color.xml similarity index 100% rename from mchat-simple/res/values/color.xml rename to cim_for_mina/mchat-simple/res/values/color.xml diff --git a/mchat-simple/res/values/dimens.xml b/cim_for_mina/mchat-simple/res/values/dimens.xml similarity index 100% rename from mchat-simple/res/values/dimens.xml rename to cim_for_mina/mchat-simple/res/values/dimens.xml diff --git a/mchat-simple/res/values/strings.xml b/cim_for_mina/mchat-simple/res/values/strings.xml similarity index 100% rename from mchat-simple/res/values/strings.xml rename to cim_for_mina/mchat-simple/res/values/strings.xml diff --git a/mchat-simple/res/values/styles.xml b/cim_for_mina/mchat-simple/res/values/styles.xml similarity index 100% rename from mchat-simple/res/values/styles.xml rename to cim_for_mina/mchat-simple/res/values/styles.xml diff --git a/mchat-simple/src/com/farsunset/ichat/example/adapter/MessageTimeDescComparator.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/adapter/MessageTimeDescComparator.java similarity index 100% rename from mchat-simple/src/com/farsunset/ichat/example/adapter/MessageTimeDescComparator.java rename to cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/adapter/MessageTimeDescComparator.java diff --git a/mchat-simple/src/com/farsunset/ichat/example/adapter/SystemMsgListViewAdapter.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/adapter/SystemMsgListViewAdapter.java similarity index 100% rename from mchat-simple/src/com/farsunset/ichat/example/adapter/SystemMsgListViewAdapter.java rename to cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/adapter/SystemMsgListViewAdapter.java diff --git a/mchat-simple/src/com/farsunset/ichat/example/app/CIMMonitorActivity.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/app/CIMMonitorActivity.java similarity index 100% rename from mchat-simple/src/com/farsunset/ichat/example/app/CIMMonitorActivity.java rename to cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/app/CIMMonitorActivity.java diff --git a/mchat-simple/src/com/farsunset/ichat/example/app/CommonBaseControl.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/app/CommonBaseControl.java similarity index 100% rename from mchat-simple/src/com/farsunset/ichat/example/app/CommonBaseControl.java rename to cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/app/CommonBaseControl.java diff --git a/mchat-simple/src/com/farsunset/ichat/example/app/Constant.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/app/Constant.java similarity index 100% rename from mchat-simple/src/com/farsunset/ichat/example/app/Constant.java rename to cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/app/Constant.java diff --git a/mchat-simple/src/com/farsunset/ichat/example/network/HttpAPIRequester.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/network/HttpAPIRequester.java similarity index 100% rename from mchat-simple/src/com/farsunset/ichat/example/network/HttpAPIRequester.java rename to cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/network/HttpAPIRequester.java diff --git a/mchat-simple/src/com/farsunset/ichat/example/network/HttpAPIResponser.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/network/HttpAPIResponser.java similarity index 100% rename from mchat-simple/src/com/farsunset/ichat/example/network/HttpAPIResponser.java rename to cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/network/HttpAPIResponser.java diff --git a/mchat-simple/src/com/farsunset/ichat/example/network/Page.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/network/Page.java similarity index 100% rename from mchat-simple/src/com/farsunset/ichat/example/network/Page.java rename to cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/network/Page.java diff --git a/mchat-simple/src/com/farsunset/ichat/example/receiver/CustomCIMMessageReceiver.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/receiver/CustomCIMMessageReceiver.java similarity index 100% rename from mchat-simple/src/com/farsunset/ichat/example/receiver/CustomCIMMessageReceiver.java rename to cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/receiver/CustomCIMMessageReceiver.java diff --git a/mchat-simple/src/com/farsunset/ichat/example/ui/LoginActivity.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/ui/LoginActivity.java similarity index 100% rename from mchat-simple/src/com/farsunset/ichat/example/ui/LoginActivity.java rename to cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/ui/LoginActivity.java diff --git a/mchat-simple/src/com/farsunset/ichat/example/ui/SplanshActivity.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/ui/SplanshActivity.java similarity index 100% rename from mchat-simple/src/com/farsunset/ichat/example/ui/SplanshActivity.java rename to cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/ui/SplanshActivity.java diff --git a/mchat-simple/src/com/farsunset/ichat/example/ui/SystemMessageActivity.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/ui/SystemMessageActivity.java similarity index 100% rename from mchat-simple/src/com/farsunset/ichat/example/ui/SystemMessageActivity.java rename to cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/ui/SystemMessageActivity.java diff --git a/mchat-simple/src/com/farsunset/ichat/example/util/API.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/util/API.java similarity index 100% rename from mchat-simple/src/com/farsunset/ichat/example/util/API.java rename to cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/util/API.java diff --git a/mchat-simple/src/com/farsunset/ichat/example/util/FileDownloader.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/util/FileDownloader.java similarity index 100% rename from mchat-simple/src/com/farsunset/ichat/example/util/FileDownloader.java rename to cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/util/FileDownloader.java diff --git a/mchat-simple/src/com/farsunset/ichat/example/util/StringUtil.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/util/StringUtil.java similarity index 100% rename from mchat-simple/src/com/farsunset/ichat/example/util/StringUtil.java rename to cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/util/StringUtil.java diff --git a/cim_for_netty/1.0.VERSION b/cim_for_netty/1.0.VERSION new file mode 100644 index 0000000..9f8e9b6 --- /dev/null +++ b/cim_for_netty/1.0.VERSION @@ -0,0 +1 @@ +1.0 \ No newline at end of file diff --git a/cim_for_netty/cim-core/.classpath b/cim_for_netty/cim-core/.classpath new file mode 100644 index 0000000..8066ec8 --- /dev/null +++ b/cim_for_netty/cim-core/.classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/cim_for_netty/cim-core/.project b/cim_for_netty/cim-core/.project new file mode 100644 index 0000000..a449ea4 --- /dev/null +++ b/cim_for_netty/cim-core/.project @@ -0,0 +1,17 @@ + + + cim-core + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/cim_for_netty/cim-core/lib/commons-lang3-3.1.jar b/cim_for_netty/cim-core/lib/commons-lang3-3.1.jar new file mode 100644 index 0000000..a85e539 Binary files /dev/null and b/cim_for_netty/cim-core/lib/commons-lang3-3.1.jar differ diff --git a/cim_for_netty/cim-core/lib/log4j.jar b/cim_for_netty/cim-core/lib/log4j.jar new file mode 100644 index 0000000..69b0005 Binary files /dev/null and b/cim_for_netty/cim-core/lib/log4j.jar differ diff --git a/cim_for_netty/cim-core/lib/netty-3.6.5.Final.jar b/cim_for_netty/cim-core/lib/netty-3.6.5.Final.jar new file mode 100644 index 0000000..3d10dbb Binary files /dev/null and b/cim_for_netty/cim-core/lib/netty-3.6.5.Final.jar differ diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMConnectorManager.java b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMConnectorManager.java new file mode 100644 index 0000000..9259769 --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMConnectorManager.java @@ -0,0 +1,300 @@ +package com.farsunset.cim.client.android; +import java.net.InetSocketAddress; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import org.jboss.netty.bootstrap.ClientBootstrap; +import org.jboss.netty.channel.Channel; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.channel.ChannelPipeline; +import org.jboss.netty.channel.ChannelPipelineFactory; +import org.jboss.netty.channel.ChannelStateEvent; +import org.jboss.netty.channel.Channels; +import org.jboss.netty.channel.ExceptionEvent; +import org.jboss.netty.channel.MessageEvent; +import org.jboss.netty.channel.SimpleChannelUpstreamHandler; +import org.jboss.netty.channel.WriteCompletionEvent; +import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory; + +import android.content.Context; +import android.content.Intent; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; + +import com.farsunset.cim.nio.filter.ClientMessageDecoder; +import com.farsunset.cim.nio.filter.ClientMessageEncoder; +import com.farsunset.cim.nio.mutual.Message; +import com.farsunset.cim.nio.mutual.ReplyBody; +import com.farsunset.cim.nio.mutual.SentBody; + +/** + * 连接服务端管理,cim核心处理类,管理连接,以及消息处理 + * + * @author 3979434@qq.com + */ +class CIMConnectorManager { + + private Channel channel;; + + Context context; + + ClientBootstrap bootstrap; + + static CIMConnectorManager manager; + + // 消息广播action + public static final String ACTION_MESSAGE_RECEIVED = "com.farsunset.cim.MESSAGE_RECEIVED"; + + // 发送sendbody失败广播 + public static final String ACTION_SENT_FAILED = "com.farsunset.cim.SENT_FAILED"; + + // 发送sendbody成功广播 + public static final String ACTION_SENT_SUCCESS = "com.farsunset.cim.SENT_SUCCESS"; + // 链接意外关闭广播 + public static final String ACTION_CONNECTION_CLOSED = "com.farsunset.cim.CONNECTION_CLOSED"; + // 链接失败广播 + public static final String ACTION_CONNECTION_FAILED = "com.farsunset.cim.CONNECTION_FAILED"; + // 链接成功广播 + public static final String ACTION_CONNECTION_SUCCESS = "com.farsunset.cim.CONNECTION_SUCCESS"; + // 发送sendbody成功后获得replaybody回应广播 + public static final String ACTION_REPLY_RECEIVED = "com.farsunset.cim.REPLY_RECEIVED"; + // 网络变化广播 + public static final String ACTION_NETWORK_CHANGED = "android.net.conn.CONNECTIVITY_CHANGE"; + + // 未知异常 + public static final String ACTION_UNCAUGHT_EXCEPTION = "com.farsunset.cim.UNCAUGHT_EXCEPTION"; + + // CIM连接状态 + public static final String ACTION_CONNECTION_STATUS = "com.farsunset.cim.CONNECTION_STATUS"; + + + private ExecutorService executor; + + + private CIMConnectorManager(Context ctx) { + context = ctx; + executor = Executors.newFixedThreadPool(3); + + + bootstrap = new ClientBootstrap( + new NioClientSocketChannelFactory( + Executors.newCachedThreadPool(), + Executors.newCachedThreadPool())); + + bootstrap.setPipelineFactory(new ChannelPipelineFactory() { + public ChannelPipeline getPipeline() throws Exception { + return Channels.pipeline( + new ClientMessageDecoder(), + new ClientMessageEncoder(), + channelUpstreamHandler); + } + }); + + + } + + public synchronized static CIMConnectorManager getManager(Context context) { + if (manager == null) { + manager = new CIMConnectorManager(context); + } + return manager; + + } + + private synchronized void syncConnection(final String cimServerHost,final int cimServerPort) { + try { + + if(isConnected()){ + return ; + } + + channel = bootstrap.connect(new InetSocketAddress(cimServerHost, cimServerPort)).getChannel(); //这里的IP和端口,根据自己情况修改 + + } catch (Exception e) { + + Intent intent = new Intent(); + intent.setAction(ACTION_CONNECTION_FAILED); + intent.putExtra("exception", e); + context.sendBroadcast(intent); + + System.out.println("******************CIM连接服务器失败 "+cimServerHost+":"+cimServerPort); + + } + + } + + public void connect(final String cimServerHost, final int cimServerPort) { + + + if (!netWorkAvailable(context)) { + + Intent intent = new Intent(); + intent.setAction(ACTION_CONNECTION_FAILED); + intent.putExtra("exception", new NetWorkDisableException()); + context.sendBroadcast(intent); + + return; + } + + executor.execute(new Runnable() { + @Override + public void run() { + syncConnection(cimServerHost, cimServerPort); + } + }); + } + + public void send(final SentBody body) { + + + executor.execute(new Runnable() { + @Override + public void run() { + + android.os.Message msg = new android.os.Message(); + msg.getData().putSerializable("body", body); + + if(channel!=null && channel.isConnected()) + { + boolean isDone = channel.write(body).awaitUninterruptibly(5000); + if (!isDone) { + + Intent intent = new Intent(); + intent.setAction(ACTION_SENT_FAILED); + intent.putExtra("exception", new WriteToClosedSessionException()); + intent.putExtra("sentBody", body); + context.sendBroadcast(intent); + } + }else + { + + Intent intent = new Intent(); + intent.setAction(ACTION_SENT_FAILED); + intent.putExtra("exception", new CIMSessionDisableException()); + intent.putExtra("sentBody", body); + context.sendBroadcast(intent); + } + } + }); + } + + public void destroy() { + if (manager.channel != null) { + manager.channel.close(); + } + bootstrap.shutdown(); + bootstrap.releaseExternalResources(); + manager = null; + } + + public boolean isConnected() { + if (channel == null) { + return false; + } + return channel.isConnected() ; + } + + public void deliverIsConnected() { + Intent intent = new Intent(); + intent.setAction(ACTION_CONNECTION_FAILED); + intent.putExtra(CIMPushManager.KEY_CIM_CONNECTION_STATUS, isConnected()); + context.sendBroadcast(intent); + } + + + + public void closeSession() + { + if(channel!=null) + { + channel.close(); + } + } + + + SimpleChannelUpstreamHandler channelUpstreamHandler = new SimpleChannelUpstreamHandler() { + + @Override + public void channelConnected( ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { + + System.out.println("******************CIM连接服务器成功:"+ctx.getChannel().getLocalAddress()); + + Intent intent = new Intent(); + intent.setAction(ACTION_CONNECTION_SUCCESS); + context.sendBroadcast(intent); + + } + + + @Override + public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent event) throws Exception { + + System.out.println("******************CIM与服务器断开连接:"+ctx.getChannel().getLocalAddress()); + if(channel.getId()==ctx.getChannel().getId()) + { + Intent intent = new Intent(); + intent.setAction(ACTION_CONNECTION_CLOSED); + context.sendBroadcast(intent); + + } + } + + + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) + throws Exception { + + Intent intent = new Intent(); + intent.setAction(ACTION_UNCAUGHT_EXCEPTION); + intent.putExtra("exception", e.getCause()); + context.sendBroadcast(intent); + } + + @Override + public void messageReceived(ChannelHandlerContext ctx, MessageEvent event) + throws Exception { + + if (event.getMessage() instanceof Message) { + + Intent intent = new Intent(); + intent.setAction(ACTION_MESSAGE_RECEIVED); + intent.putExtra("message", (Message) event.getMessage()); + context.sendBroadcast(intent); + + } + if (event.getMessage() instanceof ReplyBody) { + + + Intent intent = new Intent(); + intent.setAction(ACTION_REPLY_RECEIVED); + intent.putExtra("replyBody", (ReplyBody) event.getMessage()); + context.sendBroadcast(intent); + } + } + + @Override + public void writeComplete(ChannelHandlerContext ctx, WriteCompletionEvent event) + throws Exception { + + Intent intent = new Intent(); + intent.setAction(ACTION_SENT_SUCCESS); + //intent.putExtra("sentBody", null); + context.sendBroadcast(intent); + + + } + }; + + public static boolean netWorkAvailable(Context context) { + try { + ConnectivityManager nw = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo networkInfo = nw.getActiveNetworkInfo(); + return networkInfo != null; + } catch (Exception e) {} + + return false; + } + + +} \ No newline at end of file diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMDataConfig.java b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMDataConfig.java new file mode 100644 index 0000000..d38c502 --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMDataConfig.java @@ -0,0 +1,55 @@ +package com.farsunset.cim.client.android; + +import android.content.Context; +/** + * + * @author 3979434 + * + */ + class CIMDataConfig { + + + public static String CIM_CONFIG_INFO = "CIM_CONFIG_INFO"; + + public static String KEY_ACCOUNT = "KEY_ACCOUNT"; + + public static String KEY_MANUAL_STOP = "KEY_MANUAL_STOP"; + + public static String KEY_CIM_DESTORYED = "KEY_CIM_DESTORYED"; + + public static String KEY_CIM_SERVIER_HOST = "KEY_CIM_SERVIER_HOST"; + + public static String KEY_CIM_SERVIER_PORT = "KEY_CIM_SERVIER_PORT"; + + + public static void putString(Context context,String key,String value) + { + context.getSharedPreferences(CIM_CONFIG_INFO, Context.MODE_PRIVATE).edit().putString(key, value).commit(); + } + + public static String getString(Context context,String key) + { + return context.getSharedPreferences(CIM_CONFIG_INFO, Context.MODE_PRIVATE).getString(key,null); + } + + public static void putBoolean(Context context,String key,boolean value) + { + context.getSharedPreferences(CIM_CONFIG_INFO, Context.MODE_PRIVATE).edit().putBoolean(key, value).commit(); + } + + public static boolean getBoolean(Context context,String key) + { + return context.getSharedPreferences(CIM_CONFIG_INFO, Context.MODE_PRIVATE).getBoolean(key,false); + } + + + public static void putInt(Context context,String key,int value) + { + context.getSharedPreferences(CIM_CONFIG_INFO, Context.MODE_PRIVATE).edit().putInt(key, value).commit(); + } + + public static int getInt(Context context,String key) + { + return context.getSharedPreferences(CIM_CONFIG_INFO, Context.MODE_PRIVATE).getInt(key,0); + } +} diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMEnventListenerReceiver.java b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMEnventListenerReceiver.java new file mode 100644 index 0000000..0d5904e --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMEnventListenerReceiver.java @@ -0,0 +1,178 @@ +package com.farsunset.cim.client.android; + +import java.util.List; + +import android.app.ActivityManager; +import android.app.ActivityManager.RunningTaskInfo; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; + +import com.farsunset.cim.nio.constant.CIMConstant; +import com.farsunset.cim.nio.mutual.Message; +import com.farsunset.cim.nio.mutual.ReplyBody; +import com.farsunset.cim.nio.mutual.SentBody; +/** + * 消息入口,所有消息都会经过这里 + * @author 3979434 + * + */ +public abstract class CIMEnventListenerReceiver extends BroadcastReceiver implements OnCIMMessageListener { + + + public Context context; + @Override + public void onReceive(Context ctx, Intent it) { + + context = ctx; + + if(it.getAction().equals(CIMConnectorManager.ACTION_NETWORK_CHANGED)) + { + ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService("connectivity"); + android.net.NetworkInfo info = connectivityManager.getActiveNetworkInfo(); + + onDevicesNetworkChanged(info); + } + + if(it.getAction().equals(CIMConnectorManager.ACTION_CONNECTION_CLOSED)) + { + onConnectionClosed(); + } + + if(it.getAction().equals(CIMConnectorManager.ACTION_CONNECTION_FAILED)) + { + onConnectionFailed((Exception) it.getSerializableExtra("exception")); + } + + if(it.getAction().equals(CIMConnectorManager.ACTION_CONNECTION_SUCCESS)) + { + onDispatchConnectionSucceed(); + } + + if(it.getAction().equals(CIMConnectorManager.ACTION_MESSAGE_RECEIVED)) + { + filterType999Message((Message)it.getSerializableExtra("message")); + } + + if(it.getAction().equals(CIMConnectorManager.ACTION_REPLY_RECEIVED)) + { + onReplyReceived((ReplyBody)it.getSerializableExtra("replyBody")); + } + + if(it.getAction().equals(CIMConnectorManager.ACTION_SENT_FAILED)) + { + onSentFailed((Exception) it.getSerializableExtra("exception"),(SentBody)it.getSerializableExtra("sentBody")); + } + + if(it.getAction().equals(CIMConnectorManager.ACTION_SENT_SUCCESS)) + { + onSentSucceed((SentBody)it.getSerializableExtra("sentBody")); + } + + if(it.getAction().equals(CIMConnectorManager.ACTION_UNCAUGHT_EXCEPTION)) + { + onUncaughtException((Exception)it.getSerializableExtra("exception")); + } + + if(it.getAction().equals(CIMConnectorManager.ACTION_CONNECTION_STATUS)) + { + onConnectionStatus(it.getBooleanExtra(CIMPushManager.KEY_CIM_CONNECTION_STATUS, false)); + } + + + } + + protected boolean isInBackground(Context context) { + List tasksInfo = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE)).getRunningTasks(1); + if (tasksInfo.size() > 0) { + + if (context.getPackageName().equals( + tasksInfo.get(0).topActivity.getPackageName())) { + + return false; + } + } + return true; + } + + private void onConnectionClosed(){ + + + boolean isManualStop = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_MANUAL_STOP); + + boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED); + + if(CIMConnectorManager.netWorkAvailable(context) && !isManualStop && !isManualDestory) + { + CIMPushManager.init(context); + } + } + + private void onConnectionFailed(Exception e){ + if(CIMConnectorManager.netWorkAvailable(context)) + { + CIMPushManager.init(context); + } + } + + + private void onUncaughtException(Throwable arg0) {} + + + + private void onDevicesNetworkChanged(NetworkInfo info) { + + if(info !=null) + { + CIMPushManager.init(context); + } + + onNetworkChanged(info); + } + + private void filterType999Message(com.farsunset.cim.nio.mutual.Message message) + { + if(CIMConstant.MessageType.TYPE_999.equals(message.getType())) + { + CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_MANUAL_STOP,true); + } + + onMessageReceived(message); + } + + private void onSentFailed(Exception e, SentBody body){ + + //与服务端端开链接,重新连接 + if(e instanceof CIMSessionDisableException) + { + CIMPushManager.init(context); + }else + { + //发送失败 重新发送 + CIMPushManager.sendRequest(context, body); + } + + } + + + private void onDispatchConnectionSucceed(){ + + CIMPushManager.setAccount(context); + CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_MANUAL_STOP,false); + + onConnectionSucceed(); + } + + + private void onSentSucceed(SentBody body){} + + @Override + public abstract void onMessageReceived(com.farsunset.cim.nio.mutual.Message message); + @Override + public abstract void onReplyReceived(ReplyBody body); + + public abstract void onNetworkChanged(NetworkInfo info); + +} diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMListenerManager.java b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMListenerManager.java new file mode 100644 index 0000000..089ff74 --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMListenerManager.java @@ -0,0 +1,40 @@ +package com.farsunset.cim.client.android; +import java.util.ArrayList; +import java.util.Collections; + +import android.content.Context; + + +/** + * CIM 消息监听器管理 + * + * @author 3979434@qq.com + */ +public class CIMListenerManager { + + private static ArrayList cimListeners = new ArrayList(); + + + + public static void registerMessageListener(OnCIMMessageListener listener,Context mcontext) { + + if (!cimListeners.contains(listener)) { + cimListeners.add(listener); + // 按照接收顺序倒序 + Collections.sort(cimListeners, new CIMMessageReceiveComparator(mcontext)); + } + } + + + public static void removeMessageListener(OnCIMMessageListener listener) { + for (int i = 0; i < cimListeners.size(); i++) { + if (listener.getClass() == cimListeners.get(i).getClass()) { + cimListeners.remove(i); + } + } + } + + public static ArrayList getCIMListeners() { + return cimListeners; + } +} \ No newline at end of file diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMMessageReceiveComparator.java b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMMessageReceiveComparator.java new file mode 100644 index 0000000..088ffae --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMMessageReceiveComparator.java @@ -0,0 +1,59 @@ +package com.farsunset.cim.client.android; + +import java.util.Comparator; + +import android.app.Activity; +import android.content.Context; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageManager; + +import com.farsunset.cim.nio.constant.CIMConstant; + + +/** + * 消息接收activity的接收顺序排序,CIM_RECEIVE_ORDER倒序 + * @author 3979434 + * + */ +public class CIMMessageReceiveComparator implements Comparator{ + + Context mcontext; + public CIMMessageReceiveComparator(Context ctx) + { + mcontext = ctx; + } + + @Override + public int compare(OnCIMMessageListener arg1, OnCIMMessageListener arg2) { + + Integer order1 = CIMConstant.CIM_DEFAULT_MESSAGE_ORDER; + Integer order2 = CIMConstant.CIM_DEFAULT_MESSAGE_ORDER; + ActivityInfo info; + if (arg1 instanceof Activity ) { + + try { + info = mcontext.getPackageManager() .getActivityInfo(((Activity)(arg1)).getComponentName(), PackageManager.GET_META_DATA); + if(info.metaData!=null) + { + order1 = info.metaData.getInt("CIM_RECEIVE_ORDER"); + } + + } catch (Exception e) {} + } + + if (arg1 instanceof Activity ) { + try { + info = mcontext.getPackageManager() .getActivityInfo(((Activity)(arg2)).getComponentName(), PackageManager.GET_META_DATA); + if(info.metaData!=null) + { + order2 = info.metaData.getInt("CIM_RECEIVE_ORDER"); + } + + } catch (Exception e) {} + } + + return order2.compareTo(order1); + } + + +} diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMPushManager.java b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMPushManager.java new file mode 100644 index 0000000..1b7ef13 --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMPushManager.java @@ -0,0 +1,185 @@ +package com.farsunset.cim.client.android; +import android.content.Context; +import android.content.Intent; +import android.telephony.TelephonyManager; +import com.farsunset.cim.nio.constant.CIMConstant; +import com.farsunset.cim.nio.mutual.SentBody; + +/** + * CIM 功能接口 + * + * @author 3979434@qq.com + */ +public class CIMPushManager { + + + static String ACTION_CONNECTION ="ACTION_CONNECTION"; + + static String ACTION_CONNECTION_STATUS ="ACTION_CONNECTION_STATUS"; + + static String ACTION_SENDREQUEST ="ACTION_SENDREQUEST"; + + static String ACTION_DISCONNECTION ="ACTION_DISSENDREQUEST"; + + static String ACTION_DESTORY ="ACTION_DESTORY"; + + static String SERVICE_ACTION ="SERVICE_ACTION"; + + static String KEY_SEND_BODY ="KEY_SEND_BODY"; + + static String KEY_CIM_CONNECTION_STATUS ="KEY_CIM_CONNECTION_STATUS"; + + /** + * 初始化,连接服务端,在程序启动页或者 在Application里调用 + * @param context + * @param ip + * @param port + */ + public static void init(Context context,String ip,int port){ + + CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED, false); + + Intent serviceIntent = new Intent(context, CIMPushService.class); + serviceIntent.putExtra(CIMDataConfig.KEY_CIM_SERVIER_HOST, ip); + serviceIntent.putExtra(CIMDataConfig.KEY_CIM_SERVIER_PORT, port); + serviceIntent.putExtra(SERVICE_ACTION, ACTION_CONNECTION); + context.startService(serviceIntent); + CIMDataConfig.putString(context, CIMDataConfig.KEY_CIM_SERVIER_HOST, ip); + CIMDataConfig.putInt(context, CIMDataConfig.KEY_CIM_SERVIER_PORT, port); + } + + protected static void init(Context context){ + + String host = CIMDataConfig.getString(context, CIMDataConfig.KEY_CIM_SERVIER_HOST); + int port =CIMDataConfig.getInt(context, CIMDataConfig.KEY_CIM_SERVIER_PORT); + + init(context,host,port); + + } + + + /** + * 设置一个账号登录到服务端 + * @param account 用户唯一ID + */ + public static void setAccount(Context context,String account){ + + if(account==null || account.trim().length()==0) + { + return ; + } + CIMDataConfig.putString(context,CIMDataConfig.KEY_ACCOUNT, account); + + + boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED); + if(isManualDestory || account==null){ + return ; + } + + + String imei = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId(); + SentBody sent = new SentBody(); + sent.setKey(CIMConstant.RequestKey.CLIENT_BIND); + sent.put("account", account); + sent.put("deviceId",imei); + sent.put("channel", "android"); + sent.put("device",android.os.Build.MODEL); + + sendRequest(context,sent); + + + } + + protected static void setAccount(Context context){ + + String account = CIMDataConfig.getString(context,CIMDataConfig.KEY_ACCOUNT); + setAccount(context,account); + } + + protected static void clearAccount(Context context){ + + CIMDataConfig.putString(context,CIMDataConfig.KEY_ACCOUNT, null); + } + + /** + * 发送一个CIM请求 + * @param context + * @body + */ + public static void sendRequest(Context context,SentBody body){ + + boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED); + if(isManualDestory){ + return ; + } + + Intent serviceIntent = new Intent(context, CIMPushService.class); + serviceIntent.putExtra(KEY_SEND_BODY, body); + serviceIntent.putExtra(SERVICE_ACTION, ACTION_SENDREQUEST); + context.startService(serviceIntent); + + } + + /** + * 停止接受推送,将会退出当前账号登录,端口与服务端的连接 + * @param context + */ + public static void stop(Context context){ + + boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED); + if(isManualDestory){ + return ; + } + + CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_MANUAL_STOP, true); + + Intent serviceIntent = new Intent(context, CIMPushService.class); + serviceIntent.putExtra(SERVICE_ACTION, ACTION_DISCONNECTION); + context.startService(serviceIntent); + + } + + + /** + * 完全销毁CIM,一般用于完全退出程序,调用resume将不能恢复 + * @param context + */ + public static void destory(Context context){ + + + CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED, true); + CIMDataConfig.putString(context,CIMDataConfig.KEY_ACCOUNT, null); + + Intent serviceIntent = new Intent(context, CIMPushService.class); + serviceIntent.putExtra(SERVICE_ACTION, ACTION_DESTORY); + context.startService(serviceIntent); + + } + + + /** + * 重新恢复接收推送,重新连接服务端,并登录当前账号 + * @param context + */ + public static void resume(Context context){ + + boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED); + if(isManualDestory){ + return ; + } + + setAccount(context); + } + + + /** + * 异步获取与服务端连接状态,将会在广播中收到onConnectionStatus(boolean f) + * @param context + */ + public void detectIsConnected(Context context){ + Intent serviceIntent = new Intent(context, CIMPushService.class); + serviceIntent.putExtra(SERVICE_ACTION, ACTION_CONNECTION_STATUS); + context.startService(serviceIntent); + } + +} \ No newline at end of file diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMPushService.java b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMPushService.java new file mode 100644 index 0000000..39c841e --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMPushService.java @@ -0,0 +1,85 @@ + +package com.farsunset.cim.client.android; + +import android.app.Service; +import android.content.Intent; +import android.os.Binder; +import android.os.IBinder; + +import com.farsunset.cim.nio.mutual.SentBody; + + +/** + * 与服务端连接服务 + * @author 3979434 + * + */ + public class CIMPushService extends Service { + + + CIMConnectorManager manager; + + private IBinder binder=new CIMPushService.LocalBinder(); + + @Override + public void onCreate() + { + manager = CIMConnectorManager.getManager(this.getApplicationContext()); + } + + @Override + public int onStartCommand(Intent intent,int flags, int startId) { + + + if(intent==null) + { + return super.onStartCommand(intent, flags, startId); + } + + String action = intent.getStringExtra(CIMPushManager.SERVICE_ACTION); + + if(CIMPushManager.ACTION_CONNECTION.equals(action)) + { + String host = intent.getStringExtra(CIMDataConfig.KEY_CIM_SERVIER_HOST); + int port = intent.getIntExtra(CIMDataConfig.KEY_CIM_SERVIER_PORT, 28888); + manager.connect(host,port); + } + + if(CIMPushManager.ACTION_SENDREQUEST.equals(action)) + { + manager.send((SentBody) intent.getSerializableExtra(CIMPushManager.KEY_SEND_BODY)); + } + + if(CIMPushManager.ACTION_DISCONNECTION.equals(action)) + { + manager.closeSession(); + } + + if(CIMPushManager.ACTION_DESTORY.equals(action)) + { + manager.destroy(); + this.stopSelf(); + } + + if(CIMPushManager.ACTION_CONNECTION_STATUS.equals(action)) + { + manager.deliverIsConnected(); + } + + return Service.START_REDELIVER_INTENT; + } + + + @Override + public IBinder onBind(Intent arg0) { + return binder; + } + + public class LocalBinder extends Binder{ + + public CIMPushService getService() + { + return CIMPushService.this; + } + } +} diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMSessionDisableException.java b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMSessionDisableException.java new file mode 100644 index 0000000..29dc437 --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMSessionDisableException.java @@ -0,0 +1,15 @@ +package com.farsunset.cim.client.android; + + +public class CIMSessionDisableException extends Exception { + + private static final long serialVersionUID = 1L; + + public CIMSessionDisableException() { + super(); + } + + public CIMSessionDisableException(String s) { + super(s); + } +} diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/NetWorkDisableException.java b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/NetWorkDisableException.java new file mode 100644 index 0000000..3162370 --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/NetWorkDisableException.java @@ -0,0 +1,15 @@ +package com.farsunset.cim.client.android; + + +public class NetWorkDisableException extends Exception { + + private static final long serialVersionUID = 1L; + + public NetWorkDisableException() { + super(); + } + + public NetWorkDisableException(String s) { + super(s); + } +} diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/OnCIMMessageListener.java b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/OnCIMMessageListener.java new file mode 100644 index 0000000..b9cb627 --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/OnCIMMessageListener.java @@ -0,0 +1,54 @@ + +package com.farsunset.cim.client.android; + +import android.net.NetworkInfo; + +import com.farsunset.cim.nio.mutual.Message; +import com.farsunset.cim.nio.mutual.ReplyBody; + +/** + *CIM 主要事件接口 + * 类名称:OnCIMMessageListener + * 类描述: + * 创建人: 3979434 + * 修改人: 3979434 + * 修改时间: 2014-4-28 下午5:07:47 + * 修改备注: + * @version 1.0.0 + * + */ +public interface OnCIMMessageListener +{ + + + /** + * 当收到服务端推送过来的消息时调用 + * @param message + */ + public abstract void onMessageReceived(Message message); + + /** + * 当调用CIMPushManager.sendRequest()向服务端发送请求,获得相应时调用 + * @param replybody + */ + public abstract void onReplyReceived(ReplyBody replybody); + + /** + * 当手机网络发生变化时调用 + * @param networkinfo + */ + public abstract void onNetworkChanged(NetworkInfo networkinfo); + + /** + * 获取到是否连接到服务端 + * 通过调用CIMPushManager.detectIsConnected()来异步获取 + * + */ + public abstract void onConnectionStatus(boolean isConnected); + + /** + * 连接服务端成功 + */ + public abstract void onConnectionSucceed(); +} + diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/WriteToClosedSessionException.java b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/WriteToClosedSessionException.java new file mode 100644 index 0000000..527f890 --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/WriteToClosedSessionException.java @@ -0,0 +1,17 @@ +package com.farsunset.cim.client.android; + +import java.io.Serializable; + + +public class WriteToClosedSessionException extends Exception implements Serializable { + + private static final long serialVersionUID = 1L; + + public WriteToClosedSessionException() { + super(); + } + + public WriteToClosedSessionException(String s) { + super(s); + } +} diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/nio/constant/CIMConstant.java b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/constant/CIMConstant.java new file mode 100644 index 0000000..197d2ed --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/constant/CIMConstant.java @@ -0,0 +1,81 @@ + +package com.farsunset.cim.nio.constant; + +import java.nio.charset.Charset; + +/** + * 常量 + * + * @author 3979434@qq.com + */ +public interface CIMConstant { + + public static class ReturnCode{ + + public static String CODE_404 ="404"; + + public static String CODE_403 ="403"; + + public static String CODE_405 ="405"; + + public static String CODE_200 ="200"; + + public static String CODE_206 ="206"; + + public static String CODE_500 ="500"; + + + } + + + public static final Charset ENCODE_UTF8 = Charset.forName("UTF-8"); + + public static byte MESSAGE_SEPARATE='\b'; + + + public static int CIM_DEFAULT_MESSAGE_ORDER=1; + + + public static final String SESSION_KEY ="account"; + + public static final String HEARTBEAT_KEY ="heartbeat"; + + + /** + * 对应ichat 中 spring-cim.xml > bean:mainIoHandler >handlers + * 为 服务端处理对应的handlers,应该继承与com.farsunset.cim.nio.handle.AbstractHandler + * @author xiajun + * + */ + public static class RequestKey{ + + + + public static String CLIENT_BIND ="client_bind"; + + public static String CLIENT_HEARTBEAT="client_heartbeat"; + + public static String CLIENT_LOGOUT ="client_logout"; + + + public static String CLIENT_OFFLINE_MESSAGE ="client_get_offline_message"; + + + } + + public static class SessionStatus{ + + public static int STATUS_OK =0; + + public static int STATUS_CLOSED =1; + + } + + + public static class MessageType{ + + //账号在其他设备绑定时,会收到该类型消息 + public static String TYPE_999 ="999"; + + } +} \ No newline at end of file diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/nio/filter/ClientMessageDecoder.java b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/filter/ClientMessageDecoder.java new file mode 100644 index 0000000..d567ff4 --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/filter/ClientMessageDecoder.java @@ -0,0 +1,98 @@ +package com.farsunset.cim.nio.filter; + +import java.io.ByteArrayInputStream; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.channel.Channel; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.handler.codec.frame.FrameDecoder; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import com.farsunset.cim.nio.constant.CIMConstant; +import com.farsunset.cim.nio.mutual.Message; +import com.farsunset.cim.nio.mutual.ReplyBody; +/** + * 客户端消息解码 + * @author 3979434@qq.com + * + */ +public class ClientMessageDecoder extends FrameDecoder { + + + @Override + protected Object decode(ChannelHandlerContext arg0, Channel channel,ChannelBuffer buffer) throws Exception { + + int length = buffer.readableBytes(); + /** + * CIMConstant.MESSAGE_SEPARATE 为消息界限 + * 当一次收到多个消息时,以此分隔解析多个消息 + */ + if (buffer.readable()&& length > 0 && CIMConstant.MESSAGE_SEPARATE == buffer.getByte(length-1)) { + + byte[] data = new byte[length-1]; + buffer.readBytes(data); + String message = new String(new String(data,CIMConstant.ENCODE_UTF8)); + + System.out.println("ClientMessageDecoder:" + message); + + //将末尾的消息分隔符读取掉 + buffer.readByte(); + + Object msg = mappingMessageObject(message); + + data = null; + message = null; + return msg; + } + + return null; + } + + private Object mappingMessageObject(String message) throws Exception { + + + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document doc = (Document) builder.parse(new ByteArrayInputStream(message.getBytes(CIMConstant.ENCODE_UTF8))); + + String name = doc.getDocumentElement().getTagName(); + if (name.equals("reply")) { + ReplyBody reply = new ReplyBody(); + reply.setKey(doc.getElementsByTagName("key").item(0).getTextContent()); + reply.setCode(doc.getElementsByTagName("code").item(0).getTextContent()); + NodeList items = doc.getElementsByTagName("data").item(0).getChildNodes(); + for (int i = 0; i < items.getLength(); i++) { + Node node = items.item(i); + reply.getData().put(node.getNodeName(), node.getTextContent()); + } + return reply; + } + if (name.equals("message")) { + + Message body = new Message(); + body.setType(doc.getElementsByTagName("type").item(0).getTextContent()); + body.setContent(doc.getElementsByTagName("content").item(0).getTextContent()); + body.setFile(doc.getElementsByTagName("file").item(0).getTextContent()); + body.setFileType(doc.getElementsByTagName("fileType").item(0).getTextContent()); + body.setTitle(doc.getElementsByTagName("title").item(0).getTextContent()); + body.setSender(doc.getElementsByTagName("sender").item(0).getTextContent()); + body.setReceiver(doc.getElementsByTagName("receiver").item(0).getTextContent()); + body.setFormat(doc.getElementsByTagName("format").item(0).getTextContent()); + body.setMid(doc.getElementsByTagName("mid").item(0).getTextContent()); + body.setTimestamp(Long.valueOf(doc.getElementsByTagName("timestamp").item(0).getTextContent())); + + return body; + } + + return null; + } + + + + +} diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/nio/filter/ClientMessageEncoder.java b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/filter/ClientMessageEncoder.java new file mode 100644 index 0000000..1bd8d9d --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/filter/ClientMessageEncoder.java @@ -0,0 +1,31 @@ +package com.farsunset.cim.nio.filter; + + + +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; +import org.jboss.netty.channel.Channel; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.handler.codec.oneone.OneToOneEncoder; + +import com.farsunset.cim.nio.constant.CIMConstant; + +/** + * 客户端消息发送前进行编码,可在此加密消息 + * @author 3979434@qq.com + * + */ +public class ClientMessageEncoder extends OneToOneEncoder { + + @Override + protected Object encode(ChannelHandlerContext arg0, Channel arg1,Object message) throws Exception { + ChannelBuffer buf = ChannelBuffers.dynamicBuffer();//(2) + buf.writeBytes(message.toString().getBytes()); + buf.writeByte(CIMConstant.MESSAGE_SEPARATE); + return buf; + } + + + + +} diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java new file mode 100644 index 0000000..d0099cc --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java @@ -0,0 +1,64 @@ +package com.farsunset.cim.nio.filter; + +import java.io.ByteArrayInputStream; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.channel.Channel; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.handler.codec.frame.FrameDecoder; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import com.farsunset.cim.nio.constant.CIMConstant; +import com.farsunset.cim.nio.mutual.SentBody; +/** + * 服务端接收消息解码,可在此解密消息 + * @author 3979434@qq.com + * + */ +public class ServerMessageDecoder extends FrameDecoder { + + @Override + protected Object decode(ChannelHandlerContext arg0, Channel channel,ChannelBuffer buffer) throws Exception { + + + int length = buffer.readableBytes(); + + /** + * CIMConstant.MESSAGE_SEPARATE 为消息界限 + * 当一次收到多个消息时,以此分隔解析多个消息 + */ + if (buffer.readable()&&length > 0 && CIMConstant.MESSAGE_SEPARATE == buffer.getByte(length-1)) { + + byte[] data = new byte[length-1]; + buffer.readBytes(data); + String messsage = new String(new String(data,CIMConstant.ENCODE_UTF8)); + + buffer.readByte(); + + SentBody body = new SentBody(); + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document doc = builder.parse(new ByteArrayInputStream(messsage.toString().getBytes())); + body.setKey(doc.getElementsByTagName("key").item(0).getTextContent()); + NodeList items = doc.getElementsByTagName("data").item(0).getChildNodes(); + for (int i = 0; i < items.getLength(); i++) { + Node node = items.item(i); + body.getData().put(node.getNodeName(), node.getTextContent()); + } + + data = null; + messsage = null; + return body; + } + + + + return null; + } + +} diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageEncoder.java b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageEncoder.java new file mode 100644 index 0000000..5f730e9 --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageEncoder.java @@ -0,0 +1,34 @@ +package com.farsunset.cim.nio.filter; + + + +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; +import org.jboss.netty.channel.Channel; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.handler.codec.oneone.OneToOneEncoder; + +import com.farsunset.cim.nio.constant.CIMConstant; + + +/** + * 服务端发送消息前编码,可在此加密消息 + * @author 3979434@qq.com + * + */ +public class ServerMessageEncoder extends OneToOneEncoder { + + + + + @Override + protected Object encode(ChannelHandlerContext arg0, Channel arg1, Object message) throws Exception { + ChannelBuffer buf = ChannelBuffers.dynamicBuffer();//(2) + buf.writeBytes(message.toString().getBytes(CIMConstant.ENCODE_UTF8)); + buf.writeByte(CIMConstant.MESSAGE_SEPARATE); + return buf; + } + + + +} diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/nio/handle/CIMRequestHandler.java b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/handle/CIMRequestHandler.java new file mode 100644 index 0000000..b02accf --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/handle/CIMRequestHandler.java @@ -0,0 +1,15 @@ + +package com.farsunset.cim.nio.handle; + +/** + * 请求处理接口,所有的请求实现必须实现此接口 + * @author 3979434@qq.com + */ +import com.farsunset.cim.nio.mutual.ReplyBody; +import com.farsunset.cim.nio.mutual.SentBody; +import com.farsunset.cim.nio.session.CIMSession; + +public interface CIMRequestHandler { + + public abstract ReplyBody process(CIMSession session,SentBody message); +} \ No newline at end of file diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/nio/handle/HeartbeatHandler.java b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/handle/HeartbeatHandler.java new file mode 100644 index 0000000..3bab701 --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/handle/HeartbeatHandler.java @@ -0,0 +1,32 @@ + +package com.farsunset.cim.nio.handle; + +import org.apache.log4j.Logger; + +import com.farsunset.cim.nio.constant.CIMConstant; +import com.farsunset.cim.nio.mutual.ReplyBody; +import com.farsunset.cim.nio.mutual.SentBody; +import com.farsunset.cim.nio.session.CIMSession; + +/** + *客户端心跳实现 + * + * @author + */ +public class HeartbeatHandler implements CIMRequestHandler { + + protected final Logger logger = Logger.getLogger(HeartbeatHandler.class); + + public ReplyBody process(CIMSession session, SentBody message) { + + logger.warn("heartbeat... from "+session.getRemoteAddress().toString()); + ReplyBody reply = new ReplyBody(); + reply.setKey(CIMConstant.RequestKey.CLIENT_HEARTBEAT); + reply.setCode(CIMConstant.ReturnCode.CODE_200); + session.setHeartbeat(System.currentTimeMillis()); + return reply; + } + + + +} \ No newline at end of file diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/nio/handle/MainIOHandler.java b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/handle/MainIOHandler.java new file mode 100644 index 0000000..fad85f4 --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/handle/MainIOHandler.java @@ -0,0 +1,148 @@ + +package com.farsunset.cim.nio.handle; + +import java.net.InetSocketAddress; +import java.util.HashMap; +import java.util.concurrent.Executors; + +import org.apache.log4j.Logger; +import org.jboss.netty.bootstrap.ServerBootstrap; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.channel.ChannelPipeline; +import org.jboss.netty.channel.ChannelPipelineFactory; +import org.jboss.netty.channel.ChannelStateEvent; +import org.jboss.netty.channel.Channels; +import org.jboss.netty.channel.MessageEvent; +import org.jboss.netty.channel.SimpleChannelUpstreamHandler; +import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory; + +import com.farsunset.cim.nio.constant.CIMConstant; +import com.farsunset.cim.nio.filter.ServerMessageDecoder; +import com.farsunset.cim.nio.filter.ServerMessageEncoder; +import com.farsunset.cim.nio.mutual.ReplyBody; +import com.farsunset.cim.nio.mutual.SentBody; +import com.farsunset.cim.nio.session.CIMSession; + +/** + * + * 客户端请求的入口,所有请求都首先经过它分发处理 + * @author farsunset (3979434@qq.com) + */ +public class MainIOHandler extends SimpleChannelUpstreamHandler { + + protected final Logger logger = Logger.getLogger(MainIOHandler.class); + + private HashMap handlers = new HashMap(); + + + private int port; + + public void init() + { + ServerBootstrap bootstrap = new ServerBootstrap( + new NioServerSocketChannelFactory( + Executors.newCachedThreadPool(), + Executors.newCachedThreadPool())); + + bootstrap.setPipelineFactory(new ChannelPipelineFactory() + { + + @Override + public ChannelPipeline getPipeline() throws Exception + { + return Channels.pipeline( + new ServerMessageDecoder(), + new ServerMessageEncoder(), + MainIOHandler.this); + + } + + }); + + bootstrap.bind(new InetSocketAddress(port)); + logger.warn("netty 启动成功" + port); + + } + + public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent event) + { + logger.warn("sessionCreated()... from "+ctx.getChannel().getRemoteAddress().toString()); + } + + + + + public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) + throws Exception { + logger.debug("message: " + e.getMessage().toString()); + + CIMSession cimSession =new CIMSession(ctx.getChannel()); + ReplyBody reply = new ReplyBody(); + SentBody body = (SentBody) e.getMessage(); + String key = body.getKey(); + + CIMRequestHandler handler = handlers.get(key); + if (handler == null) { + reply.setCode(CIMConstant.ReturnCode.CODE_405); + reply.setCode("KEY ["+key+"] 服务端未定义"); + } else { + reply = handler.process(cimSession, body); + } + + if(reply!=null) + { + reply.setKey(key); + cimSession.write(reply); + logger.debug("-----------------------process done. reply: " + reply.toString()); + } + + //设置心跳时间 + cimSession.setAttribute(CIMConstant.HEARTBEAT_KEY, System.currentTimeMillis()); + } + + public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent event) { + CIMSession cimSession =new CIMSession(ctx.getChannel()); + try{ + logger.warn("sessionClosed()... from "+cimSession.getRemoteAddress()); + CIMRequestHandler handler = handlers.get("sessionClosedHander"); + if(handler!=null && cimSession.containsAttribute(CIMConstant.SESSION_KEY)) + { + handler.process(cimSession, null); + } + } + catch(Exception e) + { + e.printStackTrace(); + } + } + + + /** + *//* + public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent event) { + CIMSession cimSession =new CIMSession(ctx.getChannel()); + try{ + logger.warn("sessionClosed()... from "+cimSession.getRemoteAddress()); + CIMRequestHandler handler = handlers.get("sessionClosedHander"); + if(handler!=null && cimSession.containsAttribute(CIMConstant.SESSION_KEY)) + { + handler.process(cimSession, null); + } + } + catch(Exception e) + { + e.printStackTrace(); + } + }*/ + + public void setHandlers(HashMap handlers) { + this.handlers = handlers; + } + + public void setPort(int port) { + this.port = port; + } + + + +} \ No newline at end of file diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/nio/mutual/Message.java b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/mutual/Message.java new file mode 100644 index 0000000..49e64cb --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/mutual/Message.java @@ -0,0 +1,174 @@ +package com.farsunset.cim.nio.mutual; + +import java.io.Serializable; +/** + * 消息对象 + * @author @author 3979434@qq.com + * + */ +public class Message implements Serializable { + + /** + * @author 3979434@qq.com + * 消息对象 + */ + private static final long serialVersionUID = 1L; + + + /** + * 消息类型,用户自定义消息类别 + */ + private String mid; + + + /** + * 消息类型,用户自定义消息类别 + */ + private String type; + /** + * 消息标题 + */ + private String title; + /** + * 消息类容,于type 组合为任何类型消息,content 根据 format 可表示为 text,json ,xml数据格式 + */ + private String content; + + /** + * 消息发送者账号 + */ + private String sender; + /** + * 消息发送者接收者 + */ + private String receiver; + + /** + * 文件 url + */ + private String file; + /** + * 文件类型 + */ + private String fileType; + + /** + * content 内容格式 + */ + private String format = "txt"; + + + private long timestamp; + + + public Message() + { + timestamp = System.currentTimeMillis(); + } + public long getTimestamp() { + return timestamp; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getSender() { + return sender; + } + + public void setSender(String sender) { + this.sender = sender; + } + + public String getReceiver() { + return receiver; + } + + public void setReceiver(String receiver) { + this.receiver = receiver; + } + + public String getFile() { + return file; + } + + public void setFile(String file) { + this.file = file; + } + + public String getFileType() { + return fileType; + } + + public void setFileType(String fileType) { + this.fileType = fileType; + } + + public String getFormat() { + return format; + } + + public void setFormat(String format) { + this.format = format; + } + + public String toString() + { + + StringBuffer buffer = new StringBuffer(); + buffer.append(""); + buffer.append(""); + buffer.append("").append(mid).append(""); + buffer.append("").append(type).append(""); + buffer.append("").append(this.getTitle()==null?"":this.getTitle()).append(""); + buffer.append(""); + buffer.append("").append(this.getFile()==null?"":this.getFile()).append(""); + buffer.append("").append(this.getFileType()==null?"":this.getFileType()).append(""); + buffer.append("").append(this.getSender()==null?"":this.getSender()).append(""); + buffer.append("").append(this.getReceiver()==null?"":this.getReceiver()).append(""); + buffer.append("").append(this.getFormat()==null?"":this.getFormat()).append(""); + buffer.append("").append(timestamp).append(""); + buffer.append(""); + return buffer.toString(); + } + public String toXmlString() + { + + return toString(); + } + + public String getMid() { + return mid; + } + + public void setMid(String mid) { + this.mid = mid; + } + + +} diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/nio/mutual/ReplyBody.java b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/mutual/ReplyBody.java new file mode 100644 index 0000000..dcf9c0e --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/mutual/ReplyBody.java @@ -0,0 +1,123 @@ +package com.farsunset.cim.nio.mutual; + +import java.io.Serializable; +import java.util.HashMap; +/** + * 请求应答对象 + * @author 3979434@qq.com + * + */ +public class ReplyBody implements Serializable { + + /** + * @author 3979434@qq.com + * 服务端返回消息对象 + */ + private static final long serialVersionUID = 1L; + + /** + * 请求key + */ + private String key; + + + /** + * 返回码 + */ + private String code; + + /** + * 返回说明 + */ + private String message; + + /** + * 返回数据集合 + */ + private HashMap data; + + + private long timestamp; + + public ReplyBody() + { + data = new HashMap(); + timestamp = System.currentTimeMillis(); + } + public long getTimestamp() { + return timestamp; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } + + + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public void put(String k, String v) { + data.put(k, v); + } + + public String get(String k) { + return data.get(k); + } + + public void remove(String k) { + data.remove(k); + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public HashMap getData() { + return data; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + + public String toString() + { + + StringBuffer buffer = new StringBuffer(); + buffer.append(""); + buffer.append(""); + buffer.append("").append(this.getKey()).append(""); + buffer.append("").append(timestamp).append(""); + buffer.append("").append(code).append(""); + buffer.append(""); + for(String key:this.getData().keySet()) + { + buffer.append("<"+key+">").append(this.get(key)).append(""); + } + buffer.append(""); + buffer.append(""); + return buffer.toString(); + } + + + public String toXmlString() + { + + return toString(); + } +} diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/nio/mutual/SentBody.java b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/mutual/SentBody.java new file mode 100644 index 0000000..405e196 --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/mutual/SentBody.java @@ -0,0 +1,82 @@ +package com.farsunset.cim.nio.mutual; + +import java.io.Serializable; +import java.util.HashMap; +/** + * java |android 客户端请求结构 + * @author 3979434@qq.com + * + */ +public class SentBody implements Serializable { + + /** + * @author 3979434@qq.com 客户端发送消息对象 + */ + private static final long serialVersionUID = 1L; + + private String key; + + private HashMap data; + + private long timestamp; + + public SentBody() { + + data = new HashMap(); + timestamp = System.currentTimeMillis(); + } + + public String getKey() { + return key; + } + + public String get(String k) { + return data.get(k); + } + + public long getTimestamp() { + return timestamp; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } + + public void setKey(String key) { + this.key = key; + } + + public void put(String k, String v) { + data.put(k, v); + } + + public void remove(String k) { + data.remove(k); + } + + public HashMap getData() { + return data; + } + + @Override + public String toString() { + StringBuffer buffer = new StringBuffer(); + buffer.append(""); + buffer.append(""); + buffer.append("").append(key).append(""); + buffer.append("").append(timestamp).append(""); + buffer.append(""); + for (String key : data.keySet()) { + buffer.append("<" + key + ">").append(data.get(key)).append( + ""); + } + buffer.append(""); + buffer.append(""); + return buffer.toString(); + } + + public String toXmlString() { + + return toString(); + } +} diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/nio/session/CIMSession.java b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/session/CIMSession.java new file mode 100644 index 0000000..a8818c8 --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/session/CIMSession.java @@ -0,0 +1,247 @@ +package com.farsunset.cim.nio.session; + +import java.io.Serializable; +import java.net.InetAddress; +import java.net.SocketAddress; +import java.net.UnknownHostException; +import java.util.HashMap; +import java.util.Map; + +import org.jboss.netty.channel.Channel; + +import com.farsunset.cim.nio.constant.CIMConstant; + +/** + * IoSession包装类,集群时 将此对象存入表中 + * + * @author 3979434@qq.com + */ + +public class CIMSession implements Serializable{ + + /** + * + */ + private static final long serialVersionUID = 1L; + public static String ID = "ID"; + public static String HOST = "HOST"; + + private Channel session; + + private String gid;//session全局ID + private int nid;//session在本台服务器上的ID + private String deviceId;//客户端设备ID + private String host;//session绑定的服务器IP + private String account;//session绑定的账号 + private String channel;//终端设备类型 + private String deviceModel;//终端设备型号 + + private Long bindTime;//登录时间 + + private Long heartbeat;//心跳时间 + + public CIMSession(Channel session) { + this.session = session; + this.nid = session.getId(); + if(session.getAttachment()==null) + { + HashMap params= new HashMap(); + session.setAttachment(params); + } + + } + + + + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + if(session!=null) + { + ((Map)session.getAttachment()).put(CIMConstant.SESSION_KEY, account); + } + this.account = account; + } + + + + + + + public String getGid() { + return gid; + } + + public void setGid(String gid) { + this.gid = gid; + } + + public int getNid() { + return nid; + } + + public void setNid(int nid) { + this.nid = nid; + } + + public String getDeviceId() { + return deviceId; + } + + + public String getChannel() { + return channel; + } + + public void setChannel(String channel) { + this.channel = channel; + } + + public String getDeviceModel() { + return deviceModel; + } + + public void setDeviceModel(String deviceModel) { + this.deviceModel = deviceModel; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + + + + public String getHost() { + return host; + } + + + + public Long getBindTime() { + return bindTime; + } + + public void setBindTime(Long bindTime) { + this.bindTime = bindTime; + } + + public Long getHeartbeat() { + return heartbeat; + } + + public void setHeartbeat(Long heartbeat) { + this.heartbeat = heartbeat; + if(session!=null && session.getAttachment()!=null) + { + ((Map)session.getAttachment()).put(CIMConstant.HEARTBEAT_KEY, heartbeat); + } + } + + public void setHost(String host) { + this.host = host; + } + + + + public void setAttribute(String key, Object value) { + if(session!=null) + ((Map)session.getAttachment()).put(key, value); + } + + + public boolean containsAttribute(String key) { + if(session!=null) + return ((Map)session.getAttachment()).containsKey(key); + return false; + } + + public Object getAttribute(String key) { + return ((Map)session.getAttachment()).get(key); + } + + public void removeAttribute(String key) { + ((Map)session.getAttachment()).remove(key); + } + + public SocketAddress getRemoteAddress() { + if(session!=null) + return session.getRemoteAddress(); + return null; + } + + public boolean write(Object msg) { + if(session!=null && session.isConnected()) + { + + return session.write(msg).awaitUninterruptibly(5000); + } + return false; + } + + public boolean isConnected() { + if(session!=null) + return session.isConnected(); + return false; + } + + public boolean isLocalhost() + { + + try { + String ip = InetAddress.getLocalHost().getHostAddress(); + return ip.equals(host) && session!=null; + } catch (UnknownHostException e) { + e.printStackTrace(); + } + return false; + + } + + + public void close(boolean immediately) { + if(session!=null) + { + session.disconnect(); + session.close(); + } + } + + + public boolean equals(Object o) { + + if (o instanceof CIMSession) { + + CIMSession t = (CIMSession) o; + if(!t.isLocalhost()) + { + return false; + } + if (t.session.getId() == session.getId()&& t.host.equals(host)) { + return true; + } + return false; + } else { + return false; + } + + } + + public Channel getSession() { + return session; + } + + public void setSession(Channel session) { + this.session = session; + } + + + + + + + +} \ No newline at end of file diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/nio/session/DefaultSessionManager.java b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/session/DefaultSessionManager.java new file mode 100644 index 0000000..213d81c --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/session/DefaultSessionManager.java @@ -0,0 +1,91 @@ + +package com.farsunset.cim.nio.session; + +import java.util.Collection; +import java.util.HashMap; +import java.util.concurrent.atomic.AtomicInteger; + +import com.farsunset.cim.nio.constant.CIMConstant; + +/** + * 自带默认 session管理实现, 各位可以自行实现 AbstractSessionManager接口来实现自己的 session管理 + *服务器集群时 须要将CIMSession 信息存入数据库或者nosql 等 第三方存储空间中,便于所有服务器都可以访问 + * @author farsunset (3979434@qq.com) + */ +public class DefaultSessionManager implements SessionManager{ + + + private static HashMap sessions =new HashMap(); + + + private static final AtomicInteger connectionsCounter = new AtomicInteger(0); + + + + /** + * + */ + public void addSession(String account,CIMSession session) { + if(session!=null) + { + session.setAttribute(CIMConstant.SESSION_KEY, account); + sessions.put(account, session); + connectionsCounter.incrementAndGet(); + } + + } + + + public CIMSession getSession(String account) { + + + return sessions.get(account); + } + + + + + public Collection getSessions() { + return sessions.values(); + } + + public void removeSession(CIMSession session) { + + + sessions.remove(session.getAttribute(CIMConstant.SESSION_KEY)); + } + + + public void removeSession(String account) { + + sessions.remove(account); + + } + + + public boolean containsCIMSession(CIMSession ios) + { + return sessions.containsKey(ios.getAttribute(CIMConstant.SESSION_KEY)) || sessions.containsValue(ios); + } + + + public String getAccount(CIMSession ios) + { + if(ios.getAttribute(CIMConstant.SESSION_KEY)==null) + { + for(String key:sessions.keySet()) + { + if(sessions.get(key).equals(ios) || sessions.get(key).getNid()==ios.getNid()) + { + return key; + } + } + }else + { + return ios.getAttribute(CIMConstant.SESSION_KEY).toString(); + } + + return null; + } + +} diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/nio/session/SessionManager.java b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/session/SessionManager.java new file mode 100644 index 0000000..8c01dcf --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/nio/session/SessionManager.java @@ -0,0 +1,58 @@ + +package com.farsunset.cim.nio.session; + +import java.util.Collection; + + +/** + * 客户端的 session管理接口 + * 可自行实现此接口管理session + * @author 3979434@qq.com + */ + +public interface SessionManager { + + + /** + * 添加新的session + */ + public void addSession(String account,CIMSession session); + + /** + * + * @param account 客户端session的 key 一般可用 用户账号来对应session + * @return + */ + CIMSession getSession(String account); + + /** + * 获取所有session + * @return + */ + public Collection getSessions(); + + /** + * 删除session + * @param session + */ + public void removeSession(CIMSession session) ; + + + /** + * 删除session + * @param session + */ + public void removeSession(String account); + + /** + * session是否存在 + * @param session + */ + public boolean containsCIMSession(CIMSession ios); + + /** + * session获取对应的 用户 key + * @param session + */ + public String getAccount(CIMSession ios); +} \ No newline at end of file diff --git a/cim_for_netty/ichat-server/.classpath b/cim_for_netty/ichat-server/.classpath new file mode 100644 index 0000000..a924df7 --- /dev/null +++ b/cim_for_netty/ichat-server/.classpath @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cim_for_netty/ichat-server/.mymetadata b/cim_for_netty/ichat-server/.mymetadata new file mode 100644 index 0000000..194d12c --- /dev/null +++ b/cim_for_netty/ichat-server/.mymetadata @@ -0,0 +1,13 @@ + + + + + + + diff --git a/cim_for_netty/ichat-server/.project b/cim_for_netty/ichat-server/.project new file mode 100644 index 0000000..593a507 --- /dev/null +++ b/cim_for_netty/ichat-server/.project @@ -0,0 +1,58 @@ + + + ichat-server + + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + com.genuitec.eclipse.j2eedt.core.WebClasspathBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.genuitec.eclipse.j2eedt.core.J2EEProjectValidator + + + + + com.genuitec.eclipse.j2eedt.core.DeploymentDescriptorValidator + + + + + org.eclipse.wst.validation.validationbuilder + + + + + com.genuitec.eclipse.ast.deploy.core.DeploymentBuilder + + + + + + org.eclipse.jem.workbench.JavaEMFNature + com.genuitec.eclipse.ast.deploy.core.deploymentnature + com.genuitec.eclipse.j2eedt.core.webnature + org.eclipse.jdt.core.javanature + org.eclipse.wst.jsdt.core.jsNature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.common.modulecore.ModuleCoreNature + + diff --git a/cim_for_netty/ichat-server/.settings/org.eclipse.core.resources.prefs b/cim_for_netty/ichat-server/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..bebab45 --- /dev/null +++ b/cim_for_netty/ichat-server/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +#Mon Jun 23 09:53:56 CST 2014 +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/cim_for_netty/ichat-server/WebRoot/META-INF/MANIFEST.MF b/cim_for_netty/ichat-server/WebRoot/META-INF/MANIFEST.MF new file mode 100644 index 0000000..254272e --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/classes/log4j.properties b/cim_for_netty/ichat-server/WebRoot/WEB-INF/classes/log4j.properties new file mode 100644 index 0000000..b0801a7 --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/WEB-INF/classes/log4j.properties @@ -0,0 +1,13 @@ +log4j.rootLogger=warn,console, file + +#----------console---------------- +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.Target=System.out +log4j.appender.console.layout.ConversionPattern=%C %p %d{yyyy-MM-dd HH:mm:ss}%n%m%n--------------------------------------------------------------------------------------------------------------------------%n +#----------file---------------- +log4j.appender.file=org.apache.log4j.FileAppender +log4j.appender.file.File=cim.log +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%C %p %d{yyyy-MM-dd HH\:mm\:ss} - %m%n + diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/classes/spring-cim.xml b/cim_for_netty/ichat-server/WebRoot/WEB-INF/classes/spring-cim.xml new file mode 100644 index 0000000..1e6b53e --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/WEB-INF/classes/spring-cim.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/classes/spring-config.xml b/cim_for_netty/ichat-server/WebRoot/WEB-INF/classes/spring-config.xml new file mode 100644 index 0000000..b24013a --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/WEB-INF/classes/spring-config.xml @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/classes/spring-push.xml b/cim_for_netty/ichat-server/WebRoot/WEB-INF/classes/spring-push.xml new file mode 100644 index 0000000..6b21240 --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/WEB-INF/classes/spring-push.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/classes/struts.xml b/cim_for_netty/ichat-server/WebRoot/WEB-INF/classes/struts.xml new file mode 100644 index 0000000..7dd0e3d --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/WEB-INF/classes/struts.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + /console/session/manage.jsp + + + + + + + \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.aop-3.0.2.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.aop-3.0.2.jar new file mode 100644 index 0000000..e431439 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.aop-3.0.2.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.asm-3.0.2.RELEASE.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.asm-3.0.2.RELEASE.jar new file mode 100644 index 0000000..7b16d9a Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.asm-3.0.2.RELEASE.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.beans-3.0.2.RELEASE.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.beans-3.0.2.RELEASE.jar new file mode 100644 index 0000000..75827fd Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.beans-3.0.2.RELEASE.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.context-3.0.2.RELEASE.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.context-3.0.2.RELEASE.jar new file mode 100644 index 0000000..f358a41 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.context-3.0.2.RELEASE.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.core-3.0.2.RELEASE.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.core-3.0.2.RELEASE.jar new file mode 100644 index 0000000..be97dd3 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.core-3.0.2.RELEASE.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.expression-3.0.2.RELEASE.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.expression-3.0.2.RELEASE.jar new file mode 100644 index 0000000..fa3149e Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.expression-3.0.2.RELEASE.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.jdbc-3.0.2.RELEASE.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.jdbc-3.0.2.RELEASE.jar new file mode 100644 index 0000000..dd3572d Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.jdbc-3.0.2.RELEASE.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.orm-3.0.2.RELEASE.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.orm-3.0.2.RELEASE.jar new file mode 100644 index 0000000..e099fbf Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.orm-3.0.2.RELEASE.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.transaction-3.0.2.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.transaction-3.0.2.jar new file mode 100644 index 0000000..321d246 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.transaction-3.0.2.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.web-3.0.2.RELEASE.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.web-3.0.2.RELEASE.jar new file mode 100644 index 0000000..13c75b3 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/Spring.web-3.0.2.RELEASE.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/antlr-2.7.6.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/antlr-2.7.6.jar new file mode 100644 index 0000000..3702b64 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/antlr-2.7.6.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/asm.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/asm.jar new file mode 100644 index 0000000..ee0c7cc Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/asm.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/aspectjweaver.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/aspectjweaver.jar new file mode 100644 index 0000000..e0087fb Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/aspectjweaver.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/commons-fileupload-1.2.1.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/commons-fileupload-1.2.1.jar new file mode 100644 index 0000000..7db423e Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/commons-fileupload-1.2.1.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/commons-io-2.4.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/commons-io-2.4.jar new file mode 100644 index 0000000..90035a4 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/commons-io-2.4.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/commons-lang3-3.1.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/commons-lang3-3.1.jar new file mode 100644 index 0000000..a85e539 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/commons-lang3-3.1.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/commons-logging-1.0.4.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/commons-logging-1.0.4.jar new file mode 100644 index 0000000..08765be Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/commons-logging-1.0.4.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/freemarker-2.3.15.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/freemarker-2.3.15.jar new file mode 100644 index 0000000..61deda0 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/freemarker-2.3.15.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/gson-2.1.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/gson-2.1.jar new file mode 100644 index 0000000..b85f091 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/gson-2.1.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/httpclient-4.3.4.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/httpclient-4.3.4.jar new file mode 100644 index 0000000..f8a7afe Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/httpclient-4.3.4.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/httpcore-4.3.2.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/httpcore-4.3.2.jar new file mode 100644 index 0000000..813ec23 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/httpcore-4.3.2.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/jstl-1.2.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/jstl-1.2.jar new file mode 100644 index 0000000..0fd275e Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/jstl-1.2.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/log4j.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/log4j.jar new file mode 100644 index 0000000..69b0005 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/log4j.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/netty-3.6.5.Final.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/netty-3.6.5.Final.jar new file mode 100644 index 0000000..3d10dbb Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/netty-3.6.5.Final.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/ognl-2.7.3.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/ognl-2.7.3.jar new file mode 100644 index 0000000..6517028 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/ognl-2.7.3.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/slf4j-api-1.7.5.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/slf4j-api-1.7.5.jar new file mode 100644 index 0000000..8766455 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/slf4j-api-1.7.5.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/slf4j-nop-1.7.5.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/slf4j-nop-1.7.5.jar new file mode 100644 index 0000000..e55bdd8 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/slf4j-nop-1.7.5.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/spring-context-support.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/spring-context-support.jar new file mode 100644 index 0000000..5f618bd Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/spring-context-support.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/struts2-core-2.1.8.1.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/struts2-core-2.1.8.1.jar new file mode 100644 index 0000000..1439f17 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/struts2-core-2.1.8.1.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/xstream-1.3.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/xstream-1.3.jar new file mode 100644 index 0000000..e5a3234 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/xstream-1.3.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/xwork-core-2.1.6.jar b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/xwork-core-2.1.6.jar new file mode 100644 index 0000000..bd5996b Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/WEB-INF/lib/xwork-core-2.1.6.jar differ diff --git a/cim_for_netty/ichat-server/WebRoot/WEB-INF/web.xml b/cim_for_netty/ichat-server/WebRoot/WEB-INF/web.xml new file mode 100644 index 0000000..219d911 --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/WEB-INF/web.xml @@ -0,0 +1,51 @@ + + + ichat + + + + contextConfigLocation + + classpath*:spring-*.xml + + + + log4jConfigLocation + classpath:/log4j.properties + + + + + org.springframework.web.context.ContextLoaderListener + + + + + struts2 + org.apache.struts2.dispatcher.FilterDispatcher + + + struts2 + *.action + + + struts2 + *.do + + + struts2 + *.api + + + -1 + + + + + + /console/index.jsp + + + diff --git a/cim_for_netty/ichat-server/WebRoot/console/header.jsp b/cim_for_netty/ichat-server/WebRoot/console/header.jsp new file mode 100644 index 0000000..959c53f --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/console/header.jsp @@ -0,0 +1,93 @@ +<%@ page language="java" pageEncoding="UTF-8"%> + +<% + String headerBasePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+ request.getContextPath(); + +%> + + + +
+ + +
+
+ + +
+ +
+ + +
+
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/console/index.jsp b/cim_for_netty/ichat-server/WebRoot/console/index.jsp new file mode 100644 index 0000000..1dc48ca --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/console/index.jsp @@ -0,0 +1,39 @@ +<%@ page language="java" pageEncoding="utf-8"%> +<% +String path = request.getContextPath(); +String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path; +%> + + + + + + CIM管理系统 + + + + + + + + + + + + + + +
<
<%@include file="header.jsp"%> + + <%@include file="nav.jsp"%> + +
+ +
+ + + + + diff --git a/cim_for_netty/ichat-server/WebRoot/console/nav.jsp b/cim_for_netty/ichat-server/WebRoot/console/nav.jsp new file mode 100644 index 0000000..f8d9005 --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/console/nav.jsp @@ -0,0 +1,20 @@ +<% + String navBasePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ request.getContextPath(); +%> +<%@ page language="java" pageEncoding="UTF-8"%> +
+ + + +
\ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/console/session/manage.jsp b/cim_for_netty/ichat-server/WebRoot/console/session/manage.jsp new file mode 100644 index 0000000..d704517 --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/console/session/manage.jsp @@ -0,0 +1,180 @@ +<%@ page language="java" pageEncoding="utf-8"%> +<%@ page import="java.util.Collection"%> +<%@ page import="com.farsunset.ichat.common.util.StringUtil"%> +<%@ page import="com.farsunset.cim.nio.session.CIMSession"%> +<% + String path = request.getContextPath(); + String basePath = request.getScheme() + "://" + + request.getServerName() + ":" + request.getServerPort() + + path; + + Collection sessionList = (Collection)request.getAttribute("sessionList"); +%> + + + + + + CIM管理系统 + + + + + + + + + + + + + + + + <%@include file="../header.jsp"%> + + <%@include file="../nav.jsp"%> + +
+
+
+ 在线用户 +
+
+
+ + + + + + + + + + + + + + + + + <% + for(CIMSession ios:sessionList) + { + + %> + + + + + + + + + + <%} %> + + + + + + +
账号终端来源终端ID终端型号在线时长操作
+ <%=ios.getAccount() %> + + <%=ios.getChannel() %> + + <%=ios.getDeviceId() %> + + <%=ios.getDeviceModel() %> + + <%=(System.currentTimeMillis()-ios.getBindTime())/1000 %>秒 + +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/index.jsp b/cim_for_netty/ichat-server/WebRoot/index.jsp new file mode 100644 index 0000000..ff20049 --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/index.jsp @@ -0,0 +1,2 @@ +<%@ page language="java" pageEncoding="utf-8"%> +Hellow CIM! \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/css/bootstrap-theme.min.css b/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/css/bootstrap-theme.min.css new file mode 100644 index 0000000..cad36b4 --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/css/bootstrap-theme.min.css @@ -0,0 +1 @@ +.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,0%,#e6e6e6,100%);background-image:-moz-linear-gradient(top,#fff 0,#e6e6e6 100%);background-image:linear-gradient(to bottom,#fff 0,#e6e6e6 100%);background-repeat:repeat-x;border-color:#e0e0e0;border-color:#ccc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0)}.btn-default:active,.btn-default.active{background-color:#e6e6e6;border-color:#e0e0e0}.btn-primary{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;border-color:#2d6ca2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.btn-primary:active,.btn-primary.active{background-color:#3071a9;border-color:#2d6ca2}.btn-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;border-color:#419641;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.btn-success:active,.btn-success.active{background-color:#449d44;border-color:#419641}.btn-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;border-color:#eb9316;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.btn-warning:active,.btn-warning.active{background-color:#ec971f;border-color:#eb9316}.btn-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;border-color:#c12e2a;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.btn-danger:active,.btn-danger.active{background-color:#c9302c;border-color:#c12e2a}.btn-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;border-color:#2aabd2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.btn-info:active,.btn-info.active{background-color:#31b0d5;border-color:#2aabd2}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.navbar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#f8f8f8));background-image:-webkit-linear-gradient(top,#fff,0%,#f8f8f8,100%);background-image:-moz-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff8f8f8',GradientType=0);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar .navbar-nav>.active>a{background-color:#f8f8f8}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-gradient(linear,left 0,left 100%,from(#3c3c3c),to(#222));background-image:-webkit-linear-gradient(top,#3c3c3c,0%,#222,100%);background-image:-moz-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c',endColorstr='#ff222222',GradientType=0)}.navbar-inverse .navbar-nav>.active>a{background-color:#222}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#c8e5bc));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#c8e5bc,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;border-color:#b2dba1;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffc8e5bc',GradientType=0)}.alert-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#b9def0));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#b9def0,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;border-color:#9acfea;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffb9def0',GradientType=0)}.alert-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#f8efc0));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#f8efc0,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;border-color:#f5e79e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fff8efc0',GradientType=0)}.alert-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#e7c3c3));background-image:-webkit-linear-gradient(top,#f2dede,0%,#e7c3c3,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;border-color:#dca7a7;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffe7c3c3',GradientType=0)}.progress{background-image:-webkit-gradient(linear,left 0,left 100%,from(#ebebeb),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#ebebeb,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb',endColorstr='#fff5f5f5',GradientType=0)}.progress-bar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.progress-bar-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.progress-bar-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.progress-bar-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.progress-bar-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3278b3));background-image:-webkit-linear-gradient(top,#428bca,0%,#3278b3,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;border-color:#3278b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3278b3',GradientType=0)}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f5f5f5),to(#e8e8e8));background-image:-webkit-linear-gradient(top,#f5f5f5,0%,#e8e8e8,100%);background-image:-moz-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#ffe8e8e8',GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#d0e9c6));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#d0e9c6,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffd0e9c6',GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#c4e3f3));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#c4e3f3,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffc4e3f3',GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#faf2cc));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#faf2cc,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fffaf2cc',GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#ebcccc));background-image:-webkit-linear-gradient(top,#f2dede,0%,#ebcccc,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffebcccc',GradientType=0)}.well{background-image:-webkit-gradient(linear,left 0,left 100%,from(#e8e8e8),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#e8e8e8,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;border-color:#dcdcdc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8',endColorstr='#fff5f5f5',GradientType=0);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)} \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/css/bootstrap.min.css b/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/css/bootstrap.min.css new file mode 100644 index 0000000..69e4952 --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/css/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v3.0.0 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + *//*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid #c0c0c0}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{padding:0;box-sizing:border-box}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:2cm .5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:微软雅黑;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}button,input,select[multiple],textarea{background-image:none}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16.099999999999998px;font-weight:200;line-height:1.4}@media(min-width:768px){.lead{font-size:21px}}small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#428bca}.text-warning{color:#c09853}.text-danger{color:#b94a48}.text-success{color:#468847}.text-info{color:#3a87ad}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:微软雅黑;font-weight:500;line-height:1.1}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}h1 small,.h1 small{font-size:24px}h2 small,.h2 small{font-size:18px}h3 small,.h3 small,h4 small,.h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:bold}dd{margin-left:0}@media(min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.428571429;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:1.428571429}code,pre{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.row{margin-right:-15px;margin-left:-15px}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11{float:left}.col-xs-1{width:8.333333333333332%}.col-xs-2{width:16.666666666666664%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333333333%}.col-xs-5{width:41.66666666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.333333333333336%}.col-xs-8{width:66.66666666666666%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333333334%}.col-xs-11{width:91.66666666666666%}.col-xs-12{width:100%}@media(min-width:768px){.container{max-width:750px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11{float:left}.col-sm-1{width:8.333333333333332%}.col-sm-2{width:16.666666666666664%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333333333%}.col-sm-5{width:41.66666666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.333333333333336%}.col-sm-8{width:66.66666666666666%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333333334%}.col-sm-11{width:91.66666666666666%}.col-sm-12{width:100%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-11{left:91.66666666666666%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-offset-1{margin-left:8.333333333333332%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-11{margin-left:91.66666666666666%}}@media(min-width:992px){.container{max-width:970px}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11{float:left}.col-md-1{width:8.333333333333332%}.col-md-2{width:16.666666666666664%}.col-md-3{width:25%}.col-md-4{width:33.33333333333333%}.col-md-5{width:41.66666666666667%}.col-md-6{width:50%}.col-md-7{width:58.333333333333336%}.col-md-8{width:66.66666666666666%}.col-md-9{width:75%}.col-md-10{width:83.33333333333334%}.col-md-11{width:91.66666666666666%}.col-md-12{width:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.333333333333332%}.col-md-push-2{left:16.666666666666664%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333333333%}.col-md-push-5{left:41.66666666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.333333333333336%}.col-md-push-8{left:66.66666666666666%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333333334%}.col-md-push-11{left:91.66666666666666%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-11{right:91.66666666666666%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-11{margin-left:91.66666666666666%}}@media(min-width:1200px){.container{max-width:1170px}.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11{float:left}.col-lg-1{width:8.333333333333332%}.col-lg-2{width:16.666666666666664%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333333333%}.col-lg-5{width:41.66666666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.333333333333336%}.col-lg-8{width:66.66666666666666%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333333334%}.col-lg-11{width:91.66666666666666%}.col-lg-12{width:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-11{left:91.66666666666666%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-11{margin-left:91.66666666666666%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table thead>tr>th,.table tbody>tr>th,.table tfoot>tr>th,.table thead>tr>td,.table tbody>tr>td,.table tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table caption+thead tr:first-child th,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed thead>tr>th,.table-condensed tbody>tr>th,.table-condensed tfoot>tr>th,.table-condensed thead>tr>td,.table-condensed tbody>tr>td,.table-condensed tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8;border-color:#d6e9c6}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td{background-color:#d0e9c6;border-color:#c9e2b3}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede;border-color:#eed3d7}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td{background-color:#ebcccc;border-color:#e6c1c7}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3;border-color:#fbeed5}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td{background-color:#faf2cc;border-color:#f8e5be}@media(max-width:768px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0;background-color:#fff}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>thead>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>thead>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}select[multiple],select[size]{height:auto}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{height:auto}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control{display:block;width:100%;height:35px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;border:1px solid #ccc;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}textarea.form-control{height:auto}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.radio label,.checkbox label{display:inline;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:normal;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm{height:auto}.input-lg{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:45px;line-height:45px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning .control-label{color:#c09853}.has-warning .form-control{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.has-warning .input-group-addon{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.has-error .help-block,.has-error .control-label{color:#b94a48}.has-error .form-control{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.has-error .input-group-addon{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.has-success .help-block,.has-success .control-label{color:#468847}.has-success .form-control{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.has-success .input-group-addon{color:#468847;background-color:#dff0d8;border-color:#468847}.form-control-static{padding-top:7px;margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media(min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline .radio,.form-inline .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}@media(min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:normal;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-link{font-weight:normal;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-xs{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-print:before{content:"\e045"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-briefcase:before{content:"\1f4bc"}.glyphicon-calendar:before{content:"\1f4c5"}.glyphicon-pushpin:before{content:"\1f4cc"}.glyphicon-paperclip:before{content:"\1f4ce"}.glyphicon-camera:before{content:"\1f4f7"}.glyphicon-lock:before{content:"\1f512"}.glyphicon-bell:before{content:"\1f514"}.glyphicon-bookmark:before{content:"\1f516"}.glyphicon-fire:before{content:"\1f525"}.glyphicon-wrench:before{content:"\1f527"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-bottom:0 dotted;border-left:4px solid transparent;content:""}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#fff;text-decoration:none;background-color:#428bca}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0 dotted;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media(min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.btn-default .caret{border-top-color:#333}.btn-primary .caret,.btn-success .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#333}.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret,.dropup .btn-danger .caret,.dropup .btn-info .caret{border-bottom-color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{padding:5px 10px;padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.btn-group-justified .btn{display:table-cell;float:none;width:1%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group.col{float:none;padding-right:0;padding-left:0}.input-group .form-control{width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:45px;line-height:45px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-4px}.input-group-btn>.btn:hover,.input-group-btn>.btn:active{z-index:2}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}}.nav-tabs.nav-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs.nav-justified>.active>a{border-bottom-color:#fff}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:5px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-justified>li{display:table-cell;width:1%}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs-justified>.active>a{border-bottom-color:#fff}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.nav .caret{border-top-color:#428bca;border-bottom-color:#428bca}.nav a:hover .caret{border-top-color:#2a6496;border-bottom-color:#2a6496}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;z-index:1000;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}@media(min-width:768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}@media(min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media(min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-collapse .navbar-nav.navbar-left:first-child{margin-left:-15px}.navbar-collapse .navbar-nav.navbar-right:last-child{margin-right:-15px}.navbar-collapse .navbar-text:last-child{margin-right:0}}.container>.navbar-header,.container>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media(min-width:768px){.container>.navbar-header,.container>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{border-width:0 0 1px}@media(min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;border-width:0 0 1px}@media(min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;z-index:1030}.navbar-fixed-bottom{bottom:0;margin-bottom:0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media(min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media(min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media(max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media(min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}@media(min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}@media(min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}}@media(max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media(min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-text{float:left;margin-top:15px;margin-bottom:15px}@media(min-width:768px){.navbar-text{margin-right:15px;margin-left:15px}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e6e6e6}.navbar-default .navbar-nav>.dropdown>a:hover .caret,.navbar-default .navbar-nav>.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.open>a .caret,.navbar-default .navbar-nav>.open>a:hover .caret,.navbar-default .navbar-nav>.open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.navbar-default .navbar-nav>.dropdown>a .caret{border-top-color:#777;border-bottom-color:#777}@media(max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-nav>.dropdown>a .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}@media(max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{background-color:#eee}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.badge:empty{display:none}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.btn .badge{position:relative;top:-1px}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.jumbotron h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.thumbnail{display:inline-block;display:block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img{display:block;height:auto;max-width:100%}a.thumbnail:hover,a.thumbnail:focus{border-color:#428bca}.thumbnail>img{margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#356635}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#2d6987}.alert-warning{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.alert-warning hr{border-top-color:#f8e5be}.alert-warning .alert-link{color:#a47e3c}.alert-danger{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger hr{border-top-color:#e6c1c7}.alert-danger .alert-link{color:#953b39}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{z-index: 1000;margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0}.panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table{margin-bottom:0}.panel>.panel-body+.table{border-top:1px solid #ddd}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;margin-bottom:0;font-size:16px}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-warning{border-color:#fbeed5}.panel-warning>.panel-heading{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#fbeed5}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#fbeed5}.panel-danger{border-color:#eed3d7}.panel-danger>.panel-heading{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#eed3d7}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#eed3d7}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:20px;font-weight:bold;line-height:1;color:#000;padding: 2px 4px;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.8;filter:alpha(opacity=80)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}body.modal-open,.modal-open .navbar-fixed-top,.modal-open .navbar-fixed-bottom{margin-right:15px}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{z-index:1050;width:auto;padding:10px;margin-right:auto;margin-left:auto}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:20px}.modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.modal-dialog{right:auto;left:50%;width:600px;padding-top:30px;padding-bottom:30px}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;height:auto;max-width:100%;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);opacity:.5;filter:alpha(opacity=50)}.carousel-control.left{background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.5)),to(rgba(0,0,0,0.0001)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.5) 0),color-stop(rgba(0,0,0,0.0001) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1)}.carousel-control.right{right:0;left:auto;background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.0001)),to(rgba(0,0,0,0.5)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.0001) 0),color-stop(rgba(0,0,0,0.5) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1)}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;left:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{display:table;content:" "}.clearfix:after{clear:both}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media screen and (max-width:400px){@-ms-viewport{width:320px}}.hidden{display:none!important;visibility:hidden!important}.visible-xs{display:none!important}tr.visible-xs{display:none!important}th.visible-xs,td.visible-xs{display:none!important}@media(max-width:767px){.visible-xs{display:block!important}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}tr.visible-xs.visible-sm{display:table-row!important}th.visible-xs.visible-sm,td.visible-xs.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-xs.visible-md{display:block!important}tr.visible-xs.visible-md{display:table-row!important}th.visible-xs.visible-md,td.visible-xs.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-xs.visible-lg{display:block!important}tr.visible-xs.visible-lg{display:table-row!important}th.visible-xs.visible-lg,td.visible-xs.visible-lg{display:table-cell!important}}.visible-sm{display:none!important}tr.visible-sm{display:none!important}th.visible-sm,td.visible-sm{display:none!important}@media(max-width:767px){.visible-sm.visible-xs{display:block!important}tr.visible-sm.visible-xs{display:table-row!important}th.visible-sm.visible-xs,td.visible-sm.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-sm{display:block!important}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-sm.visible-md{display:block!important}tr.visible-sm.visible-md{display:table-row!important}th.visible-sm.visible-md,td.visible-sm.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-sm.visible-lg{display:block!important}tr.visible-sm.visible-lg{display:table-row!important}th.visible-sm.visible-lg,td.visible-sm.visible-lg{display:table-cell!important}}.visible-md{display:none!important}tr.visible-md{display:none!important}th.visible-md,td.visible-md{display:none!important}@media(max-width:767px){.visible-md.visible-xs{display:block!important}tr.visible-md.visible-xs{display:table-row!important}th.visible-md.visible-xs,td.visible-md.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}tr.visible-md.visible-sm{display:table-row!important}th.visible-md.visible-sm,td.visible-md.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-md{display:block!important}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-md.visible-lg{display:block!important}tr.visible-md.visible-lg{display:table-row!important}th.visible-md.visible-lg,td.visible-md.visible-lg{display:table-cell!important}}.visible-lg{display:none!important}tr.visible-lg{display:none!important}th.visible-lg,td.visible-lg{display:none!important}@media(max-width:767px){.visible-lg.visible-xs{display:block!important}tr.visible-lg.visible-xs{display:table-row!important}th.visible-lg.visible-xs,td.visible-lg.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}tr.visible-lg.visible-sm{display:table-row!important}th.visible-lg.visible-sm,td.visible-lg.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-lg.visible-md{display:block!important}tr.visible-lg.visible-md{display:table-row!important}th.visible-lg.visible-md,td.visible-lg.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-lg{display:block!important}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}.hidden-xs{display:block!important}tr.hidden-xs{display:table-row!important}th.hidden-xs,td.hidden-xs{display:table-cell!important}@media(max-width:767px){.hidden-xs{display:none!important}tr.hidden-xs{display:none!important}th.hidden-xs,td.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm{display:none!important}tr.hidden-xs.hidden-sm{display:none!important}th.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-xs.hidden-md{display:none!important}tr.hidden-xs.hidden-md{display:none!important}th.hidden-xs.hidden-md,td.hidden-xs.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-xs.hidden-lg{display:none!important}tr.hidden-xs.hidden-lg{display:none!important}th.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg{display:none!important}}.hidden-sm{display:block!important}tr.hidden-sm{display:table-row!important}th.hidden-sm,td.hidden-sm{display:table-cell!important}@media(max-width:767px){.hidden-sm.hidden-xs{display:none!important}tr.hidden-sm.hidden-xs{display:none!important}th.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}tr.hidden-sm{display:none!important}th.hidden-sm,td.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-sm.hidden-md{display:none!important}tr.hidden-sm.hidden-md{display:none!important}th.hidden-sm.hidden-md,td.hidden-sm.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-sm.hidden-lg{display:none!important}tr.hidden-sm.hidden-lg{display:none!important}th.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg{display:none!important}}.hidden-md{display:block!important}tr.hidden-md{display:table-row!important}th.hidden-md,td.hidden-md{display:table-cell!important}@media(max-width:767px){.hidden-md.hidden-xs{display:none!important}tr.hidden-md.hidden-xs{display:none!important}th.hidden-md.hidden-xs,td.hidden-md.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-md.hidden-sm{display:none!important}tr.hidden-md.hidden-sm{display:none!important}th.hidden-md.hidden-sm,td.hidden-md.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}tr.hidden-md{display:none!important}th.hidden-md,td.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-md.hidden-lg{display:none!important}tr.hidden-md.hidden-lg{display:none!important}th.hidden-md.hidden-lg,td.hidden-md.hidden-lg{display:none!important}}.hidden-lg{display:block!important}tr.hidden-lg{display:table-row!important}th.hidden-lg,td.hidden-lg{display:table-cell!important}@media(max-width:767px){.hidden-lg.hidden-xs{display:none!important}tr.hidden-lg.hidden-xs{display:none!important}th.hidden-lg.hidden-xs,td.hidden-lg.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-lg.hidden-sm{display:none!important}tr.hidden-lg.hidden-sm{display:none!important}th.hidden-lg.hidden-sm,td.hidden-lg.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-lg.hidden-md{display:none!important}tr.hidden-lg.hidden-md{display:none!important}th.hidden-lg.hidden-md,td.hidden-lg.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-lg{display:none!important}tr.hidden-lg{display:none!important}th.hidden-lg,td.hidden-lg{display:none!important}}.visible-print{display:none!important}tr.visible-print{display:none!important}th.visible-print,td.visible-print{display:none!important}@media print{.visible-print{display:block!important}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}.hidden-print{display:none!important}tr.hidden-print{display:none!important}th.hidden-print,td.hidden-print{display:none!important}} \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.eot b/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..87eaa43 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.eot differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.svg b/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..5fee068 --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.ttf b/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..be784dc Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.ttf differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.woff b/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..2cc3e48 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/fonts/glyphicons-halflings-regular.woff differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/js/bootstrap.min.js b/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/js/bootstrap.min.js new file mode 100644 index 0000000..1765631 --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/resource/bootstrap/js/bootstrap.min.js @@ -0,0 +1,6 @@ +/** +* bootstrap.js v3.0.0 by @fat and @mdo +* Copyright 2013 Twitter Inc. +* http://www.apache.org/licenses/LICENSE-2.0 +*/ +if(!jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]}}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(window.jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d)};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.is("input")?"val":"html",e=c.data();a+="Text",e.resetText||c.data("resetText",c[d]()),c[d](e[a]||this.options[a]),setTimeout(function(){"loadingText"==a?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons"]');if(a.length){var b=this.$element.find("input").prop("checked",!this.$element.hasClass("active")).trigger("change");"radio"===b.prop("type")&&a.find(".active").removeClass("active")}this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}this.sliding=!0,f&&this.pause();var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});if(!e.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(j),j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)}).emulateTransitionEnd(600)}else{if(this.$element.trigger(j),j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?(this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350),void 0):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(window.jQuery),+function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(''}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(window.jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(c).is("body")?a(window):a(c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#\w/.test(e)&&a(e);return f&&f.length&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parents(".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top()),"function"==typeof h&&(h=f.bottom());var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;this.affixed!==i&&(this.unpin&&this.$element.css("top",""),this.affixed=i,this.unpin="bottom"==i?e.top-d:null,this.$element.removeClass(b.RESET).addClass("affix"+(i?"-"+i:"")),"bottom"==i&&this.$element.offset({top:document.body.offsetHeight-h-this.$element.height()}))}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(window.jQuery); \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/resource/css/base-ui.css b/cim_for_netty/ichat-server/WebRoot/resource/css/base-ui.css new file mode 100644 index 0000000..e9d9664 --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/resource/css/base-ui.css @@ -0,0 +1,276 @@ + +/* golabe */ + + +/* 工具栏 btn*/ + + + .ico, .text{ + display:block; + height:19px; + line-height: 19px; + float: left; +} + .text{ + margin-left:5px; +} + .ico{ + width:20px; + background-image:url(../img/toolbar.png?t=3); + background-repeat: no-repeat; + background-position:-999px -999px; +} + .ico-down{ + background-position:0 -358px; +} + .ico-share{ + background-position:0 -398px; +} + .ico-del{ + background-position:0 -477px +} + .ico-move{ + background-position:0 -518px; +} + .ico-rename{ + background-position:0 -598px; +} + .ico-mkdir{ + background-position:0 -638px; +} + .ico-point{ + background-position:5px -272px; +} +/*hover*/ + .btn:hover .ico-down{ + background-position:-50px -358px; +} + .hover .ico-share{ + background-position:-50px -398px; +} + .btn:hover .ico-del{ + background-position:-50px -477px +} + .btn:hover .ico-move{ + background-position:-50px -518px; +} + .btn:hover .ico-rename{ + background-position:-50px -598px; +} + .btn:hover .ico-mkdir{ + background-position:-50px -638px; +} + .hover .ico-point{ + background-position: -45px -272px; +} +/*disable*/ + .disable:hover .ico-down{ + background-position:0 -358px; +} + .disable:hover .ico-share{ + background-position:0 -398px; +} + .disable:hover .ico-del{ + background-position:0 -477px +} + .disable:hover .ico-move{ + background-position:0 -518px; +} + .disable:hover .ico-rename{ + background-position:0 -598px; +} + .disable:hover .ico-mkdir{ + background-position:0 -638px; +} +/*menu on*/ + .on .ico-share{ + background-position:-50px -398px; +} + .on .ico-point{ + background-position:-45px -312px; +} +/*分享*/ + .btn-share{ + position: relative; +} + .btn-share .btn-auxiliary{ + padding-right: 10px; +} + + .toolbar-dropdown{ + display: none; + position: absolute; + left: 3px; + top: 38px; + border:1px solid #9da2ac; + border-radius: 0 0 3px 3px; + background: #fff; + white-space: nowrap; + text-align: left; + box-shadow: 1px 1px 5px #ccc; + z-index: 1; + width:83px; +} + .on .toolbar-dropdown{ + display: block; +} + .gap{ + height: 0; + line-height: 0; + font-size: 0; + border-bottom: solid 1px #e6e7ec; +} + .toolbar-dropdown li a{ + display: block; + padding-left: 15px; + /*width: 40px;*/ + height:30px; + line-height: 30px; + color: #666; +} + .toolbar-dropdown li a:hover{ + background: #e5e5e5; +} + + + + +.edit_div{ + outline: none; + background-color: white; + min-height: 150px; + line-height: 20px; + _height: 120px; + word-wrap: break-word; + overflow-x: hidden; + overflow-y: auto; + _overflow-y: visible; +} + + + +.tip_blue { + zoom: 1; + border: 1px solid #7BBEEF; + background: #DFEEF9; + color:#7BBEEF; + text-align: center; + line-height: 50px; + height: 50px; + min-width: 300px; + position: absolute; + z-index:9999; + font-size: 16px; + font-weight: bold; + -webkit-box-shadow: 0 2px 8px 1px rgba(0, 0, 0, .35); + -moz-box-shadow: 0 2px 8px 1px rgba(0,0,0,.35); + -khtml-box-shadow: 0 2px 8px 1px rgba(0,0,0,.35); + -ms-box-shadow: 0 2px 8px 1px rgba(0,0,0,.35); + box-shadow: 0 2px 8px 1px rgba(0, 0, 0, .35); + + +} + +.tip_red { + zoom: 1; + border: 1px solid #F51C1C; + background: #FCA7AE; + color:red; + text-align: center; + line-height: 50px; + height: 50px; + -webkit-box-shadow: 0 2px 8px 1px rgba(0, 0, 0, .35); + -moz-box-shadow: 0 2px 8px 1px rgba(0,0,0,.35); + -khtml-box-shadow: 0 2px 8px 1px rgba(0,0,0,.35); + -ms-box-shadow: 0 2px 8px 1px rgba(0,0,0,.35); + box-shadow: 0 2px 8px 1px rgba(0, 0, 0, .35); + min-width: 300px; + position: absolute; + z-index:9999; + font-size: 16px; + font-weight: bold; +} + +.tip_green { + zoom: 1; + border: 1px solid #42B800; + background: #EEFFE2; + color:#48A00D; + text-align: center; + line-height: 50px; + height: 50px; + -webkit-box-shadow: 0 2px 8px 1px rgba(0, 0, 0, .35); + -moz-box-shadow: 0 2px 8px 1px rgba(0,0,0,.35); + -khtml-box-shadow: 0 2px 8px 1px rgba(0,0,0,.35); + -ms-box-shadow: 0 2px 8px 1px rgba(0,0,0,.35); + box-shadow: 0 2px 8px 1px rgba(0, 0, 0, .35); + min-width: 300px; + position: absolute; + z-index:9999;; + font-size: 16px; + font-weight: bold; +} + +.tip_process { + zoom: 1; + color:#394A5E; + text-align: center; + line-height: 50px; + height: 50px; + -webkit-box-shadow: 0 0 20px -2px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 20px -2px rgba(0,0,0,0.5); + -ms-box-shadow: 0 0 20px -2px rgba(0,0,0,0.5); + box-shadow: 0 0 20px -2px rgba(0, 0, 0, 0.5); + border: 1px solid #6D7A89; + z-index: 9999; + background-color: white; + min-width: 300px; + position: absolute; + z-index:9999;; + font-size: 16px; + font-weight: bold; +} + + +.icon_success{ + background: url(../img/icon_success.png) no-repeat; + width: 32px; + height: 32px; + left:10px; + top:9px; + position: absolute; +} +.icon_hint{ + background: url(../img/icon_hint.png) no-repeat; + width: 30px; + height: 30px; + left:10px; + top:10px; + position: absolute; +} +.icon_error{ + background: url(../img/icon_error.png) no-repeat; + width: 25px; + height: 25px; + left:10px; + top:12px; + position: absolute; +} + +.icon_loading_mid{ + background: url(../img/icon_loading_mid.gif) no-repeat; + width: 31px; + height: 31px; + left:10px; + top:10px; + position: absolute; +} +.icon_loading_small{ + background: url(../img/icon_loading_small.gif) no-repeat; + width: 22px; + height: 22px; + left:10px; + top:15px; + position: absolute; +} + \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/resource/css/dialog.css b/cim_for_netty/ichat-server/WebRoot/resource/css/dialog.css new file mode 100644 index 0000000..a40372b --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/resource/css/dialog.css @@ -0,0 +1,29 @@ +/*-----------------------------------------------------dialog------------------------*/ + +.gdialog { + + -webkit-box-shadow: 0 0 20px -2px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 20px -2px rgba(0,0,0,0.5); + -ms-box-shadow: 0 0 20px -2px rgba(0,0,0,0.5); + box-shadow: 0 0 20px -2px rgba(0, 0, 0, 0.5); + border: 1px solid #6D7A89; + border-radius: 0px; +} + +.gdialog div{ + + border-radius: 0px; +} + +.gdialog .close{ + + background-color: white; + border-radius: 99px; + opacity: .5; + filter: alpha(opacity=50); +} + +.gdialog .close:hover, .gdialog .close:focus{ + opacity: .93; + filter: alpha(opacity=93); +} \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/resource/css/login.css b/cim_for_netty/ichat-server/WebRoot/resource/css/login.css new file mode 100644 index 0000000..a33cbad --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/resource/css/login.css @@ -0,0 +1,90 @@ +html,body,div,p,span,a,strong,form,table,th,td,ul,li,ol,dl,dt,dd,h1,h2,h3,h4,h5,h6,fieldset,iframe,object,pre,img,b,i{border: 0 none; margin: 0; outline: 0 none; padding: 0;} +ul,ol,li{ list-style: none;} +table{border-collapse: collapse;border-spacing: 0;} +fieldset,img { border: 0 none;} +h1, h2, h3, h4, h5, h6 {font-size: 100%; font-weight: normal;} +body, table, input, textarea, button, select {font-family: "\5FAE\8F6F\96C5\9ED1"; font-size: 12px;} +body{ background: #29497b;} +a{ color: #406a97; text-decoration: none;} +a:hover{ color: #406a97;text-decoration: underline;} + +.header{ height: 150px; width: 980px; margin: auto; position: relative; color: #fff;} +.wrapper{ background: #233e69; width: 100%; height: 400px;} +.content{ width: 980px; margin: auto; position: relative; height: 100%;} +.footer{ width: 980px; margin: auto; line-height: 24px; text-align: center; color: #546d95; font-family: arial; padding: 45px 0 15px;} +.footer .c{ background: url(../img/footer-line.png?9DDB98A8A1C25E62453700D9CB56A910) center no-repeat; height: 24px;} + +.logo-box{ position: absolute; top: 40px; left: 20px; background: url(../img/beta.png?D4ED1387287BF8DBB2E2959A42A079C1) right top no-repeat; width: 320px;} +.logo-box h2{ font-size: 20px; height: 26px; line-height: 26px;} +h1{ font-size: 40px; height: 50px; line-height: 50px;} +.q-links{ position: absolute; top: 50px; right: 40px; font-size: 14px;} +.q-links a{ color: #fff;} + +.msg-box{ width: 480px; height: 100%; text-align: center;} +.msg-box img{ vertical-align: middle;} +.msg-box i{ display: inline-block; height: 100%; vertical-align: middle;} +.login-box{ position: absolute; top: -61px; right: 33px; width: 398px; height: 428px; padding: 4px 7px 10px 8px; background: url(../img/login-box.png?54D58910CCE14CE563C45829AAF309B0) no-repeat;} + +.tab-bar{ height: 57px; text-align: center; font-size: 16px; line-height: 56px;} +.tab-bar a{ float: left; color: #000; height: 56px; border-bottom: 1px solid #ccc; border-right: 1px solid #ccc;} +.tab-bar a:hover{ color: #406a97; text-decoration: none;} +.tab-bar a.current{ background: transparent; border-bottom-color: #fff;} +.tab-bar .last{ border-right: none;} +.tab-qq,.tab-qr{ background:#ededee url(../img/tab-bg.png?751F4AFC2C0F39FD0A27C68AE1BEE071) no-repeat;} +.tab-qq{ width: 101px;} +.tab-tel{ width: 100px; background: #ededee;} +.tab-qr{ width: 195px; background-position: -101px 0;} + +#qqLogin,#txlLogin,#telLogin,#yunLogin{ height: 331px;} + +#telLogin{width: 360px; margin: 0 auto;} + +#yunLogin{ text-align: center;} +#yunLogin img{ display: inline-block; margin-top: 10px;} + +.status{ background: url(../img/qr-status.png?28C3C61024B77F9D2495BCE9C7099350) 0 -60px no-repeat; width: 266px; height: 51px; padding-top: 9px; line-height: 50px; font-size: 14px; color: #969696; margin: -10px auto 0;} +.status.succ{ background-position: 0 0; color: #fff;} + +.b-bar{height: 40px; line-height: 40px; text-indent: 35px; color: #969696;} + +.qr-p{ display: none; position: absolute; left: 28px; top: 39px; } + +input:focus{outline: none;} + +.text{ border:1px solid #bdbdbd; padding: 1px 2px; font-size: 14px; height: 20px; margin: 1px; padding: 5px; color: #000; +background: #fff url(../img/text-bg.png?AD837CF0018869516795F7EDF65ACD67) repeat-x left top; width: 290px;} +.text-focus,.text:focus{ border: 2px solid #7eb808; margin: 0;} +.psw-error-tips{ color: #b10000; height: 16px;} + +.login-btn{ background: url(../img/login-btn.png?D2858CF1DF3662DFDD2896BD07B9073B) 0 -39px no-repeat; +border: 0 none; cursor: pointer; height: 39px;width: 310px; color: #fff; font-weight: bold; +} +.btn-dis{ color: gray;} + +/*******txl login*****/ +.user-info{ padding: 30px 20px 20px 20px; border-bottom: 1px solid #e0e4e9; margin: 0 auto 5px; width: 310px;} +.user-info .avatar{ float: left; margin-right: 25px;} +.user-info p{ width: 240px; overflow: hidden; margin-bottom: 5px;} + +.txl-pwd{ width: 310px; margin: auto;} +.txl-pwd p{ margin-bottom: 10px; overflow: hidden;zoom:1;} +.txl-pwd p strong{ font-size: 16px; float: left;} +.txl-pwd p a{ float: right;} +.txl-pwd p.psw-error-tips{ margin-bottom: 5px;} +.txl-pwd .text{ width: 296px;} + +/***********/ + +/****tel login****/ +.tel-login{ zoom: 1; padding-top: 10px;} +.tel-login li{ float: left; padding-bottom: 10px; width: 100%;} +.tel-login li label{ display: inline-block; width: 70px; color: #535353;} +#real_image{ display: inline-block; vertical-align: middle;} +.tel-login .last{ margin-top: 10px; text-indent: 70px;} +.tel-login .login-btn{ margin-left: 70px; background-position: 0 0; } +/********/ +.noscript-box{ height: 300px; padding-top: 31px;} +.noscript-tips{ width: 310px; margin: 0 auto; background: #c19202; color: #fff; font-size: 14px; padding: 3px 10px; line-height: 24px; border-radius: 5px;} + +.fuck-ie6{ position: absolute; left: 0; text-align: center; width: 100%; display: none; background: #c19202; color: #fff; font-size: 14px; line-height: 34px;} +.fuck-ie6 a{ color: #0478c1;} \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/resource/css/main-layout.css b/cim_for_netty/ichat-server/WebRoot/resource/css/main-layout.css new file mode 100644 index 0000000..b60eebe --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/resource/css/main-layout.css @@ -0,0 +1,137 @@ +@CHARSET "UTF-8"; + +/* left nav */ +.ui-vnav { +position: fixed; +top: 50px; +left: 0; +width: 170px; +min-height: 560px; +height: 960px; +background: #d8dce5; +_overflow: hidden; +} + + +.ui-vnav .ui-bar { +height: 20px; +overflow: hidden; +} + +.ui-vnav .ui-bd { +display: block; +margin: 9px 0; +width: 100%; +height: 0px; +line-height: 0px; +border-top: 1px solid #afb1b2; +border-bottom: 1px solid #eaeaea; +} + +.ui-vnav .ui-item { +height: 36px; +margin-bottom: 3px; +line-height: 36px; +padding: 0 10px; +text-align: center; +cursor: pointer; +} +.ui-vnav .ui-item:hover { +background-color: #C8CCD5; +color: white; +} + +.ui-vnav .current,.ui-vnav .current:hover { +/*border-left: solid 3px #14A7D4; +background-color: #7b7b7b;*/ +background:url(../img/nav_selected_bg.png) no-repeat ; +color: white; +} + + +.ui-vnav .ui-item a { +position: relative; +display: block; +height: 36px; +line-height: 36px; +font-family: "\5FAE\8F6F\96C5\9ED1","\534E\6587\7EC6\9ED1"; +font-size: 18px; +color: #666; +text-decoration:none; +} +.ui-vnav .ui-bg, .ui-vnav .current a, .ui-vnav a:active { +background-position: -999px -999px; +background-repeat: no-repeat; +color: white; +} +.ui-vnav .ui-shd { +position: absolute; +right: 0; +top: 0; +width: 4px; +height: 100%; +overflow: hidden; +border-right: 1px solid #b5b5b6; +background-image: -webkit-linear-gradient(left, transparent, rgba(0,0,0,.1)); +background-image: -moz-linear-gradient(left, transparent, rgba(0,0,0,.1)); +background-image: -o-linear-gradient(left, transparent, rgba(0,0,0,.1)); +background-image: linear-gradient(top right,transparent, #c9cacb); +filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#00DBDCDD', EndColorStr='#B5B5B6', gradientType=1); +} + +/* left nav */ + +/* header */ + + + + + +.user-avatar-hover { +background: #fff url(../img/avatar-hover-bg.png?t=1) no-repeat left top; +} +.user-avatar { +display: block; +width: 70px; +padding: 0 5px; +height: 50px; +} + +.user-avatar .ui-arr { +width: 16px; +height: 16px; +display: inline-block; +vertical-align: middle; +background: url(../img/disk-spr.png) -105px -171px no-repeat; +cursor: pointer; +_background-image: url(../img/disk-spr-ie6.png); +} + +.ui-pop-user { +width: 168px; +right: 0; +top: 50px; +background: #FFF; +border-color: #abb0bb; +border-top: none; +border-radius: 0; +color: #666; +z-index: 10; +} +.ui-pop-user .ui-pop-head { +padding: 0 15px; +} +.ui-pop-user .user-nick { +display: inline-block; +width: 138px; +line-height: 38px; +color: #333333; +white-space: nowrap; +overflow: hidden; +text-overflow: ellipsis; +-ms-text-overflow: ellipsis; +-o-text-overflow: ellipsis; +-moz-binding: url("ellipsis.xml#ellipsis"); +} + + \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/resource/css/table.css b/cim_for_netty/ichat-server/WebRoot/resource/css/table.css new file mode 100644 index 0000000..84b439a --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/resource/css/table.css @@ -0,0 +1,53 @@ +@CHARSET "UTF-8"; +/*---------------------------------toppage------------------------------*/ + + +/*---------------------------------table------------------------------*/ +.utable { + border-collapse: collapse; + border-spacing: 0; + border-top: solid 1px #D4D4D4; + border-left: solid 1px #D4D4D4; + text-align: center; + font-size: 12px; + background: #ffffff; + word-break:break-all; + margin-right: 10px; +} +.utable tr th { + background-color: #d8dce5; + border: solid 1px #D4D4D4; + color: #463E5E; + line-height: 40px; + font-size: 14px; + text-align: center; +} + + + +.utable tr:hover { + background-color: #F1F1F1; +} + + +.utable tr td { +border-right: solid 1px #D4D4D4; +border-bottom: solid 1px #D4D4D4; +color: #666; +max-height: 80px; +line-height: 35px; +height:35px; +padding-left: 5px; +padding-right: 5px; +overflow: hidden; +white-space: nowrap; +} + + +.datarecord { +text-align:center; +line-height: 30px; +background-color: #14A7D5; +margin-right:10px; +} + \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/resource/css/webbase.css b/cim_for_netty/ichat-server/WebRoot/resource/css/webbase.css new file mode 100644 index 0000000..7ac221f --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/resource/css/webbase.css @@ -0,0 +1,1468 @@ +html,body{height:100%;font-family:微软雅黑;} +img{-ms-interpolation-mode:bicubic} +section,article,aside,header,footer,nav,figure{display:block} +body,h1,h2,h3,h4,h5,h6,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td,figure{margin:0;padding:0} +body,button,input,select,textarea{font:12px/1.5 arial} +h1,h2,h3,h4,h5,h6,button,input,select,textarea{font-size:100%} +address,cite,dfn,em,var{font-style:normal} +code,kbd,pre,samp{font-family:courier new,courier,monospace} +small{font-size:12px} +ul,ol{list-style:none} +a{text-decoration:none} +a:hover{text-decoration:underline} +sup{vertical-align:text-top} +sub{vertical-align:text-bottom} +legend{color:#000} +fieldset,img{border:0} +table{border-collapse:collapse;border-spacing:0} +input::-moz-focus-inner,button::-moz-focus-inner{border:0;padding:0;outline:0} +::-webkit-file-upload-button{cursor:pointer;} +.clear{*zoom:1} +.clear:after{content:'\20';display:block;clear:both;height:0} +body .hide,.app-web .hide,.app-qplus .hide,.app-appbox .hide{display:none} +body .ellipsis{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap;_width:100%;word-wrap:normal} +body{color:#666;background:#F1F1F1} +a{color:#1D719E} +#mainWrapper{ width: auto; margin-left: 170px; min-height: 600px;padding-top: 65px;padding-left: 10px;;padding-bottom: 50px; padding-right: 10px;} +.mb{margin-bottom:15px} +.float_right{float:right} +.text_right{text-align:right} +.margin_left_15{margin-left:15px} +.margin_lr_5{margin:0 5px} +.ui-bar{color:#B1B1B1;font-style:normal;} +.ui-bold{font-weight:600;} +.ui-normal{font-weight:500;} +.ui-checkbox{vertical-align:middle;} +a.unclickable,.unclickable a{cursor:default;} +.ui-pos{position:relative;} +.ui-pos-right{position:absolute;right:0;top:0;} +.copy{position:relative} +.clipboardswf{position:absolute;left:0;top:0} +.icon-times{padding:0 9px;font:600 14px/27px Tahoma;} + /* }}} */ +a {outline: none;} +a:active {star:expression(this.onFocus=this.blur());} +/* 更好看的fosus状态 - bootstrap */ +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +/* IE6 固定样式 */ +* html,* html body{/* 修正IE6振动bug */ + _background-image:url(about:blank); + _background-attachment:fixed; +} + +/* solution */ +.sl-mid{display:table-cell;vertical-align:middle} +.sl-mid-inner{*display:inline-block;vertical-align:middle;*display:inline;*zoom:1} +.sl-mid-ie{display:none;*display:inline-block;vertical-align:middle;width:0;height:100%} +.sl-empty{width:980px;height:340px;text-align:center;} +.app-appbox .sl-empty{height:420px;width:750px;} +.app-qplus .sl-empty{height:550px;} + +/* header */ +.header{ + position: relative; + height:50px; + margin:0 auto; + background:url(../img/top-bg.png) repeat-x left top; + box-shadow: 0 1px 5px #ccc; + z-index: 10; +} +.app-appbox .header{ + background:#212225; + box-shadow:none; +} +.header-fixed{ + position:fixed; + top:0; + left:0; + width:100%; + min-width:950px; + *min-width:933px; + z-index:4; + background:#F1F1F1; + _position:absolute; + _top:expression(eval(document.documentElement.scrollTop)); + zoom:1; + cursor:default; +} +.header-fixed .box_mod_maintools{ + padding-bottom:0; +} +.header-att{ + position:relative; + width:980px; + margin:10px auto 0; + *zoom:1; +} +.header-cnt{ + position:relative; + *z-index:1; + *zoom:1; +} +.header-cnt h1{ + padding-top:10px; +} +.logo{ + position:absolute; + display:block; + width:400px; + height:50px; + background:url(../img/bg_logo.png) 0 0 no-repeat; + _cursor:pointer; +} +.logo span{ + position:absolute; + top:-100em; +} +.nav{ + position:absolute; + right:0; + top:17px; + font:500 12px Tahoma,'\5B8B\4F53','\5FAE\8F6F\96C5\9ED1','\534E\6587\7EC6\9ED1'; + color:#ABABAB; + text-shadow:0 -1px 1px #000; +} +.nickname{padding:0 10px 0 0;color:#FFF;width:145px;text-align:right;text-overflow:ellipsis;display:inline-block;*zoom:1;white-space:nowrap;overflow:hidden;vertical-align:top;} +.app-webapp .nickname{width:auto;display:inline;} +.nav a{ + color:#ABABAB; +} +.nav a:hover,.nav .current{text-decoration:underline;color:#FFF} +.nav span{ + padding:0 10px; +} +.nav li{ + float:left; + margin:0; + *display:inline; + *zoom:1; +} +.nav .nav-password{line-height:normal;} +.nav .nav-password a{padding:0;} + +.nav .nav-password i{ + margin-right:4px; + background:url(http://imgcache.qq.com/vipstyle/nr/box/web/images/device-sprite.png?1217) 0 -98px no-repeat; +} +.nav .nav-password:hover i{background-position:0 -116px} +.nav .nav-password:active i{background-position:0 -134px} +.nav .nav-password-unlock i{background-position:-18px -98px} +.nav .nav-password-unlock:hover i{background-position:-18px -116px} +.nav .nav-password-unlock:active i{background-position:-18px -134px} + +.banner-ad{ + max-width:1600px;min-width:1002px;margin:0 auto;display:block;background:url(http://imgcache.qq.com/vipstyle/nr/box/new_portal/images/bnnr-ad-121115-bg.png) 0 0 repeat-x;text-align:center; +} +/* new nav */ +.nav-main{ + position:absolute; + top:0; + height:100%; + left:162px; + font:500 14px/50px '\5B8B\4F53','\5FAE\8F6F\96C5\9ED1'; +} +.nav-main a{position:relative;padding:0 26px;text-align:center;display:block;color:#999;*height:50px;_float:left;} +.nav-main a:hover{text-decoration:none} +.nav-main li{ + position:relative; + float:left; + *display:inline; + *zoom:1; +} +.nav-item .current{ + background:#414349; +} +.nav-item .current,.nav-item a:hover{color:#FFF} + +/* footer */ +.footer{ + width:842px; + margin:0 auto 25px; + padding:15px 0 0; + text-align:center; + border-top:1px solid #E4E0DA; + color:#989898; +} +.footer p{ + padding:6px 0; +} +.footer a{ + color:#989898; +} + +/* bg color */ +.bg-lightblue{background-color:#38C0FF;} +.bg-green{background-color:#60C11C;} +.bg-red{background-color:#F53333;} +.bg-orange{background-color:#FFB638;} +.bg-blue{background-color:#3D6CF2;} +.bg-purple{background-color:#9953DF;} + +/* download-app */ +.download-app{ + position:absolute; + right:16px; + top:16px; + display:block; + width:102px; + height:59px; + overflow:hidden; + text-indent:-255px; + background:url(http://imgcache.qq.com/vipstyle/nr/box/web/images/download-app.png) 0 5px no-repeat; + cursor:pointer; + *zoom:1; +} +.download-app:hover{ + background-position:0 -56px; +} +.download-app:active{ + background-position:0 -117px; +} +/* appbox 优化 */ +.box_mod_uploadinfo .box_mod_close{ + position:absolute; + right:0; + top:0; + width:25px; + height:25px; + text-align:center; + font:600 14px/25px Tahoma; +} + +/* appbox nav */ +.nav-mini{ + padding-bottom:8px; + background:#F1F1F1; +} +.nav-pos{ + position:relative; + border-bottom:1px solid #73a5c1; + *zoom:1; +} +.nav-tab{ + height:33px; + line-height:33px; + background-color: #7FB8D6; + background-image: -webkit-gradient(linear, left top, left bottom, from(#8BBFDB), to(#7FB8D6)); + background-image: -webkit-linear-gradient(top, #8BBFDB, #7FB8D6); + background-image: -moz-linear-gradient(top, #8BBFDB, #7FB8D6); + background-image: -ms-linear-gradient(top, #8BBFDB, #7FB8D6); + background-image: -o-linear-gradient(top, #8BBFDB, #7FB8D6); + background-image: linear-gradient(top, #8BBFDB, #7FB8D6); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#8BBFDB,endColorstr=#7FB8D6); + *zoom:1; +} +.nav-tab-item{ + float:left; + width:92px; + text-align:center; + position:relative; + top:1px; +} +.nav-tab-item a{ + display:block; + color:#245672; + background:url(http://imgcache.qq.com/vipstyle/nr/box/web/images/nav-tab.png) -91px 0 no-repeat; +} +.nav-tab-item a:hover{ + background-position:-91px -35px; +} +.nav-tab-item a:active{ + background-position:-91px -70px; +} +.nav-tab .current a, +.nav-tab .current a:hover{ + color:#4d4d4d; + background:url(http://imgcache.qq.com/vipstyle/nr/box/web/images/nav-tab.png) 0 0 no-repeat; + cursor:default; +} +/* 独立密码 */ +.nav-password{ + float:left; + line-height:33px; + position:relative; + z-index:2; +} +.nav-password a{ + display:block; + padding:0 17px; + color:#FFF; + _padding:10px 17px 6px; + _background:url(about:blank); +} +.nav-password a:hover{ + text-decoration:underline; +} +.nav-password i{ + display:inline-block; + margin-right:5px; + width:18px; + height:18px; + *height:17px; + vertical-align:middle; + background:url(http://imgcache.qq.com/vipstyle/nr/box/web/images/nav-tab.png?1211) 0 -103px no-repeat; + *cursor:pointer; +} +.nav-password:hover i{ + background-position:0 -121px; +} +.nav-password:active i{ + background-position:0 -139px; +} +.nav-password-unlock i{ + background-position:-18px -103px; +} +.nav-password-unlock:hover i{ + background-position:-18px -121px; +} +.nav-password-unlock:active i{ + background-position:-18px -139px; +} + +.nav-download{ + position:absolute; + right:10px; + top:0; + font-family:arial; + color:#FFF; +} +.nav-download-icon{ + display:inline-block; + width:20px; + height:33px; + background:url(http://imgcache.qq.com/vipstyle/nr/box/web/images/nav-tab.png) -186px 0 no-repeat; + vertical-align:middle; + *zoom:1; +} +.nav-download-icon:hover{ + background-position:-186px -35px; +} +.nav-icon-win{ + background-position:-207px 0; +} +.nav-icon-android{ + background-position:-230px 0; +} +.nav-icon-win:hover{ + background-position:-207px -35px; +} +.nav-icon-android:hover{ + background-position:-230px -35px; +} +.nav-download-icon span{position:absolute;right:0;top:-200px;} +.nav-feedback{ + margin-left:15px; + display:inline-block; + height:18px; + vertical-align:middle; + border-left:1px solid #66a2c3; +} +.nav-feedback span{ + display:block; + padding:0 10px; + line-height:18px; + border-left:1px solid #9dc9e0; +} +/* appbox */ +.app-appbox .header-fixed{ + min-width:0; +} +.app-appbox .header{ + max-width:none; + min-width:0; + height:auto; + padding:0; +} +.app-appbox .header-cnt{ + width:740px; + padding:15px 0; +} +.app-appbox .nav{ + top:38px; +} +.app-appbox #nickName{padding:0 10px 0 0;color:#FFF;} +.app-appbox .nav span{ + padding:0 10px; +} +.app-appbox .nav li{ + margin:0; + width:210px; + overflow:hidden; + white-space:nowrap; + word-wrap:normal; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + text-align:right; +} +.app-appbox .grid_c1{ + width:auto; +} +.app-appbox .login_mod_loginbox{ + margin-top:145px; +} +.dirs-view .ui-title-line{ + display:none; +} +/* new nav */ +.app-appbox .nav-main{ + top:28px; +} +.app-appbox .nav-item .current s{ + bottom:-19px; +} +.app-appbox .update_tips{ + position:relative; + margin:10px 0; + padding:0 10px; + line-height:28px; + color:#666; + *zoom:1; +} +.app-appbox #pathInfo span{cursor:pointer;} +.app-appbox .box_mod_datalist .box_mod_totop{ + display:none; + right:0; + bottom:-32px; + border:1px solid #E1E1E1; + border-top:none; +} +/* footer */ +.app-appbox .footer{ + width:750px; + margin:0 auto 25px; + padding:15px 0 0; +} +.app-appbox .footer p{ + padding:6px 0; +} + +/* 可变 */ +.app-appbox .wrapper{ + width:750px; +} +.app-appbox .app_photo{ + overflow:hidden; +} +/* 等 Q+ 彻底下线后,app-qplus 这部分代码请移除 */ +/* Q+ */ +.app-qplus .header{ + padding:10px 0; +} +.app-qplus .header-cnt{ + padding:10px 0; +} +.app-qplus .nav-main{ + top:16px; +} +.app-qplus .nav{ + top:29px; +} +.app-qplus .nav-item .current s{ + bottom:-29px; +} + +#tipsInfo{ + width:auto; + padding:15px; + border:none; + border-radius:2px; + color:#FFF; + background:#6FB30F; +} +#tipsInfo .mod_hint_gb_con{ + padding:0; + text-align:center; + font-size:16px; +} +/* ui-tips */ +/* disk tips */ +.box_mod_location{position:relative;} +.box_mod_location .ui-tips{ + position:absolute; + right:50px; + top:1px; + padding:0 10px; + height:21px; + line-height:21px; + color:#FFF; +} +/* photo tips */ +.box_mod_maintools .ui-tips{ + margin-right:10px; + padding:0 10px; + height:21px; + line-height:21px; + display:inline-block; + vertical-align:middle; + color:#FFF; + *display:inline; + *zoom:1; +} +.ui-tips-ok{ + background:#6FB30F; + color: #fff; +} +.ui-tips-err{ + background:#EE4444; + color: #fff; +} +.ui-tips-warn{ + background:#DFBD3C; + color: #fff; +} +/* ui-tips */ +.header-fixed .ui-tips, +.view-zip .ui-tips-ok, +.view-zip .ui-tips-err, +.view-zip .ui-tips-warn{ + position:absolute; + top:0; + color:#FFF; + padding:0 20px; + line-height:30px; + font-weight:600; + border-radius:3px; + z-index:999; +} +.header-fixed .ui-tips a{color:#FFF;text-decoration:underline;} +.header-fixed .ui-tips-text{background:none;color:#666;font-weight:normal;} +.header-fixed .ui-tips-ok{background:#6fb30f;} +.header-fixed .ui-tips-warn{background:#ef8f02;} +.header-fixed .ui-tips-err{background:#ee4444;} +/* 容量 */ +.ui-quota{ + display:inline-block; + width:136px; + padding:1px; + border:1px solid #d2d2d2; + background:#FFF; + *text-align:left; + *display:inline; + *zoom:1; +} +.ui-quota-bar{ + display:block; + height:10px; + font-size:0; + background:#d8d638; +} +/* ui-pop */ +.ui-pop{ + position:absolute; + border:1px solid #CEC754; + border-radius:3px; + background:#FFFAAB; + box-shadow:1px 1px 2px #CCC; + color:#9D9A69; + font-size:12px; +} +.ui-pop-text{ + padding:13px 15px 13px; +} +.ui-pop .ui-arr{ + position:absolute; + left:25px; + top:-12px; + width:0;height:0;overflow:hidden; + font-size:0; + display:inline-block; + border-width:6px; + border-color:transparent transparent #CEC754 transparent;border-style: dashed dashed solid dashed; +} +.ui-pop .ui-tarr{ + top:-11px; + border-color:transparent transparent #FFFAAB transparent; +} +.ui-pop-close{ + position:absolute; + right:-3px; + top:-3px; + width:20px; + height:20px; + font:600 10px/20px Tahoma; + text-align:center; + color:#B5AE3E; + text-decoration:none; +} +/* tips icon */ +.icon-tips{ + display:inline-block; + width:18px; + height:18px; + margin-right:5px; + vertical-align:middle; + background-image:url(http://imgcache.qq.com/vipstyle/nr/box/img/tips-icons.png); + background-repeat:no-repeat; + background-position:-999px -999px; +} +.icon-tips-ok{ + background-position:0 -40px; +} +/* ui-xbox */ +.ui-xbox{ + position:fixed; + width:400px; + height:200px; + z-index:1000; + left:50%; + top:50%; + margin:-100px auto auto -200px; + _position:absolute; +} +.ui-xbox-inner, +.ui-shadow{ + position:relative; + left:0; + top:0; + width:100%; + height:100%; + border-radius: 2px; +} +.ui-shadow{ + padding:5px; + background:#000; + opacity:.5; + filter:alpha(opacity=50); + border-radius:6px; +} +.ui-xbox-inner{ + position:absolute; + margin:5px; + background:#FFF; +} +.ui-xbox-title{ + padding-left:8px; + height:28px; + line-height:28px; + border-bottom:1px solid #DADADA; + color:#4c4c4c; + border-radius: 3px 3px 0 0; + background-color:#EBEBEB; + background-image:-webkit-gradient(linear, left top, left bottom, from(#FFFFFF), to(#EBEBEB)); + background-image:-webkit-linear-gradient(top, #FFFFFF, #EBEBEB); + background-image:-moz-linear-gradient(top, #FFFFFF, #EBEBEB); + background-image:-o-linear-gradient(top, #FFFFFF, #EBEBEB); + background-image:linear-gradient(top, #FFFFFF, #EBEBEB); + filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#FFFFFF', EndColorStr='#EBEBEB'); + cursor:move; + *zoom:1; +} +.ui-xbox-cnt{ + text-align:center; +} +.ui-xbox-foot{ + position:absolute; + bottom:0; + left:0; + width:100%; + background:#E6E6E6; + border-radius: 0 0 3px 3px; +} +.ui-xbox-foot .ui-text{ + margin-right:5px; +} +.ui-confirm .ui-xbox-foot{ + padding:5px 0; + text-align:right; +} + +.ui-xbox-close{ + position:absolute; + right:0; + top:0; + display:block; + width:28px; + height:28px; + font:600 12px/28px Tahoma; + text-align:center; + color:#F0720C; +} +.ui-xbox .ui-xbox-close:hover{ + color:#C75C05; + text-decoration:none; +} + +.ui-xbox{} +.ui-xbox .ui-btn-ok, +.ui-xbox .ui-btn-cancel{ + margin-right:5px; + padding:3px 18px; + *padding:3px 18px 0; + overflow:visible; + border:1px solid; + cursor:pointer; + vertical-align:middle; + border-radius: 2px; +} +@-moz-document url-prefix(){ + .ui-xbox .ui-btn-ok, + .ui-xbox .ui-btn-cancel{ + padding:4px 18px 5px; + } +} +.ui-xbox .ui-btn-ok{ + color:#FFF; + border-color:#38ABE4; + background-color:#34A9E3; + background-image:-webkit-gradient(linear, left top, left bottom, from(#5DBDED), to(#34A9E3)); + background-image:-webkit-linear-gradient(top, #5DBDED, #34A9E3); + background-image:-moz-linear-gradient(top, #5DBDED, #34A9E3); + background-image:-o-linear-gradient(top, #5DBDED, #34A9E3); + background-image:linear-gradient(#5DBDED 0%, #34A9E3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#5DBDED', EndColorStr='#34A9E3'); + *zoom:1; +} +.ui-xbox .ui-btn-ok:hover{ + background-color:#56B9EB; + background-image:-webkit-gradient(linear, left top, left bottom, from(#7CCDF5), to(#56B9EB)); + background-image:-webkit-linear-gradient(top, #7CCDF5, #56B9EB); + background-image:-moz-linear-gradient(top, #7CCDF5, #56B9EB); + background-image:-o-linear-gradient(top, #7CCDF5, #56B9EB); + background-image:linear-gradient(#7CCDF5 0%, #56B9EB 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#7CCDF5', EndColorStr='#56B9EB'); + *zoom:1; +} +.ui-xbox .ui-btn-cancel{ + color:#4D4D4D; + border-color:#AFAFAF; + background-color:#CBCBCB; + background-image:-webkit-gradient(linear, left top, left bottom, from(#E3E3E3), to(#CBCBCB)); + background-image:-webkit-linear-gradient(top, #E3E3E3, #CBCBCB); + background-image:-moz-linear-gradient(top, #E3E3E3, #CBCBCB); + background-image:-o-linear-gradient(top, #E3E3E3, #CBCBCB); + background-image:linear-gradient(#E3E3E3 0%, #CBCBCB 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#E3E3E3', EndColorStr='#CBCBCB'); + *zoom:1; +} +.ui-xbox .ui-btn-cancel:hover{ + background-color:#DFDFDF; + background-image:-webkit-gradient(linear, left top, left bottom, from(#F1F1F1), to(#DFDFDF)); + background-image:-webkit-linear-gradient(top, #F1F1F1, #DFDFDF); + background-image:-moz-linear-gradient(top, #F1F1F1, #DFDFDF); + background-image:-o-linear-gradient(top, #F1F1F1, #DFDFDF); + background-image:linear-gradient(#F1F1F1 0, #DFDFDF 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#F1F1F1', EndColorStr='#DFDFDF'); + *zoom:1; +} +.ui-xbox .disabled, +.ui-xbox .disabled:hover{ + opacity:.5; + filter:alpha(opacity=50); + background:#56B9EB; + cursor:default; + filter:none; +} +.icon-xbox{ + display:inline-block; + width:32px; + height:32px; + vertical-align:middle; + background:url(http://imgcache.qq.com/vipstyle/nr/box/img/tips-icons.png) -999px -999px no-repeat; +} + +.icon-xbox-loading{ + width:32px; + height:32px; + background:url(http://imgcache.qq.com/vipstyle/nr/box/img/loading.gif) no-repeat 0 0; + display: inline-block; + _display: inline; + _zoom: 1; +} + +.icon-xbox-ok{ + background-position:0 0; +} +.icon-xbox-warn{ + background-position:-40px 0; +} +.icon-xbox-info{ + background-position:-80px 0; +} +.ui-copys{ + position:relative; +} +.ui-copy-ok{ + position:absolute; + top:-30px; + left:-5px; + padding:1px 4px 1px; + white-space:nowrap; + border:1px solid #38abe4; + border-radius:3px; + background:#FFF; +} +.ui-darr{ + border-width:6px; + width:0; + height:0;overflow:hidden;font-size:0;display:inline-block; + border-color:#38abe4 transparent transparent transparent;border-style:solid dashed dashed dashed; +} +.ui-darr-white{ + border-top-color:#FFF; +} +.ui-copy-ok .ui-darr{ + position:absolute; + top:21px; + left:50%; + margin-left:-4px; +} +.ui-copy-ok .ui-darr-white{ + top:20px; +} +.ui-copy{ + display:inline-block; + position:relative; + vertical-align:middle; + color:#1D719E; + cursor:pointer; + top:0px; + top:-2px\9; + *top:0px; +} +.app-appbox .ui-copy{ + top:-3px; +} +.ui-copys .zclip *{ + vertical-align:baseline; +} +.ui-xbox .ui-copy{ + overflow:hidden; +} +.ui-copy object, +.ui-copy embed{ + position:absolute; + left:0; + top:0; + width:100%; + height:100%; + opacity:0; + filter:alpha(opacity=100); +} +.ui-confirm-cnt{ + position:relative; + display:inline-block; + text-align:left; + margin:47px auto 0; + padding:0 0 0 42px; + color:#808080; + *display:inline; + *zoom:1; +} +.ui-confirm-cnt .icon-xbox{ + position:absolute; + left:0; + top:-5px; +} +.ui-confirm-cnt .ui-title{ + font-size:14px; + color:#333; +} +/* ui-dnd */ +.ui-dnd{ + position:absolute; + top:28px; + left:0px; + right:0; + height:230px; + overflow:hidden; + box-sizing:border-box; + -moz-box-sizing:border-box; + border:1px solid #CCC; + box-shadow:1px 1px 3px #CCC; + background:#FFF; + filter:progid:DXImageTransform.Microsoft.Shadow(color=#AAAAAA,direction=90,strength=2) progid:DXImageTransform.Microsoft.Shadow(color=#AAAAAA,direction=180,strength=2); + _width:99.82%; + *zoom:1; +} +.ui-dnd object,.ui-dnd embed{width:100%;height:100%;margin-left:-35px;} +.ui-dnd-tips{ + height:100%; + line-height:230px; + text-align:center; +} +.ui-dnd-close{padding:8px;} +.header-att .ui-dnd{top:40px} + +/* 上传部分 */ +.uploads, +.uploads object, +.uploads embed, +.uploads .ui-file{ + position:absolute; + left:0; + top:0; + width:100%; + height:100%; + opacity:0; + filter:alpha(opacity=0); +} +.uploads{ + height:28px; + direction:rtl; + text-align:right; + overflow:hidden; +} +.upload-form{width:80px;} +.uploads .ui-file{ + font-size:21px; + font-size:30px\9; + cursor:pointer; +} +@-moz-document url-prefix(){ + .upload-form .ui-file{font-size:40px;width:auto;} +} +/* share box */ +.share-info{ + margin-top:13px; + line-height:1.6; +} +.share-info a{ + margin-right:8px; +} +.share-info *{ + vertical-align:middle; +} +.share-info .ui-bold{ + font-size:14px; +} +.share-info .ui-bold, .share-info .ui-copys{ + display:inline-block; + *display:inline; + *zoom:1; +} +.ui-confirm-cnt .ui-normal{ + font-size:12px; +} +/* photos-empty */ +.photos-empty{ + margin-top:30px; + font-family:'\5FAE\8F6F\96C5\9ED1','\534E\6587\7EC6\9ED1'; + color:#666; +} +.photos-empty h3, +.photos-empty h4{ + margin-bottom:15px; + font-weight:500; + font-size:16px; + color:#333; +} +.photos-empty h4{ + margin-bottom:50px; +} +.photos-empty .qrcode{ + margin-bottom:5px; +} +/* -------------------- 此样式从 /vipstyle/nr/box/new_portal/css/download.css 拷贝而来,.get_app_layer 有少量改动 */ +/* download */ +.get_app_layer{position:absolute;z-index:999;left:50%;top:50%;margin:-152px auto auto -320px;width:580px;height:260px;padding:15px 30px 30px;border:2px solid #1e3a58;border-radius:10px;box-shadow:0 0 15px #777;background:#fff; } +.get_app_layer h2{margin-bottom:20px;font-size:20px;font-family:Microsoft Yahei;} +.get_app_layer h3{margin:0 0 5px;color:#2685c3;font:bold 17px Microsoft Yahei;} +.get_app_layer del{position:absolute;width:29px;height:29px;text-align:center;right:-14px;top:-14px;color:#fff;background-image:url(http://imgcache.qq.com/vipstyle/nr/box/portal/img/icon_close.png);font:normal 25px/28px Arial;text-decoration:none;cursor:pointer; + _background: none; + _filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://imgcache.qq.com/vipstyle/nr/box/portal/img/icon_close.png', sizingMethod='crop'); +} +.get_app_layer .button{ display:inline-block;width:82px;height:30px;line-height:30px; text-align:center; vertical-align:middle;border:none;color:#fff;font-weight:bold;background:url(http://imgcache.qq.com/vipstyle/nr/box/portal/img/bg_index.png) no-repeat 0 -61px;} +.get_app_layer .button:hover{background-position:0 -91px; text-decoration:none;} +.get_app_layer .btn_finsh{background-position:0 -91px;} +.get_app_layer .text{width:150px;height:23px;line-height:23px;margin-right:5px;padding-left:5px;background:#ededed;vertical-align:middle;} +.get_app_layer .type_num{font:normal 18px Microsoft Yahei;} +.get_app_layer .des{line-height:22px;margin:0 0 10px 0;color:#999;} +.get_app_layer .des a{font-family:SimSun;} +.get_app_layer .other a{margin-right:12px;font:600 14px/1.8 '\5FAE\8F6F\96C5\9ED1','\534E\6587\7EC6\9ED1';color:#2685c3;} + +.get_app_layer .error_des{margin-top:5px;font-size:12px;color:#f00;} +.get_app_layer .get_apk{padding-top:20px;} +.get_app_layer .get_url_area{float:left;width:255px;height:200px;} +.get_app_layer .get_code_area{float:right;width:270px;padding:0 0 0 30px;border-left:1px solid #e2e2e2;} +.get_app_layer .get_url_area h2{font-weight:bold;} + +/* 获取 appbox 5G banner */ +.get5g-ad{position:absolute;top:0;right:0;width:600px;height:100%;display:block;line-height:33px;text-align:center;color:#FFF;_height:33px;_overflow:hidden;*z-index:1} +.get5g-ad strong{padding:0 3px;color:#cc6f1d} +.get5g-ad s{display:block;position:absolute;top:0;right:0;width:100%;height:100%;background:url(http://imgcache.qq.com/vipstyle/nr/box/web/images/event/get5g-banner.png) 100% 0 no-repeat;_zoom:1;cursor:pointer;} +.get1000-ad s{background:url(http://imgcache.qq.com/vipstyle/nr/box/web/images/event/get1000-banner.png) 100% 0 no-repeat;} +.get5g-close{position:absolute;right:0;top:0;display:block;width:24px;height:100%;overflow:hidden;text-indent:-999px;background:url(http://imgcache.qq.com/vipstyle/nr/box/web/images/event/appbox-bnnr-130326.png) 0 -34px no-repeat;_zoom:1} +.get5g-close:hover{background-position:-24px -34px} +.getWx-ad s{background:url(../images/event/appbox-bnnr-130326.png) 100% 0 no-repeat;} +/* 修复相册下载链接 */ +.context_menu .download{display:block;width:27px;height:25px;background:url(http://imgcache.qq.com/vipstyle/nr/box/img/view-icons.png) -20px 5px no-repeat;} +.context_menu .download:hover{background-position:-20px -25px} +.context_menu .download:active{background-position:-20px -56px} + +/* tokenbox */ +.tokenbox{ + height:234px; +} +.tokenbox .ui-form{ + padding:20px 0; + text-align:left; +} +.tokenbox .ui-form-row{ + padding-left:42px; + color:#4D4D4D; +} +.tokenbox .ui-form-group{ + margin-top:20px; +} +.token-cancel-radio{ + margin-left:15px; +} +.tokenbox .ui-form-item{ + margin-bottom:10px; + padding-left:108px; +} +.tokenbox .ui-radio{ + margin-right:3px; + *margin-right:-3px; + vertical-align:middle; +} +.tokenbox .ui-label{ + display:block; + float:left; + width:83px; + padding-top:5px; + padding-right:10px; + margin-left:-90px; + text-align:right; + color:#808080; + _display:inline; +} +.tokenbox .ui-input{ + padding:2px 2px; + width:186px; + height:20px; + line-height:20px; + vertical-align:middle; + border:1px solid #B3B3B3; +} +.tokenbox .ui-form-tips{ + padding-top:10px; + color:#d5a147; +} +.tokenbox .ui-form-tips i{ + display:inline-block; + width:18px; + height:18px; + margin-right:4px; + vertical-align:middle; + background:url(http://imgcache.qq.com/vipstyle/nr/box/web/images/nav-tab.png?1211) -36px -103px no-repeat; +} +.tokenbox .ui-password-item{ + padding-top:20px; +} +.tokenbox .ui-confirm-cnt{ + margin-top:55px; + padding-left:55px; +} +.tokenbox .ui-icon-ok{ + position:absolute; + left:0; + top:0; + display:block; + width:38px; + height:39px; + background:url(http://imgcache.qq.com/vipstyle/nr/box/img/ico_ok.gif) 0 0 no-repeat; + vertical-align:middle; +} +.tokenbox .ui-confirm-cnt .ui-title{ + padding-bottom:3px; + color:#4A8F00; +} +.tokenbox .ui-title-text{ + line-height:39px; +} +.tokenbox .ui-confirm-cnt .ui-text{ + width:272px; +} +/* guide */ +.appbox-guide .close{position:absolute;right:0;top:0;display:block;width:24px;height:24px;overflow:hidden;text-indent:-99px;background:url(http://imgcache.qq.com/vipstyle/nr/box/web/images/event/qtrans-user-guide.png) -372px -475px no-repeat} +.appbox-guide .close:hover{background-position:-372px -499px} +.appbox-guide{position:fixed;_position:absolute;left:50%;top:50%;z-index:999;width:396px;height:262px;margin:-131px 0 0 -198px;background:url(http://imgcache.qq.com/vipstyle/nr/box/web/images/event/appbox-guide.png)} + +/* emptys */ +.box_mod_datalist{position:relative;} +.icon-empty{display:block;} +.sl-empty .icon-empty{ + position:relative; + width:145px; + height:145px; + margin:0 auto 10px; + font:500 24px/145px '\5FAE\8F6F\96C5\9ED1','\534E\6587\7EC6\9ED1'; + color:#808080; +} +.sl-empty s, +.view-tips s, +.photo-view-tips s, +.icon-uppic, +.icon-upfile{ + position:absolute; + top:0; + left:0; + width:100%; + height:100%; + z-index:1; + background:url(http://imgcache.qq.com/vipstyle/nr/box/img/empty-tips.png) 0 0 no-repeat; +} +.btn-upload-pic{ + display:block; + width:130px; + height:40px; + position:absolute; + bottom:-5px; + left:50%; + margin-left:-65px; + line-height:normal; + color:#808080; +} +.icon-upfile s{background-position:0 -168px;cursor:pointer;} +.icon-uppic{height:103px;line-height:normal;background-position:0 -170px;cursor:pointer;} +.btn-upload-pic s{background-position:-188px -275px;cursor:pointer;} +.btn-upload-pic:hover s{background-position:-318px -275px;} +.btn-upload-pic:active s{background-position:-448px -275px;} +.view-tips,.photo-view-tips{ + position:absolute; + right:25px; + bottom:25px; + width:430px; + height:105px; + text-align:center; + font:500 22px/40px '\5FAE\8F6F\96C5\9ED1','\534E\6587\7EC6\9ED1'; + color:#b2b2b2; +} +.view-tips s{ + background:url(http://imgcache.qq.com/vipstyle/nr/box/img/empty-tips.png) right 0 no-repeat; +} +.sl-empty .btn-upload{position:absolute;bottom:0;left:0;} +.photo-view-tips s{ + background:url(http://imgcache.qq.com/vipstyle/nr/box/img/empty-tips.png) right -140px no-repeat; +} +/* ui-waiting */ +.ui-waiting{ + position:fixed; + _position:absolute; + z-index:1000; + left:50%; + top:50%; + padding:20px; + border:1px solid #d9d9d9; + background:#FFF; + border-radius: 3px; + box-shadow:0 0 3px #EFEFEF; +} +.ui-waiting .ui-text { + vertical-align: 2px; + margin-left: 5px; +} +/* appbox webkit滚动条 */ +::-webkit-scrollbar-track{ + border-radius:4px; +} +::-webkit-scrollbar-track-piece{ + -webkit-border-radius:4px; +} +::-webkit-scrollbar-track-piece:hover{ + +} +::-webkit-scrollbar{ + width:10px; + height:10px; + border-radius:0px; + background-color:#F1F1F1; +} +::-webkit-scrollbar:hover{ + background:#DCE1E4; +} +::-webkit-scrollbar-thumb{ + background-color:#C1C8CC; + border:solid 1px #B5BBBF; + border-radius:4px; +} +::-webkit-scrollbar-thumb:hover{ + background-color:#6C7073; + border-color:#5F6366; +} +::-webkit-scrollbar-arrow { + color:#F00; + background:#0F0; +} +::-webkit-scrollbar-button{ + display:block; + width:10px; + height:10px; + border-radius:4px; + border:1px solid #B5BBBF; + display:none; +} +::-webkit-scrollbar-button:hover{ + border-color:#5F6366; +} +::-webkit-scrollbar-button:vertical:start:increment, +::-webkit-scrollbar-button:vertical:end:decrement { + display:none; +} +/* 标准浏览器下面无间距 */ +#keepLogin,iframe[id^="_xsend_frm__xhrInstence_"]{ + border:none; + display:none; +} + +/* 遮罩 */ +.ui-mask{ + position:fixed; + _position:absolute; + left:0; + top:0; + z-index:998; + width:100%; + height:100%; + background-color:#000; + opacity:.65; + filter:alpha(opacity=65); +} +.ui-mask-white{background:#F1F1F1;} + +.icon-loading { + width: 16px; + height: 16px; + background: url(http://imgcache.qq.com/vipstyle/nr/box/web/images/loading3.gif) 0 0 no-repeat; + display: inline-block; + _display: inline; + _zoom: 1; +} + +.ui-qqlogin { + position: fixed; + left: 50%; + top: 50%; + width: 490px; + height: 328px; + margin-left: -246px; + margin-top: -165px; + display: block; + z-index: 3000; + background-color: white; +} +.zeroclipboard-is-hover{ + cursor: pointer !important; +} +/* 用于IE下强制DOM重绘,by cluezhang */ +.x-repaint { + zoom: 1; + background-color: transparent; + -moz-outline: none; + outline: none; +} + +/* 小改版 s */ +.header-cnt{ + *z-index:1; +} +.header-right{ + position:absolute; + right:-5px; + top:0; + z-index:11; +} +.header-right .user-info{display:block;} +/* 用户头像 */ +.user-avatar{ + display:block; + width:70px; + padding:0 5px; + height:50px; +} +.user-avatar .ui-arr{ + width:16px; + height:16px; + display:inline-block; + vertical-align:middle; + background:url(../img/disk-spr.png) -105px -171px no-repeat; + cursor:pointer;/* IE6 */ + _background-image:url(../img/disk-spr-ie6.png); +} +.user-avatar img{ + margin:9px; + margin-right:2px; + width:32px; + height:32px; + vertical-align:middle; + cursor:default; +} +.user-avatar-hover{ + background:#fff url(../img/avatar-hover-bg.png?t=1) no-repeat left top; +} +/* 用户浮层 */ +.ui-pop-user{ + width:168px; + right:0; + top:50px; + background:#FFF; + border-color:#abb0bb; + border-top:none; + border-radius:0; + color:#666; + z-index:10; +} +.ui-pop-user .ui-pop-head{ + padding:0 15px; +} +.ui-pop-user .user-nick{ + display: inline-block; + width: 138px; + line-height:38px; + color:#333333; + white-space: nowrap; + overflow: hidden; + text-overflow:ellipsis;/* 当对象内文本溢出时显示省略标记(...) ;需与overflow:hidden;一起使用。*/ + -ms-text-overflow: ellipsis; + -o-text-overflow: ellipsis;/* Opera */ + -moz-binding: url("ellipsis.xml#ellipsis");/*FireFox*/ +} +.ui-pop-user .quota-info{ + margin-bottom:5px; +} +.ui-pop-user .ui-text{ + color:#b2b2b2; +} +.ui-pop-user .ui-arr{display:none;} +.ui-pop-user .ui-quota{ + padding:0; + border-color:#d8d8d8; + background-color:#f2f2f2; +} +.ui-pop-user .ui-quota-bar{ + margin:-1px; + border:1px solid #7ab737; + + background-color:#abe769; + background-image:-webkit-gradient(linear, left top, left bottom, from(#abe769), to(#9bdd52)); + background-image:-moz-linear-gradient(top, #abe769, #9bdd52); + background-image:-o-linear-gradient(top, #abe769, #9bdd52); + + background-image:-webkit-linear-gradient(#abe769 0%, #9bdd52 100%); + background-image:linear-gradient(#abe769, #9bdd52); + filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#abe769', EndColorStr='#9bdd52'); + _position:relative; +} +.ui-pop-user .full .ui-quota-bar{ + border-color:#a52d06; + background-color:#BD3A0F; + background-image:-webkit-gradient(linear, left top, left bottom, from(#D65931), to(#BD3A0F)); + background-image:-webkit-linear-gradient(top, #D65931, #BD3A0F); + background-image:-moz-linear-gradient(top, #D65931, #BD3A0F); + background-image:-o-linear-gradient(top, #D65931, #BD3A0F); + background-image:linear-gradient(#D65931, #BD3A0F); + filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#D65931', EndColorStr='#BD3A0F'); +} +.ui-pop-user .ui-menu{ + margin-top:10px; + padding:0 1px 1px; + border-top:1px solid #E6E6E6; + zoom:1; +} +.ui-pop-user .ui-menu a{ + position:relative; + display:block; + padding:7px 3px 7px 34px; + color:#333333; + vertical-align:bottom; + *zoom:1; + text-decoration:none; + *background:url(about:blank); +} +.ui-pop-user .ui-menu a:hover{ + background-color:#EAEAEA; +} +.ui-pop-user .ui-menu i{ + position:absolute; + left:10px; + top:50%; + display:block; + margin-top:-8px; + width:16px; + height:16px; +} + +.ui-pop-user .ui-menu .menu-text{ + color:#7d838f; +} +.ui-pop-user .icon-pwd, +.ui-pop-user .icon-pwd-unlock, +.ui-pop-user .icon-dwn, +.ui-pop-user .icon-fedbk, +.ui-pop-user .icon-exit{ + background:url(../img/disk-spr.png) -999px -999px no-repeat; + _background-image:url(../img/disk-spr-ie6.png); +} +.ui-pop-user .icon-pwd{background-position:-1px -171px;} +.ui-pop-user .icon-pwd-unlock{background-position:-84px -171px;} +.ui-pop-user .icon-dwn{background-position:-22px -171px;} +.ui-pop-user .icon-fedbk{background-position:-43px -171px;} +.ui-pop-user .icon-exit{background-position:-63px -171px;} + +/* appbox 小改版部分 */ +.app-appbox .nav-pos{z-index:10;} +.app-appbox .header-right{right:5px;} +.app-appbox .user-avatar{ + padding-left:14px; + padding-right:8px; + width:auto; + height:34px; + font:12px/30px '\5B8B\4F531','\5FAE\8F6F\96C5\9ED1','\534E\6587\7EC6\9ED1'; + color:#FFF; + _float:left; +} +.user-info-hover .user-avatar{ + border-left: solid 1px #78a9c1; + border-right: solid 1px #78a9c1; +} +.app-appbox .user-nickname{ + display:inline-block; + vertical-align:middle; + max-width:126px; + overflow:hidden; + -o-text-overflow:ellipsis; + text-overflow:ellipsis; + white-space:nowrap; + word-wrap:normal; + cursor:pointer;/* IE7- */ +} +.app-appbox .user-avatar .ui-arr{background-position:-126px -171px;_font-size:10px;} +.app-appbox .ui-pop-head{padding-top:7px;} +.app-appbox .ui-pop-user{display:none;top:34px;right:1px;} +.user-info-hover .ui-pop-user{display:block;} +.app-appbox .user-info-hover .user-avatar{ + color:#333; + background:#FFF; +} +.app-appbox .user-info-hover .user-avatar .ui-arr{background-position:-105px -171px;} +/* 小改版 e */ + +/* 竖向菜单 */ +.web-app .header-cnt, +.web-app .header-att, +.web-app .wrapper, +.app-photo .header-cnt, +.app-photo .header-att, +.app-photo .wrapper{ + width:auto; + min-width:750px; + *min-width:733px; + margin-left: 220px; + margin-right:20px; +} +.web-app .header-att{ + margin-top:13px; +} +.web-app .box_mod_maintools{ + margin-bottom: 14px; + height: 42px; +} +.app-photo .wrapper{margin-top:-1px;} + +/* photo */ +/* vnav *//* |xGv00|ca7570ffdcf2d601f22a688ce458168d */ \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/avatar-hover-bg.png b/cim_for_netty/ichat-server/WebRoot/resource/img/avatar-hover-bg.png new file mode 100644 index 0000000..b8ddd70 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/avatar-hover-bg.png differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/blue_line.jpg b/cim_for_netty/ichat-server/WebRoot/resource/img/blue_line.jpg new file mode 100644 index 0000000..6bb56a7 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/blue_line.jpg differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/disk-spr.png b/cim_for_netty/ichat-server/WebRoot/resource/img/disk-spr.png new file mode 100644 index 0000000..8f60fc0 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/disk-spr.png differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/icon.png b/cim_for_netty/ichat-server/WebRoot/resource/img/icon.png new file mode 100644 index 0000000..77851c2 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/icon.png differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/icon_admin.png b/cim_for_netty/ichat-server/WebRoot/resource/img/icon_admin.png new file mode 100644 index 0000000..1fe9122 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/icon_admin.png differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/icon_error.png b/cim_for_netty/ichat-server/WebRoot/resource/img/icon_error.png new file mode 100644 index 0000000..4bd3f06 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/icon_error.png differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/icon_group_admin.png b/cim_for_netty/ichat-server/WebRoot/resource/img/icon_group_admin.png new file mode 100644 index 0000000..9b95a85 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/icon_group_admin.png differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/icon_hint.png b/cim_for_netty/ichat-server/WebRoot/resource/img/icon_hint.png new file mode 100644 index 0000000..0d46666 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/icon_hint.png differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/icon_loading_small.gif b/cim_for_netty/ichat-server/WebRoot/resource/img/icon_loading_small.gif new file mode 100644 index 0000000..cfc30ff Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/icon_loading_small.gif differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/icon_success.png b/cim_for_netty/ichat-server/WebRoot/resource/img/icon_success.png new file mode 100644 index 0000000..fd8ec0a Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/icon_success.png differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/icon_super_admin.png b/cim_for_netty/ichat-server/WebRoot/resource/img/icon_super_admin.png new file mode 100644 index 0000000..c74bc50 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/icon_super_admin.png differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/login-box.png b/cim_for_netty/ichat-server/WebRoot/resource/img/login-box.png new file mode 100644 index 0000000..587b5ee Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/login-box.png differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/login_bg.png b/cim_for_netty/ichat-server/WebRoot/resource/img/login_bg.png new file mode 100644 index 0000000..4353613 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/login_bg.png differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/nav_selected_bg.png b/cim_for_netty/ichat-server/WebRoot/resource/img/nav_selected_bg.png new file mode 100644 index 0000000..0805498 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/nav_selected_bg.png differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/sprite_dialog.gif b/cim_for_netty/ichat-server/WebRoot/resource/img/sprite_dialog.gif new file mode 100644 index 0000000..3c7f326 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/sprite_dialog.gif differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/step-spr.png b/cim_for_netty/ichat-server/WebRoot/resource/img/step-spr.png new file mode 100644 index 0000000..f80c6e5 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/step-spr.png differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/toolbar.png b/cim_for_netty/ichat-server/WebRoot/resource/img/toolbar.png new file mode 100644 index 0000000..4898c64 Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/toolbar.png differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/top-bg.png b/cim_for_netty/ichat-server/WebRoot/resource/img/top-bg.png new file mode 100644 index 0000000..f0c663c Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/top-bg.png differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/img/wallpaper_a.jpg b/cim_for_netty/ichat-server/WebRoot/resource/img/wallpaper_a.jpg new file mode 100644 index 0000000..4eaba5d Binary files /dev/null and b/cim_for_netty/ichat-server/WebRoot/resource/img/wallpaper_a.jpg differ diff --git a/cim_for_netty/ichat-server/WebRoot/resource/js/framework.js b/cim_for_netty/ichat-server/WebRoot/resource/js/framework.js new file mode 100644 index 0000000..ad20018 --- /dev/null +++ b/cim_for_netty/ichat-server/WebRoot/resource/js/framework.js @@ -0,0 +1,266 @@ + + +function showTips( css,message) + { + + if($('#GTip').length==0) + { + var tip = "" + var h = $(document).height(); + var w = $(document).width(); + $('body').append($(tip)); + $('#GTip').css({top:(h-40)/3,left:(w-300)/2}); + + }else + { + $('#GTip').removeAttr('class'); + $('#tip_icon').removeAttr('class'); + + } + + $('#GTip').addClass(css.tip); + $('#tip_icon').addClass(css.icon); + $('#GTip').fadeIn("slow",function(){ + window.setTimeout(function(){ + $('#GTip').fadeOut("slow",function(){$('#GTip').remove()}); + },2000); + }); + +} + +function prepareShowProcess(css,message) + { + if($('#ProcessDialog').length==0) + { + var tip = "" + var h = $(document).height(); + var w = $(document).width(); + $('body').append($(tip)); + $('#ProcessDialog').addClass(css.tip); + $('#ProcessIcon').addClass(css.icon); + $('#ProcessDialog').css({top:(h-40)/3,left:(w-300)/2}); + $('#ProcessDialog').fadeIn("slow"); + }else + { + + $('#ProcessDialog').find('label').text(message); + $('#ProcessDialog').fadeIn("slow"); + } + + $('.panel').css('z-index','997'); +} +function hideProcess() + { + $('#ProcessDialog').hide(); + if($('.gdialog:visible').length==0) + { + $('#global_mask').fadeOut("slow"); + } + $('.panel').css('z-index','1000'); +} +function showSTip(message) + { + showTips({tip:'tip_green',icon:'icon_success'},message); +} +function showHTip(message) +{ + showTips({tip:'tip_blue',icon:'icon_hint'},message); +} +function showProcess(message) +{ + prepareShowProcess({tip:'tip_process',icon:'icon_loading_small'},message); + + var h = $(document).height(); + $('#global_mask').css('height',h); + $('#global_mask').fadeIn("slow"); +} +function showETip(message) + { + showTips({tip:'tip_red',icon:'icon_error'},message); +} + +function fadeInTips( css,message) +{ + $('#tips').removeClass(); + $('#tips').addClass(css); + $('#tips').html(message); + $('#tips').fadeIn("slow"); +} + +function isEmail(str) +{ + var reg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/; + if(reg.test(str)){ + return true; + }else{ + return false; + } +} + + +function checkImageType(filename) +{ + var postf=filename.substring(filename.lastIndexOf('.')+1,filename.length).toLowerCase(); + if(postf!='jpg'&&postf!='png'&&postf!='bmp'&& postf!='jpeg'&& postf!='gif') + { + return false; + } + $('#postf').val(postf); + return true; +} + + + +function prepareShowDialog(dialog) + { + var h = $(document).height(); + var w = $(document).width(); + var mheight = dialog.height(); + var mwidth = dialog.width(); + dialog.css({top:(h-mheight)/3,left:(w-mwidth)/2}); + $('#global_mask').css('height',h); + $('#global_mask').fadeIn(); +} + + +function doShowDialog(dialogId,animate){ + + + var dialog = $('#'+dialogId); + prepareShowDialog(dialog); + + if(animate==undefined) + { + /*$('#'+dialogId).fadeIn(); + return;*/ + animate ='slide_in_left'; + } + + startDialogAnimation(dialog,animate); + +} + +function doHideDialog(dialogId,animate){ + + var dialog = $('#'+dialogId); + + if($('.gdialog:visible').length==1) + { + $('#global_mask').fadeOut(); + } + if(animate==undefined) + { + /*dialog.fadeOut(); + return;*/ + animate ='slide_out_right'; + } + + startDialogAnimation(dialog,animate); + + +} + +//播放动画 +function startDialogAnimation(dialog,animate) +{ + + switch(animate) + { + + //显示动画----------------------------- + case 'slide_in_top': + + var top = dialog.css('top'); + dialog.css('top',"0px"); + dialog.animate({top:top,opacity: 'toggle'}, 500 ); + break; + + case 'slide_in_left': + + var left = dialog.css('left'); + dialog.css('left',"0px"); + dialog.animate({left:left,opacity: 'toggle'}, 500 ); + break; + + case 'size_in_size': + + var height = dialog.css('height'); + var width = dialog.css('width'); + dialog.css('height',"0px"); + dialog.css('width',"0px"); + dialog.animate({height:height,width:width,opacity: 'toggle'}, 500 ); + break; + + //隐藏动画----------------------------- + + case 'slide_out_top': + + var height = dialog.css('height'); + dialog.animate({top:'-'+height,opacity: 'toggle'}, 500 ,function(){dialog.css({top:'0px',left:'0px'});}); + break; + + case 'slide_out_right': + + dialog.animate({left:$(document).width(),opacity: 'toggle'}, 500,function(){dialog.css({top:'0px',left:'0px'});}); + break; + + case 'slide_out_size': + + var width =dialog.css('width'); + var height =dialog.css('height'); + dialog.animate({height:0,width:0,opacity: 'toggle'}, 500,function(){dialog.css({top:'0px',left:'0px',height:height,width:width});} ); + break; + } +} + + +function doShowConfirm(setting){ + + if($('#ConfirmDialog').length==0) + { + var dialog = "