var doc = document.documentElement||document.body;

var sitetmp = null;

var Site={
    init:function(){
        $(document.body).addClass("js");

        if(Browser.Engine.webkit){
            $("q").type = "search";
        }

        if($("city")) $("city").getParent("li").style.display = "none";

		var order_def = $$("#order").get("value");
        Site.defaults("#q, #order, #order_phone",["поиск по сайту",order_def, ["+7...","+7 "]])
        //Site.sliders();
        Site.select2chkbox($("city"));
        Site.togglers();
        Site.validate();
        Site.tags();
        Site.gmap();
        Site.gallery();
        Site.hotresults();

        $$(".results.toggle select").addEvent("change", function(){

        });

        if($("string")){
            var def = $$("#string select")[0].get("value");
            var str = $$("#string select")[0].get("text");
            var cont = new Element("ul", {'class':'selectsub'});
            $$("#string select option").each(function(op,i){
                var li = new Element("li").adopt(tmp_link = new Element("a", {"text":op.get("text"), "href":op.get("value")}));
                cont.adopt(li);
            });
            var h3 = new Element("h3")
            h3.adopt(wrap = new Element("span",{"class":"wrap"}).adopt(tmp_link = new Element("a", {"href":"#"}).adopt(new Element("span", {"text":def}))))
            h3.replaces($$("#string select")[0]);
            wrap.adopt(cont);

            var value = new Element("input", {"type":"hidden", "name":"operation", "id":"act_mod", "value":def})
            $("string").adopt(value);

            tmp_link.addEvent("click", function(e){
                var e = new Event(e);
                e.stop();
                this.getParent().getElement("ul").toggleClass("act");
            })
            $$("#string ul a").each(function(el,i){
                el.addEvent("click", function(e){
                    var e = new Event(e);
                    e.stop();
                    $("act_mod").set({"value":this.get("text")});
                    tmp_link.getElement("span").set({"text":this.get("text")});
                    this.getParent("ul").toggleClass("act");
                })
            });

            $("string").addEvent("submit", function(e){
                var e = new Event(e);
                e.stop();
                var valid = true;
                $$("#string input").each(function(inpt,i){
                    if(!inpt.value || inpt.value == " "|| inpt.value == "+7..."){
                        valid = false;
                        var fx = new Fx.Tween(inpt).start("background-color", "#f00", "#fff");
                    }
                });
                if (valid) $("string").submit();
            });
        }

        if($("photo_uploader")){
            var new_foto = $("photo_uploader").getElement("p");
            $("photo_uploader").adopt(new Element("a", {"id":"add_photo", "href":"#", "html":"Добавить фото"}));
            $("add_photo").addEvent("click", function(e){
                var e = new Event(e);
                e.stop();
                new_foto.clone().inject(new_foto, "before");
            });
        }

        $$(".validate").each(function(el,i){
            el.addEvent("submit", function(e){
                var e = new Event(e);
                e.stop();
                var valid = true;
                $$(".validate li input,.validate li textarea").each(function(inpt,i){
                    if(!Site.check(inpt)) valid = false;
                });
                if (!valid) return;
                el.submit();
            });
        });

        var i = 0;
        var types = ['commerce','flat','cottage','estate','house','elite'];

        //$("mainform").addEvent("click", function(){
            //this.className = types[i];
            //i = (i>=5)?0:(i+1);
        //});

        window.addEvent('keypress', function(e){
            if(e.code==27) Site.close();
        });

        $$("#search_f .ajx span").addEvent("click", function(e){
            var e = new Event(e);
            e.stop();
            $("q").value = this.get("html");
        });

        Site.formlinks();

     },

     formlinks:function(){
         if(!$("mainform")) return;
         var selected = [$$("select[name=operation]")[0].getElements(".act")[0].get("text")||null, $$("select[name=type]")[0].getElements(".act")[0].get("text")||null]
         var selected2 = [$$("select[name=operation]")[0].get("value")||null, $$("select[name=type]")[0].get("value")||null]
         if(!selected) return;
         //var selected = [$$("select[name=operation]")[0].getElement("option[selected=selected]")[0].innerHTML), $$("select[name=type] option[selected=selected")[0].innerHTML]

             $$("#mainform h3 select").each(function(el,i){
                 var cont = new Element("ul", {'id':'sub'+i, 'class':'selectsub'})
                 var a = new Element("a", {'id':'link'+i, 'html':"<span>"+selected[i].toLowerCase()+"</span>", "href":selected2.join("/")});
                 a.addEvent("click", function(e){
                     var e = new Event(e);
                     e.stop();
                     a.getParent().getElement("ul").toggleClass("act")
                 })
                 var wrap = new Element("span", {'class':'wrap'});
                 wrap.adopt(a)
                 el.getElements("option").each(function(op,k){
                     if(i==0){
                         var li = new Element("li").adopt(new Element('a', {'text':op.get("text"), 'href':"/realty."+op.get("value")+"."+selected2[1]+'.html'}));
                     }
                     else{
                         var li = new Element("li").adopt(new Element('a', {'text':op.get("text"), 'href':"/realty."+selected2[0]+"."+op.get("value")+'.html'}));
                     }
                     cont.appendChild(li);
                 });
                 wrap.appendChild(cont)
                 wrap.replaces(el);
                 $(doc).addEvent("click", function(){$$(".selectsub").each(function(el,i){el.removeClass("act")})})
                 //document.body.appendChild(link)
             });

     },

    tags:function(){
        var tags = $$("#tags a");
        tags.each(function(el,i){
            el.addEvent("click", function(e){
                var e = new Event(e);
                e.stop();
                $("i_tags").value += ($("i_tags").value)?(", " + this.innerHTML):this.innerHTML;
                el.addClass("act");
            })
        });

        if(!$("i_tags")) return;
        $("i_tags").addEvent("keypress", function(){
            var tags_now = this.value.split(", ");
            tags_now.each(function(t,i){
                tags.each(function(t1,i){
                    if(t1.innerHTML == t) t1.addClass("act");
                });
            });
        });
    },

    validate:function(){
        $$(".validate li input,.validate li textarea").each(function(el,i){
            el.addEvent("blur", Site.check);
        });
    },

    check:function(e){
        if($type(e) == "event"){
            var el = e.target;
        }else{
            var el = e;
        }
        var prnt = el.getParent("li");
        if(prnt && prnt.id == "tags") return true;
        prnt.getElements(".warn, .valid").each(function(spn, i){spn.destroy()});
        if(!el.value){
            prnt.adopt(new Element("span", {"class":"warn", "html":"Пожалуйста, заполните поле"}));
            return false;
        }else{
            prnt.adopt(new Element("span", {"class":"valid"}));
            return true;
        }
    },

    togglers:function(){
        $$(".toggle tbody tr").each(function(el,i){
            if((i+1)%2==0){el.addClass("expand");}
            else{
                el.getElement(".first").adopt(new Element("div", {"class":"toggler"}));
            }
        });

        $$(".toggler").each(function(el,i){
            el.addEvent("click", function(e){
                var e = new Event(e);
                e.stop();
                el.getParent("tr").getNext().toggleClass("expand");
                this.toggleClass("act");
            });
        });
    },

    defaults:function(els, values){
        // присваивает умолчальные значения полям ввода и удаляет их labels
        $$(els).each(function(el, i){
            try{$$("label[for='"+el.id+"']")[0].remove()}catch(e){}
            var replace = "";
            var dflt = values[i];
            if(values[i].length == 2){replace = values[i][1]; dflt = values[i][0];}
            el.value=dflt;
            el.addEvent("focus", function(){
                this.value=(this.value==dflt)?replace:this.value;
                if(values[i].length != 2){
                    this.select();
                }
            });
            el.addEvent("blur", function(){
                this.value=(this.value==replace)?dflt:this.value;
            });
        });
    },

    select2chkbox:function(el){
        if(!el) return;
        var opts = el.getElements("option");
        var list = [];
        opts.each(function(op, i){
            var li = '<li rel="'+ op.get("rel") +'"><input type="checkbox" name="' + el.name + '[]" id="opt' + i + '" value="'+ op.value +'"/><label for="opt' + i + '">'+op.innerHTML+'</label></li>';
            list.push(li);
        });
        Site.temp = new Element("div", {"id":"temp", "html":list.join(" "), "styles":{"display":"none"}});

        document.body.appendChild(Site.temp)

        $("disctrict").addEvent("change", function(){
            var rel = $$("#temp [rel=" +this.get("value")+"]");
            //if(rel.length)
            Site.tmp = Site.districts(rel);
            sitetmp = Site.tmp;
            if($("city")) $("city").getParent("li").style.display = "block";

            var link = $("slct");
            if(!link){
                link = new Element("a", {"class":"ajx", "id":"slct", "href":"#", "html":"<span>выбрать</span>"})
                link.replaces($("city"));
            }

            link.addEvent("click", function(e){
                var e = new Event(e);
                e.stop();
                if ( !Site.tmp.innerHTML ) Site.tmp = sitetmp;
                Site.popup(Site.tmp);
            });
        });
    },

    districts:function(opts){
        var ul = new Element("ul");
        opts.each(function(el,i){
            ul.adopt(el);
        });
        var html = new Element("div", {"class":"col3"});
        var ul = new Element("ul");
        ul.adopt(opts);
        html.adopt(ul);
        //html.innerHTML+= '<p class="submit"><input type="button" id="select_all" value="Выбрать все" /><input type="reset" id="reset" value="Сброс" /> <input type="button" id="fo" value="Продолжить" />';
        html.innerHTML+='<p class="submit"><input type="button" id="select_all" value="Выбрать все" /><input type="reset" id="reset" value="Отмена" /><input type="button" id="fo" value="OK" /></p>';
        if($("slct")) $("slct").innerHTML = "<span>выбрать</span>";
        if($("hidden_tmp")) $("hidden_tmp").empty();

        return html
    },

    popup:function(html){
        var ppp = $("popup");
        if(!ppp){
            ppp = new Element("div", {"id":"popup"});
            ppp.adopt(new Element("div", {"id":"ploader"}).adopt(inner = new Element("div", {"class":"inner"})), new Element("div", {'id':'pop_b'}), new Element("div", {"id":"close", "html":"&times;"}));
            document.body.appendChild(ppp);
            $("close").addEvent("click", Site.close);
        }
        var fx = new Fx.Tween(ppp).set("top",-3000);
        fx.start("top", 100);

        var inner = $$("#popup .inner")[0];
        inner.innerHTML = '<div class="col3">' + Site.tmp.innerHTML + '</div>';

        $("reset").addEvent("click", function(){
            $$("#loader li input").each(function(inpt,i){
                inpt.checked="";
                Site.close()
            });
        });

        if($("select_all")){
            $("select_all").addEvent("click", function(){
                $$("#loader input[type=checkbox]").each(function(inpt,i){
                    inpt.checked="checked";
                });
            });
        }

        $("fo").addEvent("click", function(){
            if(!$("hidden_tmp")){
                var hinpts = new Element("div", {"id":"hidden_tmp"});
                $("mainform").adopt(hinpts)
            }
            $("hidden_tmp").empty();
            var str = "";
            var hiddens = $$("#popup input:checked");
            hiddens.each(function(el,i){
                $("hidden_tmp").adopt(new Element("input", {"type":"hidden", "value":el.value, "name":el.name}));
                str+= '<span>'+$$("label[for="+el.id+"]")[0].innerHTML+'</span>';
                if(i!=hiddens.length-1) str += ', ';
            });
            $("slct").set("html", (str)?str:"<span>выбрать</span>");
            var fade = new Fx.Tween($("slct"), {duration:1000}).start('background-color',['#fc0','#e1e7e8']);
            Site.close();
        });
    },

    close:function(){
        var fx = new Fx.Tween($("popup")).start("top",-3000);
        Site.tmp = new Element("div");
        Site.tmp.adopt($$("#loader .col3")[0]);
    },

    sliders:function(){
        var serv = new Fx.Slide($$("#serv ul")[0]);
        //if(!$("index")) serv.hide();
        $$("#serv h3")[0].addEvent("click", function(){
            serv.toggle();
            this.toggleClass("act");
        });
        $$("#serv h3").set({'html':'<span>'+$$("#serv h3")[0].innerHTML+'</span><b></b>'});
    },

    gmap:function(){
        if ($("gmap") && GBrowserIsCompatible()) {
            var map = new GMap2($("gmap"));
            map.setCenter(new GLatLng(55.1619, 61.4019), 13);
            map.setUIToDefault();
        }
    },

    gallery:function(){
        // Initialize the gallery
        var items = $$(".gallery li");
        if(!items.length) return;
        var container = new Element("div", {'id':'cont'});
        Site.slider = $$(".gallery ul")[0];
        Site.galleryStep = items[0].offsetWidth;
        container.innerHTML = '<div id="frame"></div><a href="#" id="bkwrd" title="Туда"><span>&lt;</span></a><a id="frwrd" href="#" title="сюда"><span>&gt;</span></a>';
        container.injectBefore(Site.slider);
        $("frame").adopt(Site.slider);
        $("frame").style.width = $("wrapper").style.width = "400px" //$("big").offsetWidth + "px";
        $("frame").style.height = $$(".gallery li")[0].offsetHeight + "px";
        Site.slider.style.width = Site.galleryStep * items.length + "px";
        $$("#frwrd, #bkwrd").addEvent("click", Site.galleryMove)
        $$("#frwrd, #bkwrd").each(function(el,i){Site.galleryBounds(el)});
        $$("#frwrd, #bkwrd").addEvent("select", stopit);
        $$("#frwrd, #bkwrd").addEvent("dblclick", stopit);
        $$(".gallery li a").addEvent("click", Site.galleryShow);
    },

    galleryMove:function(e){
        // move gallery to one step
        e = new Event(e);
        e.stop();
        var step = (Site.slider.style.left||0).toInt() + (((this.id=="frwrd")?'-':'+') + Site.galleryStep).toInt();
        var myfx = new Fx.Tween(Site.slider)
            myfx.start('left', step).chain(function(){Site.galleryBounds(this)})
        $$("#frwrd, #bkwrd").removeEvent("click", Site.galleryMove);
    },

    galleryBounds:function(el){
        // find where is gallery bounds
            $("bkwrd").removeClass("disabled");
            $("bkwrd").removeEvent("click", stopit);
            $("bkwrd").addEvent("click", Site.galleryMove);
            $("frwrd").addEvent("click", Site.galleryMove);
            $("frwrd").removeClass("disabled");
            $("frwrd").removeEvent("click", stopit);
        if((Site.slider.style.left.toInt() + Site.slider.style.width.toInt()) <=$('frame').style.width.toInt()){
            $("frwrd").addClass("disabled");
            $("frwrd").removeEvent("click", Site.galleryMove);
            $("frwrd").addEvent("click", stopit);
        }else if(!Site.slider.style.left || Site.slider.style.left.toInt()>=0){
            $("bkwrd").addClass("disabled");
            $("bkwrd").addEvent("click", stopit);
            $("bkwrd").removeEvent("click", Site.galleryMove);
        }
    },

    galleryShow:function(e){
        var e = new Event(e);
        e.stop();

        $("big").src = (e.target.href)?e.target.href:e.target.getParent().href;
    },

    hotresults:function(){
        if(!$("temp_wrap")){
            var wrap = new Element("div", {"id":"temp_wrap"});
            wrap.wraps($("results"))
            wrap.appendChild($$(".results.toggle")[0]);
            $$("#results fieldset").adopt(new Element("div", {"class":"loader"}));
        }
        $$("#results select").addEvent("change", function(e){
            var e = stopit(e);
            var f = $("results");
            f.addClass("loading")
            var r = new Request({method:f.get("method"), url:f.get("action"), onComplete:function(response){
                    $("temp_wrap").set("html", response)
                    Site.togglers();
                    Site.hotresults();
                    f.removeClass("loading")
                }
            });
            r.send(f.toQueryString());
        });
    }
}

function stopit(e){
    var e = new Event(e);
    e.stop();
    return e;
}

window.addEvent("domready", Site.init);

(function($){$().ready(function(){

		$('#i_photo').live('change', function() {

			if ( $(this).val() ) {
				$(this).removeAttr('id');
				$(this).parent().after( '<p><input type="file" id="i_photo" name="gallery[]" /></p>' );
			}
		});
	});
})(jQuery);
