var sForm = function(f){
	if(typeof f == 'string'){ var f = document.getElementById(f); }
	if(typeof f.onsubmit == 'function'){ 
		var fo = f.onsubmit; 
		f.onsubmit = function(){ dForm(f); fo(); } } else { f.onsubmit = function(){ dForm(f); } }
}

var dForm = function(_form){
        var _rand = _getRandomNumber();
	var _inputs = _form.getElementsByTagName('input');
	if(_inputs.length > 0){
		for(var i = 0, l = _inputs.length; i < l; ++i){
			if(_inputs[i].getAttribute('name') == 'csrf') { _inputs[i].parentNode.removeChild(_inputs[i]); }
		}
	}
	if( _form.getAttribute('method').toLowerCase() != 'post' ){ _form.setAttribute('method', 'POST') }
	var _ni = document.createElement('input');
	_ni.setAttribute('type', 'hidden');
	_ni.setAttribute('name', 'csrf');
	_ni.setAttribute('value', _rand);
	_form.appendChild(_ni);
	_setCsrfCookie(_rand);
}

var _setCsrfCookie = new Function("n", "document.cookie = 'csrf=' + n + ';domain=.mail.ru;path=/'");
var _getRandomNumber = new Function("return Math.floor(Math.random() * 65535 * 100)");


var fixAjaxFunction = function(func_name, ajax_name){
        window['old_ajax_call'] = window[func_name];
	if(typeof old_ajax_call == 'function' && typeof ajax_name != 'undefined'){
		window[func_name] = function(){
		        var _fs = ajax_name;
		        var _fa = {}

		        if ( typeof ajax_name == 'string' ){
				_fa[ajax_name] = true;
		        } else if ( typeof ajax_name == 'object' && ajax_name.length > 0) {
		        	for(var i = 0, l = ajax_name.length; i < l; ++i){
		        		_fa[ajax_name[i]] = true;
		        	}
		        }
			
			var args = Array.prototype.slice.call(arguments);
			var _rand = _getRandomNumber();

			if(typeof _fa[arguments[0]] != 'undefined' && _fa[arguments[0]] == true){
			        _setCsrfCookie(_rand);

			        var _pushed = false;
			        for ( var x = 0, l = args.length; x < l; ++x ){
			                if ( typeof args[x] == 'function' && _pushed == false){
			                        args.splice(x, 0, _rand);
			                        _pushed = true;
			                }
			        }
			        
			        if(!_pushed) args.push(_rand);
			        ajax_call.arguments = args;
				old_ajax_call.apply(this, args);
			} else {
				old_ajax_call.apply(this, arguments);
			}
		}
	}
}

var _fixUrl = function(url, rand){
	if ( /^javascript:.*$/.test(url) ){ return url; }
        if(/#/.test(url)){
                var _url = url.split('#');
                var main = _url[0];
        	var hash = _url[1];
	} else { 
		var main = url;
		var hash = '';
	}
        if(/\?/.test(main)){
	        var _main = main.split('?');
	        var lnk = _main[0];
	        var query = _main[1];
	} else { 
		var lnk = main;
		var query = '';
	}
        var qa = ((query) ? query.split('&') : []);
        if (qa.length > 0){
                var _csrfFixed = false;
        	for ( var i = 0, l = qa.length; i < l; ++i ){
        	        var item = qa[i];
        	        if ( /^csrf=[0-9]+?$/.test(item) ){
        	                if(!_csrfFixed){
	        	        	qa[i] = 'csrf=' + rand;
        		        	_csrfFixed = true;
				} else {
					qa[i] = '';
				}
        	        }
        	}
        }
        if(!_csrfFixed){ qa.unshift('csrf=' + rand); }
        return lnk + ((qa.length > 0) ? '?' + qa.join('&') : '') + ((hash) ? '#' + hash : '');
}

var csrfConfirm = function(){
        var _a = arguments[0];
        var _t = (arguments[1]) ? arguments[1] : '';
	if(confirm(_t)){
	        var _rand = _getRandomNumber();
	        _a.href = _fixUrl(_a.href, _rand);
	        _setCsrfCookie(_rand);
		return true;
	} else {
		return false;
	}
}
