
function str_repeat(i, m) { for (var o = []; m > 0; o[--m] = i); return(o.join('')); }

function sprintf () {
  var i = 0, a, f = arguments[i++], o = [], m, p, c, x;
  while (f) {
    if (m = /^[^\x25]+/.exec(f)) o.push(m[0]);
    else if (m = /^\x25{2}/.exec(f)) o.push('%');
    else if (m = /^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(f)) {
      if (((a = arguments[m[1] || i++]) == null) || (a == undefined)) throw("Too few arguments.");
      if (/[^s]/.test(m[7]) && (typeof(a) != 'number'))
        throw("Expecting number but found " + typeof(a));
      switch (m[7]) {
        case 'b': a = a.toString(2); break;
        case 'c': a = String.fromCharCode(a); break;
        case 'd': a = parseInt(a); break;
        case 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break;
        case 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break;
        case 'o': a = a.toString(8); break;
        case 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break;
        case 'u': a = Math.abs(a); break;
        case 'x': a = a.toString(16); break;
        case 'X': a = a.toString(16).toUpperCase(); break;
      }
      a = (/[def]/.test(m[7]) && m[2] && a > 0 ? '+' + a : a);
      c = m[3] ? m[3] == '0' ? '0' : m[3].charAt(1) : ' ';
      x = m[5] - String(a).length;
      p = m[5] ? str_repeat(c, x) : '';
      o.push(m[4] ? a + p : p + a);
    }
    else throw ("Huh ?!");
    f = f.substring(m[0].length);
  }
  return o.join('');
}


function open_window(target, width, height){

	var win_top = (screen.availHeight - height) / 2;
	var win_left = (screen.availWidth - width) / 2;
	newwin=window.open("", target, "width=" + width + ", height=" + height + ", menubar=no, location=no, resizable=yes, scrollbars=yes, status=yes, left=" + win_left + ", top=" + win_top);
	return newwin;
}


function change_radio(name, value){
	var els = document.getElementsByName(name);
	for(var i=0; i< els.length; i++){
		var l = document.getElementById(name + "_spanlabel_" + els[i].value);
		l.className = l.className.replace(' checked', '');
		if (els[i].value == value)
		{
			l.className += ' checked';
		}
	}
	document.getElementById(name + "_radio_" + value).checked = true;
}

function change_radio_hover(el, type){

	el.className = el.className.replace(/\sactive/, '');

	if (type == 1){
		el.className += " active";
	}
}

opera=(navigator.userAgent.indexOf('Opera') != -1)?true:false;
dom=(document.getElementById)?true:false;
ie4=(document.all && !dom && !opera)?true:false;
nn4=(document.layers)?true:false;
dynamic=(dom || ie4 || nn4)?true:false;

function show_hidden(id) {
	var div="hd_" + id;
	if (dynamic) {
		if((dom && document.getElementById(div).style.display=="none") || (ie4 && document.all[div].style.display=="none") || (nn4 && document.layer[div].display=="none")) {
			if(dom) {
				document.getElementById(div).style.display="";
			} else if(ie4) {
				document.all[div].style.display="";
			} else if(nn4) {
				document.layer[div].display="";
			}
		} else {
			if(dom) {
				document.getElementById(div).style.display="none";
			} else if(ie4) {
				document.all[div].style.display="none";
			} else if(nn4) {
				document.layer[div].display="none";
			}
		}
	}
}


function getStyle(div){
	if(dom) {
		return document.getElementById(div).style;
	} else if(ie4) {
		return document.all[div].style;
	} else if(nn4) {
		return document.layer[div];
	}
}
 

function hide_div(element_id){
	var div=element_id;
	if (dynamic) {
		style = getStyle(div);
		style.display = "none";
	}
}

function show_div(element_id){
	var div=element_id;
	if (dynamic) {
		style = getStyle(div);
		style.display = "";
	}
}


function count_length(el) {
	
	var len = el.value.length;

	counter = document.getElementById(el.name + "_counter");
	counter.innerHTML = len;

	maxlength = el.getAttribute('maxlength');
	minlength = el.getAttribute('minlength');

	if (maxlength && maxlength > 0 && len > maxlength)
	{
		counter.style.color = "red";
	} else if (minlength && minlength > 0 && len < minlength)
	{
		counter.style.color = "orange";
	} else {
		counter.style.color = "";
	}
}


function e(el_id){
	return document.getElementById(el_id);
}


function change_open_cat(fieldName, parentNum){

	catBlock = $("#rubrik_" + fieldName + "_" + parentNum);
	cat = $("#rubrik_" + fieldName + "_" + parentNum + "_catdiv");

	if (catBlock.css('display') == 'none'){
		cat.addClass(cat.attr('openedClass'));
		catBlock.show();
	} else {
		cat.removeClass(cat.attr('openedClass'));
		catBlock.hide();
	}
}

function choose_label(input_id, doOpenCat, changeCheck){

	input = $('#' + input_id);

	isChecked = input.attr('checked');
	if (changeCheck){
		isChecked = isChecked ? false : true;
		input.attr('checked', isChecked);
	}

	var disabled = input.attr('disabled');
	if (disabled){
		return false;
	}



	var fieldName = input.attr('fieldName');
	var parentNum = input.attr('parentNum');
	var value = input.attr('valueNum');

	lbl = $('#' + fieldName  + "_label" + value);
	lbl.toggleClass(lbl.attr('chooseClass'), isChecked ? true : false);

	if (parentNum){
		// Открываем рубрику

		cat = $("#rubrik_" + fieldName + "_" + parentNum + "_catdiv");

		child_nums=cat.attr('child_nums');
		if (child_nums == null) child_nums = 0;

		if (isChecked){
			if (child_nums == 0) {
				if (doOpenCat) change_open_cat(fieldName, parentNum);
				cat.addClass(cat.attr('choosedClass'));
			}
			child_nums++;
		} else {
			child_nums--;
			if (child_nums < 0) child_nums = 0;
			if (child_nums == 0) cat.removeClass(cat.attr('choosedClass'));
		}
		cat.attr('child_nums', child_nums);
	}

	var content = $("#rubrik_" + fieldName + "_choosed");
	if (!content.length) return;
	
	if (isChecked){
		// Добавляем выделенную рубрику
		var choosedContent = "<li id='rubrik_" + fieldName + "_choosed_" + value + "' class='catChoosedDiv'>";
		if (parentNum){
			choosedContent +=  "<span>" +  $("#rubrik_" + fieldName + "_" + parentNum + "_catdiv a").html() + "</span> / ";
		}
		choosedContent += $("#" + fieldName + "_lblText" + value).html();
		choosedContent += " <a href='#' onclick=\"choose_label('" + input_id + "', 0, 1); return false;\">&times;</a></li>";


		if (!content.html()){
			content.show();
		}

		$("#rubrik_" + fieldName + "_choosed").append(choosedContent);
	} else {
		$("#rubrik_" + fieldName + "_choosed_" + value).remove();
		if (!content.html()){
			content.hide();
		}
	}

	if (!doOpenCat) check_cat_disabled(fieldName);

}

function check_cat_disabled(fieldName){

	var rubrik = $("#rubrik_" +  fieldName + "_int");
	var maxCount = rubrik.attr('maxCount');
	var inputDisabled = rubrik.attr('inputDisabled');

	if (maxCount){
		maxCount = parseInt(maxCount);
		var counter=rubrik.find('input:checked').length;
		
		if (counter >= maxCount && !inputDisabled){
			rubrik.find('input:not(:checked)').attr('disabled', true);
			rubrik.attr('inputDisabled', 1);
		} else if (counter < maxCount && inputDisabled){
			rubrik.find('input:not(:checked)').attr('disabled', false);
			rubrik.removeAttr('inputDisabled');
		}

	}
}

function increase_multiple(id, el) {
	var r = e(id).style; 
	if (r.height != 'auto') {
		el.innerHTML = 'свернуть';
		r.height = 'auto';
	} else {
		el.innerHTML = 'развернуть';
		r.height = '200px';
	}
}