﻿$.fn.tagName = function() { 
    return this.get(0).tagName; 
}

function isArray(obj) 
{
    return obj.constructor == Array;
}

;if(window.jQuery) (function($){
    $.fn.search = function(params)
    {
        var params = params || {};
        this.catalogFile = params.catalogFile || "";
        this.filterServerName = params.filterServerName || "";
        this.getValues = function()
          {
           var filters = this.find('[filterName]');
           var filtersArr = [];
           for(var i=0;i<filters.length;i++)
           {
            var filter = $(filters[i]);
            var filterVal = null;
            if(filter.tagName().toLowerCase() == 'input')
            {
                if(filter.attr('type').toLowerCase() == 'checkbox')
                {
                    if(filter.attr('checked'))
                        filterVal = filter.val();
                }
                else
                    filterVal = filter.val();
            }
            else if(filter.tagName().toLowerCase() == 'textarea')
                filterVal = filter.text();
            else if(filter.tagName().toLowerCase() == 'select')
                filterVal = filter.val();
            else
                filterVal = filter.find('[checked]').val();
                
            if(filterVal == null || filterVal == "") continue;
            filtersArr[filtersArr.length] = 
             {
              filter: filter.attr('filterName'), 
              value: filterVal
             };
           }
           return filtersArr;
          }
        
        this.getURL = function()
        {
            var vals = this.getValues();
            //debugger;
            var URI = "";
            for(var i=0;i<vals.length;i++)
            {
                var val = vals[i];
                URI += this.filterServerName + "[" + val.filter +"]=" + val.value + "&";
            }
            URI = URI.substring(0, URI.length-1);
            return this.catalogFile + (URI.length!=0 ?("?" + URI):"");
        }
        return this;
    }
    
    $.extend($.fn.catalogSearch, {
        
    });
})(jQuery);


;if(window.jQuery) (function($){
    $.fn.relation = function(params)
    {
        params = params || {};
        $.fn.relation.globalData = params.globalData || {};
        
        // for each elem set properties    
        this.each(function(i, o)
        {
            o = $(o);
            // parent control
            var ctrlName = o.attr('relation');
            if(!ctrlName) return o;
            // json data for list
            var dataPropName = o.attr('relationData');
            if(!dataPropName) return o;
            
            // set parent control
            o.relatedCtrl = $('#' + ctrlName);
            
            o.relatedData = $.fn.relation.globalData[dataPropName] || {};
            o.relatedDataName = dataPropName;
            
            (function(obj) {
                // binding change event to parent
                obj.relatedCtrl.bind('change', function ()
                {
                    $.fn.relation.update(obj);
                });
            })(o);
        });
        return this;
    }
    
    $.fn.relation.ext =
    {
        modules : [],
        addExt : function(ctlr, ext)
        {            
            ext = ext || {};
            ext.e = ext.e || "";
            ext.c = ext.c || "";
            ext.o = ext.o || ext.e;
            if(!ext.e || !ext.c) return;            
            $.fn.relation.ext.modules[$.fn.relation.ext.modules.length] = {control:ctlr, old:ext.o, ext: ext}; 
        },
        
        getExt : function(ctrl)
        {
            var arr = [];
            for(var i in $.fn.relation.ext.modules)
            {
                var item = $.fn.relation.ext.modules[i];
                if(item.control == ctrl)
                {
                    item.ext.data = $.fn.relation.globalData[item.ext.e] || [];                    
                    item.ext.isContains = function (id, relatedId)
                    {
                        for(var i in this.data)
                        {
                            if(this.data[i].dataKey == id && this.data[i].relatedKey == relatedId)
                                return true;
                        }
                        return false;
                    };
                    arr[item.old] = item.ext;
                }
            }
            return arr;
        }
    }
    
    $.extend($.fn.relation, {
        update: function(obj, cancelCheck)
        {    
            //debugger;
            if(!obj.length) return obj;
            $.overflow(obj, true, true);
            cancelCheck = !!cancelCheck;
            var currKey = "";
            var empty = obj.attr('emptyElement') || "";
            if(!cancelCheck)
            {
                // if real not related control
                if(obj.relatedCtrl.length == 0) return obj;
                currKey = obj.relatedCtrl.val();                
            }
            
            obj.empty();            
            // data binding
            $('<option></option>')
                .attr({value:""})
                .text(empty)
                .appendTo(obj);
            
            var oid = obj.get(0).id;            
            var exts = $.fn.relation.ext.getExt(oid);
            var oldFix = null;
            var newFix = [];
            
            /*
             * for(var i in obj.relatedData)
                {
                    var item = obj.relatedData[i];
                    if(!item)  continue;
                    if(!cancelCheck)
                    {
                        if(currKey!=item.relatedKey) 
                            continue;
                    }                  
                    
                    $('<option></option>')
                        .attr({value:item.dataKey})
                        .html(item.value)
                        .appendTo(obj);
                }
             * */
            
            // extension must update old value
            if(exts[obj.relatedDataName])
                oldFix = exts[obj.relatedDataName];
            for(var i in exts)
            {
                if(i!=obj.relatedDataName)
                    newFix[newFix.length] = exts[i];
            }
            if(!newFix.length) newFix = null;
            
            var dataList = [];
            for(var i in obj.relatedData)
            {
                var item = obj.relatedData[i];
                if(!item)  continue;
                if(!cancelCheck)
                {
                    if(oldFix)
                    {
                        if(!oldFix.isContains(item.dataKey, currKey))
                            continue;
                    }
                    else if(currKey!=item.relatedKey) 
                        continue;
                    if(newFix)
                    {
                        //debugger;
                        var continuee = true;
                        //debugger;
                        for(var fix in newFix)
                        {
                            if(!fix || !newFix[fix]) continue;
                            var cur = $('#'+newFix[fix].c).val();
                            if(newFix[fix].isContains(item.dataKey, cur))
                            {
                                continuee = false;
                                break;
                            }
                        }
                        if(continuee) continue;
                    }
                }
                dataList[dataList.length] = item;
            }
            
            //debugger;
            // filling list
            for(var i in dataList)
            {
                $('<option></option>')
                    .attr({value:dataList[i].dataKey})
                    .html(dataList[i].value)
                    .appendTo(obj);
            }
            
            // trigger control repaint event
            obj.trigger('repaint');
            
            // trigger event to children
            obj.trigger('change');
            $.overflow(obj, false, true);
            return obj;
        },
        fill: function (obj, dataList)
        {
            obj.relatedData = dataList || {};
            return $.fn.relation.update(obj, true);        
        }
    });
})(jQuery);

function getSearchYears()
{
    var arr = [];
    var fromYear = 1980;
    var toYear = 2010;
    for(var i=fromYear;i<=toYear;i++)
    {
        arr[arr.length] = {dataKey: i, value: i};
    }
    return arr;
}

$(function()
{    
 /* $.getJSON(catalogServerFile, {mode: 'initDic'}, function (data)
  {
      //debugger;
      //var VAR_AUTO_TYPE = 15;      
      catDictionaries = data;
      var marks = [];
      for(var i in catDictionaries['autoMark'])
      {
       
        marks[marks.length] = catDictionaries['autoMark'][i];
      }

      
      $("select[relation]").relation({globalData: catDictionaries});      

     
  });*/
         // $.fn.relation.fill($("#markSimpleSearch"), marks);
      //$.fn.relation.fill($("#ageSimpleSearch"), getSearchYears());
      
        $('#simpleSearchBtn').bind('click', function()
      {  
          window.location.href = $('[search]').search(
                  {catalogFile:"catalog.php", filterServerName:"filter"}
                  ).getURL();
      });
});

