function trim(stringToTrim)
{
    return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function in_array(needle, haystack)
{
    var i = haystack.length;
    if(i > 0) {
        do {
            if (haystack[i] === needle)
                return true;
        } while (i--);
    }

    return false;
}

function empty (mixed_var) {

    var key;
    var undefined;

    if (mixed_var === "" ||
        mixed_var === 0 ||
        mixed_var === "0" ||
        mixed_var === null ||
        mixed_var === false ||
        mixed_var === undefined
    ){
        return true;
    }

    if (typeof mixed_var == 'object') {
        for (key in mixed_var) {
            return false;
        }
        return true;
    }

    return false;
}


function is_array( mixed_var )
{
    return ( mixed_var instanceof Array );
}

function stristr( haystack, needle, bool )
{
    var pos = 0;

    pos = haystack.toLowerCase().indexOf( needle.toLowerCase() );
    if( pos == -1 ){
        return false;
    } else{
        if( bool ){
            return haystack.substr( 0, pos );
        } else{
            return haystack.slice( pos );
        }
    }
}

function generateOptions(json_arr, first_key, first_value)
{
  var options = '';
    if (first_value) {
        first_key = typeof(first_key) != 'undefined' ? first_key : '';
        options += '<option value="' + first_key + '">' + first_value + '</option>';
    }
  $.each(json_arr, function(i, n) {
    options += '<option value="' + i + '">' + n + '</option>';
  });

  return options;
}

function changePageLimit(page_limit, rel_root, module)
{
  page_limit = parseInt(page_limit);

  if (page_limit > 0 && page_limit <= 100) {
    $.getJSON(rel_root + "index.php", {module: "index", module_name: module, action: "set_page_limit", page_limit: page_limit}, function(response) {
      window.location.reload();
    });
  }

  return false;
}

function font_increase(resizer_ul, size, container_id)
{
    resizer_ul.removeClass("font_resizer_" + size);
    $("#" + container_id).removeClass("font_size_" + size);
    size++;
    resizer_ul.addClass("font_resizer_" + size);
    $("#" + container_id).addClass("font_size_" + size);
    resizer_ul.attr("size", size);

    //set cookie
    $.cookie('font_size', size, { expires: 30, path: '/' });

    return size;
}

function font_decrease(resizer_ul, size, container_id)
{
    resizer_ul.removeClass("font_resizer_" + size);
    $("#" + container_id).removeClass("font_size_" + size);
    size--;
    resizer_ul.addClass("font_resizer_" + size);
    $("#" + container_id).addClass("font_size_" + size);
    resizer_ul.attr("size", size);

    //set cookie
    $.cookie('font_size', size, { expires: 30, path: '/' });

    return size;
}

function font_change(font_resizer, container_id)
{
  var resizer_ul = $(font_resizer).parent();
  size = resizer_ul.attr("size");

  if ($(font_resizer).is(".increase")) {
    if (size < 3) {
      size = font_increase(resizer_ul, size, container_id);
    }
    if (size == 3) {
      $("a", font_resizer).addClass("disabled");
    }
    $(".decrease > a", resizer_ul).removeClass("disabled");
  } else {
    if (size > 1) {
      size = font_decrease(resizer_ul, size, container_id);
    }
    if (size == 1) {
      $("a", font_resizer).addClass("disabled");
    }
    $(".increase > a", resizer_ul).removeClass("disabled");
  }
}

function urlencode (str)
{
    // URL-encodes string  
    // 
    // version: 911.718
    // discuss at: http://phpjs.org/functions/urlencode    // +   original by: Philip Peterson
    str = (str+'').toString();
        // Tilde should be allowed unescaped in future versions of PHP (as reflected below), but if you want to reflect current
    // PHP behavior, you would need to add ".replace(/~/g, '%7E');" to the following.
    return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
                                                                    replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
}

var $sReg = new function() {

    /*
        $sReg.set('/Options/Default',{'name' : 'test', 'version' : 1});
        $sReg.set('/Options/Default/name', 'changed'); // changes name to 'changed'
        $sReg.set('/dynamically/creates/nested/objects', true);
        $sReg.get('/Options/Default');
        $sReg.get('/Options/Default/version'); // returns 1
        if (!empty($sReg.get('/foo'))) {...};
    */

    function unlink(object){

        var unlinked;

        switch (typeof obj){
            case 'object':
                unlinked = {};
                for (var p in object) unlinked[p] = unlink(object[p]);
            break;
            case 'array':
                unlinked = [];
                for (var i = 0, l = object.length; i < l; i++) unlinked[i] = unlink(object[i]);
            break;
            default: return object;
        }

        return unlinked;
    };

    function mixin(mix){

        for (var i = 1, l = arguments.length; i < l; i++){
            var object = arguments[i];
            if (typeof object != 'object') continue;
            for (var key in object){
                var op = object[key], mp = mix[key];
                mix[key] = (mp && typeof op == 'object' && typeof mp == 'object') ? mixin(mp, op) : unlink(op);
            }
        }

        return mix;
    };

    function merge(){

        var args = Array.prototype.slice.call(arguments);

        args.unshift({});

        return mixin.apply(null, args);
    };

    var sRegistry = {

        conf : {},

        set : function(path,value){

            var fragments = path.split('/');

            if( fragments.shift() !== '') {

                return false; // remove empty, first component
            }

            if(fragments.length > 0 && fragments[fragments.length - 1] == '') {
                fragments.pop();
            }

            var obj = {};
            var ref = obj;
            var len = fragments.length;

            if( len > 0){
                for(i = 0; i < len-1; i++){
                    ref[fragments[i]] = {};
                    ref = ref[fragments[i]];
                }
                ref[fragments[len-1]] = value;
                this.conf = merge(this.conf,obj);
            } else {
                this.conf = value;
            }
        },

        get : function(path){

            var fragments = path.split('/');

            if( fragments.shift() !== '') {

                return null;
            }

            if(fragments.length > 0 && fragments[fragments.length -1] == '') fragments.pop();

            var ref = this.conf;
            var path_exists = true;
            var i = 0;

            if (ref[fragments[i]] === undefined) {

                return null;
            }

            var len = fragments.length;

            while(path_exists && i < len){
                path_exists = path_exists && (ref[fragments[i]] !== undefined);
                ref = ref[fragments[i]]; i++;

            }

            return ref;
        }

    };

    return sRegistry;
}

jQuery.namespace = function() {

    var a=arguments, o=null, i, j, d;
    for (i=0; i<a.length; i=i+1) {
        d=a[i].split(".");
        o=window;
        for (j=0; j<d.length; j=j+1) {
            o[d[j]]=o[d[j]] || {};
            o=o[d[j]];
        }
    }

    return o;
};
$.namespace('jQuery.medicine');

jQuery.loadCSS = function(url, media) {

  if (empty(media)) {
    media = "screen";
  }

  var fileref = document.createElement("link");
  fileref.setAttribute("rel", "stylesheet");
  fileref.setAttribute("type", "text/css");
  fileref.setAttribute("media", media);
  fileref.setAttribute("href", url);

  document.getElementsByTagName("head")[0].appendChild(fileref);
};

jQuery.loadScript = function(url, callback, debug) {

    var script = document.createElement("script")
    script.type = "text/javascript";

    if (script.readyState){  //IE
        script.onreadystatechange = function() {

            if (script.readyState == "loaded" || script.readyState == "complete") {
                script.onreadystatechange = null;
                if (jQuery.isFunction(callback)) {
                  callback();
                }
            }
        };
    } else {
        script.onload = function() {
            if (jQuery.isFunction(callback)) {
              callback();
            }
        };
    }

    if (!empty(debug)) {
        url += "?t=" + new Date().getTime().toString();
    }

    script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);
}

jQuery.loadScripts = function(urls, callback, debug) {

    var scripts_num  = urls.length;
    var executed_num = 0;

    var apply_callback = function() {

        executed_num++;

        if (scripts_num == executed_num && jQuery.isFunction(callback)) {
            callback.call(this);

            return true;
        }
    }

    jQuery.each(urls, function(i, val) {
        jQuery.loadScript(val, function() {
            apply_callback();
        }, debug);
    });

};

jQuery(document).ready(function() {
(function($) {
	var rl = $sReg.get("/env/rel_root");				
					
  //search
  $("#global_search_submit").bind("click", function() {
    if (!empty($("#global_search_str").val())) {
      $("#globalSearchForm").submit();
    } else {
      return false;
    }
  });

  $("#search_categories a").bind("click", function() {
    $("#search_categories li").removeClass("selected");
    $(this).parent('li').addClass("selected");
    $("#search_module").val($(this).attr("module"));

    return false;
  });


  function resize_window() {
    var w = $("html").width();
    if ( w < 1060) {
      $("body").addClass("size_1024");
	  $.cookie('size_1024', w, { expires: 30, path: '/' });
    } else {
      $("body").removeClass("size_1024");
	  $.cookie('size_1024', null, { path: '/' });
    }
  }
  
  resize_window();

  $(window).bind("resize", function() {
    resize_window();
  });

  if ($.browser.msie && $.browser.version <= 6) {
    $("#main_navigation > ul > li, #main_navigation > ul > li > a").addClass("level_1");

    $("#main_navigation > ul > li").hover(function() {
      $(this).addClass("level_1_hover");
    }, function() {
      $(this).removeClass("level_1_hover");
    });

    $("#main_navigation > ul > li.selected").hover(function() {
      $(this).addClass("hover_selected");
    }, function() {
      $(this).removeClass("hover_selected");
    });

    $("#main_navigation > ul > li.selected_multiple").hover(function() {
      $(this).addClass("hover_selected_multiple");
    }, function() {
      $(this).removeClass("hover_selected_multiple");
    });

    $("#main_navigation > ul > li.multiple").hover(function() {
      $(this).addClass("hover_multiple");
    }, function() {
      $(this).removeClass("hover_multiple");
    });

  }
  
})(jQuery);
});