window.addEvent('domready', function(){
	scrollWindow = new Fx.Scroll(window);
	
	roar = new Roar({
		duration: 10000,
		position: 'bottomLeft'
	});
    
    // Генерирование URI "на лету"
    $$('.gen_title').addEvent('keyup', function(e){
    	var uri = getURI(this.value);
        var names = $$('.gen_name');
		names.each(function(name){
			name.value = uri;
		});
    });
});

// ShadowBox
Shadowbox.init({
	adapter: 'mootools',
	players: ['img'],
	language: 'ru'
});

// Сообщения
function msg(text, style)
{
	roar.setOptions({className: 'roar-' + style});
	roar.alert(lng['h_' + style], text);
}

// Индикатор
function loader(status)
{
	//
	// status: true - открытие
	//         false - скрытие
	//
	if (status == undefined) {
		var status = true;
	}
	var box = 'loader';
	if (status) {
		$(box).removeClass('none');
	}
	else {
		$(box).addClass('none');
	}
}

///////////////////
// Запрос данных //
function getData(action, params)
{
	var url = '/inc/ajax.php?json&action=' + action;
	var request = new Request.JSON({
		url: url,
		onComplete: function(jsonObj){
			resultData(action, jsonObj);
		}
	}).get(params);
}
function getDataPost(action, params)
{
	var url = '/inc/ajax.php?json&action=' + action;
	var request = new Request.JSON({
		method: 'post',
		url: url,
		data: params,
		onComplete: function(jsonObj){
			resultData(action, jsonObj);
		}
	}).send();
}
function getExternalData(url, userFunc)
{
	new JsonP(url, {
		onComplete: userFunc
	}).request();
}
// Запрос данных //
///////////////////

// Готовим URI
function getURI(txt)
{
	txt = txt.toLowerCase();
	var rus = new Array(
		/ /g,	/ж/g,	/ю/g,	/я/g,	/ц/g,	/ч/g,	/ш/g,	/щ/g,	/эй/g,		/а/g,
		/б/g,	/в/g,	/г/g,	/д/g,	/е/g,	/ё/g,	/з/g,	/и/g,	/й/g,		/ы/g,
		/к/g,	/л/g,	/м/g,	/н/g,	/о/g,	/п/g,	/р/g,	/с/g,	/т/g,		/у/g,
		/ф/g,	/х/g,	/ъ/g,	/ю/g,	/ь/g,	/э/g,	/\!/g,	/\?/g,	/\+/g,		/—/g,
		/-/g,	/\./g,	/,/g,	/\(/g,	/\)/g,	/\[/g,	/\]/g,	/%/g,	/&prime;/g,	/&quot;/g,
		/«/g,	/»/g,	/:/g,	/'/g,	/__/g,	/"/g,	"/",	"…",	"#",		/---|--/g
	);
	var eng = new Array(
		'-',	'zh',	'ju',	'ja',	'ts',	'ch',	'sh',	'csh',	'a',		'a'	,
		'b',	'v',	'g',	'd',	'e',	'e',	'z',	'i',	'i',		'y',
		'k',	'l',	'm',	'n',	'o',	'p',	'r',	's',	't',		'u',
		'f',	'h',	'',		'y',	'',		'e',	'',		'',		'',			'-',
		'-',	'',		'',		'',		'',		'',		'',		'',		'',			'',
		'',		'',		'',		'_',	'_',	'',		'',		'',		'',			'-'
	);
	for (i=0; i<eng.length; i++) {
		txt = txt.replace(rus[i], eng[i])
	}
	return txt;
}

// Фиксим PNG
function fixPNG(element)
{
	if (/MSIE (5\.5|6).+Win/.test(navigator.userAgent)) {
		var src;
		if (element.tagName == 'IMG') {
			if (/\.png$/.test(element.src)) {
				src = element.src;
				element.src = "/tpl/img/blank.gif";
			}
		}
		else {
			src = element.currentStyle.backgroundImage.match(/url\("(.+\.png)"\)/i)
			if (src) {
				src = src[1];
				element.runtimeStyle.backgroundImage = "none";
			}
		}
		
		var re_scale_mode = /iesizing\-(\w+)/;
		var m = re_scale_mode.exec(element.className);
		
		var scale_mode = (m) ? m[1] : 'crop';
		
		if (src)
			element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='" + scale_mode + "')";
	}
}

// Валидация формы
function checkFormFields(fields, errorType, errorPrefix)
{
	//
	// errorType = 1 (текст ошибки показывается напротив каждого поля)
	// 			 = 2 (текст ошибки показывается в одном месте)
	//
	if (errorType == undefined) {
		errorType = 1;
	}
	if (errorPrefix == undefined) {
		errorPrefix = 'error_';
	}
	var errorText = '';
	var classError = 'error_field';
	var result = true;
	var error = false;
	
	$each(fields, function(field, index){
		$each(field, function(check){
			// Условие
			switch (check.code) {
				case 'zero':
					// Не ноль
					cond = "$(index).get('value') == 0";
					break;
				case 'empty':
					// Не пусто
					cond = "$(index).get('value') == ''";
					break;
				case 'empty_editor':
					// Не пусто (для редактора)
					cond = "tinyMCE.activeEditor.getContent() == ''";
					break;
				case 'uri':
					// URI
					cond = "/[а-яА-Я#\'\" ]/.test($(index).get('value'))";
					break;
				case 'photo':
					// Расширение фотки (без "Из сети")
					cond = "$(index).value != '' && !/jpg|jpeg|gif|png$/.test($(index).value)";
					break;
				case 'photo_web':
					// Расширение фотки
					cond = "($(index).value != '' && !/jpg|jpeg|gif|png$/.test($(index).value)) || ($(index + '_web').value != lng['l_url'] && !/jpg|jpeg|gif|png$/.test($(index + '_web').value))";
					break;
				case 'email':
					// Валидность e-mail
					cond = "$(index).get('value') != '' && !/^[\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?\.[A-Za-z0-9]{2,6}$/.test($(index).get('value'))";
					break;
				case 'checked':
					// Переключатель (вкл.)
					cond = "!$(index).checked";
					break;
				case 'sex':
					// Пол
					cond = "!$(index + '_1').get('checked') && !$(index + '_2').get('checked')";
					break;
				case 'pwd_confirm':
					// Подтверждение пароля
					cond = "$(index).get('value') != '' && $(index).get('value') != $(index + '_confirm').get('value')";
					break;
				case 'banners_upload':
					// Баннеры (загружаемый)
					cond = "$('banner_type').get('value') == 1 && $(index).get('value') == ''";
					break;
				case 'banners_code':
					// Баннеры (скрипт)
					cond = "$('banner_type').get('value') == 2 && $(index).get('value') == ''";
					break;
				case 'banners_url':
					// Баннеры (URL)
					cond = "($('banner_type').get('value') == 1 && !/swf$/.test($('banner').get('value'))) && $(index).get('value') == ''";
					break;
				case 'pubs_desc_count':
					// Публикации / Длина анонса
					cond = "$(index).get('value') != '' && $(index).get('value').length > lim_pubs_desc";
					break;
				default:
					cond = check.code;
			}
			
		    if (eval(cond)) {
		        error = true;
		        if (errorType == 1) {
		        	$(errorPrefix + index).set('text', check.text);
		        }
		        else if (errorType == 2) {
		        	errorText += check.text + '<br />';
		        }
		    }
	    });
		if (error) {
			if (errorType == 1) {
				$(errorPrefix + index).setStyle('display', 'block');
				if ($(index)) {
					$(index).className += ' ' + classError;
				}
			}
			result = false;
		}
		else {
			if (errorType == 1) {
				if ($(index)) {
					$(index).className = $(index).className.replace(' ' + classError, '');
				}
				$(errorPrefix + index).setStyle('display', 'none');
			}
		}
		error = false;
	});
	
	if (errorType == 2 && errorText != '') {
		msg(errorText, 'error', false);
	}
	
	return result;
}

/////////////////////
// Валидность даты //
function isInteger(s)
{
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag)
{
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year)
{
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n)
{
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(dtStr)
{
	/*
		mm/dd/yyyy
	*/
	
	var dtCh = "/";
	var minYear = 1900;
	var maxYear = 2100;
	
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		//alert("The date format should be : mm/dd/yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		//alert("Please enter a valid month")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		//alert("Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		//alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		//alert("Please enter a valid date")
		return false
	}
	return true
}
// Валидность даты //
/////////////////////

function openWin(width, height, lnk)
{
	return window.open(lnk, 'popup', 'HEIGHT=' + height + ',resizable=yes,WIDTH=' + width, false);
}

function see(obj, objName)
{
	var result = "The properties for the " + objName + " object:" + "\n";
	for (var i in obj) {result += i + " = " + obj[i] + "\n";}
	return result;
}
