﻿using System;
using System.IO;
using System.Data;
using System.Text;
using WebUti;
using KingInfo.Components;
using System.Text.RegularExpressions;

namespace KingInfo.Module.Realty
{
    public partial class Default : WebPageBaseClass
    {
        #region Properties  LastField
        protected const String ___FILE_EXTENSION__ = "(\\.htm)";
        protected const String ___Unconditional___ = "不限";
        protected const String ___TRANS_INITIAL___ = "a";
        protected const String ___B_INITIAL___ = "b";
        protected const String ___C_INITIAL___ = "c";
        protected const String ___AREA_INITIAL___ = "d";
        protected const String ___AGENT_INITIAL___ = "e";
        protected const String ___PRICE_INITIAL___ = "f";
        protected const String ___NEWOLD_OR_ROOM_INITIAL___ = "g";

        protected readonly String ___trans_pattern___ = "(" + ___TRANS_INITIAL___ + "\\d+)";
        protected readonly String ___b_pattern___ = "(" + ___B_INITIAL___ + "\\d+)";
        protected readonly String ___c_pattern___ = "(" + ___C_INITIAL___ + "\\d+)";
        protected readonly String ___area_pattern___ = "(" + ___AREA_INITIAL___ + "\\d+)";
        protected readonly String ___agent_pattern___ = "(" + ___AGENT_INITIAL___ + "\\d+)";
        protected readonly String ___price_pattern___ = "(" + ___PRICE_INITIAL___ + "\\d+)";
        protected readonly String ___newold_or_room_pattern___ = "(" + ___NEWOLD_OR_ROOM_INITIAL___ + "\\d+)";
        
        int m_Newold_Or_Room, m_Newold_Or_Room_Count;

        String m_QueryWhere, m_MiddleToolBar, m_VarFields = "";
        protected String QueryWhere { get { return m_QueryWhere; } set { m_QueryWhere = value; } }
        protected String MiddleToolBar { get { return m_MiddleToolBar; } set { m_MiddleToolBar = value; } }
        protected String VarFields { get { return m_VarFields; } set { m_VarFields = value; } }

        String m_Newold_Or_Room_ColumnName, m_Newold_Or_Room_Description, m_Newold_Or_Room_BarTitle;
        String m_Price_ColumnName = "price", m_Price_BarTitle = "价格";

        /*
trans=a
bid=b
cid=c
area=d
agent=e
price=f
room=g
         trans=a | bid=b | cid=c | area=d | agent=e | price=f | room=g
        */
        #endregion

        #region Page_Load
        protected override void Page_Load(object sender, EventArgs e)
        {
            this.AjaxSubmitCallBack();
            base.Page_Load(sender, e);
        }
        #endregion

        #region Reinitialize
        protected virtual void Reinitialize()
        {
            base.AId = 1;
        }
        #endregion

        #region ParseTransTitle
        String ParseTransTitle(byte trans)
        {
            DataRowCollection r = base.Trans_Rows;
            if (r != null || r.Count > 0)
            {
                for (int i = 0; i < r.Count; i++)
                {
                    if ((byte)r[i][1] == trans)
                    {
                        String s = r[i][2].ToString();
                        return s;
                    }
                }
            }
            return null;
        }
        #endregion

        #region Initialize
        internal override void Initialize()
        {
            base.Filename = "paging";
            this.Reinitialize();
            base.Initialize();
            base.Word = Request.QueryString["wd"];
            this.Requests_Load();
            this.StoredProcedure_Load();
        }
        #endregion

        #region Requests_Load
        protected virtual void Requests_Load()
        {
            base.Trans = Utility.GetInt16("a");
            base.BId = Utility.GetInt32("b");
            base.CId = Utility.GetInt32("c");
            base.Area = Utility.GetInt32("d");
            base.Agent = ParseRequestInt32("e");
            base.Price = Utility.GetInt16("f");
            m_Newold_Or_Room = Utility.GetInt16("g");
            switch (base.AId)
            {
                case 1:
                    m_Newold_Or_Room_Count = 6;
                    m_Newold_Or_Room_ColumnName = "room";
                    m_Newold_Or_Room_Description = "居室";
                    m_Newold_Or_Room_BarTitle = "户型";
                    break;
                case 2:
                    /***************[Recruit]*****************/
                    m_Price_ColumnName = "salary";
                    m_Price_BarTitle = "月薪";
                    /*****************************************/
                    m_Newold_Or_Room_Count = 20;
                    m_Newold_Or_Room_ColumnName = "workyears";
                    m_Newold_Or_Room_Description = "年";
                    m_Newold_Or_Room_BarTitle = "经验";
                    break;
                case 4:
                    m_Newold_Or_Room_Count = 0;
                    m_Newold_Or_Room_ColumnName = null;
                    m_Newold_Or_Room_Description = null;
                    m_Newold_Or_Room_BarTitle = null;
                    break;
                default:
                    m_Newold_Or_Room_Count = 10;
                    m_Newold_Or_Room_ColumnName = "newold";
                    m_Newold_Or_Room_Description = "成新";
                    m_Newold_Or_Room_BarTitle = "新旧";
                    break;
            }
        }
        #endregion

        #region StoredProcedure_Load
        protected virtual void StoredProcedure_Load()
        {
            try
            {
                const int N = 4;
                base.DatTables = SqlDatabase.GetDataSet("sp_PagingList",
                    new String[N] { "aid", "bid", "cityid","trans" },
                    new Object[N] { base.AId, base.BId, base.CityId,base.Trans },
                    new Int32[N] { 4, 4, 4,1 },
                    new SqlDbType[N] { SqlDbType.Int, SqlDbType.Int, SqlDbType.Int, SqlDbType.TinyInt }).Tables;

                if (base.AId > 16)
                {
                    base.TransTitle = base.DatTables[0].Rows[0][0] as String;
                    base.Categories_B_Rows = base.DatTables[1].Rows;
                    base.Categories_C_Rows = base.DatTables[2].Rows;
                }
                else
                {
                    base.Trans_Rows = base.DatTables[0].Rows;
                    base.Area_District_Rows = base.DatTables[1].Rows;
                    base.Categories_B_Rows = base.DatTables[2].Rows;
                    base.Categories_C_Rows = base.DatTables[3].Rows;
                    base.TransTitle = GetTransSingleRow()[0].ToString();
                }
                String city = base.CityName;
                String tmpStr = city + m_VarFields + base.TransTitle;
                String defaultPageTitle =  GetDefaultPageTitle();

                base.PageTitle = String.Concat(city, defaultPageTitle);
                base.Keywords = String.Concat(city, ",", defaultPageTitle);
                base.Description = String.Concat("展示", city + defaultPageTitle);
                base.Navigate = String.Concat(" &gt;&gt; <a href=\"/", base.CurrentDirectory, "/a" + base.Trans + ".htm\">", city + defaultPageTitle, "</a>");

                m_MiddleToolBar = SetMiddleToolBar();
                base.Description = String.Concat(base.Description + "分页列表");
            }
            catch (System.Exception ex)
            {
                m_MiddleToolBar = "StoredProcedure_Load() Exception:" + ex.ToString();
            }
        }
        #endregion

        #region Head
        override internal String GetPageHead()
        {
            String parms = "?a=" + base.AId + "," + base.BId + "," + base.CId + ",0," + base.Trans;
            
            base.HeadStyles = "/cs/module/uti.css";
            base.HeadScripts = "/js/module/uti.js" + parms;
            if (base.AId == 2)
            {
                base.HeadStyles = "/cs/module/uti.css|/cs/module/job.css";
                base.HeadScripts = "/js/module/uti.js" + parms + "|/js/module/job.js";
            }
            else if (base.AId >18)
            {
                base.HeadStyles = "/cs/module/uti.css|/cs/module/integrated.css";
            }
            return base.GetPageHead().Replace("[@MiddleToolBar]", m_MiddleToolBar);
        }
        #endregion

        #region Body
        override internal String GetPageBody()
        {
            String body = GetCacheData(base.CurrentDirectory + "_body_tpl", FileUtil.ReadFileToEnd(base.BodyTplsPath)) as String;
            body = body.Replace("[@Navigate]", base.Navigate);
            body = body.Replace("[@Paging]", GetPaging());

            //[@Query]
           // Response.Write(String.Concat("(cityid=", base.CityId, ")", m_QueryWhere));
            return body;
        }
        #endregion

        #region GetPaging
        protected virtual String GetPaging() {


            String wd = base.Word;
            //int currentPage = Utility.GetInt32("pg"); if (currentPage == 0) currentPage = 1;
            SqlPaging p = new SqlPaging();
            p.TbName = "v_" + base.CurrentDirectory;
            p.Fields = "userid,trans,bid,id,title,agent,price,pubdate";
            p.PrimaryKey = "id";
            //p.CurrentPage = currentPage;
            p.Where = String.Concat("(cityid=", base.CityId, ")", m_QueryWhere);
            if (p.CurrentPage == 1) {
                p.Column = "pubdate DESC";
            }
            p.Ascending = false;
            p.PageSize = 50;
            p.PageNumber = 10;
            //p.IsStopViewSqlQuery = true;

            DataSet ds = p.GetDataSet();
            if (ds == null)
                return "暂无相关数据";


            DataTable t = ds.Tables[0];
            String title, agent, price, pubdate, clsname, url, favorite, htmlTitId, dir = base.CurrentDirectory;
            int id, bid, userid, n = t.Rows.Count;
            byte trans;
            String[] a = new String[n];
            for (int i = 0; i < n; i++) {
                DataRow r = t.Rows[i];
                userid = (int)r[0];
                trans = (byte)r[1];
                bid = (int)r[2];
                id = (int)r[3];
                title = r[4].ToString();
                agent = r[5].ToString();// ;//0=个人，1=代理商
                price = r[6].ToString();
                if (price == "" || price == "0") {
                    price = "面议";
                } else {
                    switch (base.CurrentDirectory) {
                        case "vehicle":
                            price = String.Concat(price, ((bid == 1) ? "万" : "元"));
                            break;
                        default:
                            price = String.Concat(price, ((trans == 4 || 5 == trans) ? "万" : "元"));
                            break;
                    }

                }

                pubdate = r[7].ToString();// DateTimeUtil.DateStringFromNow(((DateTime)r[6]));

                clsname = (i % 2 == 0) ? "" : " alt";

                url = "/" + dir + "/" + id + ".htm";


                /*
                                url = "/html/" + dir + "/" + id + ".html";
                    
                                if (!File.Exists(Server.MapPath(url))) {
                                    url = "/" + dir + "/" + id + ".htm";
                                }
                 */

                if (!String.IsNullOrEmpty(wd))
                    title = title.Replace(wd, "<span class=\"wd\">" + wd + "</span>");
                favorite = "return addFavorite(this," + userid + "," + id + ")";
                htmlTitId = "t" + id;

                a[i] = String.Concat(new String[]{
                        "<dl class=\"lst", clsname, "\">",
                            "<dd class=\"price\"><a href=\"", url, "\">", price, "</a></dd>",
                            "<dt><a href=\"", url, "\" target=\"_blank\" id=\"",htmlTitId,"\">", title, "</a> <span class=\"f12 foreGray\">(" + ParseTransTitle(trans) + ")</span></dt>",
                            "<dd class=\"agent\">" , (agent == "0" ? "个人" : "商家") , "</dd>",
                            "<dd class=\"pub\">", DateTimeUtil.FormatToMonth(pubdate), "</dd>",
                            /*
                            "<dd class=\"fvt\">",
                                "<a href=\"#\" onclick=\"return shareToQq(this,'",htmlTitId,"')\"><img src=\"/ig/skin/sharetoqq.png\" alt=\"转播到腾讯微博\" /></a>",
                                "<a href=\"#\" onclick=\"return shareToSn(this,'",htmlTitId,"')\"><img src=\"/ig/skin/sharetosn.png\" alt=\"转播到新浪微博\" /></a>",
                                "<a href=\"#\" onclick=\""+ favorite +"\">收藏</a></dd>",*/
                        "</dl>"
                    });
            }
            return String.Concat(String.Join("", a), p.GetNormalPagingBar(base.RawUrl));

        }
        #endregion

        #region CreatePriceQuery
        protected String CreatePriceQuery(int requestPriceValue, String queryType)
        {
            String query = null;

            switch (queryType)
            {
                case "元-长查询":
                    #region 长查询
                    switch (requestPriceValue)
                    {
                        case 1:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])<100) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<100)";
                            break;
                        case 2:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>100 AND Ceiling([price])<201) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>100  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<201)";
                            break;
                        case 3:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>200 AND Ceiling([price])<501) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>200  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<5001)";
                            break;
                        case 4:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>500 AND Ceiling([price])<801) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>500  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<801)";
                            break;
                        case 5:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>800 AND Ceiling([price])<1001) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>800  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<1001)";
                            break;
                        case 6:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>1000 AND Ceiling([price])<1201) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>1000  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<1201)";
                            break;
                        case 7:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>1200 AND Ceiling([price])<1501) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>1200  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<1501)";
                            break;
                        case 8:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>1500 AND Ceiling([price])<2001) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>1500  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<2001)";
                            break;
                        case 9:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>2000 AND Ceiling([price])<3001) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>2000  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<3001)";
                            break; 
                        case 10:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>3000 AND Ceiling([price])<5001) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>3000  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<5001)";
                            break;
                        default:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>5000) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))>5000)";
                            break;

                    }
                    #endregion
                    break;
                case "元-短查询":
                    #region 短查询
                    switch (requestPriceValue)
                    {
                        case 1:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])<100)";
                            break;
                        case 2:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>100 AND Ceiling([price])<201)";
                            break;
                        case 3:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>200 AND Ceiling([price])<501)";
                            break;
                        case 4:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>500 AND Ceiling([price])<801)";
                            break;
                        case 5:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>800 AND Ceiling([price])<1001)";
                            break;
                        case 6:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>1000 AND Ceiling([price])<1201)";
                            break;
                        case 7:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>1200 AND Ceiling([price])<1501)";
                            break;
                        case 8:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>1500 AND Ceiling([price])<2001)";
                            break;
                        case 9:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>2000 AND Ceiling([price])<3001)";
                            break;
                        case 10:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>3000 AND Ceiling([price])<5001)";
                            break;
                        default:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>5000)";
                            break;
                    }
                #endregion
                    break;
                case "万-长查询":
                    #region 长查询
                    switch (requestPriceValue)
                    {
                        case 1:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])<1) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<1)";
                            break;
                        case 2:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>1 AND Ceiling([price])<2.1) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>1  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<2.1)";
                            break;
                          case 3:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>2 AND Ceiling([price])<5.1) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>2  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<5.1)";
                            break;
                        case 4:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>5 AND Ceiling([price])<8.1) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>5  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<8.1)";
                            break;
                        case 5:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>8 AND Ceiling([price])<10.1) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>8  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<10.1)";
                            break;
                        case 6:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>10 AND Ceiling([price])<12.1) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>10 AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<12.1)";
                            break;
                        case 7:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>12 AND Ceiling([price])<15.1) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>12  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<15.1)";
                            break;
                        case 8:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>15 AND Ceiling([price])<20.1) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>15  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<20.1)";
                            break;
                        case 9:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>20 AND Ceiling([price])<30.1) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>20  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<30.1)";
                            break;
                        case 10:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>30 AND Ceiling([price])<50.1) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>30  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<50.1)";
                            break;
                        case 11:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>50 AND Ceiling([price])<80.1) OR (([price] LIKE '%-%') AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),2),[price]))>50  AND Ceiling(IsNull(ParseName(Replace([price],'-','.'),1),[price]))<80.1)";
                            break;
                        default:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>80.1)";
                            break;
                    }
                    #endregion
                    break;
                case "万-短查询":
                    #region 汽车 SQL 查询条件
                    switch (requestPriceValue)
                    {
                        case 1:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])<1)";
                            break;
                        case 2:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>1 AND Ceiling([price])<2.1)";
                            break;
                        case 3:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>2 AND Ceiling([price])<5.1)";
                            break;
                        case 4:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>5 AND Ceiling([price])<8.1)";
                            break;
                        case 5:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>8 AND Ceiling([price])<10.1)";
                            break;
                        case 6:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>10 AND Ceiling([price])<12.1)";
                            break;
                        case 7:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>12 AND Ceiling([price])<15.1)";
                            break;
                        case 8:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>15 AND Ceiling([price])<20.1)";
                            break;
                        case 9:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>20 AND Ceiling([price])<30.1)";
                            break;
                        case 10:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>30 AND Ceiling([price])<50.1)";
                            break;
                        case 11:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>50 AND Ceiling([price])<80.1)";
                            break;
                        default:
                            query = "(IsNumeric([price])=1 AND Ceiling([price])>80.1)";
                            break;
                    }
                    #endregion
                    break;
            }
            return query;
        }
        #endregion

        #region GetPriceQuery
        /// <summary>
        /// 
        /// </summary>
        /// <param name="priceColumnName">price 字段名称</param>
        /// <param name="requestPriceValue">GET请求的 price 值，对应 f=priceIndex</param>
        /// <returns></returns>
        protected virtual String GetPriceQuery(String priceColumnName, int requestPriceValue)
        {
            int n = requestPriceValue;
            String c = priceColumnName;
            if (n > 0)
            {
                String query = null;

                switch (base.CurrentDirectory)
                {
                    case "vehicle":
                        if (base.BId == 1)
                        {
                            //二手车
                            query = CreatePriceQuery(requestPriceValue, "万-短查询");
                        }
                        else
                        {
                            //摩托车　电动车　自行车　汽车配件/其他　驾校　陪练　租车/代驾　汽车服务/4S店　拼车/顺风车
                            query = CreatePriceQuery(requestPriceValue, "元-短查询");
                        }
                        break;
                    case "fleamarket":
                        //物品转让 | 物品求购 | 物品交换
                        query = CreatePriceQuery(requestPriceValue, "元-短查询");
                        break;
                    case "realty":
                        if (base.Trans == 4 || base.Trans == 5)
                        {
                            //房屋出售 | 房屋求购
                            query = CreatePriceQuery(requestPriceValue, "万-长查询");
                        }
                        else
                        {
                            //房屋出租 | 房屋合租 | 房屋求租
                            query = CreatePriceQuery(requestPriceValue, "元-长查询");
                        }
                        break;
                    case "recruit":;
                        query = "([salary]=" + requestPriceValue + ")";
                        break;
                    case "hunting":
                        query = "([salary]=" + requestPriceValue + ")";
                        break;
                    default:
                        query = CreatePriceQuery(requestPriceValue, "元-短查询");
                        break;
                }
                return query;
            }
            return null;
        }
        #endregion

        #region SetMiddleToolBar
        protected virtual String SetMiddleToolBar()
        {
            int userid = Utility.GetInt32("uid");
            if (userid > 0)
                m_QueryWhere = " AND (userid=" + userid +")";

            try
            {
                String rawUrl = base.RawUrl.Split(new char[] { '?' })[0].Trim().ToLower();
                if (!String.IsNullOrEmpty(base.Word))
                {
                    m_QueryWhere = String.Concat(m_QueryWhere, " AND (title LIKE '%", base.Word, "%')");
                    String t = "搜索关键词“" + base.Word + "”";
                    base.Navigate = String.Concat(base.Navigate, " &gt;&gt; ", t);
                }

                String result = null;
                if (base.AId > 16)
                {
                    result = String.Concat("大类：", BIds_QueryBar(rawUrl), "<br />", CIds_QueryBar(rawUrl));
                }
                else if (base.AId == 4 || base.AId == 5)
                {
                    result = String.Concat(
                        Trans_QueryBar(rawUrl/*交易类型*/),
                        Area_QueryBar(rawUrl/*区域*/),
                        ((base.AId == 4 && base.Trans == 0) ? "" : BIds_QueryBar(rawUrl/*大类*/)), 
                        CIds_QueryBar(rawUrl), 
                        Price_QueryBar(rawUrl),
                        Agent_QueryBar(rawUrl));
                }
                else
                {
                    result = String.Concat(
                        Trans_QueryBar(rawUrl/*交易类型*/),
                        Area_QueryBar(rawUrl/*区域*/),
                        BIds_QueryBar(rawUrl/*大类*/),
                        CIds_QueryBar(rawUrl/*小类*/), 
                        Price_QueryBar(rawUrl/*价格*/), 
                        NewOld_Or_Room_QueryBar(rawUrl/*新旧*/),
                        Agent_QueryBar(rawUrl/*来源*/));
                }
                return "<div class=\"uti\"><div id=\"middlebar\">" + result + "</div></div>";
            }
            catch (System.Exception ex)
            {
                MessageUtil.Terminator("SetMiddleToolBar(String head)<hr />" + ex.ToString());
            }
            return null;
        }
        #endregion

        #region Trans_QueryBar 交易类型(a)
        // trans=a | bid=b | cid=c | area=d | agent=e | price=f | room=g  
        protected virtual String Trans_QueryBar(String rawUrl)
        {
            /*aid,trans,tit,spell*/
              bool isJOB = (base.AId == 2) ? true : false;
             DataRowCollection r = base.Trans_Rows;//PageWriter.GetTransArrayList(base.AId);
             int n = r.Count;
             String[] a = new String[n];
             String t, u, noSefUrl = "a0.htm";
             int id = 0;
             for (int i = 0; i < n; i++)
             {
                 id = (byte)r[i][1];
                 t = r[i][2].ToString();
                 if (id == base.Trans)
                 {
                     base.PageTitle = String.Concat(base.CityName, t, "_", base.PageTitle);
                     base.Keywords = String.Concat(base.Keywords, ",", t);
                     base.Description = String.Concat(base.Description,"、", base.CityName, t);
                     base.Navigate = String.Concat(base.Navigate, " &gt;&gt; <a href=\"/", base.CurrentDirectory, "/a" + id + ".htm\">", t, "</a>");

                     if (!isJOB) m_QueryWhere = String.Concat(m_QueryWhere, " AND (trans=", id, ")");
                     t = String.Concat("<b>", t, "</b>");
                 }
                 u = Regex.Replace(rawUrl, ___trans_pattern___, ___TRANS_INITIAL___ + id);
                 if (isJOB)
                 {
                     if (i == 0)
                     {
                         u = u.Replace("hunting", "recruit");
                     }
                     else
                     {
                         u = u.Replace("recruit", "hunting");
                     }
                 }
                 a[i] = "<a href=\"" + u + "\">" + t + "</a>";
             }
             if (base.Trans == 0)
             {
                 t = "<b>" + ___Unconditional___ + "</b>";
             }
             else
             {
                 t = ___Unconditional___;
             }
             return GetBar("类型", t, noSefUrl, a);
        }
        #endregion

        #region Area_QueryBar 区域(d)
        // trans=a | bid=b | cid=c | area=d | agent=e | price=f | room=g
        protected virtual String Area_QueryBar(String rawUrl)
        {
            DataRowCollection r = base.Area_District_Rows;
            int id, n = r.Count;
            String[] a = new String[n];
            String u = null, t, sef, noSefUrl = Regex.Replace(rawUrl, ___area_pattern___, ""); ;
            for (int i = 0; i < n; i++)
            {
                id = (int)r[i][0];
                t = r[i][1].ToString().Trim();
                u = rawUrl;
                if (base.Area > 0)
                {
                    if (base.Area == id)
                    {
                         base.PageTitle = String.Concat(t,"_", base.PageTitle);
                        base.Keywords = String.Concat(base.Keywords, ",", t);
                        base.Description = String.Concat(base.Description, "、", t);

                        m_QueryWhere = String.Concat(m_QueryWhere, " AND (distid=", id, ")");
                        t = String.Concat("<b>", t, "</b>");
                    }
                    u = noSefUrl;
                }
                sef = ("$1" + ___AREA_INITIAL___ + id);
                if (base.CId > 0)
                {
                    u = Regex.Replace(u, ___c_pattern___, sef);
                }
                else
                {
                    if (base.BId > 0)
                    {
                        u = Regex.Replace(u, ___b_pattern___, sef);
                    }
                    else
                    {
                        u = Regex.Replace(u, ___trans_pattern___, sef);
                    }
                }
                a[i] = "<a href=\"" + u + "\">" + t + "</a>";
            }


            if (base.Area > 0)
            {
                t = ___Unconditional___;
            }
            else
            {
                t = "<b>" + ___Unconditional___ + "</b>";
                SetPageHeadInfo("[@area]", "");
            }
            return GetBar("区域", t, noSefUrl, a);
        }
        #endregion

        #region BIds_QueryBar 大类(b)
        // trans=a | bid=b | cid=c | area=d | agent=e | price=f | room=g
        protected virtual String BIds_QueryBar(String rawUrl)
        {
            DataRowCollection r = base.Categories_B_Rows;
            int id, n = r.Count;
            String[] a = new String[n];
            String u, t, noSefUrl = Regex.Replace(rawUrl, ___b_pattern___ + "|" + ___c_pattern___, ""); ;
            for (int i = 0; i < n; i++)
            {
                if (base.AId == 4)
                {
                    if (base.Trans != (byte)r[i][2]) 
                        continue;
                }

                id = (int)r[i][0];
                t = r[i][1].ToString().Trim();
                u = rawUrl;
                if (base.BId > 0)
                {
                    if (base.BId == id)
                    {
                        base.PageTitle = String.Concat(base.CityName, t, "_", base.PageTitle);
                        base.Keywords = String.Concat(base.Keywords, ",", t);
                        base.Description = String.Concat(base.Description, "、", base.CityName, t);
                        base.Navigate = String.Concat(base.Navigate, " &gt;&gt; ", t);

                        m_QueryWhere = String.Concat(m_QueryWhere, " AND (bid=", id, ")");
                        t = String.Concat("<b>", t, "</b>");
                    }
                    u = noSefUrl;
                }
                u = Regex.Replace(u, ___trans_pattern___, ("$1" + ___B_INITIAL___ + id));
                a[i] = "<a href=\"" + u + "\">" + t + "</a>";
            
            }

            if (base.BId == 0)
            {
                t = "<b>" + ___Unconditional___ + "</b>";
            }
            else
            {
                t = ___Unconditional___;
            }
            return GetBar("大类", t, noSefUrl, a);
        }
        #endregion

        #region CIds_QueryBar 小类(c)
        // trans=a | bid=b | cid=c | area=d | agent=e | price=f | room=g
        protected virtual String CIds_QueryBar(String rawUrl)
        {
            if (base.BId == 0 || base.Categories_C_Rows.Count == 0)
            {
                return "";
            }

            DataRowCollection r = base.Categories_C_Rows;
            int id, n = r.Count;
            String[] a = new String[n];
            String u, t, self, noSefUrl = Regex.Replace(rawUrl, ___c_pattern___, ""); ;
            for (int i = 0; i < n; i++)
            {
                id = (int)r[i][0];
                t = r[i][1].ToString().Trim();
                u = rawUrl;
                if (base.CId > 0)
                {
                    if (base.CId == id)
                    {
                        base.PageTitle = String.Concat(t, "_", base.PageTitle);
                        base.Keywords = String.Concat(base.Keywords, ",", t);
                        base.Description = String.Concat(base.Description, "、", t);
                        base.Navigate = String.Concat(base.Navigate, " &gt;&gt; ", t);

                        m_QueryWhere = String.Concat(m_QueryWhere, " AND (cid=", id, ")");
                        t = String.Concat("<b>", t, "</b>");
                    }
                    u = noSefUrl;
                }
                self = ("$1" + ___C_INITIAL___ + id);
                if (base.BId > 0)
                {
                    u = Regex.Replace(u, ___b_pattern___, self);
                }
                else
                {
                    u = Regex.Replace(u, ___trans_pattern___, self);
                }
                
                a[i] = "<a href=\"" + u + "\">" + t + "</a>";
            }

            if (base.CId == 0)
            {
                t = "<b>" + ___Unconditional___ + "</b>";
            }
            else
            {
                t = ___Unconditional___;
            }
            return GetBar("小类", t, noSefUrl, a);

            //return "小类：<a href=\"" + noSefUrl + "\">" + t + "</a>　" + String.Join("　", a) + "<br />";
        }
        #endregion

        #region Agent_QueryBar 中介(e)
        // trans=a | bid=b | cid=c | area=d | agent=e | price=f | room=g
        protected virtual String Agent_QueryBar(String rawUrl)
        {
            if (base.AId == 2) return "";

            String anyone, person, dealer, personURL, dealerURL, u, t, anyoneURL = Regex.Replace(rawUrl, ___agent_pattern___, ""); ;
            if (base.Agent == 0)
            {
                t = "个人";
                u = GetAgentUrl(rawUrl, "0");
                anyone = "不限";
                person = "<b>个人</b>";
                dealer = "商家";
                m_QueryWhere = String.Concat(m_QueryWhere, " AND (agent=0)");
            }
            else if (base.Agent == 1)
            {
                t = "商家";
                u = GetAgentUrl(rawUrl, "1");
                anyone = "不限";
                person = "个人";
                dealer = "<b>商家</b>";
                m_QueryWhere = String.Concat(m_QueryWhere, " AND (agent=1)");
            }
            else
            {
                t = "";
                u = anyoneURL;
                anyone = "<b>不限</b>";
                person = "个人";
                dealer = "商家";
            }
            if ("" != t)
            {
                base.Keywords = String.Concat(base.Keywords, ",", t);
                base.Description = String.Concat(base.Description, "、", t + "发布的信息");
            }
            personURL = GetAgentUrl(rawUrl, "0");
            dealerURL = GetAgentUrl(rawUrl, "1");
            return GetBar("来源", anyone, anyoneURL, "<a href=\"" + personURL + "\">" + person + "</a><a href=\"" + dealerURL + "\">" + dealer + "</a>");
            // return "来源：<a href=\"" + anyoneURL + "\">" + anyone + "</a>　<a href=\"" + personURL + "\">" + person + "</a>　<a href=\"" + dealerURL + "\">" + dealer + "</a>　";
        }
        // trans=a | bid=b | cid=c | area=d | agent=e | price=f | room=g
        String GetAgentUrl(String u, String index)
        {
            if (String.IsNullOrEmpty(index))
                return u;

            if (base.Agent > -1)
            {
                u = Regex.Replace(u, ___agent_pattern___, "");
            }

            if (base.Price > 0)
            {
                u = Regex.Replace(u, ___price_pattern___, (___AGENT_INITIAL___ + index + "$1"));
            }
            else
            {
                if (m_Newold_Or_Room > 0)
                {
                    u = Regex.Replace(u, ___newold_or_room_pattern___, (___AGENT_INITIAL___ + index + "$1"));
                }
                else
                {
                    u = Regex.Replace(u, ___FILE_EXTENSION__, (___AGENT_INITIAL___ + index + "$1"));
                }
            }
            return u;
        }

        #endregion

        #region Price_QueryBar 价格(f)
        // trans=a | bid=b | cid=c | area=d | agent=e | price=f | room=g
        protected virtual String Price_QueryBar(String rawUrl)
        {
            String[] arry;

            switch (base.AId)
            {
                case 1:
                    arry = (base.Trans == 4 || base.Trans == 5) ? PageWriter.PriceMillionMin1Max80 : PageWriter.PriceMin100Max50000;
                    break;
                case 5:
                    if (base.BId == 1)
                    {
                        //汽车
                        arry = PageWriter.PriceMillionMin1Max80;
                    }
                    else
                    {
                        //摩托车　电动车　自行车　汽车配件/其他　驾校　陪练　租车/代驾　汽车服务/4S店　拼车/顺风车　
                        arry = PageWriter.PriceMin100Max50000;
                    }
                    
                    break;
                default:
                    arry = PageWriter.PriceMin100Max50000;
                    break;
            }

            String t, self, u, noSefUrl = Regex.Replace(rawUrl, ___price_pattern___, ""); ;
            int price, n = arry.Length;
            String [] a = new String[n];
            for (int i = 0; i < n; i++)
            {
                price = (i + 1);
                t = arry[i];
                u = rawUrl;
                if (base.Price > 0)
                {
                    if (base.Price == price)
                    {
                        base.Keywords = String.Concat(base.Keywords, ",", t);
                        base.Description = String.Concat(base.Description, "、", t);

                        m_QueryWhere = String.Concat(m_QueryWhere, " AND ", GetPriceQuery(m_Price_ColumnName, price));
                        t = String.Concat("<b>", t, "</b>");
                    }
                    u = noSefUrl;
                }
                self = (___PRICE_INITIAL___ + price + "$1");
                if (m_Newold_Or_Room > 0)
                {
                    u = Regex.Replace(u, ___newold_or_room_pattern___, self);
                }
                else
                {
                    u = Regex.Replace(u, ___FILE_EXTENSION__, self);
                }

                a[i] = "<a href=\"" + u + "\">" + t + "</a>";
            }

            if (base.Price == 0)
            {
                t = "<b>" + ___Unconditional___ + "</b>";
            }
            else
            {
                t = ___Unconditional___;
            }

            return GetBar(m_Price_BarTitle, t, noSefUrl, a);
            // return m_Price_BarTitle +"：<a href=\"" + noSefUrl + "\">" + t + "</a>　" + String.Join("　", a);
        }
        #endregion

        #region NewOld_Or_Room_QueryBar 户型(g)
        // trans=a | bid=b | cid=c | area=d | agent=e | price=f | room=g
        protected virtual String NewOld_Or_Room_QueryBar(String rawUrl)
        {
            if ((base.AId == 7) && base.BId != 34)
            {
                return null;
            }

            int count = m_Newold_Or_Room_Count, id;
            String columnName = m_Newold_Or_Room_ColumnName;
            String description = m_Newold_Or_Room_Description;
            String t, u, noSefUrl = Regex.Replace(rawUrl, ___newold_or_room_pattern___, ""); ;
            String[] a = new String[count];
            for (int i = 0; i < count; i++)
            {
                id = (i + 1);
                t = (id + description);
                if (m_Newold_Or_Room > 0)
                {
                    if (id == m_Newold_Or_Room)
                    {
                        base.PageTitle = String.Concat(t, "_", base.PageTitle);
                        base.Keywords = String.Concat(base.Keywords, ",", t);
                        base.Description = String.Concat(base.Description, "、", t);

                        m_QueryWhere = String.Concat(m_QueryWhere, " AND (", columnName, "=", m_Newold_Or_Room, ")");
                        t = String.Concat("<b>", t, "</b>");
                    }
                    u = noSefUrl;
                }
                else
                {
                    u = rawUrl;
                }
                u = (Regex.Replace(u, ___FILE_EXTENSION__, (___NEWOLD_OR_ROOM_INITIAL___ + id + "$1")));
                a[i] = "<a href=\"" + u + "\">" + t + "</a>";
            }

            if (m_Newold_Or_Room == 0)
            {
                t = "<b>" + ___Unconditional___ + "</b>";
            }
            else
            {
                t = ___Unconditional___;
            }

            return GetBar(m_Newold_Or_Room_BarTitle, t, noSefUrl, a);
            // return "<br />" + m_Newold_Or_Room_BarTitle + "：<a href=\"" + noSefUrl + "\">" + t + "</a>　" + String.Join("　", a);
        }
        #endregion
 
        #region ParseRequestInt32
        protected int ParseRequestInt32(String name)
        {
            String s = Request.QueryString[name];
            return ((!String.IsNullOrEmpty(s) && Regex.IsMatch(s, "^\\d+$")) ? int.Parse(s) : -1);
        }
        #endregion

        #region AjaxSubmitCallBack
        protected virtual void AjaxSubmitCallBack()
        {
            if (Request.Form.Count < 1 || o.UserId < 1) return;
            base.Action = Request.Form["act"];
            if (String.IsNullOrEmpty(base.Action) || base.Action != "addfavorite") return;
            try
            {
                String tit = Request.Form["t"].Trim();
                String url = Request.Form["u"].Trim();
                if (tit == "" || url == "") MessageUtil.Terminator("invalid request");
                const int N = 5;
                int identity = SqlDatabase.UpdateReturnInteger("sp_User_Favorite", "identity",
                    new String[N] { "userid", "cityid", "id", "tit", "url" },
                    new Object[N] { o.UserId, base.CityId, 0, tit, url },
                    new Int32[N] { 4, 4, 4,50,255 },
                    new SqlDbType[N] { SqlDbType.Int, SqlDbType.Int, SqlDbType.Int,SqlDbType.NVarChar,SqlDbType.NVarChar});
                MessageUtil.Terminator(identity);
            }
            catch (System.Threading.ThreadAbortException) { }
            catch (System.Exception ex)
            {
                MessageUtil.Terminator("AjaxSubmitCallBack.Exception:\r\n" + ex.ToString());
            }
        }
        #endregion

        #region 顶部查询条件栏

        protected String GetBar(String bar1, String noSefTit, String noSefUrl, String[] a)
        {
            return GetBar(bar1, noSefTit, noSefUrl, String.Join("", a));
        }

        protected String GetBar(String bar1, String noSefTit, String noSefUrl, String datalist)
        {
            return "<dl><dt>" + bar1 + "：</dt><dd class=\"bar2\"><a href=\"" + noSefUrl + "\">" + noSefTit + "</a></dd><dd class=\"bar3\">" + datalist + "</dd></dl>";
        }
        #endregion

        #region 顶部查询条件栏
        protected String GetDefaultPageTitle()
        {
            switch (base.CurrentDirectory)
            {
                case "realty":
                    return "租房售房";
                case "vehicle":
                    return "车辆买卖";
                case "fleamarket":
                    return "跳骚市场";
                case "edu":
                    return "家教培训";
                case "pet":
                    return "宠物买卖";
                case "recruit":
                    return "公司招聘";
                case "hunting":
                    return "个人求职";
                default:
                    return null;
            }
        }
        #endregion
    }
}
