﻿// JScript File

var s_stringutil = {
	replaceAll: function(str, str1, str2) {
		if (str2.indexOf(str1) != -1) return str; // to avoid infinite loop
		while (str.indexOf(str1) != -1) {
			str = str.replace(str1, str2);
		}
		return str;
	}
}

var s_arrayutil = {
  
  serializeForm: function(formId) {
		var elmts = document.getElementById(formId).elements;
		var ret = "", values = "", lastName = "";
		for(var i=0; i<elmts.length; i++) {
			if (!elmts[i].name) continue;
			switch(elmts[i].type) {
				case "select-multiple":
					values = "";
					for (var j=0; j<elmts[i].options.length; j++) {
						if (elmts[i].options[j].selected)
							values += elmts[i].options[j].value + ",";
					}
					if (values.length > 0) {
						values = values.substring(0, values.length-1);
						ret += elmts[i].name + "=" + values + "&";
					}
					break;
				case "checkbox":
					if (elmts[i].checked) {
						if (elmts[i].name != lastName)
							ret += elmts[i].name + "=" + elmts[i].value + "&";
						else
							ret = ret.substring(0, ret.length - 1) + "," + elmts[i].value + "&";
						lastName = elmts[i].name;
					}
					break;
				case "button":
					break;
				default:
					if (elmts[i].value != "")
						ret += elmts[i].name + "=" + elmts[i].value + "&";
					break;
			}
		}
		if (ret.length > 0) ret = ret.substring(0, ret.length - 1);
		return ret;
  },
  
  deserializeForm: function(formId, queryString) {
		var qsArr = this.queryStringToArray(queryString);
		var elmts = document.getElementById(formId).elements;
		for(var i=0; i<elmts.length; i++) {
			if (!elmts[i].name || !qsArr[elmts[i].name]) continue;
			switch(elmts[i].type) {
				case "select-multiple":
					this.assignMultiSelectValues(elmts[i], qsArr[elmts[i].name]);
					break;
				case "checkbox":
					this.assignMultiCheckboxValues(elmts[i], qsArr[elmts[i].name]);
					break;
				case "button":
					break;
				default:
					elmts[i].value = qsArr[elmts[i].name];
					break;
			}
		}
  },
  
  queryStringToArray: function(queryString) {
		var ret = new Array();
		var pairs = queryString.split("&");
		for (i in pairs)
		{
			var keyval = pairs[i].split("=");
			ret[ keyval[0] ] = keyval[1];
		}
		return ret;
  },
  
  arrayToQueryString: function(qsArr) {
		var ret = "";
		for (key in qsArr) {
			ret += key + "=" + qsArr[key] + "&";
		}
		if (ret.length > 0) ret = ret.substring(0, ret.length-1);
		return ret;
  },
  
  setValueQueryString: function(queryString, name, value) {
		var qsArr = this.queryStringToArray(queryString);
		if (qsArr[name])
			qsArr[name] = value;
		return arrayToQueryString(qsArr);
  },

  assignMultiSelectValues: function(elmt, values) {
		var valArr = values.split(",");
		for (var i=0; i<elmt.options.length; i++) {
			elmt.options[i].selected = false;
			for (var j=0; j<varArr.length; j++) {
				if (elmt.options[i].value == valArr[j])
					elmt.options[i].selected = true;
			}
		}
  },
  
  assignMultiCheckboxValues: function(elmt, values) {
		var valArr = values.split(",");
		elmt.checked = false;
		for(var i=0; i<valArr.length; i++) {
			if (elmt.value == valArr[i])
				elmt.checked = true;
		}
  },
  
  getPage: function(input, pageNum, pageSize) {
		if (pageNum > 0 && input.length > pageNum * pageSize)
			input = this.removeRange(input, 0, pageNum * pageSize);
		if (input.length > pageSize)
			input = this.removeRange(input, pageSize, input.length-pageSize);
		return input;
  },
  
  removeRange: function(arr, startIndex, count) {
		var newArr = new Array();
		var i;
		for(i=0; i<startIndex; i++) {
			newArr.push(arr[i]);
		}
		for(i=startIndex+count; i<arr.length; i++) {
			newArr.push(arr[i]);
		}
		return newArr;
  },
  
  makeCopy: function(input) {
		var newArr = new Array();
		for(var i=0; i<input.length; i++) {
			newArr[i] = input[i];
		}
		return newArr;
  }
  
}

var s_webutil = {

	checkAll: function(chk, elmt) {
		for(var i=0; i<elmt.length; i++) {
			elmt[i].checked = chk;
		}
	},

	addFav: function(title) {
		var url = location.href;
		if (window.sidebar) { // Mozilla Firefox Bookmark
			window.sidebar.addPanel(title, url,"");
		} else if( window.external ) { // IE Favorite
			window.external.AddFavorite( url, title);
		} else if(window.opera) { // Opera 7+
			return false; // do nothing - the rel="sidebar" should do the trick
		} else { // for Safari, Konq etc - browsers who do not support bookmarking scripts (that i could find anyway)
			 alert('Unfortunately, this browser does not support the requested action,'
			 + ' please bookmark this page manually.');
		}
	}
}

var s_dhtmlutil = {

	moveLayer: function(layer, destElmt, xOffSet, yOffSet) {
	  var cleft = 0;
	  var ctop = 0;
	  var obj = destElmt;
	  while (obj.offsetParent) {
	    cleft += obj.offsetLeft;
	    ctop += obj.offsetTop;
	    obj = obj.offsetParent;
	  }
	  cleft += destElmt.offsetWidth + xOffSet;
	  if (document.body.currentStyle && document.body.currentStyle['marginLeft']) {
	    cleft += parseInt(document.body.currentStyle['marginLeft']);
	  }
	  layer.css("left", cleft + 'px');
	  //layer.style.left = cleft + 'px';
	  ctop += destElmt.offsetHeight + yOffSet;
	  if (document.body.currentStyle && document.body.currentStyle['marginTop']) {
	    ctop += parseInt(document.body.currentStyle['marginTop']);
	  }
	  //layer.style.top = ctop + 'px';
	  layer.css("top", ctop + 'px');
	}
}