function sprintf() {
   if (!arguments || arguments.length < 1 || !RegExp) {
      return;
   }
   
   var str = arguments[0];
   var re = /([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X)(.*)/;
   var a = b = [], numSubstitutions = 0, numMatches = 0;
   while (a = re.exec(str))
   {
      var leftpart = a[1], pPad = a[2], pJustify = a[3], pMinLength = a[4];
      var pPrecision = a[5], pType = a[6], rightPart = a[7];

      numMatches++;
      if (pType == '%')
      {
         subst = '%';
      }
      else
      {
         numSubstitutions++;
         if (numSubstitutions >= arguments.length)
         {
            alert('Error! Not enough function arguments (' + (arguments.length - 1)
               + ', excluding the string)\n'
               + 'for the number of substitution parameters in string ('
               + numSubstitutions + ' so far).');
         }
         var param = arguments[numSubstitutions];
         var pad = '';
                if (pPad && pPad.substr(0,1) == "'") pad = leftpart.substr(1,1);
           else if (pPad) pad = pPad;
         var justifyRight = true;
                if (pJustify && pJustify === "-") justifyRight = false;
         var minLength = -1;
                if (pMinLength) minLength = parseInt(pMinLength);
         var precision = -1;
                if (pPrecision && pType == 'f')
                   precision = parseInt(pPrecision.substring(1));
         var subst = param;
         switch (pType)
         {
         case 'b':
            subst = parseInt(param).toString(2);
            break;
         case 'c':
            subst = String.fromCharCode(parseInt(param));
            break;
         case 'd':
            subst = parseInt(param) ? parseInt(param) : 0;
            break;
         case 'u':
            subst = Math.abs(param);
            break;
         case 'f':
            subst = (precision > -1)
             ? Math.round(parseFloat(param) * Math.pow(10, precision))
              / Math.pow(10, precision)
             : parseFloat(param);
            break;
         case 'o':
            subst = parseInt(param).toString(8);
            break;
         case 's':
            subst = param;
            break;
         case 'x':
            subst = ('' + parseInt(param).toString(16)).toLowerCase();
            break;
         case 'X':
            subst = ('' + parseInt(param).toString(16)).toUpperCase();
            break;
         }
         var padLeft = minLength - subst.toString().length;
         if (padLeft > 0)
         {
            var arrTmp = new Array(padLeft+1);
            var padding = arrTmp.join(pad?pad:" ");
         }
         else
         {
            var padding = "";
         }
      }
      str = leftpart + padding + subst + rightPart;
   }
   return str;
}

var req_a2ql = new Subsys_JsHttpRequest_Js();
function add2qlist(clip_id) {
    req_a2ql.caching = false;
    req_a2ql.open('POST', "ajax_utils.php?act=add2qlist&<?=$sess_id_str;?>", true);
    req_a2ql.send({clip_id: clip_id});
}

var req_delqli = new Subsys_JsHttpRequest_Js();
function delqli(clip_id) {
    req_delqli.caching = false;
    req_delqli.open('POST', "ajax_utils.php?act=delqli&<?=$sess_id_str;?>", true);
    req_delqli.send({clip_id: clip_id});
}

function clearFL(str) {
	reg = /^ | $/;
	while (reg.test(str)) {
		str = str.replace(reg, "");
	}

	reg = /\'|\"/;
	while (reg.test(str)) {
		str = str.replace(reg, "`");
	}
	return str;
}

function Preloader() {
	this.pre = '<div id="div_preloader"><img id="img_loading" src="http://void.clip4e.com/img/preloader.gif" border="0"></div>';
	
	this.show = function(elm) {
		if (elm.id == "") {
			elm.id = "tmp" + new Date().getTime();
		}
		element = $('#' + elm.id);
		element.after(this.pre);
		element.hide();
	}
	
	this.hide = function() {
		$('#div_preloader').remove();
	}
}
var preloader = new Preloader();