/* Copyright (c) 2007—2008 Onlyweb Studio | http://www.onlyweb.ru/ */
/*


From Russia with love!

*/

var newClass = function() {
	return function() {
		return this.init.apply(this, arguments);
	}
}



var resizerData = {

  '.WidthTL': {		
    'padding-left': [10, 65, 'px'],
	'padding-right': [10, 65, 'px']
  },
  
   '.PosCTL': {		
    'left': [35, 42, '%']
  },
  
   '.Gradient': {		
    'left': [-320, 0, 'px']
  },
  
  '.ImgBlock': {		
    'left': [-320, 0, 'px']
  },

  '.BgPage, .Loader': {
    'width': [990, 1600, 'px']
  },

  '.PosCTL': {		
    'left': [390, 695, 'px']
  }

  
};

var x;

var Resizer = newClass();
Resizer.prototype = {
  init: function(p) {
    var t = this;
    t.data = p.data;
    t.minWidth = p.minWidth;
    t.maxWidth = p.maxWidth;
		
		t.elements = {};
		t.customFunctions = [];
		
		// Когда прогрузится всё дерево элементов
		$(function() {
	    for(selector in t.data) {
	      t.elements[selector] = $(selector);
	    }
			var f = function() {
				var w = t.getDocumentWidth();
				for (var i = 0; i < t.customFunctions.length; i++) {
					t.customFunctions[i].call(null, w);
				}
	      t.windowResize(w);
	    };
			// Вызываем первый раз
			f();
			// Вызываем каждый раз при изменении размера
	    window.onresize = f;
		});
  },

  windowResize: function(w) {
    var t = this;
    var t0 = t.minWidth - t.maxWidth;
    var t1 = t.minWidth - w;
    var t2 = w - t.maxWidth;

    for (var selector in t.data) {
      var el = t.elements[selector];
      if (el.size() != 0) {
        var props = t.data[selector];
        for (var prop in props) {
          if (prop == 'background-position') {
            var pX = props[prop][0];
            var pY = props[prop][1];
            var valX = t.eval(w, t0, t1, t2, pX[0], pX[1]);
            var valY = t.eval(w, t0, t1, t2, pY[0], pY[1]);
            el.css(prop, valX + pX[2] + ' ' + valY + pY[2]);
          } else {
            var val = t.eval(w, t0, t1, t2, props[prop][0], props[prop][1]);
            el.css(prop, val + props[prop][2]);
          }
        }
      }
    }
  },

  eval: function(w, t0, t1, t2, a, b) {
    var t = this;

    if (w <= t.minWidth) {
      x = a;
    } else if (w >= t.maxWidth) {
      x = b;
    } else {
      var x = Math.round((b*t1 + a*t2) / t0);
    }
    return x;
  },
	
	// Добавляет функцию в массив функций,
	// которые будут вызываться при изменении размеров.
	addCustomFunction: function(f) {
		var t = this;
		t.customFunctions.push(f);
	},
  
  // Возвращает ширину документа
  getDocumentWidth: function() {
    var t = this;
    var w = document.documentElement.clientWidth || document.body.clientWidth;
    if (w <= t.minWidth) {
      return t.minWidth;
    } else if (w >= t.maxWidth) {
      return t.maxWidth;
    } else {
      return w;
    }
  }
	
}

resizer = new Resizer({
  minWidth: 990,
  maxWidth: 1600,
  data: resizerData
});