// my = newClass();
function newClass(){
	var newo=true;
	return new newo.constructor();
}
// detect браузера
function browsers(){
	this.ver   = navigator.appVersion.toLowerCase();
	this.agent = ''+navigator.userAgent.toLowerCase();
	this.dom   = document.getElementById ? 1 : 0;
	this.opera = (this.agent.indexOf("opera")>-1 && this.dom) ? 1 : 0;
	this.ie    = (this.ver.indexOf("msie") > -1 && this.dom && !this.opera) ? 1 : 0;
	this.macOS = this.agent.indexOf("mac") > -1;
	this.mac   = (this.macOS && parseInt(this.ver) >= 7) ? 1 : 0;
	this.moz   = (this.agent.indexOf("gecko")>-1)
	this.ns6   = (this.dom && this.agent.indexOf("netscape")>-1 && parseInt(this.ver) >= 5) ? 1 : 0;
	//this.safari = (hnav.search(/macintosh/gmi)!=-1&&hnav.search(/safari/gmi)!=-1);
	//this.opera7 = (this.opera && parseInt(navigator.appVersion) >= 7);
	return this;
}
browser = new browsers();

//---------функция отдачи элемента по его id
function EID(eid){return document.getElementById(eid);}

//---------удаляем необходимый элемент
function DEL(id){document.body.removeChild(EID(id));}

//--обрезает пробелы в начале и в конце строки
function trim(s){
	while (s.substring(0,1) == ' ') {
		s = s.substring(1,s.length);
	}
	while (s.substring(s.length-1,s.length) == ' ') {
		s = s.substring(0,s.length-1);
	}
	return s;
}

//--Функции вывода описания ввода, пример: onFocus="foc(this)" onBlur="blu(this)" value="описание"
function foc(obj){
         if(obj.alt=='' || typeof(obj.alt)=='undefined'){obj.alt=obj.value;}
         if(obj.value==obj.alt){obj.value='';}
}
function blu(obj){
        if(obj.value==''){obj.value=obj.alt;}
}

//---------Проверка полей
function check_field(form, type_check, name_field, message){
		//-------------регулярки отдают true если срабатывает условие, и null в обратном случае
		
		//--регулярка на мыло
        var mail = /^([\w\.\-]+)@([a-z0-9\-]+)\.([a-z0-9\-\.]+)$/i;//--условие: обязательное сопостовление указанной регулярке

        //--регулярка на цирфру
        var inte = /[0-9\-\(\)\s]+/i;//--условие: обязательное присутствие хотябы 1 цифры

        //--регулярка на букву
        var text = /[a-zа-я\-\.\s]+/i;//--условие: присутствие хотябы 1 буквы

        //--регулярка на пробел
        var blank = /\s+/;//--условие: присутсвие хотябы 1 пробела, включая space, tab, form feed, line feed. Эквивалентно [ \f\n\r\t\v].
        
        var obj = form[name_field];
        if(obj!=null && typeof(obj)!='undefined'){
        	var obj_value = trim(obj.value);
	        /*
	        Примеры:
	        if(obj.value.match(blank)!=null){//--если хотябы один пробел найден - выдаем сообещине:
	        	alert("пробел найден="+obj.value.match(blank)+"=");
	        }
	        if(obj.value.match(blank)==null){//--если хотябы один пробел не найден - выдаем сообещине:
	        	alert('пробел не найден');
	        }
	        if(obj.value.match(blank)){//--если хотябы один пробел найден - выдаем сообещине:
	        	alert("пробел найден="+obj.value.match(blank)+"=");
	        }
	        */
	        //alert("="+obj.value.match(eval(type_check))+"=");
	        if(obj_value.match(eval(type_check))==null || obj_value==''){
	            obj.value = obj_value;
	            obj.style.border='#FF0000 1px solid';
	            return "- Вы не указали "+message+". Исправьте, пожалуйста!\n";
	    	}else{
	    		obj.value = obj_value;
	    		obj.style.border='#cccccc 1px solid';
	    		return "";
	    	}
    	}else{
    		alert("- Поле с id: "+name_field+" не найдено\n");
    		return "+";
    	}
}

// новое виртуальное окно с изображением
function openIMG(w,h,puth,title){
	var valLeft = (screen.width) ? (screen.width-w)/2 : 0;//--отступ слева
	var valTop = (screen.height) ? (screen.height-h)/2 : 0;//--отступ сверху
	var features = 'width='+w+',height='+h+',left='+valLeft+',top='+valTop+',';
	myWin = window.open("pic.htm", 'name_up', features+'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0');
	myWin.document.write("<html><head><title>"+title+"</title><body topmargin=0 leftmargin=0><img src="+puth+" border=0></body></html>");
	return false;
}

// функция открывает новое виртуальное окно
function OpenWindow(w,h,puth,window_name,no_scrollbars){
	var valLeft = (screen.width) ? (screen.width-w)/2 : 0;//--отступ слева
	var valTop = (screen.height) ? (screen.height-h)/2 : 0;//--отступ сверху
	var features = 'width='+w+',height='+h+',left='+valLeft+',top='+valTop+',';
	if (typeof(querywindow)!="undefined"){ querywindow.close(); /*querywindow.focus();*/ }
	querywindow = window.open(puth, (window_name? window_name : 'name_up'), features+'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars='+(no_scrollbars?0:1)+',resizable=0');
	return false;
}

//--Функция определения позиции элемента
function PosElement(thisitem){
	if(typeof(thisitem) != 'object') {thisitem = document.getElementById(thisitem);}
	var ww = thisitem.offsetWidth, hh = thisitem.offsetHeight;
	for (var xx = 0,yy = 0; thisitem != null; xx += thisitem.offsetLeft,yy += thisitem.offsetTop,thisitem = thisitem.offsetParent);
	return {Left:xx, Top:yy, Right:xx + ww, Bottom:yy + hh}//--левый, верхний, правый, нижний
}
// чтобы ослик не делал бордер на флэшь-элементах
function Write(str){
	document.write(str);
}
// функция определения значения определенной куки
function GetCookie(name){
    var cookie_pair;
    var cookie_name;
    var cookie_value;
    //--Разбиваем куку в массив
    var cookie_array = document.cookie.split('; ')
    //--Пробегаем по массиву кук
    for (var counter = 0; counter < cookie_array.length; counter++) {
            //--Разбиваю куку на имя/значение
        cookie_pair = cookie_array[counter].split('=');
        cookie_name = cookie_pair[0];
        cookie_value = cookie_pair[1];
        //--Сравниваем имя куки с тем именем, которое нужно нам
        if (cookie_name == name) {
                 //--Если нашли нужную нам куку, то возвращаем её значение
            return cookie_value;
        }
    }
    //--Если куку не нашли, возвращаем null
    return "";
}

// отправляем все данные определенной формы в Ajax-запросе. Пример: onsubmit="return AjaxForm('/inner.php', '&x=1', 'my_function(form)');"
function AjaxForm(e, form_data, eval_data){
	if(typeof(e) == "object"){ action = e.action; }else if(typeof(e) == "string"){ action = e; }else{ return false; }
	if(action && form_data!=""){
		$.ajax({
			type: "POST",
			url: action,
			data: "ajax=1"+form_data,
			success: function(msg){
				if(typeof(eval_data)=="string"){
					eval(eval_data);
				}else{
					if(msg){ alert(msg); }
				}
		 	}
		});
	}
	return false;
}
// накрывает словем загрузки текущую страницу
function AjaxWindowLoad(hide){
	if(hide){
		$("#AjaxWindowLoad").hide();
	}else{
		var e = $("#AjaxWindowLoad").get(0);
		if(e){
			$("#AjaxWindowLoad").show();
		}else{
			$(document.body).prepend('<table id="AjaxWindowLoad" align="center" border="0" width="100%" height="100%" style="position: fixed; *position: absolute; z-index:7777777; left: 0%; top: 0%; background-color:#CCCCCC; filter: Alpha(Opacity=50, Style=0); opacity:0.50;"><tr><td style="text-align: center"><img src="http://kf-forex.ru/js/progress.gif" border="0"></td></tr></table>');
		}
	}
}

// [ путь к странице
var timePuth = null;
var PathMenu = null;
var bodyPagePathMenu  = document.getElementsByTagName((document.compatMode && document.compatMode == "CSS1Compat") ? "HTML" : "BODY")[0];
function SHPathTime(){// скрываем через 0,1 секунды
	timePuth = setTimeout("SHPathMenu()",100);
}
function SHPathHide(t){// скрываем через 0,1 секунды
	t.style.visibility = "hidden";
	t.style.top = "-10000px";// выставляем координату Y
	t.style.left = "-10000px";// выставляем координату Х
	var div = t.getElementsByTagName("DIV");// div[0] - внутренняя часть выпадающего меню
	div[0].style.width = "auto";
	div[0].style.height = "auto";
}
function SHPathMenu(e, id){
	
	if(typeof(e)=="object" && typeof(id)=="string"){// показываем
		
		var t = document.getElementById(id);// меню
		var ka = PosElement(e);// координаты элемента a
		if(t && ka){
			
			clearInterval(timePuth);
			
			if(PathMenu && typeof(PathMenu)=="object" && PathMenu!=t){// скрываем открытое меню, чтобы далее открыть новое меню
				SHPathHide(PathMenu);
			}
			
			t.style.visibility = "visible";// показываем элемент
			t.style.top = ka.Bottom+"px";// выставляем координату Y
			t.style.left = (ka.Left-5)+"px";// выставляем координату Х-5
			
			// находим максимально-допустимую выосту
			var div = t.getElementsByTagName("DIV");// div[0] - внутренняя часть выпадающего меню
			var w_height = window.innerHeight ? window.innerHeight+window.pageYOffset : bodyPagePathMenu.clientHeight+bodyPagePathMenu.scrollTop;
			var maxHeight = (w_height - ka.Bottom - 40);// 40 = 12(сверху)+10(снизу)+18(возможный скролл снизу)
			if(div[0].offsetHeight>maxHeight){
				div[0].style.height = maxHeight+"px";
				div[0].style.width = (div[0].offsetWidth + 40)+"px";
			}
			
			PathMenu = t;// назначаем временной переменной ссылку на объект
		}
		
	}else if(typeof(e)=="string" && e=="stop"){// останавливаем скрытие меню
		
		clearInterval(timePuth);
		
	}else{// скрываем меню
		
		if(PathMenu && typeof(PathMenu)=="object"){
			SHPathHide(PathMenu);
		}
	}
}
// путь к странице ]

// запоминаем CSS-правила используемые по-умолчанию для элементов INPUT
function fieldsValidCSS(form, set_default){
	if(set_default && $(form).data("setdefault")){ set_default = false; }// проверка на многократное использование setdefault для всех полей формы
	$("input:text", form).each(function(){
		fieldValidCSS(this, set_default);
	});
}
// запоминаем/устанавливаем CSS-правила используемые по-умолчанию для заданного элемента
function fieldValidCSS(e, set_default){
	var position = ["Top","Right","Bottom","Left"];
	for(var i=0; i<position.length; i++){
		var name = "border"+position[i];
		var s = $(e).data(name+"Style");
		var c = $(e).data(name+"Color");
		var w = $(e).data(name+"Width");
		if(set_default && (s || c || w)){
			$(e).css(name+"Style", s);// solid
			if(c){ $(e).css(name+"Color", c); }// rgb(192, 186, 186)
			if(w){ $(e).css(name+"Width", w); }// 1px
		}else{
			$(e).data(name+"Style", $(e).css(name+"Style"));// solid
			$(e).data(name+"Color", $(e).css(name+"Color"));// rgb(192, 186, 186)
			$(e).data(name+"Width", $(e).css(name+"Width"));// 1px
		}
	}
}

// проверка валидации данных введенных в заданное поле
function fieldValid(form, name_field, type_check, message){// регулярки отдают true если срабатывает условие, и null в обратном случае
	
	if(form==null || typeof(form)=='undefined'){ return "- Форма не задана!\n"; }
	if(name_field==null || name_field=="" || typeof(name_field)=='undefined'){ return "- Не указано имя поля!\n"; }
	if(type_check==null || type_check=="" || typeof(type_check)=='undefined'){ return "- Для "+name_field+" не указан тип проверяемых данных!\n"; }
	
	var obj = $('[name="'+name_field+'"]', form).get(0);// находим объект
	if(typeof(obj)!='object'){ return "- Поле с именем "+obj+" не найдено\n"; }
	
	if(message==null || typeof(message)=='undefined' || message==""){
		message = $(obj).parent().parent().find("td").eq(0).text().replace("* ","").replace(":","");
		if(message==""){ return "- Для "+name_field+" не указано отладочное сообщение!\n"; }
	}
	
	var obj_value = trim(obj.value);// удаляю пробелы по сторонам
	obj.value = obj_value;
	
	if(obj_value!="" && type_check){// если поле заполнено И указан type_check
		
		var x = null;
		
		var w = /^[a-zа-я]+$/i;// слово
		
		var n = /^[0-9]+$/i;// число
		
		var d = /^[0-9\.\:\s]+$/i;// дата времени
		
		var p = /^[0-9\-\(\)\s\+]+$/i;// номер телефона
		
		var e = /^([\w\.\-]+)@([a-z0-9\-]+)\.([a-z0-9\-\.]+)$/i;// электронная почта
		
		var t = /^[^0-9]+$/i;// отсутствие цифр
		
		var i = /^[^a-zа-я]+$/i;// отсутствие букв
		
		var t1 = /[a-zа-я]+/i;// хотя бы одна буква
		
		var i1 = /[0-9]+/i;// хотя бы одна цифра
		
		var b = /\s+/;// пробел - условие true: присутсвие хотябы 1 пробела, включая space, tab, form feed, line feed. Эквивалентно [ \f\n\r\t\v].
		
		var valid = obj_value.match(eval(type_check));// в случае успеха - возвращает true, в случае если совпадение не найдено - null
		
		if(valid==null || valid==" "){
			obj.style.border='#FF0000 1px solid';
			return "- Поле "+message+" заполнено неправильно! Исправьте, пожалуйста.\n";
		}
	}
	fieldValidCSS(obj, true);
	return "";
}
function fieldMust(form, name_field, message){
	
	if(form==null || typeof(form)=='undefined'){ return "- Форма не задана!\n"; }
	if(name_field==null || name_field=="" || typeof(name_field)=='undefined'){ return "- Не указано имя поля!\n"; }
	
	var obj = $('[name="'+name_field+'"]', form);// находим объект
	if(typeof(obj)!='object'){ return "- Поле с именем "+name_field+" не найдено\n"; }
	
	var tagName = $(obj).get(0).tagName;
	
	if(tagName!="INPUT" && tagName!="TEXTAREA" && tagName!="SELECT"){
		return "- Поле "+name_field+" является элементом "+tagName+" и не поддается проверке!\n";
	}
	
	if(message==null || message=="" || typeof(message)=='undefined'){
		var tr = firstParent(obj[0], "TR");
		message = $("td:first", tr).text().replace("* ","").replace(":","");
		if(message==""){ return "- Для "+name_field+" не указано отладочное сообщение!\n"; }
	}
	
	var l = $(obj).length;
	
	for(var i=0; i<l; i++){// если элементов несколько (например radio)
		var obj_value = trim(obj[i].value);// удаляю пробелы по сторонам
		obj[i].value = obj_value;
	}
	
	var error = "";
	
	var type = $(obj[0]).attr("type");
	
	if(tagName=="INPUT" && (type=="radio" || type=="checkbox") ){
		var field_ok = false;
		for(var i=0; i<l; i++){
			if($(obj[i]).attr("checked")==true){ field_ok = true; }
		}
		if(field_ok==false){ error = "- Поле "+message+" не выбрано. Исправьте, пожалуйста!"; }
		
	}else{//INPUT:text || TEXTAREA || SELECT
		
		if(obj_value=="" || obj_value=="0"){ error = "- Поле "+message+" не заполнено. Исправьте, пожалуйста!"; }
		
	}
	if(error!=""){
		if(type!="radio" && type!="checkbox"){ obj[0].style.border='#FF0000 1px solid'; } return error+"\n";
	}else{
		if(type!="radio" && type!="checkbox"){ fieldValidCSS(obj[0], true); } return "";
	}
}
// проверка валидации номера телефона введенного в заданное поле
function phoneValid(e, event_, endfocus){
	
	if(typeof(e.value)!="string" || event_.ctrlKey // Ctrl
	|| event_.keyCode=="13" // Enter
	|| event_.keyCode=="37" // вверх
	|| event_.keyCode=="38" // вправо
	|| event_.keyCode=="39" // вниз
	|| event_.keyCode=="40" // влево
	|| event_.keyCode=="8"){// tab
		return false;
	}
	
	var str = e.value;// введенный пользователем номер
	var newstr = "";// исправленный номер
	var number_badge = 0;// цифровая позиция цифры номера
	var symbol = "";// переменная под символ
	var clear_number = "";// номер исключительно из цифр (без всяких других знаков)
	
	if(str.substr(0,1)==" "){ str = str.substr(1,100); }// удаление пробела в самом начале // нуля в самом начале ИЛИ str.substr(0,1)=="0" || 
	if(str.substr(str.length,1)==" "){ str = str.substr(0,(str.length-1)); }
	
	for(var i=0; i<str.length; i++){
		
		symbol = str.substr(i,1);
		
		if(symbol!=" " && isNaN(symbol)==false){// если цифра
			
			clear_number += symbol;
			
		}
	}
	
	for(var i=0; i<clear_number.length; i++){
		
		symbol = clear_number.substr(i,1);
		
		newstr += symbol;
		
		if((str.substr(0,1)=="8" || str.substr(0,2)=="+7") && clear_number.length<12){// исправление номеров с 8 или +7
			
			if(i==0){ newstr += " ("; }
			if(i==3){ newstr += ") "; }
			if(i==6){ newstr += "-"; }
			
		}else if(clear_number.substr(0,6)=="810380"){// исправление украинских номеров вида: 810380626743377 на 8-10-380 (6267) 43-377
			
			if(i==0 || i==2 || i==12){ newstr += "-"; }// тире
			if(i==9){ newstr += ")"; } // скобка )
			if(i==5 || i==9){ newstr += " "; }// пробелы
			if(i==5){ newstr += "("; } // скобка (
			
		}else if(clear_number.substr(0,3)=="380"){// исправление украинских номеров вида: +380930595377 на +380 (93) 059-5377
			
			if(i==7){ newstr += "-"; }// тире
			if(i==4){ newstr += ")"; } // скобка )
			if(i==2 || i==4){ newstr += " "; } // пробелы
			if(i==2){ newstr += "("; } // скобка (
			
		}else if(clear_number.substr(0,1)=="9" && clear_number.length=="10"){// исправление российских номеров вида: 9264215497 на +7 (926) 421-5497
			
			if(i==0){ newstr = "+7 (9"; }// тире
			if(i==2){ newstr += ") "; } // скобка ) с пробелом
			if(i==5){ newstr += "-"; }// тире
			
		}else if(clear_number.substr(0,1)=="7" && clear_number.length=="11"){// исправление российских номеров вида: 74957887706 на +7 (495) 788-7706
			
			if(i==0){ newstr = "+7 ("; }// тире
			if(i==3){ newstr += ") "; } // скобка ) с пробелом
			if(i==6){ newstr += "-"; }// тире
			
		}else{// неизвестный вид номера разделяем промежуточными тире
			if(i==2 || i==5 || i==10 || i==14){ newstr += "-"; }
		}
	}
	// если в начале номера знак +, при этом следующая цифра не задана или являеся цифрой 7 или 3 (правльно записываемый номер или Украина)
	if(str.substr(0,1)=="+" && (str.substr(1,1)=="" || str.substr(1,1)=="7" || str.substr(1,1)=="3")){ newstr = "+"+newstr; }
	
	// если фокус покидает поле, и на конце сформировавшегося номера знак - тире
	if(endfocus && newstr.substr((newstr.length-1),1)=="-"){ newstr = newstr.substr(0,(newstr.length-1)); }
	
	e.value = newstr;
	
	return false;
}

// устанавливает обработчики событий на элемент(ы) для проверки валидации телефонного номера
function phoneCheck(e){
	$(e).keyup(function(event){// когда пользователь отпускает клавишу клавиатуры
	    phoneValid(this, event);
	}).keypress(function(event){// когда пользователь нажимает клавишу клавиатуры и удерживает её в нажатом состоянии
	    phoneValid(this, event);
	}).change(function(event){// когда поле теряет фокус
	    phoneValid(this, event, true);
	});
}

// получает позицию фокуса (курсора) в заданном поле
function getFocusPos(e){
	var pos = 0;
	if(browser.ie){
		var r = e.document.selection.createRange();
		pos = r.text.length;
	}else{
		pos = e.selectionEnd;// находим порядковый номер окончания выделения
	}
	return pos;
}

// устанавливает позицию фокуса (курсора) в заданном поле
function setFocusPos(e, pos){
	if(browser.ie){
		var r = e.document.selection.createRange();// создаем на основе выделенного объект TextRange
		r.moveStart("character", pos)// начальная позиция равна длинне нового текста
		r.moveEnd("character", pos); //конечная позиция равна минусовой длинне вставляемого текста
		r.select();
	}else{
		e.setSelectionRange(pos,pos);
	}
}


// находит и возвращает первый родительский элемент по заданному имени
function firstParent(e, name){
	var find = true;
	if(typeof(e)=="object" && name){
		while(find){
			var e = e.parentNode;
			if(e.tagName==name){
				find = null;
			}
		}
		return e;
	}else{
		return false;
	}
}

jQuery(document).ready(function($){// пример применения: <a href="#d2" class="toggle">ссылка</a>...<div id="d2">изначально скрытый текст</div>
	$(".toggle").click(function(){ var id = this.href.split("#"); if(id[1]){ $("#"+id[1]).toggle(); return false; } });
	$(".toggle").each(function(){ var id = this.href.split("#"); if(id[1]){ $("#"+id[1]).hide(); } });
});
jQuery(document).ready(function($){
	$('.GoGo').click(function(){// клики с баннеров
		var link = this.href;
		var i = $('.GoGo').index(this);
		var elem = document.createElement("script");
		var obj = document.body.insertBefore(elem, document.body.firstChild);
		obj.setAttribute("language", "Javascript");
		obj.setAttribute("type", "text/javascript");
		obj.setAttribute("src", 'http://kf-forex.ru/outer/statistics_banners_clicks.php?banner_id=' + (i+1) );
		var tempTimer = setTimeout(function(){ location.href = link; }, 123);
		return false;
	});
});
// собирает в строку все данные определенной формы, чтобы затем передать их в Ajax-запросе
function AjaxData(form){
	var form_data = "";
	if(form){
		// [ специальных хак под JQuery
		var id = "";
		id = $(form).attr("id");
		if(id==""){ 
			id = "id"+Math.round(Math.random() * 1000000000);
			$(form).attr("id", id);
		}
		// специальных хак под JQuery ]
		var Elements = $("#"+id+" * ");
		for(var i=0; i<Elements.length; i++){
			var name = $(Elements[i]).attr("name");
			if(name){
				var value = $(Elements[i]).val();
				if(value && name!="" && value!="" && (Elements[i].tagName=="INPUT" || Elements[i].tagName=="TEXTAREA" || Elements[i].tagName=="SELECT") ){
					
					var type = $(Elements[i]).attr("type");
					if(Elements[i].tagName=="INPUT" && (type=="radio" || type=="checkbox") && $(Elements[i]).attr("checked")==false){
						continue;
					}
					if(Elements[i].tagName=="SELECT" && $(Elements[i]).attr("multiple")){
						$("option", Elements[i]).each(function(){
							if($(this).attr("selected")){
								form_data = form_data+"&"+ name +"="+ $(this).val();
							}
						});
					}else{
						form_data = form_data+"&"+ name +"="+ value.replace(/%/g,"%25").replace(/&/g,"%26").replace(/\+/g,'%2B');
					}
				}
			}
		}
	}
	return form_data;
}
