﻿//Ver 1.0, UC_CRR
/* ---------------------------------------------------------------------- *\
  BİRDENBİRE # Ali BİNGÖL 15/09/2010#
\* ---------------------------------------------------------------------- */
var MY_Crr=new function(){
    var _objectsCrr
    this.Crr=function(objectId){                
        this.Crr.Get=function() {            
            if(!_objectsCrr) return             
            for(var i=0;i<_objectsCrr.length;i++) {
                if(_objectsCrr[i].objectId==objectId) return _objectsCrr[i];
            }
            return
        }        
        //initialize
        this.Crr.Init=function(RootUrl,prodType,isBlankItem_Air, isBlankItem_Reg, isBlankItem_Res,isCombosVisible,IsShowExpandPicture,CountryList) {
            if(!_objectsCrr) _objectsCrr=new Array();
            var _new = new Crr_Init(objectId, RootUrl, prodType, isBlankItem_Air, isBlankItem_Reg, isBlankItem_Res, isCombosVisible, IsShowExpandPicture, CountryList)
            _objectsCrr[_objectsCrr.length]=_new
            return _new
        }
        //objects
        this.Crr_objects=_objectsCrr;
        return this.Crr ;
    }
    ///Initialize
    function Crr_Init(objectId, RootUrl, prodType, isBlankItem_Air, isBlankItem_Reg, isBlankItem_Res, isCombosVisible, IsShowExpandPicture, CountryList) {
        this.objectId=objectId;
        this.RootUrl = RootUrl;
        this.ProdType=prodType;        
        this.isBlankItem_Air=isBlankItem_Air
        this.isBlankItem_Reg=isBlankItem_Reg
        this.isBlankItem_Res=isBlankItem_Res
        this.isCombosVisible=isCombosVisible
        this.IsShowExpandPicture=IsShowExpandPicture
        this.CountryList=CountryList
        var xMe=this
        var mIsCombosExpanded//butonlu durumlarda en son ne durumda
        this.CountryId=function()  {
            return cmbCNT_JQ.val();
        }
        this.RegionId=function()  {
            if(!xMe.IsVisibleRegion()) return 0            
            return MY.cNumeric(hidREG_JQ.val())
        }
        this.AirportId=function()  {
            if(!xMe.IsVisibleAirport()) return 0
            return MY.cNumeric(hidAIR_JQ.val());
        }
        this.ResortId=function()  {
            if(!xMe.IsVisibleResort()) return 0
            return MY.cNumeric(hidRES_JQ.val());
        }
        this.RetBaseAreaId=function ()    {
            //CountryId & "$" & AirportId & "$" & RegionId & "$" & ResortId, new object
            return this.CountryId() +'$'+this.AirportId()+'$'+this.RegionId()+'$'+this.ResortId()
        }                        
        this.focus=function ()    {
            return txtSRCH_JQ.focus();
        }
        this.ExpandCombos=function ()    {
            $('#arefCrrShowCombos'+xMe.objectId).trigger('click');//direk func çağırısak collapse çalışmayabilirdi, o yüzden IsCombosExpanded false ise çağrılmalı
        }
        this.CollapseCombos=function ()    {
            $('#arefCrrShowCombos'+xMe.objectId).trigger('click');//direk func çağırısak expand çalışmayabilirdi
        }
        this.IsVisibleRegion=function ()    {
            return cmbREG_JQ.length!=0
        }
        this.IsVisibleAirport=function ()    {
            return cmbAIR_JQ.length!=0
        }
        this.IsVisibleResort=function ()    {
            return cmbRES_JQ.length!=0
        }                
        this.OnAutoCompleteSelected=function(RegionId,ResortId)  {
            //overridable
        }
        this.OnCombosChanged=function()  {
            //overridable
        }        
        this.IsCombosExpanded=function()  {//yani butona basılmış ve açılmışmı, buton yoksa true            
            return mIsCombosExpanded
        }
        this.IsCombosCollapsed=function()  {
            return !mIsCombosExpanded
        }
        this.SetArea=function (argAreaKey)    {
            if(argAreaKey=='') return            
            var dummy=argAreaKey.split('$')//cnt$air$reg$res
            cmbCNT_JQ.val(dummy[0]);
            hidAIR_JQ.val(dummy[1])
            hidREG_JQ.val(dummy[2])
            hidRES_JQ.val(dummy[3])
            CNT_Change()            
            return true
        }                
        //sadece HTL için çalışıyor şimdilik
        this.SetAreaFromProd=function (argProdKey)    {
            if(argProdKey=='') return            
            SetAreaFromProd(argProdKey)
            return true
        }        
        ////Init Search        
        var cmbCNT_JQ=$('#'+this.objectId+'_cmbCountry');
        var cmbREG_JQ=$('#'+this.objectId+'_cmbRegion');
        var cmbAIR_JQ=$('#'+this.objectId+'_cmbAirport');
        var cmbRES_JQ=$('#'+this.objectId+'_cmbResort');
        var hidREG_JQ=$('#'+this.objectId+'_hidRegion');
        var hidAIR_JQ=$('#'+this.objectId+'_hidAirport');
        var hidRES_JQ=$('#'+this.objectId+'_hidResort');        
        var txtSRCH_JQ=$('#'+this.objectId+'_TXT');                
        //on load
        Start();        
        //jq subs
        //visible olanlar autocomplete'e gelir
        var ac_ExtraParams="'prodtype':'"+xMe.ProdType+"','IsAir':'"+(xMe.IsVisibleAirport()?1:0)+"'"
        ac_ExtraParams+=",'IsReg':'"+(xMe.IsVisibleRegion()?1:0)+"'"
        ac_ExtraParams+=",'IsRes':'"+(xMe.IsVisibleResort()?1:0)+"'"
        //prodtype flt ise air'e bagli regionlar da dolsun        
        ac_ExtraParams+=",'IsRegionOfAir':'"+(xMe.IsVisibleAirport() && xMe.ProdType==7?1:0)+"'"
        ac_ExtraParams+=",'CountryList':'"+xMe.CountryList+"'"


        txtSRCH_JQ.autocomplete(xMe.RootUrl + "Service_UcCrr.asmx/SearchAreas", {
	        minChars: 0,
	        width: 250,matchCase:true,
            dataType: 'json',httpMethod: 'POST',contentType: 'application/json; charset=utf-8',		
	        autoFill: false, ExtraParams : ac_ExtraParams ,
	        formatItem: function(row, i, max) {
		        var rowx=row[0].split('$');
		        //cnt$air$reg$res$name
		        if(parseInt(rowx[1])!=0)  //air
		            return '<img src="' + xMe.RootUrl + 'images/plane.png" />' + rowx[4];
		        else if(parseInt(rowx[3])==0) //resort yoksa regdir
		            return '<img src="' + xMe.RootUrl + 'images/city.png" />' + rowx[4];		        		            
		        else    //res
		            return '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+rowx[4];
	        },
	        formatMatch: function(row, i, max) {
		        return row[0].split('$')[4]//name
	        },
	        formatResult: function(row) {
		        return row[0].split('$')[4]//name
	        }
        });
        txtSRCH_JQ.result(function(event, data, formatted) {                
            var row=data[0].split('$')//cnt$air$reg$res$name
            //cnt değişmişse                             
            cmbCNT_JQ.val(row[0]);
            hidAIR_JQ.val(row[1])
            hidREG_JQ.val(row[2])
            hidRES_JQ.val(row[3])
            xMe.OnAutoCompleteSelected(hidREG_JQ.val(),hidRES_JQ.val());            
            CNT_Change()                        
        });        
        //combo change events
        cmbCNT_JQ.change(function() {
            CNT_Change()            
            xMe.OnCombosChanged()
        });        
        cmbREG_JQ.change(function() {            
            REG_Change()
            xMe.OnCombosChanged()
        });        
        cmbAIR_JQ.change(function() {
            AIR_Change()
            xMe.OnCombosChanged()
        });
        cmbRES_JQ.change(function() {
            RES_Change()
            xMe.OnCombosChanged()
        });
        
        //sub funcs
        function Start(){
            //+ ref            
            if(xMe.isCombosVisible) {
                $('#arefCrrShowCombos'+xMe.objectId ).hide();                
                ShowHideCOmbos(true)                
            } else{
                //show ama picture istenmiyebilir
                if(xMe.IsShowExpandPicture) $('#arefCrrShowCombos'+xMe.objectId).show();
                    else $('#arefCrrShowCombos'+xMe.objectId).hide();
                
                $('#arefCrrShowCombos'+xMe.objectId).toggle(function(){                                        
                    ShowHideCOmbos(true)//ilk seferde acilacak
                },function(){                                        
                    ShowHideCOmbos(false)
                });                
                ShowHideCOmbos(false)
            }
            //
            CNT_Change()
            //set name on load
            PrintAreas()

        }
        
        function PrintAreas(){
            if (xMe.ResortId()==0 && xMe.RegionId()==0 && xMe.AirportId()==0) return 
            if(xMe.isCombosVisible) return 
            //demekki combolar gözükmüyor, autocomp text var sadece (Buyuk ihtimalle). o yüzden print yapalım 
            $.ajax({
                type: "POST",async:true, contentType: "application/json; charset=utf-8",dataType: "json",
                url: xMe.RootUrl + "Service_UcCrr.asmx/PrintAreas",
                data: "{'argAreaId':'" + xMe.RetBaseAreaId()  + "'}",
                success:     function (data)  {
                    if(!data.d.IsSuccess) {RiseAlert(data.d.Val);return false;}
                    txtSRCH_JQ.val(data.d.Val)
                    return true
                },
                error: function(data) {RiseAlert(data.responseText);return false}                
            });        
        }
        
        function ShowHideCOmbos(isShow) {
            mIsCombosExpanded=isShow
            var imgExpand = xMe.RootUrl + 'images/expand_blue.jpg'
            var imgCollaps = xMe.RootUrl + 'images/collapse_blue.jpg'        
            if(isShow) {
                $('tr[id*='+xMe.objectId+']').show();
                $('#arefCrrShowCombos'+xMe.objectId).find('img').attr('src',imgCollaps)
            }else    {
                $('tr[id*='+xMe.objectId+']').hide();
                $('#arefCrrShowCombos'+xMe.objectId).find('img').attr('src',imgExpand)
            }
        }
        
        function CNT_Change(){            
            //region
            if(xMe.IsVisibleRegion()) {
                MY.cmb_empty(cmbREG_JQ[0]);
                if(xMe.CountryId()!=0) {
                    AddLoading(cmbREG_JQ);
                    FillAreas(cmbREG_JQ,hidREG_JQ,'FillRegions',xMe.CountryId(),xMe.isBlankItem_Reg,xMe.RegionId());
                }
            }
            //Airp
            if(xMe.IsVisibleAirport()) {
                MY.cmb_empty(cmbAIR_JQ[0]);
                if(xMe.CountryId()!=0) {
                    AddLoading(cmbAIR_JQ);
                    FillAreas(cmbAIR_JQ,hidAIR_JQ,'FillAirports',xMe.CountryId(),xMe.isBlankItem_Air,xMe.AirportId());
                }
            }
            //res
            if(xMe.IsVisibleResort()) {
                MY.cmb_empty(cmbRES_JQ[0]);
            }        
        }
        function REG_Change(){
            SET_Id(cmbREG_JQ,hidREG_JQ);
            //resort
            if(xMe.IsVisibleResort()) {
                MY.cmb_empty(cmbRES_JQ[0]);
                if(xMe.RegionId()!=0) {
                    AddLoading(cmbRES_JQ);
                    FillAreas(cmbRES_JQ,hidRES_JQ,'FillResorts',xMe.RegionId(),xMe.isBlankItem_Res,xMe.ResortId());                    
                }else{
                //resortId 0'lansın
                    hidRES_JQ.val(0)
                }
            }        
        }
        
        function AIR_Change(){
            SET_Id(cmbAIR_JQ,hidAIR_JQ);
        }        
        function RES_Change(){
            SET_Id(cmbRES_JQ,hidRES_JQ);            
        }                
        
        function SET_Id(cmb_JQ,hid_JQ){
            hid_JQ.val(cmb_JQ.val());
        }
        function AddLoading(cmb_JQ){
            MY.cmb_add(cmb_JQ[0],0,'.|.|.|.|.'); //loading text
        }
        
        function SetAreaFromProd(aProdKey)  {
            //önce area'yı bulalım
            $.ajax({
                type: "POST",async:true, contentType: "application/json; charset=utf-8",dataType: "json",
                url: xMe.RootUrl + "Service_UcCrr.asmx/SearchProductItemArea",
                data: "{'argProdKey':'" + aProdKey + "'}",
                success:     function (data)  {
                    if(!data.d.IsSuccess) {RiseAlert(data.d.Val);return false;}
                    xMe.SetArea(data.d.Val)
                    return true
                },
                error: function(data) {RiseAlert(data.responseText);return false}                
            });        
        }
        
        function FillAreas(cmb_JQ,hid_JQ,service,parentKey,addBlank,oldUnKey){
            $.ajax({
                type: "POST",async:true, contentType: "application/json; charset=utf-8",dataType: "json",
                url: xMe.RootUrl + "Service_UcCrr.asmx/" + service,
                data: "{'argParentId':'" + parentKey + "','argProdType':'" + xMe.ProdType  + "'}",                                  
                success:     function (data)  {
                    if(!data.d.IsSuccess) {RiseAlert(data.d.Val);return false;}        		 
                    //
                    MY.cmb_empty(cmb_JQ[0])
                    if(addBlank) MY.cmb_add(cmb_JQ[0],0,'--------');
                    if(data.d.RetObj) {
                        for (var i=0;i<=data.d.RetObj.length-1;i++){
                            MY.cmb_add(cmb_JQ[0],data.d.RetObj[i].UniqueKey,data.d.RetObj[i].Name);
                        }
                    }
                    //set old val
                    if(oldUnKey!=0) {cmb_JQ.val(oldUnKey)}
                    SET_Id(cmb_JQ,hid_JQ);                    
                    //async=true ise reg 'dolduktan sonra REG_Change() gelmeli
                    if(cmb_JQ[0].id.indexOf('_cmbRegion')>-1) {
                        REG_Change()
                    }
                    return true
                },
                error: function(data) {RiseAlert(data.responseText);return false}                
            });
        }        
    }
    
}
