
/* dump anything */
/* as repr: use object.repr = function() { return sdump(this); }; */
dump = function (o, recursive, indent, name) {
    var recursedlist = [];
    alert(sdump(o, recursive, indent, name, recursedlist));
};

sdump = function (v, recursive, indent, name, recursedlist) {
    if (typeof(recursive)=='undefined') recursive = 4;
    if (typeof(indent)=='undefined') indent = '';
    if (typeof(name)=='undefined') name = '?';
    if (typeof(recursedlist)=='undefined') recursedlist = [];
    var s = '';
    if (_stn_arrayIndexOf(recursedlist, v)!==-1) {
        s+= indent + name + ' ; [recursion]\n';
        return s;
        }
    recursedlist.push(v);
    var type = typeof(v);
    var append = "\n"; // ' (' + type + ')' + "\n";
    if (type == 'object') {
        if (v == null) {
            s+= indent + name + ' ; null';
        } else if (recursive) {
            s+= indent + name + ' : ' + "\n";
            s+= _stn_sdump(v, recursive, indent+'.. ', recursedlist);
            append = '';
        } else {
            s+= indent + name + ' : [object]';
        }
    } else if (type == 'function') {
        s+= indent + name + '() {...}';
    } else if (type == 'boolean') {
        if (v) {
            s+= indent + name + ' ; true';
        } else {
            s+= indent + name + ' ; false';
        }
    } else if (type == 'string') {
        s+= indent + name + ' : \'' + v + '\'';
    } else {
        s+= indent + name + ' : ' + v;
    }
    s+= append;
    recursedlist.pop(v);
    return s;
}

_stn_sdump = function (o, recursive, indent, recursedlist) {
    var s = '';
    var iterated = false;
    for (var k in o) {
        iterated = true;
        if (k[0]!='_') { // hide 'protected/private' members
            var v = o[k];
            s+= sdump(v, recursive-1, indent, k, recursedlist);
        }
    };
    if (!iterated && o.length) { // e.g. on 'arguments', the for-in doesn't work
        var n = o.length;
        for (var i=0; i<n; ++i) {
            var v = o[i];
            s+= sdump(v, recursive-1, indent, i, recursedlist);
        };
    }
    return s;
}

_stn_arrayIndexOf = function (thisarray, searchElement, fromIndex) {
    if (!fromIndex) fromIndex = 0;
    for (var i = fromIndex; i<thisarray.length; ++i) {
        if (searchElement == thisarray[i]) {
            return i;
        }
    }
    return -1;
}

get_stylefolder = function() {
  if ( typeof get_stylefolder.stylefolder == 'undefined' ) {
    get_stylefolder.stylefolder = '/style/';
    var firststylesheet = $('link[rel=stylesheet]').eq(0);
    if (firststylesheet && firststylesheet.attr('href').split('/').length>=2) {
      get_stylefolder.stylefolder = '/'+firststylesheet.attr('href').split('/')[1]+'/';
    }
  }
  return get_stylefolder.stylefolder;
}

_stn_setActiveStyleSheet = function (title) {
  $('link').each(function() {
    if ($(this).attr('rel').indexOf('style') != -1 && $(this).attr('title')) {
      $(this).attr('disabled', true);
      if ($(this).attr('title') == title) {
        $(this).attr('disabled', false);
      }
    }
  });
}

print_preview = function () {
  _stn_setActiveStyleSheet('print-preview');
}

cancel_print_preview = function () {
  _stn_setActiveStyleSheet('default');
}

stn_equal_height = function (/*...*/) { // sorry, padding/margins not supported
  var max_height = 0;
  for(var i = 0; i < arguments.length; i++ ) {
    max_height = Math.max(max_height, $(arguments[i]).height());
  }
  for(i = 0; i < arguments.length; i++ ) {
    $(arguments[i]).height(max_height);
  }
}

jQuery.fn.supersleight = function(settings) {
	settings = jQuery.extend({
		imgs: true,
		backgrounds: true,
		shim: '/style/fix-ie6/xpix.gif',
		apply_positioning: true
	}, settings);
	
	return this.each(function(){
		if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) < 7 && parseInt(jQuery.browser.version, 10) > 4) {
			jQuery(this).find('*').andSelf().each(function(i,obj) {
				var self = jQuery(obj);
				// background pngs
				if (settings.backgrounds && self.css('background-image').match(/\.png/i) !== null) {
					var bg = self.css('background-image');
					var src = bg.substring(5,bg.length-2);
					var mode = (self.css('background-repeat') == 'no-repeat' ? 'crop' : 'scale');
					var styles = {
						'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='" + mode + "')",
						'background-image': 'url('+settings.shim+')'
					};
					self.css(styles);
				};
				// image elements
				if (settings.imgs && self.is('img[src$=png]')){
					var styles = {
						'width': self.width() + 'px',
						'height': self.height() + 'px',
						'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + self.attr('src') + "', sizingMethod='scale')"
					};
					self.css(styles).attr('src', settings.shim);
				};
				// apply position to 'active' elements
				if (settings.apply_positioning && self.is('a, input') && (self.css('position') === '' || self.css('position') == 'static')){
					self.css('position', 'relative');
				};
			});
		};
	});
};