403Webshell
Server IP : 209.209.40.120  /  Your IP : 216.73.217.112
Web Server : Microsoft-IIS/10.0
System : Windows NT NEWWWW 10.0 build 17763 (Windows Server 2019) i586
User : NEWWWW$ ( 0)
PHP Version : 8.3.30
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  C:/HostingSpaces/admin/chatme24.com/wwwroot/update/update-chameleon-4.6-4.7/_server/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : C:/HostingSpaces/admin/chatme24.com/wwwroot/update/update-chameleon-4.6-4.7/_server/lib.js
var MSG_MAX_LENGTH			= '%1 may only be a maximum of %2 characters long.';
var MSG_MIN_LENGTH			= '%1 must be a minimum of %2 characters long.';
var MSG_REQ_FIELD           = '%1 is a required field.';
var MSG_INVALID_EMAIL       = 'Invalid email address: %1';
var MSG_REQUIRED_SELECT		= 'Please select a value for %1.';
var MSG_ALPHA_NUMERIC		= '%1 may only contain alphanumeric characters.';
var MSG_NUMERIC             = '%1 may only contain numeric characters!';
var MSG_TWO_FIELDS			= '%1 and %2 must be the same.';
var MSG_NOT_TWO_FIELDS      = '%1 and %2 may not have the same value.';
var MSG_INVALID_LOGIN       = '%1 can not contain #, &, \', \\, / or " !';
var isMobileBrowser=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
var h_chat = 388;
var w_chat = 317;
var h_chat_offset = 34;
var siteTopOffset = 0;
var widgetParamsInit = [2, 7, 84];
var cacheElement={};

if (window.jQuery) {
var $win=$(window), $doc=$(document);
}

// Fix console issue in old IE versions.
if (!window.console) console = { log: function(){}, error: function(){} };

var jqTransformDaySelect = false;

var widgetStatus = {};

function validateMaxLength(field, name, maxLength) {
	var value = field.value;
	var originalVal = value;	//store a copy with the \n's in it
	var newVal = "";	//new value with any extra characters removed from it so as not to go over maxLength
	var character = null;
	value = value.replace(/\n/g,'**'); // bug #4830 when the javascript validates it sees \n's and java validates it sees \r\n's so a string may pass javascript validation but fail java validation, solution validate on a copy of the string with all \n's replaced with 2 characters to simulate the java length

	if (value.length > maxLength)
	{
		//loop through the string getting one character at a time.
		//If we encounter a \n we have to count it as 2 characters due to bug #4830
		for(var i=0, count=1; count<=maxLength; i++, count++){
				character = originalVal.charAt(i);

				//if this is a new line char make sure we have 2 spaces available in the new string
				if(character == "\n" && count<=maxLength-1){
					newVal = newVal.concat(character);
					count++;
				}else{
					newVal = newVal.concat(character);
				}
		}

		var msg = MSG_MAX_LENGTH.replace('%1', name);
		msg = msg.replace('%2', maxLength);
		alert(msg);
		try{
			//substitute in the shortened string into the field.
			field.value = newVal;
			field.focus();
		}catch(e){}
		return false;
	}
	return true;
}
function validateMinLength(field, name, minLength) {
	if (field.value.length < minLength) {
		var msg = MSG_MIN_LENGTH.replace('%1', name);
		msg = msg.replace('%2', minLength);
		alert(msg);
		try{field.focus();}catch(e){}
		return false;
	}
	else {
		return true;
	}
}
function nonEmptyDependency(field1, field1Name, field2, field2Name, message) {
	if(!isEmpty(field1) && isEmpty(field2)){
		alert(message);
		return false;
	}else{
		return true;
	}
}
function validateRequiredField(field, name, dv, no_msg) {
	try
	{
        if(typeof(field.val()) == 'string') {
            field.value = field.val();
        }
		field.value = trim(field.value);
		dv = trim(dv);
	}
	catch(e) {}

	if (field.value.length == 0 || trim(field.value) == '' || field.value == dv)
	{
        no_msg = no_msg || false;
		if(no_msg==true) alertCustom(name);
		else alertCustom(MSG_REQ_FIELD.replace('%1', name));
		try{field.focus();}catch(e){}
		return false;
	}
	return true;
}
function validateEmailField(emailField, name) {
	if (isEmpty(emailField)) return true;
	if (!checkEmail(emailField.value)) {
		alert(MSG_INVALID_EMAIL.replace('%1', emailField.value));
		try{emailField.focus();}catch(e){}
		return false;
	}
	return true;
}
function validateRequiredCheckbox(field, name, msg) {
	if (!isCheckBoxChecked(field)) {
		alert(msg.replace('%1', name));
		try{field.focus();}catch(e){}
		return false;
	}
	return true;
}
function validateRequiredSelect(field, name, defaultValue) {
	if (field.value == null || field.value == '' || field.value == defaultValue) {
		alert(MSG_REQUIRED_SELECT.replace('%1', name).replace('&#39;', "'"));
		try{field.focus();}catch(e){}
		return false;
	}
	else {
		return true;
	}
}
function validateTwoFields(field,name,field2,name2) {
	if (field.value != field2.value){
		var msg = MSG_TWO_FIELDS.replace('%1', name);
		msg = msg.replace('%2', name2);
		alert(msg);
		try{field.focus();}catch(e){}
		return false;
	}
	return true;
}
function validateNotTwoFields(field,name,field2,name2) {
	if (field.value == field2.value){
		var msg = MSG_NOT_TWO_FIELDS.replace('%1', name);
		msg = msg.replace('%2', name2);
		alert(msg);
		try{field.focus();}catch(e){}
		return false;
	}
	return true;
}
function validateAlphaNumeric(field, name) {
	var mask = /^[_0-9a-zA-Z-\.]*[_0-9a-zA-Z-\.]$/
	if (!mask.test(field.value)) {
		alert(MSG_ALPHA_NUMERIC.replace('%1', name));
		try{field.focus();}catch(e){}
		return false;
	}
	return true;
}

function validateAlphaNumericSpace(field, name) {
	var mask = /^[ _0-9a-zA-Z-\.]*[ _0-9a-zA-Z-\.]$/
	if (!mask.test(field.value)) {
		alert(MSG_ALPHA_NUMERIC.replace('%1', name));
		try{field.focus();}catch(e){}
		return false;
	}
	return true;
}

function validateAlphaNumeric_search(field, name) {
	var mask = /^[_0-9a-zA-Z-\.\s]*[_0-9a-zA-Z-\.\s]$/
	if (!mask.test(field.value)) {
		alert(MSG_ALPHA_NUMERIC.replace('%1', name));
		try{field.focus();}catch(e){}
		return false;
	}
	return true;
}

function validateNumeric(field, name) {
	var val = trim(field.value);
	field.value = val;
	var mask = /^-?[0-9]*(\.)?[0-9]*$/
	if (!mask.test(val)) {
		alert(MSG_NUMERIC.replace('%1', name));
		try{field.focus();}catch(e){}
		return false;
	}
	return true;
}

function validateUserName(field, name, minLength, maxLength) {

    if (!(validateRequiredField(field, name))) {
        return false;
    }
    if (/#|&|'|"|\\|\//.test(field.value)) {
        alert(MSG_INVALID_LOGIN.replace('%1', name));
        try{field.focus();}catch(e){}
        return false;
    }
    if (!(validateMinLength(field, name, minLength))) {
        return false;
    }
    if (!(validateMaxLength(field, name, maxLength))) {
        return false;
    }
    return true;
}

function isEmpty(field) {
	if (field.disabled){return true;}

	if (field.type=='checkbox'||(field[0]&&field[0].type == 'checkbox')) {
		return !isCheckBoxChecked(field);
	}
	if (field.type=='radio'||(field[0]&&field[0].type == 'radio')) {
		return !isCheckBoxChecked(field);
	}
	//Try trim - will fail for input type="file".
	try
	{
		field.value = trim(field.value);
	}
	catch(e) {}
	if (field.value.length == 0) {
		return true;
	}
}
function isCheckBoxChecked(field) {
	if (field[0]) {
		for (i = 0;i<field.length;i++) {
			if (field[i].checked) return true
		}
	}
	return field.checked||false
}
function setFocus(form,field) {
	if (form != '') {
		try	{document.forms[form][field].focus();} catch(e) {}
	}
	else {
		try	{document.forms[0][field].focus();} catch(e) {}
	}
}
function giveFocus(frm, elm) {
  eval("document."+frm+"."+elm+".focus()");
}
function winpop(loc,w,h,scroll) {
	var name = loc.replace(/\W/g, "");
	window.open(loc,name,'width='+w+', height='+h+', location=no, directories=no, menubar=no, scrollbars='+scroll+', resizable=no, status=no, toolbar=no');
}
function getById(id) {return $('#'+id)[0]}
var getRefToDiv=getById;
function div_show(id) {$('#'+id).show()}
function div_hide(id) {$('#'+id).hide()}

function switchdiv(div1_id, div2_id, form) {
	form[div1_id].value=$('#'+div1_id).toggle().is(':visible')
	form[div2_id].value=$('#'+div2_id).toggle().is(':visible')
}
function characterCounter(fieldName, maxLength, elementName) {
	var field = getById(fieldName);
	var value = field.value.replace(/\n/g,'**'); // bug #4830 when the javascript validates it sees \n's and java validates it sees \r\n's so a string may pass javascript validation but fail java validation, solution validate on a copy of the string with all \n's replaced with 2 characters to simulate the java length
	getById(elementName).innerHTML = value.length;
}
function trim(str) {
	str = new String(str);
	return str.replace(/^\s+/,'').replace(/\s+$/,'');
}
function submitForm(form, action) {
	form.action = action;
	form.submit();
}
function addOnload(f) {
	$(window).load(f)
}
function checkEmail(emailStr) {
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]!%";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

	var matchArray=emailStr.match(emailPat);

	if (matchArray==null) {
		return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];
	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i)>127) {
			return false;
		}
	}
	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			return false;
		}
	}
	if (user.match(userPat)==null) {
		return false;
	}

	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				return false;
			}
		}
		return true;
	}

	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
		if (domArr[i].search(atomPat)==-1) {
			return false;
		}
	}
	if (domArr[len-1].length < 2) {
		return false;
	}
	if (len<2) {
		return false;
	}
	/*mask=/^(root|abuse|webmaster|help|postmaster|sales|resumes|contact|advertising|spam|spamtrap|nospam|noc|admin|support|daemon|listserve|listserver|autoreply)@/i;
	if (mask.test(emailStr.toLowerCase())) {
		return false;
	}*/

	return true;
}
function modFixSelect(element)
{

}
function updateDay(change,formName,yearName,monthName,dayName,fnRefresh,firstValue)
{
	var form = document.forms[formName];
	var yearSelect = form[yearName];
	var monthSelect = form[monthName];
	var daySelect = form[dayName];
	var year = yearSelect[yearSelect.selectedIndex].value*1;
	var month = monthSelect[monthSelect.selectedIndex].value*1;
	var day = daySelect[daySelect.selectedIndex].value*1;

    if(!year&&!month){
        return;
    }

	if (change == 'month' || (change == 'year' && month == 2))
	{
        var i = 31;
        var flag = true;
        while(flag)
        {
            var date = new Date(year,month-1,i);
            if (date.getMonth() == month - 1)
            {
                flag = false;
            }
            else
            {
                i = i - 1;
            }
        }
        daySelect.length = 0;
        daySelect.length = i;
        var j = 0;
        var isUnload = typeof daySelect.unload;
        if ( isUnload == 'function'){
            daySelect.unload();
        }

        if (firstValue) {
            daySelect[0] = new Option(firstValue,0);
            while(j < i){
                daySelect[j+1] = new Option(j+1,j+1);
                j = j + 1;
            }

        } else {
            while(j < i){
                daySelect[j] = new Option(j+1,j+1);
                j = j + 1;
            }
        }

        if (day <= i){
            if (firstValue) {
                daySelect.selectedIndex = day ? day : 0;
            }else{
                daySelect.selectedIndex = day - 1;
            }
        }else{
            daySelect.selectedIndex = daySelect.length - 1;
        }

        if (isUnload == 'function')
        {
            selects(daySelect);
            daySelect.init();
        }
        if(typeof(fnRefresh)=='function'){
            fnRefresh();
        }
	}
}
function checkedCount(field) {
	var checked=0;

	if (field) {
		if (field.length) {
			for (var i = 0 ; i < field.length	; i++) {
				checked+=(field[i].checked||0);
			}
		} else {checked+=(field.checked||0)}
	}
	return checked
}
function isChecked(field) {
	return !!checkedCount(field)
}
function isOneChecked(field) {
	return checkedCount(field) == 1
}

// AJAX LOADER
function show_load_animation(number) {
	$("#load_animation"+(number||"")).css('visibility', 'visible');
}

function hide_load_animation(number) {
	$("#load_animation"+(number||"")).css('visibility', 'hidden');
}
// AJAX LOADER

function getElementsByClass(searchClass, tag) {
	return $((tag||'')+'.'+searchClass);
}

// IM SOUND

function im_sound(sound) {
	xajax_sound(sound^=1);
	$('a.sound_link').each(function(){
		this.className='sound_link status_'+sound;
		this.onclick=function(){im_sound(sound); return false;}
	})
}

// WIDGETS

function widget_show(wid, status){
	var widget=$('#widget_inner_'+wid);
	// save status to database
	xajax_widget_show(wid, widget.is('.hidden')*1);
	setTimeout(function(){widget.toggleClass('hidden')}, 25)
}

function widget_close(wid, home){
	widgetStatusSet(wid, 'closed');
	var el=$('#widget_'+wid).delay(300)
	 .fadeOut(300, function(){el.remove()});
	setTimeout(function(){$('.bl_widget_cont', el).addClass('hidden')}, 25);
	// radio checked
	if (home) return
	$('#widget_'+wid+'_off').prop('checked',1);
	xajax_widget_close(wid,1);
}

function widget_site(wid){
	console.log('widget_site', wid);
	if (widgetIsLoaded(wid) != 'loaded' || !$('#widget_'+wid).appendTo('#xajax_im')[0]) {
		console.log('widget_site', 'loading');
		widgetStatusSet(wid, 'none');
		$('#widget_'+wid).remove();
		xajax_widget_site(wid);
	}
}
function widget_home(wid){
	widget_close(wid, 1)
	xajax_widget_home(wid);
}

function widget_up(wid){

	$('#widget_'+wid).appendTo('#xajax_im')

	//xajax_widget_up(wid,widgets_count + 50,z_old);
}

function widget_down(wid,z){

// for(i=1;i<=widgets_site_count;i++) {
	// widget = document.getElementById('widget_'+i);
	// if(widget) {
		// if(i!=wid) {
			// if(widget.style.zIndex>z) widget.style.zIndex = widget.style.zIndex-1;
		// }

		// }
	// }
	// //alert(wid+"::"+z);

}

function getAbsolutePosition ( elem ) {
var r = {}, pos=$('#'+elem).position();
r = { x:0, y:0 };
elem = document.getElementById(elem);

while (elem) {
r.x += (elem.offsetLeft + elem.clientLeft);
r.y += (elem.offsetTop + elem.clientTop);
elem = elem.offsetParent;
}

// correct position of widget
r.x += 523;
r.y -= 9;

return r;
}

function getAbsolutePositionReal( elem )
{
	r = { x:0, y:0 };
	elem = document.getElementById( elem );

	while ( elem ) {
		r.x += ( elem.offsetLeft + elem.clientLeft );
		r.y += ( elem.offsetTop + elem.clientTop );
		elem = elem.offsetParent;
	}

	return r;
}

function getWHSizes() {
var w = document.documentElement;
var d = document.body;
h = Math.max( w.scrollHeight, d.scrollHeight, w.clientHeight);
wd = Math.max( w.scrollWidth, d.scrollWidth, w.clientWidth);

return {
ww:w.clientWidth, //window width
wh:w.clientHeight, //window height
wsl:w.scrollLeft, //window scroll left
wst:w.scrollTop, //window scroll top
dw:wd, //document width
dh:h //document height
}

}

function moduleDebugLog(msg, val)
{
    var moduleDebugElement = '#module_debug_log';
    $(moduleDebugElement).html( msg + ' : ' + val  + '<br>' + $(moduleDebugElement).html() );
}

var mobileNotifyUpdaterInterval = false;
var mobileNotifyExclude = '';
function mobileNotifyUpdater()
{
	clearInterval(mobileNotifyUpdaterInterval);
	url = 'ajax.php?cmd=check_new_items&dummy=' + new Date().getTime() + '&exclude=' + mobileNotifyExclude;
	$.get(url, function(data) {
		data = trim(data);
		if(data != '') {
			$('#ichat_status').html(data);
			$('#ichat_status').show();
		} else {
			$('#ichat_status').hide();
		}
		mobileNotifyUpdaterInterval = setInterval(mobileNotifyUpdater, 10000);
	});
}

function alertCustom(msg, shadow, title, handleAlert)
{
    var handleAlert = handleAlert||false;

    if(typeof(alertHtmlCustom) === 'boolean' && alertHtmlCustom === true) {
        if (handleAlert === true) {
           alertHandHtml(msg, shadow, title)
        } else {
           alertHtml(msg, shadow, title);
        }
		$(window).resize();
    } else {
        alert(msg);
    }
}

function confirmCustom(msg, handler, title)
{
    if(typeof(alertHtmlCustom) === 'boolean' && alertHtmlCustom === true) {
        confirmHtml(msg, handler, title);
    } else {
        confirm(msg);
    }
}

function confirmHandler(msg, hOk, hCancel, title)
{
    if(typeof(alertHtmlCustom) === 'boolean' && alertHtmlCustom === true) {
        confirmHtmlHandler(msg, hOk, hCancel, title);
    }
}

function siteSetLanguage(language, part)
{
    var urlParams = location.search;
    var urlParamsStart = '&';
    var part = part || 'set_language';
    urlParams = removeVariableFromURL(urlParams, part);

    if(urlParams == '') {
        urlParamsStart = '?';
    }
    if(urlParams == '?') {
        urlParamsStart = '';
    }

    var urlParamLanguage = urlParamsStart + part + '=' + language;
    var url = location.pathname + urlParams + urlParamLanguage + location.hash;
    location.href = url;
}

function removeVariableFromURL(url_string, variable_name)
{
    var URL = String(url_string);
    var regex = new RegExp( "\\?" + variable_name + "=[^&]*&?", "gi");
    URL = URL.replace(regex,'?');
    regex = new RegExp( "\\&" + variable_name + "=[^&]*&?", "gi");
    URL = URL.replace(regex,'&');
    URL = URL.replace(/(\?|&)$/,'');
    regex = null;
    return URL;
}

function addVariableToURL(url, variable)
{
	urlParamsStart = '&';
    if(url == '') {
        urlParamsStart = '?';
    }
    if(url == '?') {
        urlParamsStart = '';
    }

	url = url + urlParamsStart + variable;

    return url;
}

function addUniqueVariableToURL(url, variable, value)
{
	var url = removeVariableFromURL(url, variable);

    if(url.indexOf('?') === -1) {
        url = url + '?';
    }

	url = addVariableToURL(url, variable + '=' + value);
    return url;
}

function equalHeight(group) {
    tallest = 0;
    group.each(function() {
        thisHeight = $(this).height();
        if(thisHeight > tallest) {
        tallest = thisHeight;
        }
    });
    group.height(tallest);
}

function changeTmplInCycle(tmplCurrent, direction)
{
	tmplsCount = tmplsList.length;
	indexCurrent = tmplsList.indexOf(tmplCurrent);
	if(direction == 'next') {
		indexCurrent = indexCurrent + 1;
		if(indexCurrent >= tmplsCount) {
			indexCurrent = 0;
		}
	} else {
		indexCurrent = indexCurrent - 1;
		if(indexCurrent < 0) {
			indexCurrent = tmplsCount - 1;
		}
	}

	url = removeVariableFromURL(location.search, 'set_template' + sitePartParam);
	location.href = location.pathname + addVariableToURL(url, 'set_template' +  sitePartParam + '=' + tmplsList[indexCurrent]) + location.hash;
}

function switchLanguageParamInCurrentUrl()
{
	url = removeVariableFromURL(location.search, 'set_language' + sitePartParam);
	lang = 'default';
	if(siteLanguage == lang) {
		lang = languageOfUser;
	}
	location.href = location.pathname + addVariableToURL(url, 'set_language' +  sitePartParam + '=' + lang) + location.hash;
}

var mButtonPressed = false;

function initDevFunctions() {

	document.onkeydown = function(e) {
		if ($(':focus').is('textarea, :text, :password, [type="email"], [contenteditable]')) return;
		e = e || window.event;

		var keyCode = (window.event) ? e.which : e.keyCode;
		if(e.keyCode) {
			keyCode = e.keyCode;
		}

		keyCode = parseInt(keyCode);

		//console.log(keyCode);

		if(keyCode == 77) {
			mButtonPressed = true;
		}

		var controlButton = (e.ctrlKey || mButtonPressed);

		if (controlButton && (keyCode == 37 || keyCode == 39)) {
			switchLanguageParamInCurrentUrl();
		}

		if (controlButton && keyCode == 38) {
			changeTmplInCycle(tmplCurrent, 'prev');
		}
		if (controlButton && keyCode == 40) {
			changeTmplInCycle(tmplCurrent, 'next');
		}
	};

	document.onkeyup = function(e) {
		e = e || window.event;

		var keyCode = (window.event) ? e.which : e.keyCode;
		if(e.keyCode) {
			keyCode = e.keyCode;
		}

		keyCode = parseInt(keyCode);

		if(keyCode == 77) {
			mButtonPressed = false;
		}
	};

}

if (!Array.indexOf) {
	Array.prototype.indexOf = function (obj, start) {
		for (var i = (start || 0); i < this.length; i++) {
			if (this[i] === obj) {
				return i;
			}
		}
		return -1;
	}
}

function setAvatar(avatar)
{
    var urlParams = location.href.split('?'),
        url = urlParams[0] + '?cmd=setavatar&avatar=' + avatar + '&ajax=1',
        checked = $('#setAvatar');
    $.get(url, function() {
        checked.remove();
        $('#btnSelect' + avatar).before(checked);
    });
}

function groupEmail(group, incorrect_email, some_email_addresses)
{
    var flag = false;
    var flag_no = false;
    group.each(function (i) {
                            var email = $.trim($(this).val());
                            if (checkEmail(email)) {
                                flag = true;
                            } else {
                                if (email != '') {
                                    flag_no = true;
                                    flag = false;
                                    alert(incorrect_email);
                                    $(this).focus();
                                    return false;
                                }
                            }
    });
    if (!flag && !flag_no) {
        alert(some_email_addresses);
        return false;
    }
    return flag;
}

function closeRecorder()
{
    document.getElementById('rec').style.display = 'none';
}

function showRecorder()
{
    document.getElementById('rec').style.display = 'block';
}

function preloadImageInsertInDom(images) {
    if (typeof document.body == "undefined") return;
    try {
        var div = document.createElement("div");
        var s = div.style;
            s.position = "absolute";
        s.top = s.left = 0;
        s.visibility = "hidden";
        document.body.appendChild(div);
        div.innerHTML = "<img src=\"" + images.join("\" /><img src=\"") + "\" />";
        var lastImg = div.lastChild;
        lastImg.onload = function(){document.body.removeChild(div)};
    } catch(e) {
       //console.log('Error. preloadImageInsertInDom');
    }
}

function preloadImages()
{
    var d = document;
    if(!d.preload) {
		d.preload=new Array();
	}
    var a = preloadImages.arguments;
	for(i = 0; i < a.length; i++)
	{
		d.preload[i] = new Image();
		d.preload[i].src = a[i];
    }
}


function preloadImagesWidgets(url)
{
    url = url + '_server/widgets/images/';
    preloadImages(
        url+'w_ico_minimize.png',
        url+'w_ico_close.png',
        url+'wh_yellow.png',
        url+'wh_violet.png',
        url+'wh_blue.png',
        url+'wh_brown.png',
        url+'wh_green.png',
        url+'w_calendar.png',
        url+'w_calendar_2.png',
        url+'w_violet.png',
        url+'w_brown.png',
        url+'w_green.png',
        url+'w_blue.png',
        url+'c_today.png',
        url+'c_event.png',
        url+'c_todayandevent.png',
        url+'bl_foto_bg.png',
        url+'icon_chat.png',
        url+'wh_red.png',
        url+'w_greenl.png',
        url+'wh_greenl.png',
        url+'w_blue_line.png',
        url+'wh_grey.png',
        url+'wh_brown2.png',
        url+'w_yellow_line.png',
        url+'switch_t.gif',
        url+'switch_b.gif',
        url+'note_bg.png'
    );
}

function xajax_im_open(uid, e) {
	if ($('#xajax_im_open_'+uid)[0]) return reset_opens(uid);
    /*var d = document.documentElement,
        height = self.innerHeight || (d && d.clientHeight) || document.body.clientHeight,
        width = self.innerWidth || (d && d.clientWidth) || document.body.clientWidth;*/
    var e = e || window.event,
        //h = $(window).height() + siteTopOffset,
        w = $(window).width(),
        top_im = 0,
        left_im = 0;

    if (typeof e != 'undefined') {
        top_im = e.clientY,
        left_im = e.clientX;
    }
    if ((top_im - h_chat + h_chat_offset) < 0) {
        top_im = 0;
    } else {
        top_im = top_im - h_chat + h_chat_offset;
    }
    if (w < (left_im + w_chat)) {
        left_im = left_im - w_chat;
    }

    xajax_im_open_new(uid, imMsgLayout, dirTmplMain, left_im, top_im, 'false');
}

function strip_tags(input, allowed) {

    allowed = (((allowed || '') + '')
        .toLowerCase()
        .match(/<[a-z][a-z0-9]*>/g) || [])
        .join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>)
    var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,
        commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
    return input.replace(commentsAndPhpTags, '')
            .replace(tags, function($0, $1) {
                return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
            });
}

function isKeyPressed(e, key_press) {
    if(typeof e == 'undefined') {
        e = window.event;
    }
    if (e.keyCode) key = e.keyCode;
    else if(e.which) key = e.which;
    if (key == key_press) {
        return true;
    }
    return false;
}

function videoResize(box) {
    box.find('object, video, iframe').each(function() {
        var el = $(this),
            newWidth = el.closest(box).width(),
            newHeight = newWidth * el.attr('data-aspectRatio');
        el.width(newWidth).height(newHeight).find('embed').width(newWidth).height(newHeight);
        if(el.closest('.player_custom')[0]){
            el.closest('.video-js').width(newWidth).height(newHeight );
        }
    })
    //var newWidth = box.width();
    /*box.find('object').each(function() {
        var el = $(this),
            newWidth = el.parents(box).width(),
            newHeight = newWidth * el.attr('data-aspectRatio');
        el.width(newWidth).height(newHeight).find('embed').width(newWidth).height(newHeight);
    });*/
}

function prepareVideoResize(box) {
    box.find('embed, object, video, iframe').each(function() {
        $(this).attr('data-aspectRatio', this.height / this.width)
               .removeAttr('height')
               .removeAttr('width');
    });
}

function videoResizeStep() {
    globalID = requestAnimationFrame(videoResizeStep);
    videoResize($('.groups_video'));
}

function imageResize(box, images, url_files, sfx, index, split)
{
    split = split || '_';
    index = index || 2;
    if (box.css('display') != 'none') {
        images.each(function (i) {
            var id = $(this).attr('id').split(split),
                img = url_files + '/' + id[index];
                $(this).attr('src', img + '_' + sfx);
        });
    }
}

function enterCaret(el, text) {
    text=defaultFunctionParamValue(text, '\n');
	if(document.selection){
		sel = document.selection.createRange();
		sel.text = text;
	} else if (el.selectionStart || el.selectionStart == '0') {
		var start = el.selectionStart, end = el.selectionEnd;
		el.value=el.value.substring(0, start)+text+el.value.substring(end, el.value.length);
		el.setSelectionRange(++start, start)
	} else el.value += text;
	$(el).trigger('autosize');
	return false;
}
function doOnEnter(fn, isCaret) {
    var isCaret=isCaret||0;
	return function(e){
		if (e.which == 13){
			var el=this,
				submitOnEnter=!/submitOnEnter=0/.test(document.cookie);//||isMobileBrowser);
			if (submitOnEnter && !e.shiftKey && !e.ctrlKey && !e.metaKey ) {
				return fn(el);
			}
			if (e.ctrlKey&&!isCaret) return submitOnEnter?enterCaret(el):fn(el)
		}
	}
}
function lazyLoadImage(el, is_no_init, speed, placeholder, delay, event) {
    var el=el||'img.lazy', is_no_init=is_no_init||false,
        event=event||'load',
        placeholder=placeholder||'', speed=speed||400,
        delay=delay||1;
        $(el).show().delay(delay).lazyload({
            effect : 'fadeIn',
            placeholder: placeholder,
            skip_invisible : false,
            event : event,
            effect_speed: speed
        });
        if (is_no_init == true) $(el).removeClass('lazy');
}

function choiceChkbox(ch, chkbox) {
    if(ch.is(':checked')) {
        chkbox.prop("checked", true);
    }else{
        chkbox.prop("checked", false);
    }
}

function getChoiceSelectChkbox(chkbox) {
        var StrID = '',
            chkbox = chkbox || 'chk';
        $('[id ^= '+chkbox+'_]:checked').each(function(){
            StrID += ($(this).attr('id').replace(/chk_/g, '')+',')
        })
        return StrID.slice(0, -1);
}

function actionChecked(page, act, param) {
        var StrID = '',
            act = act || 'delete',
            param = param || '';
        $('[id ^= chk_]:checked').each(function(){
            StrID += ($(this).attr("id").replace(/chk_/g, '')+',')
        })
        var items = StrID.slice(0, -1);
        window.location.href=page+'?cmd='+act+param+'&item='+items;
}

function widgetStatusSet(wid, status)
{
	widgetStatus[wid] = status;
	//console.log('widget_status', wid, status);
}

function widgetIsLoaded(wid)
{
	var loaded = 'none';
	if(wid in widgetStatus) {
		loaded = widgetStatus[wid];
	}
	return loaded;
}

function setWidthOverWrap(id, wrap, offset, param) {
    var wrap = wrap || '#hdr',
        header = $(wrap),
        offset = offset || 75,
        param = param || 'width';//'max-width'
    if (header.length) {
        var newWidth = header.width()-offset;
        $(id).css(param, newWidth+'px');
    }
}

function isAuthOnly(value) {
    if (value == 'please_login') {
        var urlLogin='';
        if(typeof(urlPageLogin) === 'string' && urlPageLogin !== '') {
            urlLogin=urlPageLogin;
        }else if(typeof(url_main) === 'string' && url_main !== '') {
            urlLogin=url_main;
        }else if(typeof(urlMain) === 'string' && urlMain !== '') {
            urlLogin=urlMain;
        }
        if (urlLogin) {
            window.location.href = urlLogin;
        }
        return false;
    }
    return true;
}

function checkDataAjax(res) {
    if(res=='')return false;
    try{
        var obj = jQuery.parseJSON(res);
        if (obj.status && isAuthOnly(obj.data)){return obj.data
        }else{return false}
    }catch(e){return false}
}

function getDataAjax(res, data) {
    var data=data||'page';
    if (res == '') {
        return false;
    }
    try{
        var obj = jQuery.parseJSON(res);
        return (obj.status) ? obj[data] : false;
    }catch(e){return false}
}

function postAjax(url, param, fnc) {
    $.post(url, param, fnc);
}

function setCenteringPopup(popup, top) {
    var windowWidth=document.documentElement.clientWidth,
        windowHeight=document.documentElement.clientHeight,
        popupHeight=popup.height(),
        popupWidth=popup.width(),
        top=alertHtmlTop||(windowHeight/2-popupHeight/2);

    popup.css({position: "fixed",
               top: top,
               left: windowWidth/2-popupWidth/2
    });
}
function removeSubmissionBlock()
{
	blockSubmission = false;
}


function insertFromDataHtmlToHtml(data, dataBlocks)
{
	var dataBlock = '';

	for(var dataBlocksKey in dataBlocks) {
		dataBlock = $(data).filter(dataBlocksKey);
		if(dataBlock[0]) {
			$(dataBlocks[dataBlocksKey]).html(dataBlock.html());
		}
	}
}

function showTipFromData(data, dataBlocks, btn)
{
	var dataBlock = '';

	for(var dataBlocksKey in dataBlocks) {
		dataBlock = $(data).filter(dataBlocksKey);
		if(dataBlock.length) {
            customShowTip(dataBlocks[dataBlocksKey],btn,dataBlock.text())
		}
	}
}

function partnerCheckboxCheckUncheck(checkboxArea)
{
	var checkboxArea = checkboxArea || '.checkbox_fields_area input[type="checkbox"]';
	$(document).ready(function() {
		$(checkboxArea).click(function(){
			var currentCheckboxValue = $(this).val();
			var currentCheckboxName = $(this).attr('name');
			$('input[name="' + currentCheckboxName + '"]').each(function(){
				if(currentCheckboxValue != 0) {
					if($(this).attr('value') == 0) {
						$(this).attr('checked', false);
					}
				} else {
					if($(this).attr('value') != 0) {
						$(this).attr('checked', false);
					}
				}
			});
		});
	});
}

var videoPlayers={};
if (window.jQuery) {
	partnerCheckboxCheckUncheck();

    $.preloadImages = function () {
        if (typeof arguments[arguments.length - 1] == 'function') {
            var callback = arguments[arguments.length - 1];
        } else {
            var callback = false;
        }
        if (typeof arguments[0] == 'object') {
            var images = arguments[0];
            var n = images.length;
        } else {
            var images = arguments;
            var n = images.length - 1;
        }
        var not_loaded = n;
        for (var i = 0; i < n; i++) {
            $(new Image()).load(function() {
                if (--not_loaded < 1 && typeof callback == 'function') {
                    callback();
                }
            }).attr('src', images[i]);
        }
    }

    $.fn.toggleDisabled = function(limit,rang) {
		return this.each(function(){
            if(rang){
                if(this.value>limit){this.disabled=true}
                else{this.disabled=false}
            }else{
                if(this.value<limit){this.disabled=true}
                else{this.disabled=false}
            }
		});
	};

    function initCustomVideoPlayer(id, vol) {
        videoPlayers[id]=videojs('#user_video_'+id).ready(function(){
            var pl=$('#user_video_'+id),
                blWall=pl.closest('.blogs_video_player_custom, .player_custom');
                if(blWall[0]){
                    blWall.addClass('to_show');
                }
                this.volume(vol);
                this.on('volumechange',function(){
                    if(this.muted()){
                        this.volume(0);
                    }
                    setCookie('videojs_volume', this.volume());
                }).on('fullscreenchange', function(){
                    var blWillChange=pl.closest('.wall_item');
                    if(blWillChange[0]){
                        var isWillChange=blWillChange.css('will-change')=='unset';
                        blWillChange.css('will-change', isWillChange?'transform':'unset');
                    }
                }).on('ended', function() {
                    this.load();
                    this.pause();
                });
        })
    }

    function initCustomVideoPlayerAdmin(id, vol) {
        videojs('#user_video_'+id).ready(function(){
            var pl=$('#user_video_'+id),
                blWall=pl.closest('.player_custom');
                if(blWall[0]){
                    blWall.addClass('to_show');
                }
                this.volume(vol);
                this.on('ended', function() {
                    this.load();
                    this.pause();
                }).on('volumechange',function(){
                    if(this.muted()){
                        this.volume(0);
                    }
                    setCookie('videojs_volume', this.volume());
                });
        })
    }

    function initNativeVideoPlayer(id) {
        var pl=document.getElementById('user_video_'+id),
            $pl=$('#user_video_'+id);
        videoPlayers[id]=pl;
        pl.volume=getVolumeVideoPlayer();
        pl.onvolumechange=function(){
            if(this.muted){
                this.volume=0;
            }
            setCookie('videojs_volume', this.volume);
        };
        pl.onended=function(){
            $pl.removeAttr('autoplay');
            this.load();
            //this.pause();
        };
        pl.onloadedmetadata=function(){
            var $gallery=$('.bl_photo_one', '#pp_gallery_photo_one_cont');
            $gallery[0]&&$gallery.addClass('ready');
        };
        if (detectApiFullScreen()) {
            var blChange=$pl.closest('.wall_item, .bl_video_one_cont'),isChange;
            blChange=$pl.closest('.wall_item, .pp_wrapper');
            if(blChange[0]){
                changeFullScreen(pl,function(){
                    isChange=blChange.css('will-change')=='unset';
                    blChange.css('will-change', isChange?'transform':'unset');
                })
            }
        }
    }
}

function getVolumeVideoPlayer()
{
    var volume=$.cookie('videojs_volume');
    if(volume>1){
        volume=((volume/100).toFixed(1));//Fix
    }else if(!volume) {
        volume=0.7;
    }
    return volume;
}

function defaultFunctionParamValue(param, value)
{
	if (typeof param === 'undefined') {
		param = value;
	}
	return param;
}

function setCaretToPos(input, pos) {
  var input = document.getElementById(input),
      selectionEnd = pos,
      selectionStart = pos;
  if (input.setSelectionRange) {
    input.focus();
    input.setSelectionRange(selectionStart, selectionEnd);
  }
  else if (input.createTextRange) {
    var range = input.createTextRange();
    range.collapse(true);
    range.moveEnd('character', selectionEnd);
    range.moveStart('character', selectionStart);
    range.select();
  }
}

function getRandomInt(min, max){
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

function in_array(needle, haystack, argStrict) {
    var key = '',
        strict = !! argStrict;

    if (strict) {
        for (key in haystack) {
            if (haystack[key] === needle) {
                return true;
            }
        }
    } else {
        for (key in haystack) {
            if (haystack[key] == needle) {
                return true;
            }
        }
    }
    return false;
}

function in_array_key(needle, haystack, argStrict) {
    var key = '',
        strict = !! argStrict;
    if (strict) {
        for (key in haystack) {
            if (key === needle) {
                return true;
            }
        }
    } else {
        for (key in haystack) {
            if (key == needle) {
                return true;
            }
        }
    }
    return false;
}

function arraysEqual(a, b) {
  if (a === b) return true;
  if (a == null || b == null) return false;
  if (a.length != b.length) return false;
  for (var i = 0; i < a.length; ++i) {
    if (a[i] != b[i]) return false;
  }
  return true;
}

function detectApiFullScreen() {
    return  document.fullscreenEnabled
           || document.webkitFullscreenEnabled
           || document.msFullscreenEnabled
           || document.mozFullScreenEnabled;
}

function isFullScreen() {
    var result=true;
    if (!document.fullscreenElement &&
        !document.webkitFullscreenElement &&
        !document.msFullscreenElement &&
        !document.mozFullScreenElement) {
        result=false;
    }
    return result;
}

function toggleFullScreen(el) {
    if (!document.fullscreenElement &&
        !document.webkitFullscreenElement &&
        !document.msFullscreenElement &&
        !document.mozFullScreenElement) {
        if (el.requestFullscreen) {
            el.requestFullscreen();
        } else if (el.webkitRequestFullscreen) {
            el.webkitRequestFullscreen();
        } else if (el.msRequestFullscreen) {
            el.msRequestFullscreen();
        } else if (el.mozRequestFullScreen) {
            el.mozRequestFullScreen();
        }
    } else {
        if (document.exitFullscreen) {
            document.exitFullscreen();
        } else if (document.webkitExitFullscreen) {
            document.webkitExitFullscreen();
        } else if (document.msExitFullscreen) {
            document.msExitFullscreen();
        } else if (document.mozCancelFullScreen) {
            document.mozCancelFullScreen();
        }
    }
}

function changeFullScreen(el, onfullscreenchange) {
    el.addEventListener("webkitfullscreenchange", onfullscreenchange);
    el.addEventListener("mozfullscreenchange",    onfullscreenchange);
    el.addEventListener("MSFullscreenChange",     onfullscreenchange);
    el.addEventListener("fullscreenchange",       onfullscreenchange);
}

function playSound(sound){
    if (typeof soundManager != 'undefined' &&  typeof urlMain != 'undefined') {
        var sound=sound||'pop_sound_chat.mp3';
        /*soundManager.setup({url: urlMain+'_server/js/sound/',
                    onready: function() {
                              var mySound = soundManager.createSound({
                                  id: 'aSound',
                                  url: urlMain+'_server/im_new/sounds/'+sound
                              });
                              mySound.play();
                    }
        })*/

        var soundPlay = soundManager.createSound({url: urlMain+'_server/im_new/sounds/'+sound});
        soundPlay.play();
    }
}

function nl2br(str, is_xhtml) {
  var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br ' + '/>' : '<br>';
  return (str + '')
    .replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');
}

function strToHtml(str) {
    str = str.replace(/</g, "&lt;");
    return nl2br(str);
}


function webglDetect(){
    try {
		return !!window.WebGLRenderingContext && !! document.createElement('canvas').getContext('experimental-webgl');
	} catch (e) {
		return false;
	}
}


function mobileAppNotification(id, text, type, title)
{
    if(!mobileAppLoaded || !id) {
        return;
    }

    title = title || appTitle;

    if(app.activeStatus == undefined || !app.activeStatus)
    {
        navigator.vibrate(appVibrationDuration);
        type = type || 'im';

        var notificationParams = {
            id: id,
            title: title,
            text: text,
            data: type,
        }

        if(device.platform != 'Android') {
            notificationParams['sound'] = 'res://sound.caf';
            notificationParams['title'] = '';
        }

        cordova.plugins.notification.local.on("click", function(notification) {
            // don't show and redirect if chat already active
            var urls = {im : 'messages.php?display=one_chat&user_id=' + notification.id,
                        city : urlCity + 'index.php?view=mobile&from=' + notification.id,
            }, url = '';
            if (notification.data == 'im' && appCurrentImUserId != notification.id){
               url = urls.im;
            /*} else if (notification.data == 'city'){
                var is = 0;
                for (var k in appCityListUser){
                    if (appCityListUser[k]['id'] == notification.id){
                        is = 1;
                        break;
                    }
                }
                if (!is) {
                    url = urls.city;
                }*/
            } else if (urls[notification.data]) {
                url = urls[notification.data];
            }
            if (url) {
                appPreloaderShow();
                setTimeout(function(){document.location.href = url;}, 100);
            }
        });

        cordova.plugins.notification.local.schedule(notificationParams);
    }
}

function mobileAppCityNotification(data)
{
    if (!mobileAppLoaded || !isWebglDetect || !data.id || !data.uid) return;
    if (appCityLastMsgId < data.id) {
        mobileAppNotification(data.uid, data.message, 'city');
        appCityLastMsgId = data.id;
    }
}

function setCookie(name, value, options) {
    options=options||{};
    var expires = options.expires;
    if (typeof expires == "number" && expires) {
        var d = new Date();
        d.setTime(d.getTime() + expires * 1000);
        expires=options.expires=d;
    }
    if (expires && expires.toUTCString) {
        options.expires=expires.toUTCString();
    }
    value=encodeURIComponent(value);
    var updatedCookie = name + "=" + value;
    for (var propName in options) {
        updatedCookie += "; " + propName;
        var propValue = options[propName];
        if (propValue !== true) {
        updatedCookie += "=" + propValue;
        }
    }
    document.cookie = updatedCookie;
}

function supportWebrtc(){
    var support=true;
    navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
    if (navigator.getUserMedia) {
        //Хром только так можно проверить наверняка на предмет доступа но тогда камера включается
        /*navigator.getUserMedia({audio:true,video:true},function(stream){},
        function(err) {
            support=false;
            //console.log("The following error occurred: " + err.name);
        })*/
        if(/Chrome/i.test(navigator.userAgent)
            &&window.location.protocol!='https:'
            &&window.location.host!='localhost'){
            support='ssl';
        }
    } else {
        //console.log("getUserMedia not supported");
        support=false;
    }
    return support;
}

function checkWebrtc(){
    var is=supportWebrtc();
    if(is=='ssl')is=false;
    return is;
}

/* Redirect URL */
function redirectToLoginPage() {
    var url;
    if (typeof urlPageLogin=='undefinded') {
        url=urlPagesSite.login;
    } else {
        url=urlPageLogin;
    }
    redirectUrl(url);
}

function redirectRequiresAuth(data) {
    if(data == 'please_login') {
        redirectToLoginPage();
        return true;
    }
    return false;
}

function redirectUrl(href){
    window.location.href=href;
}

function redirectToLogin(){
    window.location.href=url_main+urlPageLogin;
}

function redirectToUpgrade(param){
    var url;
    param=param||'';
    if(param){
        param='?'+param;
    }
    if (typeof urlPageUpgrade=='undefinded') {
        url=urlPagesSite.upgrade;
    } else {
        url=urlPageUpgrade;
    }
    window.location.href=url_main+url+param;
}

function checkLoginStatus(){
    if (!ajax_login_status) {
        redirectToLogin();
        return false;
    }
    return true;
}

function goLink(url,params){
    params=params||'';
    var f=document.createElement('form');
    f.method='POST';
    f.action=url;
    if(params){
        params=params.split('&');
        for (var key in params) {
            var param=params[key].split('=');
            var i=document.createElement('input');
            i.setAttribute('type','hidden');
            i.setAttribute('name',param[0]);
            i.value=param[1];
            f.appendChild(i);
        }
    }
    document.body.appendChild(f);
    f.submit();
}

function replaceUrl(url){
    if(window.history && history.pushState){
        url=url||'';
        //url=url||window.location.href;
        if(url){
            history.replaceState(history.state, document.title, url);
        }else{
            history.replaceState(history.state, document.title);
        }
    }
}
/* Redirect URL */

function setAjaxPrefilter() {
    var isParamTmpl = (typeof tmplCurrent === 'string') && (typeof sitePartParam === 'string') && (typeof sitePart === 'string');
    var isSiteGuid = typeof siteGuid === 'string';
    if ((isParamTmpl || isSiteGuid) && (typeof $.ajaxPrefilter !== 'undefined')) {
        $.ajaxPrefilter(function(options) {
            if (isParamTmpl) {
                options.url = addUniqueVariableToURL(options.url, 'set_template' + sitePartParam + '_runtime', tmplCurrent);
                options.url = addUniqueVariableToURL(options.url, 'site_part_runtime', sitePart);
            }
            if (isSiteGuid) {
                options.url = addUniqueVariableToURL(options.url, 'site_guid', siteGuid*1);
            }
        })
    }
    $.ajaxSetup({
        cache: true
    })
}

function l(key) {
    if(typeof siteLangParts!=='object')return '';
    var page='all';
    if(typeof currentPage!=='undefined')page=currentPage;
    if(siteLangParts[page]&&siteLangParts[page][key]) {
        return siteLangParts[page][key];
    }
    if(page!=='all'&&siteLangParts['all']&&siteLangParts['all'][key]){
        return siteLangParts['all'][key];
    }
    return '';
}

function colorRgbToHex(colorRgb)
{
    var colorPartsRgb = colorRgb.match(/(\d+),\s*(\d+),\s*(\d+)/);
    var colorPartsHex = [];
    for (var i = 1; i <= 3; i++) {
        colorPartsHex[i] = parseInt(colorPartsRgb[i]).toString(16);
        if (colorPartsHex[i].length == 1) {
            colorPartsHex[i] = '0' + colorPartsHex[i];
        }
    }
    var colorHex = '#' + colorPartsHex.join('');

    return colorHex;
}

function centerItemInArea(itemWidth, itemHeight, areaWidth, areaHeight)
{
        var horizontalGap, verticalGap;

        var itemWidthNew = itemWidth;
        var itemHeightNew = itemHeight;

        var itemProportion = itemWidth / itemHeight;

        // make smaller if more then container
        if(itemHeight > areaHeight) {
            itemHeightNew = areaWidth;
            itemWidthNew = itemHeightNew * itemProportion;
        }
        if(itemWidth > areaWidth) {
            itemWidthNew = areaWidth;
            itemHeightNew = itemWidthNew / itemProportion;
        }

        // make bigger if less then container
        if(areaHeight * itemProportion < areaWidth) {
            itemHeightNew = areaHeight;
            itemWidthNew = itemHeightNew * itemProportion;
        } else if(areaWidth / itemProportion < areaHeight) {
            itemWidthNew = areaWidth;
            itemHeightNew = itemWidthNew / itemProportion;
        } else {
            // max to borders
            var areaProportion = areaWidth / areaHeight;

            if(areaProportion < 1) {
                itemHeightNew = areaHeight;
                itemWidthNew = itemHeightNew;
            } else {
                itemWidthNew = areaWidth;
                itemHeightNew = itemWidthNew / itemProportion;
            }
        }

        verticalGap = (areaHeight - itemHeightNew) / 2;
        horizontalGap = (areaWidth - itemWidthNew) / 2;

        var result = {
            'width' : itemWidthNew,
            'height' : itemHeightNew,
            'horizontalGap' : horizontalGap,
            'verticalGap' : verticalGap
        };

        //console.log(result);

        return result;
}

function centerItemInAreaByHeightWithCrop(itemWidth, itemHeight, areaWidth, areaHeight)
{
        var horizontalGap, verticalGap;

        var itemWidthNew = itemWidth;
        var itemHeightNew = itemHeight;

        var itemProportion = itemWidth / itemHeight;

        itemHeightNew = areaHeight;
        itemWidthNew = itemHeightNew * itemProportion;

        if(itemWidthNew < areaWidth) {
            itemWidthNew = areaWidth;
            itemHeightNew = itemWidthNew / itemProportion;
        }

        verticalGap = (areaHeight - itemHeightNew) / 2;
        horizontalGap = (areaWidth - itemWidthNew) / 2;

        var result = {
            'width' : itemWidthNew,
            'height' : itemHeightNew,
            'horizontalGap' : horizontalGap,
            'verticalGap' : verticalGap
        };

        //console.log(result);

        return result;
}

function onLoadImgToShow(url,$bl,call) {
    var $img=$('<img>').one('load error', function(){
        if(typeof call=='function'){
            call()
        }else{
            $bl.addClass('to_show')
        }
    })[0].src=url;
    if($img[0].complete)$img.load();
}

function getEmojiRegExp() {
    var emojiRanges = [
	'(?:\uD83C[\uDDE6-\uDDFF]){2}', // флаги
	'[\u0023-\u0039]\u20E3', // числа
	'(?:[\uD83D\uD83C\uD83E][\uDC00-\uDFFF]|[\u270A-\u270D\u261D\u26F9])\uD83C[\uDFFB-\uDFFF]', // цвет кожи
	'\uD83D[\uDC68\uDC69][\u200D\u200C].+?\uD83D[\uDC66-\uDC69](?![\u200D\u200C])', // семья
	'[\uD83D\uD83C\uD83E][\uDC00-\uDFFF]', // суррогатная пара
	'[\u3297\u3299\u303D\u2B50\u2B55\u2B1B\u27BF\u27A1\u24C2\u25B6\u25C0\u2600\u2705\u21AA\u21A9]', // обычные
	'[\u203C\u2049\u2122\u2328\u2601\u260E\u261d\u2620\u2626\u262A\u2638\u2639\u263a\u267B\u267F\u2702\u2708]',
	'[\u2194-\u2199]',
	'[\u2B05-\u2B07]',
	'[\u2934-\u2935]',
	'[\u2795-\u2797]',
	'[\u2709-\u2764]',
	'[\u2622-\u2623]',
	'[\u262E-\u262F]',
	'[\u231A-\u231B]',
	'[\u23E9-\u23EF]',
	'[\u23F0-\u23F4]',
	'[\u23F8-\u23FA]',
	'[\u25AA-\u25AB]',
	'[\u25FB-\u25FE]',
	'[\u2602-\u2618]',
	'[\u2648-\u2653]',
	'[\u2660-\u2668]',
	'[\u26A0-\u26FA]',
	'[\u2692-\u269C]'
    ];
    return new RegExp(emojiRanges.join('|'), 'g');
}

function emojiToHtml(str) {
	str = str.replace(/\uFE0F/g, '');
	return str.replace(getEmojiRegExp(), extractEmojiToCodePoint);
}

function extractEmojiToCodePoint(emoji) {
	var code = emoji
		.split('')
		.map(function (symbol, index) {
			return emoji.codePointAt(index).toString(16);
		})
		.filter(function (codePoint) {
			return !isEmojiSurrogatePair(codePoint);
		}, this)
		.join('-');
    return '&#' + parseInt(code, 16) + ';';
}

function isEmojiSurrogatePair(codePoint) {
	codePoint = parseInt(codePoint, 16);
	return codePoint >= 0xD800 && codePoint <= 0xDFFF;
}


function setOptionsSite(options){
    siteOptions={};
    if(typeof options==='object'){
        siteOptions=options;
    }
}

function isSiteOptionActive(option, key){
    key=key||'options';
    if(typeof siteOptions!=='object'||typeof siteOptions[key]=='undefined'||typeof siteOptions[key][option]=='undefined')return false;
    return siteOptions[key][option] === 'Y';
}

function getSiteOption(option, key){
    key=key||'options';
    if(typeof siteOptions!=='object'||typeof siteOptions[key]=='undefined'||typeof siteOptions[key][option]=='undefined')return null;
    return siteOptions[key][option];
}

function iOSversion(fullVer) {
    if (!!navigator.platform && /iP(hone|od|ad)/i.test(navigator.platform)) {
        fullVer=fullVer||0;
        var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
        if(fullVer){
            return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)]
        }else{
            return parseInt(v[1], 10)
        }
    }
    return 0;
}

var infoBrowserWebRtc = null;
function detectBrowserWebRtc(){
    if (infoBrowserWebRtc !== null) {
        return infoBrowserWebRtc;
    }
    var navigator = window && window.navigator;
    var extractVersion = function(uastring, expr, pos) {
        var match = uastring.match(expr);
        return match && match.length >= pos && parseInt(match[pos], 10);
    }
    // Returned result object.
    var result = {};
    result.browser = null;
    result.version = null;

    // Fail early if it's not a browser - Not a browser.
    if (typeof window === 'undefined' || !window.navigator) {
      result.browser = '';
      infoBrowserWebRtc = result;
      return result;
    }
    // Firefox.
    if (navigator.mozGetUserMedia) {
      result.browser = 'firefox';
      result.version = extractVersion(navigator.userAgent,
          /Firefox\/(\d+)\./, 1);
    } else if (navigator.webkitGetUserMedia) {
      // Chrome, Chromium, Webview, Opera, all use the chrome shim for now
      if (window.webkitRTCPeerConnection) {
        result.browser = 'chrome';
        result.version = extractVersion(navigator.userAgent,
          /Chrom(e|ium)\/(\d+)\./, 2);
      } else { // Safari (in an unpublished version) or unknown webkit-based.
        if (navigator.userAgent.match(/Version\/(\d+).(\d+)/)) {
          result.browser = 'safari';
          result.version = extractVersion(navigator.userAgent,
            /AppleWebKit\/(\d+)\./, 1);
        } else { // unknown webkit-based browser.
          //Unsupported webkit-based browser with GUM support but no WebRTC support.
          result.browser = '';
          infoBrowserWebRtc = result;
          return result;
        }
      }
    } else if (navigator.mediaDevices &&
        navigator.userAgent.match(/Edge\/(\d+).(\d+)$/)) { // Edge.
        result.browser = 'edge';
        result.version = extractVersion(navigator.userAgent,
          /Edge\/(\d+).(\d+)$/, 2);
    } else if (navigator.mediaDevices &&
        navigator.userAgent.match(/AppleWebKit\/(\d+)\./)) {
        // Safari, with webkitGetUserMedia removed.
        result.browser = 'safari';
        result.version = extractVersion(navigator.userAgent,
          /AppleWebKit\/(\d+)\./, 1);
    } else { // Default fallthrough: not supported.
        result.browser = '';
    }
    infoBrowserWebRtc = result;
    return result;
}

function iSIOSSafariWebRTC(infoCurrentBrowser) {
    var iOSVer=iOSversion();
    infoCurrentBrowser = infoCurrentBrowser || detectBrowserWebRtc();
    return iOSVer>10 && infoCurrentBrowser.browser == 'safari';
}

function iSMacOSSafariWebRTC(infoCurrentBrowser) {
    infoCurrentBrowser = infoCurrentBrowser || detectBrowserWebRtc();
    return !!navigator.platform.match(/^Mac/i) && infoCurrentBrowser.browser == 'safari';
}

if (window.jQuery) {
    $.fn.autocolumnlist = function(params){
        var defaults = {
            columns: 4,
            classname: 'column',
            min: 1,
            clickEmpty:function(){}
        };
        var options = $.extend({}, defaults, params);
        return this.each(function() {
            options.columns *=1;
            var data_parameters = $(this).data(), i;
            if ( data_parameters ) {
                $.each(data_parameters, function (key, value) {
                    options[key] = value;
                });
            }

            var $el=$(this), els = $el.find('> li');
            var dimension = els.length;
            if (dimension > 0) {
                var elCol = Math.ceil(dimension/options.columns);
                if (elCol < options.min) {
                    elCol = options.min;
                }
                var start = 0, end = elCol, j=0, m=0;
                for (i=0; i<options.columns; i++) {
                    if ((i + 1) == options.columns) {
                        j++;
                        var cl=options.classname + ' cm_last';
                        if(options.columns==1){
                            cl=options.classname + ' cm_first';
                        }
                        els.slice(start, end).wrapAll('<div class="'+cl+'" />');
                        var $last=$el.find('.cm_last'), lEmpty=elCol-$last.find('li').length;
                        if(lEmpty){
                            for (j=0; j<lEmpty; j++) {
                                $('<li class="li_empty"><a href=""></a></li>')
                                .appendTo($last).
                                on('click', function(){
                                    options.clickEmpty();
                                    return false;
                                })
                            }
                        }
                    } else {
                        var cl=options.classname;
                        if (!m) {
                            cl += ' cm_first';
                        }
                        m++;
                        els.slice(start, end).wrapAll('<div class="'+cl+'" />');
                    }
                    start = start+elCol;
                    end = end+elCol;
                }
            }
        });
    };

    //data-cl-loader="btn_action_loader" data-no-fade-in="true" data-cl-children=".name"
    $.fn.addChildrenLoader = function(){
        var $btn=$(this);
        if($btn.is('.add_loader_transparent')||$btn.is('.add_loader'))return;
        var clLoader=$btn.data('clLoader');
        if(!clLoader)clLoader='btn_action_loader';

        var clBtn=$btn.data('clBtn');
        if(clBtn)$btn.addClass(clBtn);
        if(!$btn.data('noFadeIn')){
            $btn.addClass('add_loader').append(createLoader(clLoader,true,true).delay(1).removeClass('hidden',0));
            if($btn.data('clChildren')){
                $btn.find($btn.data('clChildren')).siblings(':not(.css_loader)').stop().fadeTo(200,0);
            }else{
                $btn.children('button, .frame').stop().fadeTo(200,.5);
                $btn.children(':not(.css_loader)').not('button, .frame').stop().fadeTo(200,0);
            }
        }else{
            $btn.addClass('add_loader_transparent').append(createLoader(clLoader,false,true));
        }
        return $btn;
    }

    $.fn.removeChildrenLoader = function(){
        var $btn=$(this);
        var fnDisabled=function(){
            $btn.data('disabled')&&$btn.prop('disabled', false);
        }
        if($btn.is('.add_loader_transparent')||$btn.is('.add_loader')){
            var clBtn=$btn.data('clBtn');
            if(clBtn)$btn.removeClass(clBtn);
            if($btn.is('.add_loader')){
                if($btn.data('clChildren')){
                    $btn.find($btn.data('clChildren')).siblings().stop().fadeTo(200,1,function(){
                        $btn.find('.css_loader').remove();
                        $btn.removeClass('add_loader');
                        fnDisabled();
                    })
                }else{
                    $btn.children(':not(.css_loader)').stop().fadeTo(200,1,function(){
                        $btn.find('.css_loader').remove();
                        $btn.removeClass('add_loader');
                        fnDisabled();
                    })
                }
                $btn.find('.css_loader').oneTransEnd(function(){
                    $(this).remove();
                }).addClass('hidden',0);
            }else{
                $btn.find('.css_loader').remove();
                $btn.removeClass('add_loader_transparent');
                fnDisabled();
            }
        }

        return $btn;
    }
}

function $jq(sel,context){
    context=context||false;
    var key=sel;
    if(context!==false){
        key=sel+'_'+context;
    }
    if(typeof cacheElement[key] == 'undefined' || !cacheElement[key][0]){
        if(context){
            cacheElement[key]=$(sel,context);
        }else{
            cacheElement[key]=$(sel);
        }
    }
    return cacheElement[key];
}

function createLoader(cl,isHide,isWhite){
    cl=cl||'';
    isHide&&(cl=cl+' hidden');
    var clSpin=isWhite?'spinnerw':'',
    $loader=$('<div class="css_loader '+cl+'">'+
                '<div class="spinner center '+clSpin+'">'+
                '<div class="spinner-blade"></div>'+
                '<div class="spinner-blade"></div>'+
                '<div class="spinner-blade"></div>'+
                '<div class="spinner-blade"></div>'+
                '<div class="spinner-blade"></div>'+
                '<div class="spinner-blade"></div>'+
                '<div class="spinner-blade"></div>'+
                '<div class="spinner-blade"></div>'+
                '<div class="spinner-blade"></div>'+
                '<div class="spinner-blade"></div>'+
                '<div class="spinner-blade"></div>'+
                '<div class="spinner-blade"></div>'+
                '</div>'+
            '</div>');
    return $loader;
}

/* Log In */
function initLoginFrmSite($blForm, fnHideError) {
    if (!$blForm[0]) return;
    var $btnSubmit=$("button, input[type='submit']", $blForm);
    $("input[name='user'], input[name='password']", $blForm).on('change propertychange input',function(){
        if(typeof fnHideError=='function'){
            fnHideError()
        }
        $btnSubmit.prop('disabled', false);
    }).keydown(doOnEnter(function(){
        if(typeof fnHideError=='function'){
            fnHideError()
        }
        $btnSubmit.click()
    }))
}

function loginInSite($btnSubmit, $blForm, fn) {
    var $controls=$("input[name='user'], input[name='password'], input[name='remember']", $blForm).add($btnSubmit),
        $name=$("input[name='user']", $blForm),
        $pass=$("input[name='password']", $blForm),
        $remember=$("input[name='remember']", $blForm);
    if (typeof fn!= 'function'){
        fn = alertCustom;
    }

    if($blForm.data('submit'))return;
    $blForm.data('submit', true);
    $controls.prop('disabled', true);
    $name.val($.trim($name.val()));
    var data={user:$name.val(), password:$pass.val()};
    if($remember.prop('checked'))data.remember=1;
    $btnSubmit.addChildrenLoader();

    $.post(url_ajax+'?cmd=login&ajax=1',data,function(res){
        $blForm.data('submit', false);
        if(res.substring(0, 11) == '#js:logged:') {
            redirectUrl(res.substring(11));
			return false;
		}
		if(res.substring(0, 10) == '#js:error:') {
            $btnSubmit.removeChildrenLoader();
            $controls.prop('disabled', false);
            fn(res.substring(10));
			return false;
		}
        redirectUrl('index.php');
    })
    return false;
}
/* Log In */
/* Profile settings */
function disabledControlsProfileSettingsFrm($blSettings,is){
    is=is||false;
    $jq('input, select, button.btn_save',$blSettings).not('[type="hidden"]').prop('disabled',is);
}

function initProfileDelete($blForm, fnShowError, fnHideError, fnConfirm) {
    $blForm=$blForm||$('#fields_7');
    var $blSettings=$jq('#bl_forms_settings'),
        $btn=$('button.btn_save',$blForm),
        $cmd=$("input[type='hidden']", $blForm),
        $controls=$("input[name='password'], button.btn_save", $blForm);
    $blForm.data('values',{});
    if (typeof fnShowError!= 'function'){
        fnShowError = alertCustom;
    }

    if (typeof fnConfirm!= 'function'){
        fnConfirm = confirmCustom;
    }

    function setDisabledBtn(){
        var is=$pass.val()==''||$pass.is('.wrong');
        $btn.prop('disabled',is);
    }

    var $pass=$jq("input[type='password']",$blForm)
        .on('change propertychange input', function(e){
        var val=this.value,ln=val.length;
        if(~val.indexOf("'")<0){
            fnShowError($(this),l('invalid_password_contain'));
        }else if($blForm.data('change')&&(ln<settingsData.passLenMin||ln>settingsData.passLenMax)) {
            fnShowError($(this),settingsData.minMaxLenPass);
        } else {
            if(typeof fnHideError=='function'){
                fnHideError($(this))
            }
        }
        setDisabledBtn();
    }).keydown(function(e){
        if(e.keyCode==13) {
            $btn.click();
            return false;
        }
    })

    $btn.click(function(){
        if($blForm.data('submit'))return;
        $blForm.data('submit', true);
        var cmd=$cmd.val();
        $controls.prop('disabled', true);
        if(cmd=='check_password'){
            var val=$pass.val(),ln=val.length;
            $blForm.data('change', true);
            if(ln<settingsData.passLenMin||ln>settingsData.passLenMax) {
                $blForm.data('submit', false);
                $pass.prop('disabled', false);
                fnShowError($pass,settingsData.minMaxLenPass);
                return false;
            }
            $blForm.data('values',{ajax:1,password:val});
        }
        var data=$blForm.data('values');
        data.cmd=cmd;
        $pass.val('');
        $btn.addChildrenLoader();
        $blSettings.data('change',true);
        disabledControlsProfileSettingsFrm($blSettings,true);
        $.post(url_main+'profile_settings.php',data,
                function(res){
                    $controls.prop('disabled',false);
                    var data=checkDataAjax(res);
                    if(data!==false){
                        var $data=$(data);
                        if($data.is('error')){
                            fnShowError($pass,$data.text());
                        }else if(data=='check'){
                            $pass.prop('disabled',true);
                            fnConfirm(l('the_profile_will_be_deleted_forever'), function(){
                                $cmd.val('profile_delete');
                                $btn.addChildrenLoader().click().prop('disabled',true);
                                closeAlert();
                            },function(){
                                $pass.prop('disabled',false);
                                closeAlert();
                            });
                        }else if(data=='delete'){
                            redirectUrl(url_main+'index.php');
                        }else if(data=='demo') {
                            console.log('DEMO USER NO DELETE');
                        }
                    }
                    $cmd.val('check_password');
                    $btn.removeChildrenLoader();
                    $blForm.data('submit', false);
                    $blSettings.data('change',false);
                    disabledControlsProfileSettingsFrm($blSettings);
            })
            return false;
    })
}

function checkModifiedSettingsData($blForm) {
    $blForm=$blForm||$('#frm_profile_settings');
    if($blForm.data('submit')){
        return false
    }else{
       return $('button.btn_save',$blForm).not(':disabled')[0]
    }
}

function initProfileChangeSettings($blForm) {
    $blForm=$blForm||$('#frm_profile_settings');
    var $blSettings=$jq('#bl_forms_settings'),
        $btn=$('button.btn_save',$blForm);

    $blForm.data('values',{});

    function setSettingsData(){
        $('input:radio:checked, select',$blForm).each(function(){
            var data=$blForm.data('values');
            data[this.name]=this.value;
            $blForm.data('values',data);
        })
    }
    setSettingsData();

    function isModifiedSettingsData(){
        var is=0,data=$blForm.data('values');
        $('input:radio:checked, select',$blForm).each(function(){
            is|=(this.value!=data[this.name])
        })
        return is;
    }

    function setDisabledSettingsBtn() {
        $btn.prop('disabled',!isModifiedSettingsData());
    }

    $('input:radio, select',$blForm).on('change',setDisabledSettingsBtn);

    $btn.click(function(){
        $blForm.data('this_btn',$(this));
    })

    function saveSettingsResponse(res){
        var data=checkDataAjax(res);
        if(data!==false){
            var info=$blForm.data('values');
            if(info.set_language!=$("select[name='set_language']",$blForm).val()){
                alertCustomRedirect(urlPagesSite.profile_settings,data.msg,data.title);
            } else {
                setSettingsData();
                alertCustom(l('changes_saved'),l('alert_success'));
            }
        }
        $blForm.data('submit', false);
        $blForm.data('this_btn').removeChildrenLoader();
        disabledControlsProfileSettingsFrm($blSettings);
        setDisabledSettingsBtn();
    }

    $blForm.submit(function(){
        if (!isModifiedSettingsData()||$blForm.data('submit')) return false;
        $blForm.data('submit', true);
        $blForm.data('this_btn').addChildrenLoader();
        $(this).ajaxSubmit({success:saveSettingsResponse});
        disabledControlsProfileSettingsFrm($blSettings,true);
        return false;
    })
}
/* Profile settings */
/* Contact us */
function initContactUs($blForm, fnSuccess, fnError, fnErrorHide) {
    var $email=$("input[name='contact_email']", $blForm),
        $name=$("input[name='contact_username']", $blForm),
        $msg=$("textarea[name='contact_comment']", $blForm),
        $captcha=$("input[name='contact_captcha']", $blForm);
    if (typeof fnSuccess!= 'function'){
        fnSuccess = function(){
            alertCustom(l('message_sent'))
        };
    }
    if (typeof fnError!= 'function'){
        fnError = alertCustom;
    }
    if (typeof fnErrorHide!= 'function'){
        fnErrorHide = closeAlert;
    }
    var $controls=$('input, textarea', $blForm)
        .on('change propertychange input',function(){
            if(!isSubmit)return;
            if (this.name=='contact_email') {
                if (checkEmail(trim(this.value))) {
                    fnErrorHide(this)
                } else {
                    fnError($(this), l('incorrect_email'));
                }
            } else {
                fnErrorHide(this)
            }
        }).on('focus',focusError).on('blur',blurError);

    var fnCheckData=function(){
        var is=false;
        $controls.each(function(){
            if (this.name=='contact_email') {
                if (!checkEmail(trim(this.value))) {
                    fnError($(this), l('incorrect_email'), is);
                    is=true;
                }
            }else if(trim(this.value)==''){
                fnError($(this), l('required_field'), is);
                is=true;
            }
        })
        if (isRecaptchaContact) {
            if(grecaptcha.getResponse(recaptchaWdContact)==''){
                fnError($jq('#contact_recaptcha'), l('incorrect_captcha'));
                is=true;
            }
        }
        return is;
    }

    var send =function(){
        if(ajax_login_status){
            var data={comment:trim($msg.val())};
        } else {
            var data={comment:trim($msg.val()),
                      email:trim($email.val()),
                      username:trim($name.val())
            }
        }
        $.post(url_main+'contact.php?cmd=send&ajax=1',data,function(res){
            if(!ajax_login_status){
                if(isRecaptchaContact){
                    grecaptcha.reset(recaptchaWdContact);
                }else{
                    refreshCaptcha();
                }
            }
            var data=getDataAjax(res, 'data');
            if(data!==false){
                fnSuccess()
            }else{
                alertServerError()
            }
            $controls.val('').prop('disabled',false);
            $btnSubmit.prop('disabled',false).removeChildrenLoader();
        })
    }

    var prepareMsg = function(){
        $controls.prop('disabled',true);
        $btnSubmit.prop('disabled',true).addChildrenLoader();
        if(!ajax_login_status){
            if(!isRecaptchaContact){
                captchaContact=trim($captcha.val());
            }
            $.post(url_main+'contact.php?cmd=check_captcha&ajax=1',{captcha:captchaContact},function(res){
                var data=getDataAjax(res, 'data');
                if(data===false){
                    $controls.prop('disabled',false);
                    $btnSubmit.prop('disabled',false).removeChildrenLoader();
                    if(isRecaptchaContact){
                        grecaptcha.reset(recaptchaWdContact);
                        fnError($jq('#contact_recaptcha'), l('incorrect_captcha'));
                    }else{
                        refreshCaptcha();
                        fnError($captcha.val(''), l('incorrect_captcha'));
                    }
                }else{
                    send()
                }
            })
        }else{
            send()
        }
    }

    var isSubmit=false;
    var $btnSubmit=$('.contact_submit', $blForm).click(function(){
        isSubmit=true;
        if(fnCheckData())return;
        prepareMsg()
    })
    return false;
}
/* Contact us */


function initClickOnLogoMainPage(url){
    url=url||urlPagesSite.index;
    $('.logo_main_page, .logo').each(function(){
        var $el=$(this).click(function(){
            if(currentPage!='index.php')redirectUrl(url);
            return false;
        });
        if(currentPage=='index.php')$el.css({cursor:'default'})
    })
}

function redirectUrlWithLoader($el, url){
    url=url||'';
    $el.addChildrenLoader();
    if($el[0].href){
        url=$el[0].href;
    }
    redirectUrl(url);
}

function logOut(){
    confirmCustom(l('do_you_want_to_log_out'), function(){
        redirectUrl(url_main+'index.php?cmd=logout');
    })
}

function updateSiteSeo(seo){
    var title=document.title;
    if (title!=seo.title) {
        document.title=seo.title;
        siteTitle=seo.title;
        siteTitleTemp=seo.title;
    }
    var $description=$('meta[name=description]'), description=$description.attr('content');
    if(description!=seo.description){
        $description.attr('content', seo.description);
    }
    var $keywords=$('meta[name=keywords]'), keywords=$keywords.attr('content');
    if(keywords!=seo.keywords){
        $keywords.attr('content', seo.keywords);
    }
}

function getOffsetElement(elem){
    if(elem.getBoundingClientRect){
        return getOffsetElementRect(elem)
    }else{
        return getOffsetElementSum(elem)
    }
}

function getOffsetElementSum(elem) {
    var top=0, left=0
    while(elem) {
        top=top+parseInt(elem.offsetTop)
        left=left+parseInt(elem.offsetLeft)
        elem=elem.offsetParent
    }
    return {top:top,left:left}
}

function getOffsetElementRect(elem) {
    var box = elem.getBoundingClientRect();
    var body = document.body;
    var docElem = document.documentElement;
    var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;
    var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;
    var clientTop = docElem.clientTop || body.clientTop || 0;
    var clientLeft = docElem.clientLeft || body.clientLeft || 0;;
    var top  = box.top +  scrollTop - clientTop;
    var left = box.left + scrollLeft - clientLeft;
    return {top:Math.round(top),left:Math.round(left)};
}

function getMouseOffset(e) {
    var top=(e.clientY || e.pageY || e.originalEvent.touches[0].clientY) + $win.scrollTop(),
        left=(e.clientX || e.pageX || e.originalEvent.touches[0].clientX) + $win.scrollLeft();
    return {top:top,left:left};
}

function prepareStatusWritingIm(){
    var time=parseInt(new Date()/1000);
    for (var uid in status_writing) {
        if((time-status_writing[uid]) > timeoutSecServer){
            delete status_writing[uid];
        }
    }
    //console.log('STATUS WRITING',status_writing);
}

function prepareStatusWritingImOne(){
    var time=parseInt(new Date()/1000);
    if((time-status_writing) > timeoutSecServer){
        status_writing='';
    }
}

function grabsTextLink(text){
    var linksImg;
    var grabImg = function(text){
        //var pattern = /^https?:\/\/(?:[a-z\-]+\.)+[a-z]{2,6}(?:\/[^\/#?]+)+\.(?:jpe?g|gif|png)$/igm;
        var pattern = /https?:\/\/(?:[a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif))/igm;
        linksImg = text.match(pattern);
        //console.log(links);
        for (var key in linksImg){
            //console.log(linksImg[key]);
            text=text.replace(linksImg[key], '{img:'+key+'}')
        }
        return text;
    }
            var replaceLinksWithTag=function(text) {
                var pattern = /((https?:\/\/|ftp:\/\/|www\.)((?![.,?!;:()]*(\s|$))[^\s]){2,})/gim;
                text = text.replace(pattern, '<a href="$1" target="_blank">$1</a>');
                return text;
            }
            text = grabImg(text);
            text = replaceLinksWithTag(text);

            var replaceImg = function(text){
                //var pattern = /https?:\/\/(?:[a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif))/igm;
                //linksImg = text.match(pattern);
                //console.log(links);
                for (var key in linksImg){
                    text=text.replace('{img:'+key+'}', '<img src="'+linksImg[key]+'">')
                }
                return text;
            }
    text = replaceImg(text);
    return text;
}

/* GPS */
var geoPoint={lat:0,long:0},
    geoPointData={city:'',country:''}
    watchPositionTimeoutSec=60000,
    watchPositionTimeout=0;
function getGeoPosition() {
    if (!navigator.geolocation){
        return;
    }

    function success(pos) {
        geoPoint.lat=pos.coords.latitude;
        geoPoint.long=pos.coords.longitude;
        console.log('%cGEO POINT GET:','background: #f7f68f', geoPoint);
    };

    function error() {
        clearTimeout(watchPositionTimeout);
        console.log('%cGEO GPS NOT AVIABLE:','background: #ff0000');

    };
    navigator.geolocation.getCurrentPosition(success, error);
}

function setWatchPositionTimeOut(time){
    watchPositionTimeoutSec=time*1000;
}

function watchPosition(){
    console.log('%cGEO POINT INIT:','background: #00ac20',watchPositionTimeoutSec);
    watchPositionTimeout&&clearTimeout(watchPositionTimeout);
    watchPositionTimeout=setTimeout('watchPosition()', watchPositionTimeoutSec);
    getGeoPosition();
}

function setGeoPointData(data){
    geoPointData = data;
}
/* GPS */

function showAdmobBanner(adMobBannerConfig) {
    var config = adMobBannerConfig;

    if(typeof isAdmobBannerVisible !== "undefined" && isAdmobBannerVisible === false) {
        config = false;
    }

    if(typeof AdMob !== "undefined") {
        if(config !== false) {
            AdMob.banner.config(config);
            AdMob.banner.prepare();
            AdMob.banner.show();
        } else {
            AdMob.banner.remove();
        }
    }
}

function appPermissionsActivator(permissions, callbackSuccess, callbackError) {

    if(getAndroidVersion() < 6) {
        callbackSuccess();
        return;
    }

    var permissionsPlugin = cordova.plugins.permissions;

    var permissionsList = [];

    for (i in permissions) {
        permissionsList.push(permissionsPlugin[permissions[i]]);
    }

    permissionsPlugin.hasPermission(permissionsList, function(status){
        if( !status.hasPermission ) {
          permissionsPlugin.requestPermissions(
            permissionsList,
            function(status) {
                if( !status.hasPermission ) {
                    callbackError()
                } else {
                    callbackSuccess();
                };
            },
            callbackError);
        } else {
            callbackSuccess();
        }
    }, null);

}

function initMediaChatMobileVersion() {
    $(function(){
        if(isMobileApp()) {
            //console.log('addEventListener initMediaChatMobileVersion');
            document.addEventListener('deviceready', appMediaChatCheckPermissions, false);
        } else {
            initMediaChat();
        }
    });
}

function appMediaChatCheckPermissions() {
    if(typeMediaChatData === 'video') {
        appVideochatCheckPermissions();
    } else {
        appAudiochatCheckPermissions();
    }
}

function appVideochatCheckPermissions() {
    var androidPermissions = ['CAMERA', 'RECORD_AUDIO'];
    appPermissionsActivator(androidPermissions, initMediaChat, appVideochatCheckPermissionsError);
}

function appAudiochatCheckPermissions() {
    var androidPermissions = ['RECORD_AUDIO'];
    appPermissionsActivator(androidPermissions, initMediaChat, appAudiochatCheckPermissionsError);
}

function appVideochatCheckPermissionsError() {
    appCheckPermissionsShowAlert('app_does_not_have_permissions_to_access_the_camera_and_the_microphone');
}

function appAudiochatCheckPermissionsError() {
    appCheckPermissionsShowAlert('app_does_not_have_permission_to_access_the_microphone');
}

function appCheckPermissionsShowAlert(message)
{
    if(typeof urbanMobileTemplate != 'undefined') {
        showAlert(l(message));
    } else {
        showAlert(l(message), false, 'fa-info-circle');
    }
}

function isMobileApp() {
    return !!window.cordova;
}

function getAndroidVersion(type) {
    var version = device.version;
    var type = type || 'main';
    if(type === 'main') {
        var versionParts = version.split('.');
        version = versionParts[0];
    }
    return version;
}

Youez - 2016 - github.com/yon3zu
LinuXploit