var $ = document.getElementById;
var string = "abcdefghijklmnopqrstuvwxyz";

/****************************************************************************************************/
function encoded(input){
var str = "";
	for(i=0;i<input.length;i++){
		encode = input.charCodeAt(i);
		var len = decToHex(encode).toString().length;
		if(len == 4 && decToHex(encode).toString() == "2116"){
			str += "" + decToHex(encode) + "%";
		}else if(len == 3){
			str += "" + decToHex(encode) + "%";
		}else if(len == 2){
			str += "" + decToHex(encode) + "^%";
		}else if(len == 1){
			str += "" + decToHex(encode) + "&^%";
		}
	}
return str;
}

function decoded(input){
var reg = /%{1}/i;
var decode = input.split(reg);
var str = "";
	for(j=0;j<decode.length;j++){	
		decoder = hexTodec(decode[j]);
		str += String.fromCharCode(decoder);
	}
return str;
}
/*******************************************************************************************/
function decToHex(n){
	return Number(n).toString(16);
}
function hexTodec(hex){
	return parseInt(hex,16);
}
/*******************************************************************************************/
function RGBtoHex(rgb){
	var rgb = rgb.replace(/\s/g,"");
	var RGB = rgb.match(/^rgb\((\d{1,3}[%]?),(\d{1,3}[%]?),(\d{1,3}[%]?)\)$/i);
	if(!RGB){
		return rgb;
	}else{
		var rgb_array = rgb.replace("rgb(","").replace(")","").split(",");
			for(i=0;i<rgb_array.length;i++){
				if(rgb_array[i].toString().indexOf("%") !== -1){
					rgb_array[i] = rgb_array[i].replace(/[%]?/g,"");
					var color = Number(rgb_array[i]);
					rgb_array[i] = Math.ceil(color*2.55);
				}
			}
		rgb_array[0] = decToHex(rgb_array[0]).toString();
		rgb_array[1] = decToHex(rgb_array[1]).toString();
		rgb_array[2] = decToHex(rgb_array[2]).toString();
		return "#"+rgb_array.join("");
	}
}
function rgb2hex(r,g,b){
  return Number(r).toString(16).toUpperCase().replace(/^(.)$/,'0$1') + Number(g).toString(16).toUpperCase().replace(/^(.)$/,'0$1') + Number(b).toString(16).toUpperCase().replace(/^(.)$/,'0$1');
}
/*******************************************************************************************/
function trim(s){
	return rtrim(ltrim(s));
}
/*******************************************************************************************/
function ltrim(s){
	return s.replace(/^\s+/, ""); 
}
/*******************************************************************************************/
function rtrim(s){
	return s.replace(/\s+$/, ""); 
}
/*******************************************************************************************/
function nl2br(text){
   var chars = Array("\n");
   var replacements = Array("<br/>");
	   for (var i=0; i<chars.length; i++){
		   var re = new RegExp(chars[i], "gim");
				if(re.test(text)){
					text = text.replace(re, replacements[i]);
				}
		}
   return text;
}	
/**********************************************************************************************************************/
function bb2html(text) {
     text = nl2br(text);
     text = text.replace(/(\[b\](.*?)\[\/b\])/igm, '<b>$1</b>');
     text = text.replace(/(\[i\](.*?)\[\/i\])/igm, '<i>$1</i>');
     text = text.replace(/(\[u\](.*?)\[\/u\])/igm, '<u>$1</u>');
     text = text.replace(/(\[\/?[b,u,i]+\])/igm, '');
     return text;
}
/*******************************************************************************************/
function html2bb(text) {
     text = text.replace(/<br\s?\/?>/igm, "\n");
     text = text.replace(/(<b>(.*?)<\/b>)/igm, '[b]$2[/b]');
     text = text.replace(/(<i>(.*?)<\/i>)/igm, '[i]$2[/i]');
     text = text.replace(/(<u>(.*?)<\/u>)/igm, '[u]$2[/u]');
     return text;
}
/*******************************************************************************************/
function htmlspecialchars(text){
   var chars = Array("&", "<", ">", '"', "'");
   var replacements = Array("&amp;", "&lt;", "&gt;", "&quot;", "&#039;");
	if(text){
		   for (var i=0; i<chars.length; i++){
			   var re = new RegExp(chars[i], "gim");
					if(re.test(text)){
						text = text.replace(re, replacements[i]);
					}
			}
		return text;
	}else{
		return chars;
	}
}	
/*************************************************************************************/
function htmlspecialchars_decode(text){
   var chars = Array("&amp;", "&lt;", "&gt;", "&quot;", "&#039;");
   var replacements = Array("&", "<", ">", '"', "'");
	if(text){		
		   for (var i=0; i<chars.length; i++){
			   var re = new RegExp(chars[i], "gim");
					if(re.test(text)){
						text = text.replace(re, replacements[i]);
					}
			}
		return text;
   	}else{
		return chars;
	}
}	
/*************************************************************************************/
	function str_replace ( search, replace, subject ) {  
    if(!(replace instanceof Array)){
        replace=new Array(replace);
        if(search instanceof Array){
            while(search.length>replace.length){
                replace[replace.length]=replace[0];
            }
        }
    }
    if(!(search instanceof Array))search=new Array(search);
    while(search.length>replace.length){
        replace[replace.length]='';
    }
    if(subject instanceof Array){
        for(k in subject){
            subject[k]=str_replace(search,replace,subject[k]);
        }
        return subject;
    }
    for(var k=0; k<search.length; k++){
        var i = subject.indexOf(search[k]);
        while(i>-1){
            subject = subject.replace(search[k], replace[k]);
            i = subject.indexOf(search[k],i);
        }
    }
    return subject;
}
/*************************************************************************************/
function substr(str,start,len){
var strlen = str.length;
	if(strlen !== 0){
		if(len){
			if(start < strlen){
				var sub_str = str.substring(start, eval(start+len)); 
				return sub_str;
			}else{
				return str;
			}
		}else{
			var sub_str = str.substring(start, strlen); 
			return sub_str;
		}
	}
}
/*************************************************************************************/
function substr_count(str,substr){
var count=0;
	if(str.indexOf(substr) !== -1){
		while (str.indexOf(substr)>=0) {
			str=str.replace(substr,"");
			count++;
		}
		return(count);
	}else{
		return false;
	}
}
/*************************************************************************************/
function strrev(str){
var strlen = str.length;
var text = "";
	for(i=strlen;i>=0;i--){
		var simb = str.charAt(i);
		text += ""+simb+"";
	}
	return text;
}
String.prototype.revers = function(){
var strlen = this.length;
var text = "";
	for(i=strlen;i>=0;i--){
		var simb = this.charAt(i);
		text += ""+simb+"";
	}
	return text;
};
/*************************************************************************************/
function str_repeat(str,num){
var text = "";
var i = 0;
	while(i<num){
		text += str;
		i++;
	}
return text;
}
String.prototype.repeat = function(num){
var text = "";
var i = 0;
	while(i<num){
		text += this;
		i++;
	}
return text;
};
/*************************************************************************************/
function str_pad(str,pad_len,pad_string){
var pad = "&nbsp;";
var r = pad_len-str.length;
var i = 0;
	if(str.length < pad_len){
		if(pad_string){
			while(i <= r){
				str += pad_string;
				i++;
			}
				if(str.length > pad_len){
					str = str.substring(0,pad_len);
				}
	return str;
		}else{
			for(i=1; i <= r;i++){
				str += pad;
			}
	return str;
		}
	}
}
/*************************************************************************************/
function explode(separator, str){
		if(str.indexOf(separator) !== -1){
			var arr = str.split(separator);
			return arr;
		}else{
			var error = new Array(false);
			return error;
		}
}
Array.prototype.shuffle = function( b ){
 var i = this.length, j, t;
 while( i ){
  j = Math.floor( ( i-- ) * Math.random() );
  t = b && typeof this[i].shuffle!=='undefined' ? this[i].shuffle() : this[i];
  this[i] = this[j];
  this[j] = t;
 }
 var str = this.toString();
 var arr = str.split(",");
 return arr;
};
Array.prototype.count = function(){
var e = 0;
	for( j in this ){
		if(this[j].toString() !== undefined){
			if(this[j].toString().indexOf("function(){") == -1){
				e++;
			}
		}
	}
return e;
};
function explode_2(separator, str){
var arr = new Array;
var res = new Array;
var pos = new Array;
var error = new Array;
var i = 0;
var k = 0;
var count = -2;
	if(str.indexOf(separator) !== -1 && separator.length == 1){
	str = separator + str + separator;
		for(i=0;i<str.length;i++) {
			if(str.charAt(i) == separator){
				count++;
				pos[count] = str.indexOf(separator,i);
			}else{
				res[i] = "";
			}
		}
			for(j=0;j<pos.length;j++) {
				arr[j] += str.substring(0,str.lastIndexOf(separator,pos[j]));	
				arr[j] = arr[j].substring(arr[j].lastIndexOf(separator,arr[j].length),arr[j].length);	
				arr[j] = arr[j].substring(arr[j].indexOf(separator)+1,arr[j].length);	
			}
return arr;
	}else{
		error[0] = false;
		return error;
	}
}
/*************************************************************************************/
function implode(glue, arr){
var str = "";
	for(i=0;i<arr.length;i++){
		if(glue && glue !== ""){
			str += "" + arr[i] + glue + "";
		}else{
			str += "" + arr[i] + "" + "";
		}
	}
		if(glue && glue !== ""){
			str = str.substring(0,str.length-glue.length);
		}
	return str;
}
Array.prototype.glue = function( separator ){
var str = "";
	for(i=0;i<this.length;i++){
		if(separator && separator !== ""){
			str += "" + this[i] + separator + "";
		}else{
			str += "" + this[i] + "" + "";
		}
	}
		if(separator && separator !== ""){
			str = str.substring(0,str.length-separator.length);
		}
	return str;
};
/*************************************************************************************/
function strncmp(str1, str2, len){
	var s1 = str1.substring(0,0+len);
	var s2 = str2.substring(0,0+len);
		if(s1 == s2){
			return true;			
		}else{
			return false;			
		}
}	
/*************************************************************************************/
	function base64_encode( data ) {
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i=0, enc='';

    do { 
        o1 = data.charCodeAt(i++);
        o2 = data.charCodeAt(i++);
        o3 = data.charCodeAt(i++);
        bits = o1<<16 | o2<<8 | o3;
        h1 = bits>>18 & 0x3f;
        h2 = bits>>12 & 0x3f;
        h3 = bits>>6 & 0x3f;
        h4 = bits & 0x3f;
        enc += b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
    } while (i < data.length);
    switch( data.length % 3 ){
        case 1:
            enc = enc.slice(0, -2) + '==';
        break;
        case 2:
            enc = enc.slice(0, -1) + '=';
        break;
    }
    return enc;
}
/*************************************************************************************/
	function base64_decode( data ) {
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i=0, enc='';
    do {
        h1 = b64.indexOf(data.charAt(i++));
        h2 = b64.indexOf(data.charAt(i++));
        h3 = b64.indexOf(data.charAt(i++));
        h4 = b64.indexOf(data.charAt(i++));
        bits = h1<<18 | h2<<12 | h3<<6 | h4;
        o1 = bits>>16 & 0xff;
        o2 = bits>>8 & 0xff;
        o3 = bits & 0xff;
        if (h3 == 64)      enc += String.fromCharCode(o1);
        else if (h4 == 64) enc += String.fromCharCode(o1, o2);
        else               enc += String.fromCharCode(o1, o2, o3);
    } while (i < data.length);
    return enc;
}
/************************************************************************************/
function WalkTable(id){
	var table = document.getElementById(id);
	var trList= table.getElementsByTagName('tr');
	var tdArray = new Array();
	var trArray = new Array();
	var SEPARATOR = "{*=+|{&}|+=*}";
		for (var i=0;i<trList.length;i++){
			var tdList = trList[i].childNodes;
			tdArray[i] = "";
				for (j=0;j<tdList.length;j++) {
					tdArray[i] += tdList[j].innerHTML;
					tdArray[i] += SEPARATOR;
				}
 					tdArray[i] = tdArray[i].substring(0,tdArray[i].lastIndexOf(SEPARATOR));
					trArray[i] = tdArray[i].toString().split(SEPARATOR);
		} 
	return trArray;
}
/*************************************************************************************/
function getCursorPosition(ctrl){
	var CaretPos = 0;
	// IE Support
	if (document.selection){
		ctrl.focus ();
		var Sel = document.selection.createRange ();
		Sel.moveStart ('character', -ctrl.value.length);
		CaretPos = Sel.text.length;
	}
	// Firefox support
	else if (ctrl.selectionStart || ctrl.selectionStart == '0')
		CaretPos = ctrl.selectionStart;
	return (CaretPos);
}
/*************************************************************************************/
function setCursorPosition(ctrl, pos){
	if(ctrl.setSelectionRange){
		ctrl.focus();
		ctrl.setSelectionRange(pos,pos);
	}
	else if (ctrl.createTextRange) {
		var range = ctrl.createTextRange();
		range.collapse(true);
		range.moveEnd('character', pos);
		range.moveStart('character', pos);
		range.select();
	}
}
/*************************************************************************************/
	function msg(type,param,obj){
	var string = $(obj).value;
	var desc = " ";
	if(type == 'email'){
		if(string.indexOf('@') == 31 || string.indexOf('@') > 31){
			var desc = "\nЛогин не должен превышать 30 символов";
		}
		else if(string.length == 100 || string.length > 100){
			var desc = "\nE-mail не должен превышать 100 символов";
		}
		else{
			var desc = "\nЛогин должен состоять из английских букв, \nцифр и знаков ( - _ . ), начинаться и \nзаканчиваться буквой или цифрой";
		}
	}
	if(type == 'login'){
		if(string.length < 3 || string.length > 25){
			var desc = "\nЛогин не должен быть короче 3 и превышать 25 символов";
		}
		else{
			var desc = "\nЛогин должен состоять из английских букв, \nцифр и знаков ( - _ . ), начинаться и \nзаканчиваться буквой или цифрой";
		}	
	}
	if(type == 'sale'){
		var desc = "\nМожно вводить только цифры и один символ (.) без пробела. \nЦена не может начинаться с нуля. \nПеред точкой должно быть от 2 до 6 цифр. \nПосле точки должно быть только 2 символа 'не больше и не меньше'. \nТочка должна быть только одна";
	}
	if(type == 'ip'){
		var desc = "\nМожно вводить только цифры и символ (.) без пробела. \nIP-адрес не может начинаться с нуля. \nМежду точками должно быть от 1 до 3 цифр. \nТочек должно быть не больше и не меньше трех. \nОбщий вид IP-адреса такой - 111.111.111.111";
	}
	if(type == 'telephon'){
		var desc = "\nМожно вводить только цифры и символ (-) без пробела. \nНомер телефона не может начинаться с нуля. \nСимволов (-) должно быть  четыре.\nОбщий вид телефонного номера такой - 8-888-888-88-88";
	}
	if(type == 'icq'){
		if(string.indexOf('0') == 0){
			var desc = "\nНельзя указывать первый ноль";
		}
		else{
			var desc = "\nНомер ICQ содержит от 5 до 9 цифр без символьных знаков и пробела";
		}
	}
	if(type == 'num'){
		var desc = "\nМожно вводить только цифры без пробела";
	}
	if(type == 'en'){
		var desc = "\nМожно вводить только английские буквы \nв диапазоне a-z без пробела";
	}
	if(type == 'ru'){
		var desc = "\nМожно вводить только русские буквы \nв диапазоне а-я без пробела";
	}
	if(type == 'en_ru'){
		var desc = "\nМожно вводить только английские буквы \nв диапазоне a-z и русские буквы \nв диапазоне а-я без пробела";
	}
	if(type == 'en_num'){
		var desc = "\nМожно вводить только английские буквы \nв диапазоне a-z и цифры без пробела";
	}
	if(type == 'ru_num'){
		var desc = "\nМожно вводить только русские буквы \nв диапазоне a-я и цифры без пробела";
	}
	if(type == 'en_ru_num'){
		var desc = "\nМожно вводить только английские буквы \nв диапазоне a-z, русские буквы \nв диапазоне a-я и цифры без пробела";
	}
		var e_msg = '<img src="img/'+param+'.png" width="16" height="16" border="0" alt="'+param+'	'+type+'\n'+desc+'">';
			if($(type +'_img')){
				$(type +'_img').innerHTML = e_msg;
			}
			else{
				if(param == 'ok'){
					$(obj).style.borderColor = "#000000";
					$(obj).title = '';
				}
				if(param == 'error'){
					$(obj).style.borderColor = "#ff0000";
					$(obj).title = ''+param+'	'+type+'\n'+desc+'';
				}
			}
	}
	function check(obj,type){
		var string = $(obj).value;

			if(type == 'email'){
				var regex = /^(([a-z0-9])+([a-z0-9]|([\.\_\-]))+([a-z0-9]))+@{1}(([a-z0-9])+([a-z0-9]|([\-]{1}))+([a-z0-9]))+\.{1}([a-z]{2,4})$/i;
				if(string.match(regex) == null || string.indexOf('@') == 31 || string.indexOf('@') > 31){
					msg(type,'error',obj);
				}
				else{
					msg(type,'ok',obj);
				}
			}
			if(type == 'login'){
				var regex = /^([a-z0-9]{1}+([a-z0-9]|[\.\_\-]{1})[a-z0-9]+)+$/i;
				if(string.match(regex) == null || string.length < 3 || string.length > 20){
					msg(type,'error',obj);
				}
				else{
					msg(type,'ok',obj);
				}
			}
			if(type == 'sale'){
				var regex = /^([1-9]{1}[0-9]{1,5}\.{1}[0-9]{2})$/gm;
					display(type,regex,string,obj);
			}
			if(type == 'ip'){
				var regex = /^([1-9]{1}[0-9]{0,2}\.{1}[0-9]{1,3}\.{1}[0-9]{1,3}\.{1}[0-9]{1,3})$/gm;
					display(type,regex,string,obj);
			}
			if(type == 'telephon'){
				var regex = /^([1-9]{1}\-{1}[0-9]{3,5}\-{1}[0-9]{3}\-{1}[0-9]{2}\-{1}[0-9]{2})$/gm;
					display(type,regex,string,obj);
			}

			if(type == 'icq'){
				var regex = /^[1-9]{1}[0-9]{4,8}$/gm;
					display(type,regex,string,obj);
			}
			if(type == 'num'){
				var regex = /[^0-9]/gm;
					display(type,regex,string,obj);
			}
			if(type == 'en'){
				var regex = /[^a-zA-Z]/gm;
					display(type,regex,string,obj);
			}
			if(type == 'ru'){
				var regex = /[^а-яА-Я]/gm;
					display(type,regex,string,obj);
			}
			if(type == 'en_ru'){
				var regex = /[^a-zA-Zа-яА-Я]/gm;
					display(type,regex,string,obj);
			}
			if(type == 'ru_num'){
				var regex = /[^а-яА-Я0-9]/gm;
					display(type,regex,string,obj);
			}
			if(type == 'en_num'){
				var regex = /[^a-zA-Z0-9]/gm;
					display(type,regex,string,obj);
			}
			if(type == 'en_ru_num'){
				var regex = /[^a-zA-Zа-яА-Я0-9]/gm;
					display(type,regex,string,obj);
			}
	}

	function display(type,regex,string,obj){
			if(string.match(regex) !== null){
				msg(type,'error',obj);
					if(type == 'icq'){
						msg(type,'ok',obj);
					}
					if(type == 'sale'){
						msg(type,'ok',obj);
					}
					if(type == 'ip'){
						msg(type,'ok',obj);
					}
					if(type == 'telephon'){
						msg(type,'ok',obj);
					}
			}
			else{
				msg(type,'ok',obj);
					if(type == 'icq'){
						msg(type,'error',obj);
					}
					if(type == 'sale'){
						msg(type,'error',obj);
					}
					if(type == 'ip'){
						msg(type,'error',obj);
					}
					if(type == 'telephon'){
						msg(type,'error',obj);
					}
			}
	}
/*************************************************************************************/
function getBodyScrollTop(){
  return self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
}

function getBodyScrollLeft(){
  return self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft);
}
/*************************************************************************************/
function getPos(elemId){
    if(document.getElementById(elemId)){
		var elem = document.getElementById(elemId);
		var w = elem.offsetWidth;
		var h = elem.offsetHeight;
		var l = elem.offsetLeft;
		var t = elem.offsetTop;
			while (elem){
			    l += elem.offsetLeft;
				t += elem.offsetTop;
				elem = elem.offsetParent;
			}
				return {"left": l, "top": t, "width": w, "height":h};
	}else{
				alert("Объект с аттрибутом id='"+elemId+"' скорее всего не существует.");
				return false;
	}
}
/*************************************************************************************/