/*<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />*/
/**
* Returns DOM-node(s) by id(s)
* Example:
*   var obj = $('divMsg');
*   obj.innerHTML = 'Hello World!';
*
if (typeof($) == "undefined") { // prototype.js capability
	function $(obj) { // Strong Recommended
		if (typeof(obj) == "string") obj = document.getElementById(obj);
		return obj;
	}
}

**
* Returns array of DOM-nodes by tag name
* Example:
*   var objBody = $$('body')[0];
*
if (typeof($$) == "undefined") {
  function $$(tagName) {
    return document.getElementsByTagName(tagName);
  }
}
*/
/** 
* toggleBox all in one v1.1
* req obj, string or array of string (IDs of elements)
* optional boolShow, objArrowImg is interchangeable
*   toggleBox('divInfo');
*   toggleBox('myDiv','myArrowPic');
*   toggleBox('myDiv', false);
*   toggleBox('myDiv','myArrowPic',true);
*/
function toggleBox(obj, boolShow, objArrowImg) {
	if (typeof(obj.sort) == "undefined") {obj = new Array(obj); }
	for (var i = 0; i < obj.length; i++) {
		if (typeof(obj[i]) == "string") obj[i] = document.getElementById(obj[i]);
	}
	// image magic
	if (typeof(BASEURL) == "undefined") BASEURL = '';
	var show = img = false;

	img = typeof(boolShow) == "string" ? document.getElementById(boolShow) :
		typeof(boolShow) == "object" ? boolShow :
		typeof(objArrowImg) == "string" ? document.getElementById(objArrowImg) :
		typeof(objArrowImg) == "object" ? objArrowImg :
		false;
	for (i = 0; i < obj.length; i++) {
		show = typeof(boolShow) == "boolean" ? boolShow : typeof(objArrowImage) == "boolean" ? objArrowImg : (obj[i].style.display == "none");
		// show/hide
		if (show) {		
			obj[i].style.display = "";
			if (img && (i == 0)) img.src = BASEURL+"images/arrow_small_down.gif"; // ?
		} else {
			obj[i].style.display = "none";
			if (img && (i == 0)) img.src = BASEURL+"images/arrow_small_right.gif";
		}
	}
}
// force show
function showBox(obj, objArrowImg) {
	if (typeof(objArrowImg) == "boolean") 	//capability
		bShow = objArrowImg;
	else
		bShow = true;
	toggleBox(obj, bShow, objArrowImg);
}
//force hide
function hideBox(obj, objArrowImg) {
	toggleBox(obj, false, objArrowImg);
}

/**
 * Override window "onload" function
 * Example:
 *   addLoadEvent(myOnLoad);
 *   function myOnLoad() { alert("Page loaded!"); }
 */
function addLoadEvent(func) { // Strong recommended
  if (window.addEventListener) 
    window.addEventListener("load", func, false);
  else if (window.attachEvent) 
    window.attachEvent("onload", func);
  else window.onload = func;
}

/**
 * Checks all checkbox on form (exc. "allbox")
 */
function checkAll(form, name) {
  if (typeof(form) == "string") form = document.getElementById(form);
  for (var element = 0; element < form.elements.length; element++) {
    var checkbox = form.elements[element];
    if (checkbox.type == 'checkbox' && checkbox.name.substr(0, 6) != 'allbox' && (!name || (name && checkbox.name.substr(0, name.length) == name)))
	{
      checkbox.checked = !checkbox.checked;
    }
  }
}

/*-------------------- JavaScript includes functions -----------------------*/
/**
* Returns basepath for current script (dirname(__FILE__).'/');
*/
function getPath() {
  // Get last script element
  var objContainer = document.body;
  if (!objContainer) {
    objContainer = document.getElementsByTagName("head")[0];
    if (!objContainer)  objContainer = document;
  }
  var objScript = objContainer.lastChild;
  // Get path
  var path = "";
  var strSrc = objScript.getAttribute("src");
  if (strSrc) {
    var arrTokens = strSrc.split("/");
    // Remove last token
    arrTokens = arrTokens.slice(0, -1);
    if (arrTokens.length)
	  path = arrTokens.join("/") + "/";
  }
  return path;
}

/**
 * Simply writes script tag to the document. Checks if specified JS file is
 * already loaded unless boolForce argument is true.
 *
 * @param {string} strSrc Src attribute value of the script element
 * @param {boolean} boolForce Optional. Force reload if it is already loaded
 */
var isLoadedJS = [];
function include(strSrc, boolForce) { // Recommended
  // Check if it is already loaded
  if (!boolForce && isLoadedJS[strSrc]) {
    return;
  }
  // Include file
  document.write('<s' + 'cript type="text/javascript" src="' + strSrc +
   '"></s' + 'cript>');
  // Add this URL to the list of loaded
  isLoadedJS[strSrc] = true;
};

/**
 * Includes JS file into the page. Allows URLs from foreign domains.
 * Notice that script is loaded asynchronously.
 *
 * @param {string} strSrc Src attribute value of the script element
 * @param {boolean} boolForce Optional. Force reload if it is already loaded
 */
function includeJS(strSrc) {
  var objContainer = document.body;
  if (!objContainer) {
    objContainer = document.getElementsByTagName('head')[0];
    if (!objContainer) {
      objContainer = document;
    }
  }
  var objScript = document.createElement('script');
  objScript.type = 'text/javascript';
  objScript.src = strSrc;
  // It's important for Safari to assign attributes before appending
  objContainer.appendChild(objScript);
  isLoadedJS[strSrc] = true;
};

/**
 * Includes CSS file into the page. Allows URLs from foreign domains.
 *
 * @param {string} strHref Href attribute value of the link element
 */
function includeCSS(strHref) {
  // May appear only inside head
  var objContainer = document.getElementsByTagName('head')[0];
  if (!objContainer) {
    return;
  }
  var objLink = document.createElement('link');
  objLink.setAttribute('rel', 'stylesheet');
  objLink.setAttribute('type', 'text/css');
  objLink.setAttribute('href', strHref);
  objContainer.appendChild(objLink);
}

/*---------------- Window functions ----------------*/
// v2.0 Refresh window, ex. refreshWin();
function refreshWin(win) {
  if (typeof(win) == "undefined") win = window;
  var url = win.location.href;
  var hash_pos = url.indexOf("#");
  if (hash_pos > 0) url = url.substring(0, hash_pos);
  win.location.href = url;
}

// Go to URL, ex. redirect('http://www.google.com');
function redirect(url) {
  document.location.href = url;
}

// Open popup window, ex. openWin("index2.html");
var popUpWin=0;
function openWin(URLStr, width, height) {
  if (popUpWin) {
    if(!popUpWin.closed) popUpWin.close();
  }
  width = (typeof(width) == "undefined") ? 400 : width;
  height = (typeof(height) == "undefined") ? 300 : height;
  x = Math.round((screen.width - width)/2);
  y = Math.round((screen.height - height)/2);
  popUpWin = window.open(URLStr, 'popUpWin', 'toolbar=no,status=no,menubar=no,scrollbars=no,copyhistory=yes,width='+width+',height='+height+',left='+x+',top='+y);
  popUpWin.focus();
  return popUpWin;
}
// Open closed by click, autosized image-window, ex. openImageWin("logo.gif");
var popUpImageWin = 0;
function openImageWin(ImageURL) {
  if (popUpImageWin) {
    if(!popUpImageWin.closed) popUpImageWin.close();
  }
  x = Math.round((screen.width - 400)/2);
  y = Math.round((screen.height - 300)/2);
  w = popUpImageWin = window.open('', 'popUpImageWin', 'toolbar=no,status=no,menubar=no,scrollbars=no,copyhistory=yes,width='+400+',height='+300+',left='+x+',top='+y);
  w.document.writeln('<html><body  leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">');
  w.document.writeln('<scr'+'ipt>');
  w.document.writeln('function resizeWin(w, h) {');
  w.document.writeln('  w += 80; h +=60;');
  w.document.writeln('  window.resizeTo(w,h);');
  w.document.writeln('  x = Math.round((screen.width - w)/2);');
  w.document.writeln('  y = Math.round((screen.height - h)/2);');
  w.document.writeln('  window.moveTo(x>0 ? x : 0, y > 0 ? y : 0);');
  w.document.writeln('}');
  w.document.writeln('</scr'+'ipt>');
  w.document.writeln('<center><img src="'+ImageURL+'" onclick="window.close();" onload="resizeWin(this.width,this.height)" alt="Click to close"/></center>');
  w.document.writeln('</body></html>');
  w.document.close();
  w.focus();
}
// Prompt popup, IE7 fix
var popUpPromptWin = 0;
function openPromptWin(caption,text,callback) {
  if (popUpPromptWin) {
    if(!popUpPromptWin.closed) popUpPromptWin.close();
  }
  x = Math.round((screen.width - 300)/2);
  y = Math.round((screen.height - 150)/2);
  var win = popUpPromptWin = window.open('about:blank', 'popUpPromptWin', 'toolbar=no,status=no,menubar=no,scrollbars=no,copyhistory=yes,width='+300+',height='+150+',left='+x+',top='+y);
  var doc = win.document;
  doc.writeln('<html>');
  doc.writeln('<meta><title>'+caption+'</title></meta>');
  doc.writeln('<body bgcolor="#DFDCD2"  leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onload="javascript: focusTextBox();">');
  doc.writeln('<div style="margin-top: 30px; text-align: center">');
  doc.writeln('<form name="frmPrompt" onsubmit="returnPromptText()">');
  doc.writeln(caption+'<br/>');
  doc.writeln('<input type="text" name="promptText" value="'+text+'" style="width: 250px; margin-bottom: 6px" tabindex="0"/><br/>');
  doc.writeln('<input type="button" value=" OK " onclick="returnPromptText();" />');
  doc.writeln('<input type="button" value=" Cancel " onclick="window.opener.'+callback+'(null); window.close();" />');
  doc.writeln('</form>');
  doc.writeln('<sc'+'ript language="javascript" type="text/javascript">');
  doc.writeln('<!--');
  doc.writeln('function focusTextBox() {');
  doc.writeln('  document.forms[\'frmPrompt\'].elements[\'promptText\'].focus();');
  doc.writeln('}');
  doc.writeln('function returnPromptText() {');
  doc.writeln('  window.opener.'+callback+'(document.forms[\'frmPrompt\'].elements[\'promptText\'].value);');
  doc.writeln('  window.opener.focus();');
  doc.writeln('  window.close();');
  doc.writeln('}');
  doc.writeln('-->');
  doc.writeln('</script>');
  doc.writeln('</div>');
  doc.writeln('</body></html>');
  doc.close();
  win.focus();
}


/*--------------- Read/Write Cookies ----------------*/
// writeCookie(name,value,hours) - save parameter on hours - Lifetime of Cookie
function writeCookie(name, value, hours) {
  var expire = "";
  if(hours != null) {
    expire = new Date((new Date()).getTime() + hours * 3600000);
    expire = "; expires=" + expire.toGMTString();
  }
  document.cookie = name + "=" + escape(value) + expire;
}

// readCookie(name) - read from parameter from Cookies
function readCookie(name) {
  var cookieValue = "";
  var search = name + "=";
  if(document.cookie.length > 0) { 
    offset = document.cookie.indexOf(search);
    if (offset != -1) {
      offset += search.length;
      end = document.cookie.indexOf(";", offset);
      if (end == -1) end = document.cookie.length;
      cookieValue = unescape(document.cookie.substring(offset, end))
    }
  }
  return cookieValue;
}
//----- UTIL
/**
* Returns element visual info
*/
function getSizePos(id) {
	var el = document.getElementById(id);
	var p = getAbsolutePos(el); // see below
	return {
		x: p.x,
		y: p.y,
		w: el.offsetWidth,
		h: el.offsetHeight
	};
}
function getAbsolutePos(el, scrollOff) {
	if (typeof(el) == "string") el = document.getElementById(el);
	var SL = 0, ST = 0;
	if (!scrollOff) {
		var is_div = /^div$/i.test(el.tagName);
		if (is_div && el.scrollLeft)
			SL = el.scrollLeft;
		if (is_div && el.scrollTop)
			ST = el.scrollTop;
	}
	var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
	if (el.offsetParent) {
		var tmp = getAbsolutePos(el.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
};
function moveToCenter(obj) {
	if (typeof(obj) == "string") {
		obj = document.getElementById(obj);
	}
	var old_disp = obj.style.display;
	obj.style.display = "";
	var size = getWindowSize(); // window size
	var br = getPageScroll(); //scrolling
	var newX = Math.round((size.width - obj.offsetWidth) / 2) + br.x; 
	var newY = Math.round((size.height - obj.offsetHeight) / 2) + br.y;
	if (newX < 0) newX = 0;
	if (newY < 0) newY = 0;
	obj.style.position = "absolute";
	// alert("W:"+winW+' x '+winH+" C: "+w+' x '+h + " NEW: x="+newX+' y='+newY);
	obj.style.left =  newX + 'px';
	obj.style.top =  newY + 'px';
	obj.style.display = old_disp;
	// Fix
	var copy = obj.cloneNode(true);
	obj.parentNode.removeChild(obj);
	document.body.appendChild(copy);
}
function getWindowSize() {
	var iWidth = 0;
	var iHeight = 0;

	if (document.compatMode && document.compatMode == 'CSS1Compat') {
	    // Standards-compliant mode
		if (window.opera) {
			iWidth = document.body.clientWidth || 0;
			iHeight = document.body.clientHeight || 0;
		} else {
			iWidth = document.documentElement.clientWidth || 0;
			iHeight = document.documentElement.clientHeight || 0;
		}
	} else {
	    // Non standards-compliant mode
		iWidth = window.innerWidth || document.body.clientWidth ||
			document.documentElement.clientWidth || 0;
		iHeight = window.innerHeight || document.body.clientHeight ||
			document.documentElement.clientHeight || 0;
	}

	return {
		width: iWidth,
		height: iHeight
	};
};
function getPageScroll() {
	var s = {};
	s.y = window.pageYOffset ||
			document.documentElement.scrollTop ||
			(document.body ? document.body.scrollTop : 0) ||
			0;
	s.x = window.pageXOffset ||
			document.documentElement.scrollLeft ||
			(document.body ? document.body.scrollLeft : 0) ||
			0;
	return s;
};
//Example: preloadImages(['file.gif', 'http://www.x.com/y.gif']);
function preloadImages( srcArray ) {
  if(document.images) {
    if(!document.imageArray) document.imageArray = new Array();
    var i,j = document.imageArray.length, args = (typeof(srcArray) == "string") ? [srcArray] : srcArray;
    for(i=0; i<args.length; i++) {
      if (args[i].indexOf("#")!=0) {
        document.imageArray[j] = new Image;
        document.imageArray[j++].src = args[i];
      }
    }
  }
}
// Example: <input type="text" name="first_name" onkeypress="gotoNext(event, 'last_name');" />
function gotoNext(e, next_control) {
	if (window.Event) var whichCode = e.which; // NS?
	else if (e.type == "keypress") var whichCode = e.keyCode;

	if (whichCode == 13) {
		if (typeof(next_control) != 'undefined') {
			if (typeof next_control == 'string') next_control = document.getElementById(next_control);
			if (next_control.enabled) next_control.focus();
		}
		return false;
	}
}
/***********************************************
* Disable "Enter" key in Form script- By Nurul Fadilah(nurul@REMOVETHISvolmedia.com)
* This notice must stay intact for use
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/
function handleEnter (field, event) {
	var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	if (keyCode == 13) {
		var i;
		for (i = 0; i < field.form.elements.length; i++) {
			if (field == field.form.elements[i]) {
				break;
			}
		}
		i = (i + 1) % field.form.elements.length;
		field.form.elements[i].focus();
		return false;
	} else {
		return true;
	}
}
// Insert text to input box or textarea
// Example: <textarea id="message">Test</textarea><input type="button" value="Insert date" onclick="insertText('message', '1 oct 2008', true);" />
function insertText(id, text, spaces) {
	if (spaces) text = ' ' + text + ' ';
	// fix for wysiwyg
	if (typeof(TinyMCE) != 'undefined' && tinyMCE.getInstanceById(id)) {
		tinyMCE.execInstanceCommand(id, 'mceInsertContent', false, text);
		return;
	}
	el = document.getElementById(id);
	// IE
	if (el.createTextRange) {
		el.focus();
		document.selection.createRange().duplicate().text = text;
	// FF and Opera
	} else if ((typeof el.selectionStart) != "undefined") {
		var selEnd = el.selectionEnd;
		var txtLen = el.value.length;
		var txtBefore = el.value.substring(0,selEnd);
		var txtAfter =  el.value.substring(selEnd, txtLen);
		var oldScrollTop = el.scrollTop;
		el.value = txtBefore + text + txtAfter;
		el.selectionStart = txtBefore.length + text.length;
		el.selectionEnd = txtBefore.length + text.length;
		el.scrollTop = oldScrollTop;
		el.focus();
	} else {
		el.value += text;
		el.focus();
	}
}
// Wrap selected text in input box or textarea
// Example: <textarea id="message">Test</textarea><input type="button" value="Bold" onclick="wrapText('message','[b]',[/b]);" />
function wrapText(id, wrap1, wrap2) {
	el = document.getElementById(id);
	if (typeof(wrap2) == "undefined") wrap2 = wrap1;
	el.focus();
	// IE 
	if (document.selection) {
		var oRange = document.selection.createRange();
		oRange.text = wrap1 + oRange.text + wrap2;
		return false;
	// FF and Opera
	} else if (el.setSelectionRange) {
		var selStart = el.selectionStart, selEnd = el.selectionEnd;
		var oldScrollTop = element.scrollTop;
		el.value = el.value.substring(0, selStart) + wrap1 + el.value.substring(selStart, selEnd) + wrap2 + el.value.substring(selEnd);
		el.setSelectionRange(selStart + wrap1.length, selEnd + wrap2.length);
		el.scrollTop = oldScrollTop;      
		el.focus();
	} else {
		var oldScrollTop = el.scrollTop;
		el.value += wrap1 + wrap2;
		el.scrollTop = oldScrollTop;
		el.focus();
	}
}
// php analog
function urlencode(s) {
	return encodeURIComponent(s);
}
// Make Alias
function makeAlias(ffrom, fto, strong) {
	if (typeof(ffrom) == "undefined") ffrom = "title";
	if (typeof(fto) == "undefined") fto = "alias";
	var s = document.getElementById(ffrom).value.toLowerCase();
	var t_in = [' ','а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п',
		'р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я'];
	var t_out = ['_','a','b','v','g','d','e','e','j','z','i','j','k','l','m','n','o','p',
		'r','s','t','u','f','h','z','ch','sh','sh','','y','','e','yu','ya'];
	var s2 = '';
	for (var i = 0; i < s.length; i++) {
		var ch = '';
		for (var j = 0; j<t_in.length; j++) {
			if (s.charAt(i) == t_in[j]) {
				ch = t_out[j];
			}
		}
		if (ch != '') s2 +=ch;
		else s2 += s.charAt(i);	
	}
	if (strong) {
		s2 = s2.replace(/[^a-zA-Z0-9\_]+/g, '');
	} else {
		s2 = s2.replace(/[^a-zA-Z0-9\-\_\,\.\/\~]+/g, '');
	}
	document.getElementById(fto).value = s2;
}