var Obj = new Class({

    Implements: [Options, Events],

    options: {
        lang: null,
        pagenbr:1,
        RecByPage: 9,
        typeAff: 1,
        typeNav: 1,
        ObjData: {},
        ObjSearch: {},
        ObjNav:{},
        ObjOtherInfo:{linkTo:'propertyview.aspx',linktype: 'unique'},
        elSave:null   
    },

    initialize: function(elDiv_Nav, elDiv_Aff) {
        
        this.elDiv_Aff = $(elDiv_Aff);
        this.elDiv_Nav = $(elDiv_Nav);
        if (this.options.lang==null) this.options.lang = Cookie.read('lang');
         if (this.options.elSave!=null) {
                this.options.elSave=$(this.options.elSave);
                if (this.options.elSave.value.length>0) {
                    var LastRequest=JSON.decode(this.options.elSave.value);
                    this.options.ObjSearch=LastRequest.ObjSearch;
                    this.options.ObjData=LastRequest.ObjData;
                    //this.options.pagenbr=this.options.ObjData.NavInfo.pagenbr;
                    this.buildResult(this.options.ObjData);
                    this.options.elSave.value='';
                    }
                else{
                if (this.options.ObjSearch.search_id!=null){this.query();}
                }
            }
            else{this.query();}
    },
    updateQuery1: function(s) {
        this.options.ObjSearch = null;
        this.setOptions(s);
        this.query();
    },
    updateQuery2: function(s) {
        this.options.pagenbr = 1;
        this.query();
    },
    updateQuery: function(s) {
        this.options.ObjSearch = null;
        this.setOptions(s);
        this.options.pagenbr = 1;
        this.query();
    },

    buildResult: function(tokens) {

        this.elDiv_Aff.empty();
        switch (this.options.typeAff) {
            case 1: tokens.Data.each(function(d,idx) { this.affObj_01(d,tokens.DataText,idx).inject(this.elDiv_Aff); }, this); break;
            case 2: tokens.Data.each(function(d,idx) { this.affObj_02(d,tokens.DataText,idx).inject(this.elDiv_Aff); }, this); break;
            case 3: tokens.Data.each(function(d,idx) { this.affObj_03(d,null,idx).inject(this.elDiv_Aff); }, this); break;
            case 4: tokens.Data.each(function(d,idx) { this.affObj_04(d,tokens.DataText,idx).inject(this.elDiv_Aff); }, this); break;
            case 5: tokens.Data.each(function(d,idx) { this.affObj_05(d,tokens.DataText,idx).inject(this.elDiv_Aff); }, this); break;
        }
        if (this.elDiv_Nav != null) {
            this.elDiv_Nav.empty();
            switch (this.options.typeNav) {
                case 1: affNav = this.affNav_01(tokens.NavInfo); break;
                case 2: affNav = this.affNav_02(tokens.NavInfo); break;
                case 3: affNav = this.affNav_03(tokens.NavInfo); break;
                case 4: affNav = this.affNav_04(tokens.NavInfo); break;
                case 5: affNav = this.affNav_01(tokens.NavInfo,'noback'); break;
            }
        }
    },
    gotoPage: function(i){
     var curPage=this.options.pagenbr.toInt();
     this.options.pagenbr = curPage + i; 
     //if (this.elPageNbr != null) {this.elPageNbr.value=this.options.pagenbr;}
     this.query();
    
    },
    gotoProperty: function(){
    if (this.options.elSave!=null) 
        {
        var ObjSave={ObjData:{},ObjSearch:{}};
        ObjSave.ObjData=this.options.ObjData;
        ObjSave.ObjSearch=this.options.ObjSearch;
        this.options.elSave.value=JSON.encode(ObjSave);
        }
    },



    //LoadImage
    //************************
    LoadImage: function(imgscr,divTo, maxW, maxH) {
        var Iw = new Image();Iw.src ='js/Obj/img/wait.gif';divTo.appendChild(Iw);//? case!!
        var I = new Image();
        I.onerror = function () {
                var IEr =new Image(maxW,maxH);
                IEr.onload = function () {     
                        if (divTo.hasChildNodes()==true) divTo.replaceChild(IEr, Iw); 
                        }.bind(this);
                IEr.src ='js/Obj/img/nophoto.jpg';//? case!!
                }.bind(this);
        I.onload = function () {      
                var r;var h = I.height; var w = I.width;
                if ((h >= maxH) || (w >= maxW)) {
                            if (h > maxH) { r = h / maxH; h = h / r; w = w / r; }
                            if (w > maxW) { r = w / maxW; h = h / r; w = w / r; }
                            I.width = w; I.height = h;
                            }
                if (divTo.hasChildNodes()==true) divTo.replaceChild(I, Iw);
                }.bind(this);
        I.src =imgscr;
        },
    //imRprop
    //************************
    imRprop: function(oImg, maxW, maxH) {
        var h; var w; var r;
        h = oImg.height; w = oImg.width;
        if (h == 0) { h = oImg.getStyle('height').toInt(); w = oImg.getStyle('width').toInt(); }
        if ((h >= maxH) || (w >= maxW)) {
            if (h > maxH) { r = h / maxH; h = h / r; w = w / r; }
            if (w > maxW) { r = w / maxW; h = h / r; w = w / r; }
            oImg.width = w; oImg.height = h;
            oImg.style.width = w; oImg.style.height = h;
            oImg.setStyle('width', w);
            oImg.setStyle('height', h);
        }
    }


});
//Obj.Request
Obj.Request = new Class({

	Extends: Obj,

	options: {/*
		indicator: null,
		indicatorClass: null,
		onRequest: $empty,
		onComplete: $empty,*/
		postData:{},
		ajaxOptions:{url: 'getdata.ashx',output:0, method:'get',link:'cancel',noCache:true}
	},

	query: function(){
		//var indicator = $(this.options.indicator);
		//if (indicator) indicator.setStyle('display', '');
		//var cls = this.options.indicatorClass;
		//if (cls) this.element.addClass(cls);

	    var data = Object.merge(this.options.postData || {});
        data['action'] = this.options.ObjSearch.searchType
        data['output'] = this.options.ajaxOptions.output;
        data['lang'] = this.options.lang;
        data['pagenbr'] = this.options.pagenbr;
        data['RecByPage'] = this.options.RecByPage;
        data['objsearch'] = JSON.encode(this.options.ObjSearch);
		//this.fireEvent('onRequest', [this.element, this.request, data, this.queryValue]);
        this.request.send({'data': data});
	},
	
    queryResponse: function(response) {
		//var indicator = $(this.options.indicator);
		//if (indicator) indicator.setStyle('display', 'none');
		//var cls = this.options.indicatorClass;
		//if (cls) this.element.removeClass(cls);
		//return this.fireEvent('onComplete', [this.element, this.request]);
		//alert(this.request.response.text);
		if (this.options.elSave!=null) {this.options.ObjData=response;}
	}
});

//Obj.Request.JSON
Obj.Request.JSON = new Class({

	Extends: Obj.Request,
	
	initialize: function(Div_Nav,Div_Aff, options) {
	    this.setOptions(options);
		this.request = new Request.JSON(this.options.ajaxOptions).addEvent('onComplete', this.queryResponse.bind(this));
		this.parent(Div_Nav,Div_Aff);
	},
	
    queryResponse: function(response) {
                this.parent(response);
                this.buildResult(response);
                }
                
});
//Obj.Request.JSONP
Obj.Request.JSONP = new Class({

    Extends: Obj.Request,
    
    initialize: function(Div_Nav, Div_Aff,  options) {
        this.setOptions(options);
		this.request = new Request.JSONP(this.options.ajaxOptions).addEvent('onComplete', this.queryResponse.bind(this));
        this.parent(Div_Nav,Div_Aff);
    },
    
    queryResponse: function(response) {
                this.parent(response);
                this.buildResult(response);
                }
                
});
//Obj.Local
Obj.Local = new Class({

	Extends: Obj,
	
    initialize: function(Div_Nav, Div_Aff, tokens, options) {
        this.setOptions(options);
        this.tokens = tokens;
		this.parent(Div_Nav,Div_Aff);
	},
	
	query: function() {this.buildResult(this.tokens);}
	
});

