var Site = {
	start: function(){
		if($('login')){
			new mooForms('login', {
				imageDir: '/template/images/',
				checkboxImage: {image: 'checkbox.png', width: 12, height: 12}
			});
		}
		$$('input[default]').each(function(el) {
			new Default(el);
		})
		new Svertka();
		new Ajax();
		new Calculator();
		new Addfile();
	}
};
var Calculator = new Class({
	initialize: function() {
		this.el = $('calculator');
		if (!this.el) return;
		this.assignEvents();
		
	},
	assignEvents: function() {
		this.elems = $$('img[active]');
		this.elems.each(function(ele) {
			if(ele.get('active')=="1")
				ele.setStyle('border', '1px solid red');
			ele.setStyle('cursor', 'pointer');
			this.highlight(ele);
		}.bind(this));
		
		this.masta=$$('.mast');
		this.masta.each(function(ele) {
			ele.setStyle('cursor', 'pointer');
		}.bind(this));
		this.masta.addEvent('click', this.mast.bind(this));
		
		this.carta=$$('.carta');
		this.carta.each(function(ele) {
			ele.setStyle('cursor', 'pointer');
		}.bind(this));
		this.carta.addEvent('click', this.placekarta.bind(this));
		//btns
		$('calc_reset').addEvent('click', this.reset.bind(this));
		$('calc_calc').addEvent('click', this.calc.bind(this));
	},
	highlight: function(ele) {
		ele.addEvents({'click':  this.click.bind(this)})
	},
	///ballerpoker/template/images/cards/9d.gif
	mast: function(e) {
		e.stop();
		var idd = $(e.target).get('id');
		if(idd=='d' || idd=='h' || idd=='c' || idd=='s'){
			this.carta.each(function(ele) {
				parsed = ele.src;
				parsed = parsed.replace(/cards\/([2-9tjqka]{1})([hdcs]{1})\.gif/gi,'cards/$1'+idd+'.gif');
				ele.set('src', parsed);
			}.bind(this));
		}
	},
	reset: function(e) {
		e.stop();
		this.elems.set('src','/template/images/emptyh.gif');
		$$('#calculator input').each(function(ele) {
			ele.destroy();
		});
		$('calc_res1').set('html','');
		$('calc_res2').set('html','')
		return false;
	},
	calc: function(e) {
		e.stop();
		this.form = $('calc_form');
		this.elements = this.form.getElements('input');
		new Request.JSON({
			method: 'post',
			onSuccess:function(K,hz){
				if(!K){alert(hz)}
				else{
					if(K.error){alert(K.error);return }
					else{
						$('calc_res1').set('html','WIN:'+K.player1.win+'%<br>LOSS:'+K.player1.loss+'%<br>TIE:'+K.player1.tie+'%');
						$('calc_res2').set('html','WIN:'+K.player2.win+'%<br>LOSS:'+K.player2.loss+'%<br>TIE:'+K.player2.tie+'%');
					}
				}
			},
			url:'calc/'
		}).send(this.form);
		return false;
	},
	placekarta: function(e) {
		e.stop();
		elm = $(e.target);
		var src = elm.get('src');
		this.hz = -1;
		this.elems.each(function(ele,i) {
			if(ele.get('active')=="1"){
				var parsed = src.replace(/([^ ]+)cards\/([2-9tjqkahdcs]{2})\.gif/gi,'$2');
				ele.set('src', src);
				this.hz = i;
				ele.setStyle('border', 'none');
				ele.set('active', '0');
				newel = new Element('input', {'id':'karta'+i,'type':'hidden','name':'karta'+i,'value':parsed,'value':parsed});
				if(!$('karta'+i)){
					newel.inject(ele,'before');
				}
				else{
					newel.replaces($('karta'+i));
				}
			}
			if(this.hz+1 == i && this.hz!=-1){
				ele.set('active', '1');
				ele.setStyle('border', '1px solid red');
			}
		}.bind(this));
	},
	click: function(e) {
		e.stop();
		this.elems.each(function(ele) {
			ele.set('active', '0');
			ele.setStyle('border', 'none');
		}.bind(this))
		ele = $(e.target);
		ele.setStyle('border', '1px solid red');
		ele.set('active', '1');
	}
});
var Svertka = new Class({
	initialize: function() {
		this.el = $$('.svertka');
		if (!this.el) return;
		this.assignEvents();
	},
	assignEvents: function() {
		if(this.el.get('svertkatype')=="out"){
			var slid = new Fx.Slide(''+this.el.get('svertka')+'');
			slid.hide();
		}	
		this.el.addEvent('click', this.svertka.bind(this));
	},
	svertka: function(e){
		e.stop();
		var el = $(e.target).getParent();
		
		var slid = new Fx.Slide(el.get('svertka'));
		slid.toggle();
		return false;
	}
});
var Ajax = new Class({
	initialize: function() {
		this.assignEvents();
	},
	assignEvents: function() {
		var links1 = $$('.delfriend');
		if(links1) links1.addEvent('click', this.delfriend.bind(this));
		var links2 = $$('.addfriend');
		if(links2) links2.addEvent('click', this.addfriend.bind(this));
		var links3 = $$('.unlist');
		if(links3) links3.addEvent('click', this.unlist.bind(this));
		var links4 = $$('.delhand');
		if(links4) links4.addEvent('click', this.delhand.bind(this));
		var links5 = $$('.comdel');
		if(links5) links5.addEvent('click', this.comdel.bind(this));
	},
	comdel: function(e){
		e.stop();
		this.el = $(e.target);
		var el = ''+this.el+'';
		el = el.replace(/([^ ]+)comdel\/([0-9]+).html/gi,'$2');
		var I="id="+el;
		this.makerequest("comdel",I);
		return false;
	},
	comdelOK: function(K){
	//	if(K) alert(K);
	//	else{
			var slid = new Fx.Slide(this.el.getParent().getParent().getParent().getParent());
			slid.slideOut();
	//	}
	},
	unlist: function(e){
		e.stop();
		this.el = $(e.target);
		var el = ''+this.el+'';
		el = el.replace(/([^ ]+)unlist\/([0-9]+).html/gi,'$2');
		var I="id="+el;
		this.makerequest("unlist",I);
		return false;
	},
	unlistOK: function(K){
		this.el.set('html',K);
	//	this.el.addEvent('click', this.unlist.bind(this));
	},
	delhand: function(e){
		e.stop();
		this.el = $(e.target);
		var el = ''+this.el+'';
		el = el.replace(/([^ ]+)delhand\/([0-9]+).html/gi,'$2');
		var I="id="+el;
		this.makerequest("delhand",I);
		return false;
	},
	delhandOK: function(K){
		if(K) alert(K);
		else{
			var slid = new Fx.Slide(this.el.getParent().getParent().getParent().getParent());
			slid.slideOut();
		}
	},
	delfriend: function(e){
		e.stop();
		var el = ''+$(e.target)+'';
		this.el = el.replace(/([^ ]+)delfriend\/([0-9]+).html/gi,'$2');
		var I="id="+this.el;
		this.makerequest("delfriend",I);
		return false;
	},
	delfriendOK: function(K){
		if(K) alert(K);
		else{
			var slid = new Fx.Slide('friend'+this.el);
			slid.slideOut();
		}
	},
	addfriend: function(e){
		e.stop();
		this.elem = $(e.target);
		var el = ''+this.elem+'';
		this.el = el.replace(/([^ ]+)addfriend\/([0-9]+).html/gi,'$2');
		var I="id="+this.el;
		this.makerequest("addfriend",I);
		return false;
	},
	addfriendOK: function(K){
		var hz = this.elem.getParent();
		hz.setStyle('background','transparent');
		hz.set('html',K);
	},
	makerequest: function(page,variable){
		var that = this;
		new Request({
			method: 'post',
			onSuccess:function(K){
				eval('that.'+page+'OK(K)');
			},
			url:'/'+page+'/'
		}).send(variable);
	}
});

var Default = new Class({
	initialize: function(el) {
		this.el = $(el);
		if(!this.el) return;
		this.assignEvents();
		this.password = this.el.get('type') == 'password';
		this.blur();
	}, 
	
	assignEvents: function() {
		this.el.addEvents({
			'blur':  this.blur.bind(this),
			'focus': this.focus.bind(this)
		})
	},
	
	focus: function() {
		if (this.el.hasClass('default')) {
			this.el.set('value', '');
			this.el.removeClass('default');
			if (this.password) this.el.set('type', 'password');
		}
	},
	
	blur: function() {
		if (this.el.get('value').match(/^\s*$/)) {
			this.el.set('value', this.el.get('default'));
			this.el.addClass('default')
		//	if (this.password) this.el.set('type', 'text');
		}
	}
});

//reg validate
var Validate = new Class({
	
	getOptions: function(){
		return {
			validateOnBlur: true,
			errorClass: 'error',
			errorMsgClass: 'errorMessage',
			dateFormat: 'dd/MM/yy',
			onFail: Class.empty,
			onSuccess: false,
			showErrorsInline: true,
			label: 'Please wait...'
		};
	},

	initialize: function(form, options){
		this.options={};
		this.options.validateOnBlur= true;
		this.options.errorClass= 'error';
		this.options.errorMsgClass= 'errorMessage';
		this.options.dateFormat= 'dd/MM/yy';
		this.options.onFail= Class.empty;
		this.options.onSuccess= false;
		this.options.showErrorsInline= true;
		this.options.label= 'Please wait...';
		
		this.form = $(form);
		this.elements = this.form.getElements('.required');
		
		this.list = [];
		
		this.elements.each(function(el,i){
			if(this.options.validateOnBlur){
				el.addEvent('blur', this.validate.bind(this, el));
			}
		}.bind(this));
		
		this.form.addEvent('submit', function(e){
			var event = new Event(e);
			var doSubmit = true;
			this.elements.each(function(el,i){
				if(! this.validate(el)){
					event.stop();
					doSubmit = false
					this.list.include(el);
				}else{
					this.list.empty();
				}
			}.bind(this));
			
			if(doSubmit){
				if(this.options.onSuccess){
					event.stop();
					this.options.onSuccess(this.form);
				}else{
					this.form.getElement('input[type=submit]').setProperty('value',this.options.label);
				}
			}else{
				this.getList();
			}
			
		}.bind(this));
		
	},
	
	getList: function(){
		var list = new Element('ul');
		this.list.each(function(el,i){
			if(el.title != ''){
			var li = new Element('li').injectInside(list);
			new Element('label').setProperty('for', el.id).set('html',el.title).injectInside(li);
			}
		});
		return list;
	},
	
	validate: function(el){
		var valid = true;
		this.clearMsg(el);
		
		switch(el.type){
			case 'text':
			case 'textarea':
			case 'select-one':
				if(el.value != ''){
					if(el.hasClass('email')){
						var regEmail = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/;
						if(el.value.toUpperCase().match(regEmail)){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Введите правильный e-mail адрес');
						}
					}
					
					if(el.hasClass('number')){
						var regNum = /[-+]?[0-9]*\.?[0-9]+/;
						if(el.value.match(regNum)){
							if(el.value == 0) {
								valid = false;
								this.setMsg(el, 'Обязательное поле');
							}
							else valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Обязательное поле');
						}
					}
					
					if(el.hasClass('code')){
						var regPC = /^([A-Za-z0-9]{5})$/
						if(el.value.match(regPC)){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Введите правильные символы');
						}
					}
					if(el.hasClass('login')){
						var regPC = /^([.,\]\[\)\(\|A-Za-z0-9]{3,14})$/
						if(el.value.match(regPC)){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Должен состоять из букв латинского алфавита, быть более 2 символов и не превышать 14');
						}
					}
					
					if(el.hasClass('date')){
						var d = Date.parseExact(el.value, this.options.dateFormat);
						if(d != null){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Please enter a valid date in the format: '+this.options.dateFormat.toLowerCase());
						}
					}
					
				}else{
					valid = false;
					this.setMsg(el);
				}
				break;
				
			case 'checkbox':
				if(!el.checked){
					valid = false;
					this.setMsg(el);
				}else{
					valid = true;
				}
				break;
			case 'password':
				if(el.value == ''){
					valid = false;
					this.setMsg(el);
				}else{
					if(el.hasClass('confirm')){
						if(el.value==this.form.field8.value){
							valid = true;
						}
						else{
							valid = false;
							this.setMsg(el, 'Пароли не совпадают!');
						}
					}
					valid = true;
				}
				break;
				
			case 'radio':
				var rad = $A(this.form[el.name]);
				var ok = false;
				rad.each(function(e,i){
					if(e.checked){
						ok = true;
					}
				});
				if(!ok){
					valid = false;
					this.setMsg(rad.getLast(), 'Please select an option');
				}else{
					valid = true;
					this.clearMsg(rad.getLast());
				}
				break;
				
		}
		return valid;
	},
	
	setMsg: function(el, msg){
		if(msg == undefined){
			msg = el.title;
		}
		if(this.options.showErrorsInline){
			if(el.error == undefined){
				el.error = new Element('p').addClass(this.options.errorMsgClass).set('html',msg).injectAfter(el);
			}else{
				el.error.setText(msg);
			}
			el.addClass(this.options.errorClass);
		}
	},
	
	clearMsg: function(el){
		el.removeClass(this.options.errorClass);
		if(el.error != undefined){
			el.error.destroy();
			el.error = undefined;
		}
	}
	
});


//swiffy
Addfile = new Class({
	initialize: function() {
		var hz =  $('car_upload');
		if(hz){
			swiffy= new FancyUpload2($('status'), $('list'), {
				'url': $('car_upload').action,
				'fieldName': 'photoupload',
				'path': '/template/Swiff.Uploader.swf',
				'data': $('car_upload'),
				'limitFiles': 1,
				'onLoad': function() {
					$('status').removeClass('hide');
					$('fallback').destroy();
				},
				fileComplete: function(file, response) {
					this.options.processResponse || this
					var json = $H(JSON.decode(response, true));
					if (json.get('result') == 'success') {
						file.element.addClass('file-success');
						file.info.set('html', json.get('size'));
					} else {
						file.element.addClass('file-failed');
						file.info.set('html', json.get('error') || response);
					}
				}
			});
			$('upload').addEvent('click', function() {
				swiffy.upload();
				return false;
			});
			$('browse-images').addEvent('click', function() {
				swiffy.browse({'Video (*.mpg, *.avi, *.wmv, *.mpeg)': '*.mpg; *.avi; *.wmv; *.mpeg'});
				$('upload1').setStyle('display','block');
				$('upload2').setStyle('display','block');
				return false;
			});
		}
	}
});


window.addEvent('domready', function(){
	Site.start();
});

function addComment(){
	var Req = new Request({
					onComplete:function(j){
						$('comtab').set('html',j);
						$('inputform').input.value='';
					},
					method: 'post',
					url:'/ajaxaddcomment/'
					}).send($('inputform'));
}

function addText(elname, wrap1, wrap2) {
	if (document.selection) { // for IE 
		var str = document.selection.createRange().text;
		document.forms['inputform'].elements[elname].focus();
		var sel = document.selection.createRange();
		sel.text = wrap1 + str + wrap2;
		return;
	} else if ((typeof document.forms['inputform'].elements[elname].selectionStart) != 'undefined') { // for Mozilla
		var txtarea = document.forms['inputform'].elements[elname];
		var selLength = txtarea.textLength;
		var selStart = txtarea.selectionStart;
		var selEnd = txtarea.selectionEnd;
		var oldScrollTop = txtarea.scrollTop;
		//if (selEnd == 1 || selEnd == 2)
		//selEnd = selLength;
		var s1 = (txtarea.value).substring(0,selStart);
		var s2 = (txtarea.value).substring(selStart, selEnd)
		var s3 = (txtarea.value).substring(selEnd, selLength);
		txtarea.value = s1 + wrap1 + s2 + wrap2 + s3;
		txtarea.selectionStart = s1.length;
		txtarea.selectionEnd = s1.length + s2.length + wrap1.length + wrap2.length;
		txtarea.scrollTop = oldScrollTop;
		txtarea.focus();
		return;
	} else {
		insertText(elname, wrap1 + wrap2);
	}
}

function insertText(elname, what) {
	if (document.forms['inputform'].elements[elname].createTextRange) {
		document.forms['inputform'].elements[elname].focus();
		document.selection.createRange().duplicate().text = what;
	} else if ((typeof document.forms['inputform'].elements[elname].selectionStart) != 'undefined') { // for Mozilla
		var tarea = document.forms['inputform'].elements[elname];
		var selEnd = tarea.selectionEnd;
		var txtLen = tarea.value.length;
		var txtbefore = tarea.value.substring(0,selEnd);
		var txtafter =  tarea.value.substring(selEnd, txtLen);
		var oldScrollTop = tarea.scrollTop;
		tarea.value = txtbefore + what + txtafter;
		tarea.selectionStart = txtbefore.length + what.length;
		tarea.selectionEnd = txtbefore.length + what.length;
		tarea.scrollTop = oldScrollTop;
		tarea.focus();
	} else {
		document.forms['inputform'].elements[elname].value += what;
		document.forms['inputform'].elements[elname].focus();
	}
}

/////////////////////////////////
function showform(num,foc){
	//if(!num) return;
	var elm = $("input");
	var elm2 = $("comedit");
	if(elm2) setOuterHTML("openform",elm2.innerHTML);
	else setOuterHTML("openform",'');
	//if(num!=0){
	$("comform"+num).innerHTML='<div id="com"></div>'+
	'<div id="comtab"></div>'+
	'<div id="openform">'+
		'<div id="addComment">'+
			'<input type="hidden" name="parent" value="'+num+'">'+
			'<p><textarea id="input" name="comtext" rows="10" style="width:100%;">'+elm.value+'</textarea></p>'+
			'<p><input type="submit" value="Add post" onClick="addComment(); return false;" id="submit_1"> '+
			'<input type="submit" value="Cancel" onClick="showform(0,0); return false;" id="submit_1"></p>'+
		'</div>'+
	'</div>';
	
	if(foc==1)$("input").focus();
//}
	
}
function setOuterHTML(ElementID, txt)
{
var someElement = $(ElementID); 

//работает для IE, но не работает для Firefox.
if(!someElement) return;
if (someElement.outerHTML)
{
someElement.outerHTML = txt;
}
else
{
var range = document.createRange();
range.setStartBefore(someElement);
var docFrag = range.createContextualFragment(txt);
someElement.parentNode.replaceChild(docFrag, someElement);
}
} 
function comedit(num){
	var elem=$("mesg"+num);
	if($("txt"+num)) return;
	showform(0,0);
	if(num==0)return;
	var parsed = elem.innerHTML.replace(/<br>/gi,"");
	parsed = parsed.replace(/<div class=\"quotetop\">QUOTE\((.*)\):<\/div><div class=\"quotemain\">(.*)<\/div>/gi,'[quote=$1 ]$2[/quote]');
	parsed = parsed.replace(/<div id="openform">/gi,"");
	parsed = parsed.replace(/<\/div>/g,"");
	parsed = parsed.replace(/<b>([^ ]+)<\/b>/gi,'[b]$1[/b]');
	parsed = parsed.replace(/<i>([^ ]+)<\/i>/gi,'[i]$1[/i]');
	parsed = parsed.replace(/<u>([^ ]+)<\/u>/gi,'[u]$1[/u]');
	parsed = parsed.replace(/<a(.*)href=\"([^\"]+)\"(.*)>(.*)\<\/a>/gi,'[url=$2]$4[/url]');
	parsed = parsed.replace(/<img(.*)src=\"([^\"]+)\"(.*)\>/gi,'[img]$2[/img]');
	elem.set('html','<div id="openform">'+
		'<div id="comedit" style="display:none;">'+elem.innerHTML+'</div>'+
		'<div id="addComment">'+
			'<input type="hidden" name="parent" value="'+num+'" />'+
			'<input type="hidden" name="koment" value="'+num+'" />'+
			'<p><textarea id="txt'+num+'" name="msg" rows="10">'+parsed+'</textarea></p>'+
			'<p><input type="submit" style="font-size:0.9em;" value="Edit" onClick="editComment('+num+'); return false;" id="submit_1"> '+
			'<input type="submit" value="Cancel" style="font-size:0.9em;" onClick="showform(0,1); return false;" id="submit_1"></p>'+
	'</div>');
}
function ckeck_uncheck() {
    var frm = document.pms;
    for (var i=0;i<frm.elements.length;i++) {
        var elmnt = frm.elements[i];
        if (elmnt.type=='checkbox') {
            if(frm.all.checked == true){ elmnt.checked=false; }
            else{ elmnt.checked=true; }
        }
    }
    if(frm.all.checked == true){ frm.all.checked = false; }
    else{ frm.all.checked = true; }
}
function editComment(idd){
	El=$('openform');
	if(!El || !idd) return;
	var Req = new Request({
					onComplete:function(j){
						$('mesg'+idd).set('html',j);
					},
					method: 'get',
					url:'/ajaxeditcomment/'
					}).send($('inputform'));
}
