// scripts-common.js for EES 2.5

// XHR WRAPPER
var getXHR = ( function(){	var xhr;
	if(typeof XMLHttpRequest != 'undefined') return function(){ return xhr = new XMLHttpRequest() }
	else if(window.ActiveXObject){		var xmlVers = ['MSXML2.XMLHttp.4.0', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp'];
		for( var i = 0; i < xmlVers.length; i++ ){			try{				xhr = new ActiveXObject(xmlVers[i]);
				return function(){ return xhr; }
			} catch( err ){}
		}
		throw new Error('Невозможно создать объект XMLHttp');
	}
	return function(){ return xhr };
} )();
function sendXHR( http_string, post_string, on_ready, on_false, obj ){	var xhr = getXHR();
	xhr.open( 'POST', http_string, true );
	xhr.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded');
	xhr.setRequestHeader( 'X-Requested-With', 'XMLHttpRequest');
	xhr.onreadystatechange = function(){
		if(xhr.readyState != 4){ return; }
		clearTimeout(xhrTimeOut);
		if(xhr.status == 200){
			var r = eval( '('+xhr.responseText+')' );
			if( !r['error'] )	on_ready.call( null, r, obj );
			else	on_false.call( null, r );
		}
	}
	xhr.send( post_string );
	var xhrTimeOut = setTimeout( function(){ on_false.call( null, xhr_timeout ), xhr.abort() }, 10000 );
};

// TRIMMING STRING
function trim(str){
    charlist = ' \xA0';
    var re = new RegExp( '^[' + charlist + ']+|[' + charlist + ']+$', 'g' );
    return str.replace( re, '' );
};

// SETTING COOKIE
function setCookie( c_name, value, expiredays, path, domain ){
	var expdate = new Date();
	expdate.setDate( expdate.getDate()+expiredays );
	document.cookie = c_name + "=" + escape( value ) +
		((expiredays==null) ? "" : ";expires=" + expdate.toGMTString()) +
		((path) ? ";path=" + path : "") +
        ((domain) ? ";domain=" + domain : "");
}

// INSERTING FLASH
function insertFlash( node, url, width, height, params ){
	var object, param, key;
	function newParam( name, value ){
		if( 0 /*@cc_on + 1 @*/ ) return ['<param name="', name, '" value="', value, '" />'].join('');
		else {
			param = document.createElement( 'param' );
			param.name = name;
			param.value = value;
			return param;
		}
	}
	if( 0 /*@cc_on + 1 @*/ ){
		object = ['<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="', width, '" height="', height, '"><param name="movie" value="', url, '" />'];
		if(params){			for( key in params ){				if( params.hasOwnProperty( key ) ){					object.push( newParam( key, params[key] ) );
				}
			}
		}
		object.push( '</object>' );
		node.innerHTML = object.join( '' );
	}
	else {
		object = document.createElement( 'object' );
		object.type = 'application/x-shockwave-flash';
		object.data = url;
		object.width = width;
		object.height = height;
		if( params ){			for( key in params ){				if( params.hasOwnProperty( key ) ){					object.appendChild( newParam( key, params[key] ) );
				}
			}
		}
		while( node.firstChild ){ node.removeChild( node.firstChild ) };
		node.appendChild( object );
	}
};

// -----------------------------------------------------------------------------
// MAIN FUNCTIONS
// -----------------------------------------------------------------------------

// -----------------------------
// Navigaton in pagination block
// -----------------------------
function navPrev(obj,len){
	var _jr = $(obj).next().children();
	var left = parseInt(_jr.css('margin-left'));
	if(left + len <= 0){
		var full_shift = left + len;
		_jr.animate({marginLeft:full_shift+'px'},333);
	}
}
function navNext(obj,len){
	var _jr = $(obj).prev().children();
	var w = parseInt(_jr.width());
	var left = parseInt(_jr.css('margin-left'));
	if( left - len > -w ){
		var full_shift = left - len;
		_jr.animate({marginLeft:full_shift+'px'},333);
	}
}

// -------------
// Vertical Menu
// -------------
function catOnOff( obj ){
	$(obj).next().not('.op').slideDown( 444, function(){ $(this).addClass( 'op' ) } );
	$('div.acc-ttl').next().filter( '.op' ).slideUp( 444, function(){ $(this).removeClass('op') } );

}
function chanOnOff( obj ){
	$(obj).next().not( '.op' ).slideDown( 444, function(){ $(this).addClass( 'op' ) } );
	$('div.curr-chan').next().filter( '.op' ).slideUp( 444, function(){ $(this).removeClass( 'op' ) } );
}

// ------------------------
// OpenFlash for 3D gallery
// ------------------------
function openFlash(obj,w,h,id){
	$('body').append( "<div class='y-wrapper' id='swf'></div><span id='swf-obj'></span><div id='swf-close'></div><div id='swf-descr'><div>" + document.getElementById( 'th'+id+'info' ).innerHTML + "</div></div>" );
	var swf = document.getElementById( "swf-obj" );
	$(swf).css( {height: h+'px', width: w+'px', marginTop: -Math.ceil(h/2)+'px', marginLeft: -Math.ceil(w/2)+'px' } );
	$('#swf-close').css( {marginTop: -15-Math.ceil(h/2)+'px', marginRight: -30-Math.ceil(w/2)+'px'} );
	$('#swf-descr').css( {marginTop: Math.ceil(h/2)+30+'px'} );

	var parametrs = { allowfullscreen: "true", wmode: "opaque", quality: "high" };
	insertFlash(swf, obj.getAttribute('href'), w, h, parametrs);
	$('#swf-close').click( function(){
		$(swf).remove();
		$('#swf').remove();
		$(this).remove();
		$('#swf-descr').remove();
	} );
}

// ---------------
// Video functions
// ---------------

// Autoplay flag
var autoplay = false;

// Request new video by its ID (oid)
function uppodInit( playerID ){	if( !autoplay ) return false;
	document.getElementById( playerID ).sendToUppod( "play",'' );
};
function setVideo( link ){
	// set new path to video
	sendXHR( link, '', setVideoS, setVideoF, {} );
	return false;
};
var setVideoS = function( r, obj ){
	// Play new video
	flashvars.file = host + r['data']['video_name_1'];
	// Set autoplay
	autoplay = true;
	swfobject.embedSWF( host+"/js/uppod.swf", "videoplayer", "640", "385", "9.0.115", "/js/expressInstall.swf", flashvars, params, attributes );

	// Open video description block
	$("#w-ttl").remove();
	document.getElementById("v-ttl").className = "";
	$('h2.video-name').text( r['data']['name'] );
	$('p.video-date').text( r['data']['date_add'] );
	$('div.video-descr').html( r['data']['title_f'] );
	$('#vlink').text( r['data']['url'] == '*' ? r['data']['id'] : r['data']['url'] );
	// Set new video id for comments
	oid = r['data']['id'];

	// Update request for future votes
	if( r['data']['is_voted'] ) $('#vvoter').html(' <span class="vote-p">'+r['data']['votes_p']+'</span> | <span class="vote-m">'+r['data']['votes_m']+'</span> ').fadeIn( 444 );
	else {
		$('#vvoter').html(' <span class="vote-p p" title="Понравилось">+1</span> | <span class="vote-m p" title="Не понравилось">&minus;1</span> ').fadeIn( 444 );
		$('span.vote-m').click( function(){
			voteVideo( 'minus' );
		} );
		$('span.vote-p').click( function(){
			voteVideo( 'plus' );
		} );
	}

	// Update onclick for showing comments
	$('#comm_btn').unbind('click').click( function(){
		// Show comments' list
		if( !$('#comm_bl').text() ){ }
		// Hide
		else $('#comm_bl').text('');
	} ).text( r['data']['q_r'] );
	// Clear comments' list
	$('#comm_bl').text('');
};
var setVideoF = function(r){
	$('#status-request').text( r['msg'] ).fadeIn( 222 );
	setTimeout( function(){ $('#status-request').fadeOut( 222 ) }, 2000 );
};


// VoteVideo
function voteVideo( sign ){
	if( oid ){
		$('#vvoter').fadeOut( 444 );
		sendXHR( '/video/'+oid+'/'+sign, '', voteVideoS, voteVideoF, {} );
	}
}
var voteVideoS = function( r, obj ){
	$('#vvoter').html(' <span class="vote-p">'+r['data']['votes_p']+'</span> | <span class="vote-m">'+r['data']['votes_m']+'</span> ').fadeIn( 444 );
	$('#status-request').text( r['msg'] ).fadeIn( 222 );
	setTimeout( function(){ $('#status-request').fadeOut( 222 ) }, 2000 );
};
var voteVideoF = function( r ){
	$('#status-request').text( r['msg'] ).fadeIn( 222 );
	setTimeout( function(){ $('#status-request').fadeOut( 222 ) }, 2000 );
};

// Ask a question
var req_succ = function(r, obj){
	$('#status-request').html(r['msg']).fadeIn(222);
	setTimeout( function(){ $('#status-request').fadeOut(222) }, 2000 );
	$('table.vcomm-add').fadeOut(666)
}
var req_false = function(r){
	$('#status-request').html(r['msg']).fadeIn(222);
	setTimeout( function(){ $('#status-request').fadeOut(222) }, 2000 )
}
function sendRequest( url ){
	var name = document.getElementById('vcomm-name').value;
	var contact = document.getElementById('vcomm-cont').value;
	var comment = document.getElementById('vcomm-ctext').value;
	if( !trim(name) )		return	alert('Укажите, пожалуйста, как к Вам обращаться.');
	if( !trim(contact) )	return	alert('Укажите свой контактный e-mail и/или телефон для связи');
	if( !trim(comment) )	return 	alert('Ваши вопросы/комментарии?');
	sendXHR( url, 'name='+encodeURIComponent(name)+'&contact='+encodeURIComponent(contact)+'&comment='+encodeURIComponent(comment), req_succ, req_false, {} );
}













// Comments Req
var commReqS = function( r, obj ){
	var c = "<table class='vcomm-add'>"+
		"<tr><td class='p10 ar'>Ваше имя</td><td class='vcomm-add-td'><input id='vcomm-name' name='name' value='"+(r['member']?r['member']:'')+"' /></td></tr>"+
		"<tr><td class='p10 ar'>Текст комментария</td><td class='vcomm-add-td'><textarea id='vcomm-ctext' name='ctext' rows='5'></textarea></td></tr>"+
		"<tr><td class='p10 ar' id='vcomm-res-t'>"+r['r1']+'+'+r['r2']+'&minus;'+r['r3']+" =</td><td class='vcomm-add-td'><input name='res' id='vcomm-res' value='' /></td></tr>"+
		"<tr><td></td><td class='vcomm-add-td'><span id='vcomm-send' class='link'>Отправить</span></td></tr>"+
		"</table>";
	setTimeout( function(){ $('#status-request').fadeOut(222) }, 3000 );
	$('#vcomms').html(c+showComm(r));
	$('b[i]').click(function(){		commDel(this, this.getAttribute('i'));
	});
	$('#vcomm-send').hover(function(){this.style.textDecoration = 'none'}, function(){this.style.textDecoration = 'underline'}).click(commAdd);
}
var commReqF = function(r){	$('#status-request').text(r['msg']);
	setTimeout( function(){ $('#status-request').fadeOut(222) }, 3000 );
}
function commReq(p){	$('#vcomms').text('');
	$('#status-request').text('Идёт загрузка комментариев...').fadeIn(222);
	if( !p ){ p = 1 }
	sendXHR( '/'+cat+'/'+oid+'/showcomm/'+p, '', commReqS, commReqF, {} );
};

// Comments Add
var commAddReqS = function(r, obj){
	$('#status-request').text(r['msg']);
	setTimeout( function(){ $('#status-request').fadeOut(222) }, 3000 );
	$('#vcomms').html( showComm(r) );
	$('#vcommq').text(r['data']['q']);
}
var commAddReqF = function(r){
	$('#status-request').text(r['msg']);
	setTimeout( function(){ $('#status-request').fadeOut(222) }, 3000 );
	document.getElementById('vcomm-res-t').innerHTML = r['r1']+'+'+r['r2']+'&minus;'+r['r3']+' =';
}
function commAdd(){
	var name = document.getElementById('vcomm-name').value;
	var comment = document.getElementById('vcomm-ctext').value;
	if( !trim(name) ){return alert('Вы забыли представиться.');}
	if( !trim(comment) ){return alert('Ваш комментарий?');}
	$('#status-request').text('Отправка запроса...').fadeIn(222);
	sendXHR( '/'+cat+'/'+oid+'/addcomm', 'name='+encodeURIComponent(name)+'&ctext='+encodeURIComponent(comment)+'&kkey='+document.getElementById('vcomm-res').value, commAddReqS, commAddReqF, {} );
	return false;
}

// Comments Del
var commDelReqS = function(r, obj){
	$('#status-request').text(r['msg']);
	setTimeout( function(){ $('#status-request').fadeOut(222) }, 3000 );

	var div = obj.parentNode;
	div.parentNode.removeChild( div.nextSibling );
	div.parentNode.removeChild( div );
	$('#vcommq').text(r['data']['q']);
}
var commDelReqF = function(r){
	$('#status-request').text(r['msg']);
	setTimeout( function(){ $('#status-request').fadeOut(222) }, 3000 );
}
function commDel(obj,i){
	if( !confirm('Вы действительно хотите удалить этот комментарий?') ){ return false }
	$('#status-request').text('Удаление...').fadeIn(222);
	sendXHR( '/'+cat+'/'+oid+'/delcomm/'+i, '', commDelReqS, commDelReqF, obj );
	return false;
}

// Show comments list
function showComm(r){	var c = '';
	for( var i in r['data']['list']){
		if( i % 2 ){
			c += "<div class='vcomm-ttl-1'><span>"+r['data']['list'][i]['name']+"</span>"+r['data']['list'][i]['date_add']+"<b i='"+r['data']['list'][i]['cid']+"'>"+(r['member']?'X':'')+"</b></div>";
			c += "<div class='vcomm-text-1'>"+r['data']['list'][i]['ctext']+"</div>";
		}
		else{
			c += "<div class='vcomm-ttl-2'><span>"+r['data']['list'][i]['name']+"</span>"+r['data']['list'][i]['date_add']+"<b i='"+r['data']['list'][i]['cid']+"'>"+(r['member']?'X':'')+"</b></div>";
			c += "<div class='vcomm-text-2'>"+r['data']['list'][i]['ctext']+"</div>";
		}
	};
	return c;
}

// *****************************************************************************
// ON READY
// *****************************************************************************

$(document).ready( function(){	// Vertical menu
	$('div.acc-ttl').click( function(){ catOnOff( this ); } );
	$('div.curr-chan').click( function(){ chanOnOff( this ); } );
	$('a.vl').click( function( e ){		e.preventDefault();
		setVideo( this.href );	} );

	// Comments' row
	$("#comm_btn").unbind( "click" ).click( function(){
		// Show list
		if( !$("#comms_bl").text() ){ }
		// Hide
		else $("#comms_bl").text('');
	} );

	// Submit button
	$('#ask').hover( function(){ this.style.textDecoration = 'none' }, function(){ this.style.textDecoration = 'underline' } );

	// Click email
	$('span.email').hover(
		function(){ $(this).addClass( "hov" ); },
		function(){	$(this).removeClass( "hov" ); }
	).click( function(){ document.location.href = 'mailto:' + this.getAttribute( 'n1' ) + '@' + this.getAttribute( 'n2' ); } );
});