View file js/panel/main.js

File size: 7.35Kb
function classAdd(domNode, className){
    if (domNode == undefined || domNode.className == undefined)
        return;

    if (className instanceof Array){
        for(var i = 0; i < className.length; i++)
            classAdd(domNode, className[i]);
        return;
    }   

    if (classHas(domNode, className))
        return;

    var classes = domNode.className.split(' ');
    classes.push(className);
    domNode.className = classes.join(' ').trim();
}

function classRemove(domNode, className){
    if (domNode == undefined || domNode.className == undefined)
        return;

    if (!classHas(domNode, className))
        return;
    var classes = domNode.className.split(' ');
    var classesSet = [];
    for (var i = 0; i < classes.length; i++){
        if (classes[i] == className)
            continue;
        classesSet.push(classes[i]);
    }
    domNode.className = classesSet.join(' ');
}

function classHas(domNode, className){
    if (domNode == undefined || domNode.className == undefined)
        return false;
    
    return ~domNode.className.split(' ').indexOf(className);
}

function jsAjax(params) {
	var xmlhttp = getXmlHttp();
	xmlhttp.open(params.method || 'get' , addRequest(params.url, 'r', Math.random()), true);
	xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4) {
			if (xmlhttp.status == 200 && params.success)
				params.success(xmlhttp.responseText);

			if (params.complete)
				params.complete();

		}
	}
	xmlhttp.send(params.data);

	return xmlhttp;
}

function getXmlHttp(){
    try {
        return new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            return new ActiveXObject("Microsoft.XMLHTTP");
        } catch (ee) {
        }
    }
    if (typeof XMLHttpRequest!='undefined') {
        return new XMLHttpRequest();
    }
}

function addRequest(str_query, field, value) {
    var lstIndex = str_query.indexOf('?')
    var str_length = str_query.length
    return str_query + (lstIndex == -1 ? '?' : (lstIndex == str_length - 1 ? '' : '&')) + field + '=' + value;
}

var Sidebar = {
    toggle: function(event){
		event.preventDefault();
		var body = document.getElementsByTagName('body')[0];
		if (classHas(body, '__sidebar-active')){
		    Sidebar.openFunction("left");
		}else{
		    Sidebar.openFunction("right");
		}
    },
	toggleSwipe: function(direction){
	    if (direction == 'right'){
			Sidebar.openFunction("right");
	    }else{
			Sidebar.openFunction("left");
	    }
	},
	openFunction: function(direction){
	    var sidebar = document.getElementById("the-sidebar");
	    sidebar.style.display = 'block';
	    var body = document.getElementsByTagName('body')[0];
		if (direction == 'right') {
			sidebar.style.left = '0px';
			classAdd(body, '__sidebar-active');
		}
		else {
			sidebar.style.left = '-100%';
			classRemove(body, '__sidebar-active');
		}
	},
	device:function(){
	    return !!navigator.userAgent.match(/(UCBrowser|UCWEB)/i);
	},
	MobiSwipe: function(){
	    var body = document.getElementsByTagName('body')[0],
		inGesture = false,
		startX = 0, startY = 0,
		yMaxDistance = 60,
		xGestureDistance = 50;

	    function mousedown(event){
	    	event = event.originalEvent;

			inGesture = true;
			startX = (event.touches) ? event.touches[0].pageX : event.pageX;
			startY = (event.touches) ? event.touches[0].pageY : event.pageY;

			if (event.touches && event.touches.length!=1) {
			   inGesture = false;
			}
	    }
	    
	    function mousemove(event){
	    	event = event.originalEvent;

			if (inGesture){
			    var deltaX = 0, deltaY = 0,
				direction;
			    
			    var moveX = (event.touches) ? event.touches[0].pageX : event.pageX,
				moveY = (event.touches) ? event.touches[0].pageY : event.pageY;

			    deltaX = Math.abs(moveX - startX);
			    deltaY = Math.abs(moveY - startY);
			    
			    if (deltaY > yMaxDistance){
				inGesture = false;
			    }
			    
			    if (inGesture){
					if ((deltaX * 0.66) >= deltaY){
					    if(navigator.userAgent.match(/Android/i)){
							event.preventDefault();
					    }

					    if (startX > moveX){
							direction = "left";
					    }else{
							direction = "right";
					    }
					    
					    if (deltaX >= xGestureDistance){
							if (direction == "left"){
							    Sidebar.toggleSwipe("left");
							}else if (direction == "right"){
							    Sidebar.toggleSwipe("right");
							}
							inGesture = false;
					    }
					}else{
					    inGesture = false;
					}
			    }
			}
	    }
	    $(document).on('touchstart', mousedown);
	    $(document).on('touchmove', mousemove);
	}
}

var events_options = {
		discussions: {
			array_key: 'dsc', 
			element_id: 'discussions', 
			float_counter: true
		}, 
		friends: {
			array_key: 'fr', 
			element_id: 'friends', 
			right_counter: true
		}, 
		friends_new: {
			array_key: 'fr_new', 
			element_id: 'friends', 
			float_counter: true, 
			link: function (events) {
				return '/user/frends/' + (events.fr_new > 0 ? 'new.php' : '');
			}
		}, 
		guests: {
			array_key: 'gst', 
			element_id: 'guests', 
			float_counter: true
		}, 
		messages: {
			array_key: 'mail', 
			element_id: 'messages', 
			float_counter: true, 
			link: function (events) {
				return '/' + (events.mail > 0 ? 'new_mess' : 'konts') + '.php';
			}
		}, 
		marks: {
			array_key: 'marks', 
			element_id: 'marks', 
			float_counter: true
		}, 
		notifications: {
			array_key: 'notif', 
			element_id: 'notifications', 
			float_counter: true
		}, 
		tape: {
			array_key: 'tape', 
			element_id: 'tape', 
			float_counter: true
		}
	};

function startUpdatingEvents() {
	$(document).ready(function () {
		update();
	});
}

function setUpdateTimeout() {
	updateTimeout = setTimeout(update, 5000);
}

function update() {
	jsAjax({
		url: '/ajax/events/get.php', 
		success: function (responseText) {
			var responseJSON = JSON.parse(responseText);

			if (!responseJSON || !responseJSON.status || !responseJSON.events)
				return;

			setCounters(responseJSON.events);
		}, 
		complete: function () {
			setUpdateTimeout();
		}
	});
}

function setCounters(events) {
	for (k in events_options) {
		var ev_opts = events_options[k];
		var ev_count = events[ev_opts.array_key], 
			els = document.getElementsByClassName('events-' + ev_opts.element_id);

		for (i = 0; i < els.length; i++) {
			var el = els[i];
			if (ev_opts.float_counter) {
				var float_el = el.getElementsByClassName('events-float-count');
				if (float_el.length != 0)
					float_el[0].innerHTML = handleCount(ev_count);
			}

			if (ev_opts.right_counter) {
				var right_el = el.getElementsByClassName('events-right-count');
				if (right_el.length != 0)
					right_el[0].innerHTML = ev_count;
			}

			if (ev_opts.link) {
				var link_el = el.getElementsByClassName('events-link');
				if (link_el.length != 0)
					link_el[0].href = ev_opts.link(events);
			}
		}
	}
}

function handleCount(ev_count) {
	return ev_count > 0 ? ev_count : '';
}

$(document).ready(function () {
	$('body').addClass('__sidebar-can_animate');

	if (!Sidebar.device())
		Sidebar.MobiSwipe();
});