﻿// Utility function; Object representation of a querystring.
// for each KVP in QueryString, Query.[Key] returns [Value]

Query = function(location){
    var me = this; 
    this.Url = (location || window.location).toString();
    this.Bookmark = null;

    var parse = function(loc){
        var str = loc.substr((loc.indexOf("?")+1), loc.length);        
        var kvp = str.split('&');
                
        for (var i=0; i < kvp.length; i++){                
            var s = kvp[i];
            var k = s.substr(0, s.indexOf("="));
            var v = s.substr((s.indexOf("=")+1), s.length);
            
            if (v.indexOf('#') != -1){            
                me.bookmark = v.substr((v.indexOf('#')+1), v.length);
                v = v.substr(0, v.indexOf('#'));            
            }                        
            me[k] = v;       
        }                
    };                
    parse(me.Url)
};

(function($) {
  $.fn.tabify = function(param) {   
    var settings = {
      active: 0,
      qskey: "TabIndex"
    };
    var query = new Query();         
    var config = $.extend(settings, param);                      
    var active = query[config.qskey] || config.active;
    var views;
        
    view = function(element,i){      
      this.index = i;   
      this.trigger = $("a[href='#"+ element.attr("id") +"']").parent();                  
      this.show = function(){ element.css("display","block"); this.trigger.addClass("active"); };      
      this.hide = function(){ element.css("display","none"); if (this.trigger.is(".active")) this.trigger.removeClass("active"); };
      
      var self = this;
      var trigger_click = function(e){
        views[active].hide();
        views[e.data.index].show();    
          active = e.data.index;
          
          e.stopPropagation();
          e.preventDefault();
        return false;  
      };
      var initialize = function(){
        self.trigger.bind("click", {index:self.index}, trigger_click);
        if (self.index != active){                                         
         self.hide();
        }else{
         self.show();
        }
      }; initialize();
    };
                                                                       
    return $(this).each(function(){
     views = new Array();
      $(this).children().each(function(i){      
          views[i] = new view($(this),i);
      });                      
    })        
  };
})(jQuery);

(function($) {
    $.fn.searchOptions = function(param) {
        var settings = {
            active: 0,
            qskey: "TabIndex",
            specialTriggers: null
        };
        var query = new Query();
        var config = $.extend(settings, param);
        var active = config.active;
        var triggers;

        trigger = function(element, idx) {
            this.index = idx;
            this.trigger = $(element).find("a");
            this.show = function() { this.trigger.parent().addClass("active"); };
            this.hide = function() { this.trigger.parent().removeClass("active"); };

            var self = this;
            var on_click = function(evt) {
                if (!self.specialTrigger.method()) return;
                triggers[active].hide();
                triggers[evt.data.index].show();
                active = evt.data.index;
                evt.stopPropagation();
                evt.preventDefault();
                return false;
            };

            this.specialTrigger = null;
            if (config.specialTriggers) {
                $.each(config.specialTriggers, function() {
                    if (self.trigger.parent().hasClass(this.specialClass)) { self.specialTrigger = this; return false; }
                });
            }

            $(this.trigger).bind("click", { index: this.index }, on_click);
            if (this.index != active) {
                this.hide();
            } else {
                this.show();
            }
        };

        triggers = $(this).children().map(function(idx) { return new trigger($(this), idx); });
        return triggers;


    };
})(jQuery);
