var DATE_HINT = 'mm/dd/yyyy';

function my_getbyid(id) {
	var itm = null;
	if (document.getElementById) { itm = document.getElementById(id); }
	else if (document.all) { itm = document.all[id]; }
	else if (document.layers) { itm = document.layers[id]; }
	return itm;
}

function trim(s) {

    if ( !s ) s = '';
	var s2 = s.replace(/^\s*/, "");
    return s2.replace(/\s*$/, "");

}

function rtrim(s,exmpSymbs) {

	if ( !exmpSymbs ) exmpSymbs = '\s';
    var r = new RegExp("[" + exmpSymbs + "]*$");
	if ( !s ) s = '';
    return s.replace(r, "");

}

function isEmail(str)
{
	// Функция возвращает true, если адрес правильный, и false - в противном случае.
	// http://javascripts.boom.ru/faq/faq8.htm

    var supported = 0;
    if ( window.RegExp ) {
        var tempStr = "a";
        var tempReg = new RegExp(tempStr);
        if ( tempReg.test(tempStr) ) {
            supported = 1;
        }; // if
    }; // if

    if ( ! supported ) {
        return ( str.indexOf(".") > 2 ) && ( str.indexOf("@") > 0 );
    }; // if

    var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
    var r2 = new RegExp(
        "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$"
    );
    return ( ! r1.test(str) && r2.test(str) );

}

function isURL(str)
{
	// Функция возвращает true, если URL правильный, и false - в противном случае.

    var r = new RegExp("^(https?://)?([a-zA-Z0-9-])+(\.([a-zA-Z0-9-])+)*(\.([a-zA-Z0-9~\/])+)+[^\s]*$","i");
    return r.test(str);

}

function isPhone(s)
{
	//s = s.replace(/-+/g,"-");
	s = trim(s);
	var r = new RegExp("^(1.){0,1}\\d\\d\\d.\\d\\d\\d.\\d\\d\\d\\d$");
	return r.test(s);
}

function isDate(s)
{
	var r = new RegExp("^(0{0,1}[1-9]|1[012])/(0{0,1}[1-9]|[12][0-9]|3[01])/((19|20)\\d\\d)$");

	var arr = r.exec(s);
	if ( arr )
	{
		var mon = arr[1], day = arr[2], yr = arr[3];
		if (day == 31 && (mon == 4 || mon == 6 || mon == 9 || mon == 11)) return false;
		if (day >= 30 && mon == 2) return false;
		if (mon == 2 && day == 29 && !(yr % 4 == 0 && (yr % 100 != 0 || yr % 400 == 0))) return false;
		return yr + '-' + (mon.length<2?'0':'') + mon + '-' + (day.length<2?'0':'') + day;
	}

	return false;
}

function isDateBeforeNow(s, not, incToday)
{
	if ( (s = isDate(s)) )
	{
		var dt = new Date();
		var yr = dt.getFullYear(), mon = (dt.getMonth()+1), day = dt.getDate();
		var scur = yr + '-' + (mon<10?'0':'')+mon + '-' + (day<10?'0':'')+day;

		var bln = s < scur;
		if ( not ) bln = s > scur;

		if ( incToday == null ) incToday = true;

		if ( bln || (incToday && s == scur ) ) return s;
	}
	return false;
}

function getAgeFromBirthday(s) {

	var r = new RegExp("^(\\d{1,2})/(\\d{1,2})/(\\d{4})$");
	var arr = r.exec(s);
	if ( arr ) {
		var dt = new Date(arr[3],arr[1]-1,arr[2]);
		var now = new Date();
		var age = now.getFullYear() - dt.getFullYear();
		if ( dt.getMonth() > now.getMonth() ||
			(dt.getMonth() == now.getMonth() && dt.getDate() > now.getDate()) ) age--;
		return age;
	}
	else return false;
}

function fncLooksLikeNotValidZIP(strZIP) {
/*
    Version:                2004-08-03
    Original programmer:    © Sergey Bres aka tserbis
                            Ukraine
                            E-mail: tserbis@yandex.ru

    Usage in <form>:        onSubmit="
                                if ( strErrMsg = fncLooksLikeNotValidZIP(this.zip.value) ) {
                                    alert(strErrMsg);
                                    return false;
                                } // if
                            "
*/
    var lenZIP = strZIP.length;

    var bln_10 = 10 == lenZIP;

    if ( 5 != lenZIP && ! bln_10 ) {
        return 'Incorrect ZIP code length.';
    }; // if

    var digitsReg = /^\d+$/;

    if (
        ! digitsReg.test(strZIP.substr(0, 5)) ||
        ( bln_10 && ! digitsReg.test(strZIP.substr(6)) )
    ) {
        return 'Invalid character in ZIP code.';
    }; // if

    if ( bln_10 && '-' != strZIP.charAt(5) ) {
        return 'Incorrect format for 5-4 digit ZIP code.';
    }; // if

    return false;

} // function fncLooksLikeNotValidZIP

//------------------------
// Window open functions

function openWin(url,name,geom_vals, sets)
{
	var win_nm = name || url;
	var geom = geom_vals || {};
	var w,h,x,y;
	w = geom.w || 800;
	h = geom.h || 630;
	if ( geom.center )
	{
		x = geom.x || (screen.width ? Math.round((screen.width - w)/2) : 100);
		y = geom.y || (screen.height ? Math.round((screen.height - h)/2) : 100);
	}
	else // default positions
	{
		x = geom.x || screen.width - w * 1.02;
		y = geom.y || (screen.height * 0.85 - h)/2;
	}
	var settsDef = ',menubar=yes,scrollbars=yes,titlebar=yes,scrollbars=yes,resizable=yes';
	var settings = (sets ? ('string' == typeof(sets) && '@' == sets[0] ? settsDef + ',' + sets.substr(1) : ',' + sets) : false) || settsDef;
	return window.open(url,win_nm,'width='+w+',height='+h+',left='+x+',screenX='+x+',top='+y+',screenY='+y + settings);
}

function openFeedbackWin(url) // popup feedback window
{
	openWin(url,'winFeedback',{w:700, h:630});
	return false;
}

function openWcWin(sid)
{
	openWin('wallet_card.php'+ (sid?'?'+sid:''),'winWalletCard',{h:715});
	return false;
}

// Window open functions
//------------------------

function addHandler(object, event, handler)
{
  if (typeof object.addEventListener != 'undefined')
    object.addEventListener(event, handler, false);
  else if (typeof object.attachEvent != 'undefined')
    object.attachEvent('on' + event, handler);
  else
    throw "Incompatible browser";
}

function removeHandler(object, event, handler)
{
  if (typeof object.removeEventListener != 'undefined')
    object.removeEventListener(event, handler, false);
  else if (typeof object.detachEvent != 'undefined')
    object.detachEvent('on' + event, handler);
  else
    throw "Incompatible browser";
}

function placeHolder(key, hint, cssf)
{
	var el;
	var cssfilled = cssf || '';
	if ( (el = my_getbyid(key)) && typeof(InputPlaceholder) != 'undefined' )
		var ph = new InputPlaceholder(el, (hint || (typeof(arrHints) != 'undefined' && arrHints[key] ? arrHints[key] : '') || ''), cssfilled, cssfilled + " empInp");
}

function placeHolderDate(key)
{
	placeHolder(key, DATE_HINT, 'date');
}

function emptyInput(val, hint)
{
	return ( '' == trim(val) || (hint || (typeof(arrHints) != 'undefined' && arrHints[key] ? arrHints[key] : '') || '') == trim(val) );
}

function emptyInputDate(val)
{
	return emptyInput(val, DATE_HINT);
}

