var myGlobalHandlers = {
    onCreate: function(){
	Element.show('systemWorking');	
    },
    onComplete: function() {
        if(Ajax.activeRequestCount == 0){
	    Element.hide('systemWorking');	    
	}
    }
    };
										    
Ajax.Responders.register(myGlobalHandlers);

/* arata sau ascunde boxul de newsletter */
function toggleNewsletterBox(h) {
	if (undefined == h) {
		c = getCookie('nl-box-count')
		if (isNaN(c)) {
			c = 0
		}
		if (2 < c) {
			return false
		}
	}
	
	Effect.toggle('newsletter-box','blind')
	if (undefined == h) {
		//Effect.Pulsate($(document.getElementById('newsletter-menu-link')))
		var today = new Date();
		var expire = new Date();
		expire.setTime(today.getTime() + 3600000*24*30);
		
		setCookie('nl-box-count', c+1, expire, '/', 'acasa.ro')
	}
	
}

/* activeaza timeoutul pentru disparitia boxului de newsletter */
function newsletterActivate() {
	setTimeout('toggleNewsletterBox()', 3000)
}

/* cookie functions */
function setCookie(name, value, expires, path, domain, secure) {
	var curCookie = name + "=" + escape(value) +
	  ((expires) ? "; expires=" + expires.toGMTString() : "") +
	  ((path) ? "; path=" + path : "") +
	  ((domain) ? "; domain=" + domain : "") +
	  ((secure) ? "; secure" : "");
	document.cookie = curCookie;
}

function getCookie(name) {
  var dc = document.cookie;
  var prefix = name + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) return null;
  } else
    begin += 2;
  var end = document.cookie.indexOf(";", begin);
  if (end == -1)
    end = dc.length;
  return unescape(dc.substring(begin + prefix.length, end));
}

/**
 * Valideaza poll-ul
 */ 
function valideaza_poll(){

    var i;
    var n=0;
    var el = document.getElementsByName('poll');
    var size = document.getElementsByName('poll').length;

    for(i=0;i< size;i++){
        if(el[i].checked){
			n++;
			return el[i].value;
		}	
    }
    
    alert('Nu ati selectat nici o optiune');
    return -1;    
}


/**
 * Schimba tabul selectat
 * @param id id-ul tabului pe care s-a facut click
 * @param aName = numele id-ului linkului (de genul link1 sau link2 etc)
 * @param liName ~
 * @param tabName ~
 */
function changeTab(id, aName, liName, tabName){
	var i = 0;
	var liname = liName + id;
	var aname = aName + id;
	var tabname = tabName + id;
	for (i = 1; i <= 2; i++){
	    $(liName + i).className = "blue";
	    $(aName + i).className = "blue";		    
	    $(tabName + i).style.display = "none";
	}
	$(liname).className = "";
	$(aname).className = "";    		
	$(tabname).style.display = "inline";	
}

/**
 * Schimba tabul selectat in pagina de vizualizare stire
 * @param id id-ul tabului pe care s-a facut click
 */
function changeGrayTab(id){
	var i =0;
	var liname="li"+id;
	var aname="a"+id;
	var tabname="tab"+id;
	for (i=1; i<=2; i++){
	    $("li"+i).className="gray";
	    $("a"+i).className="gray";		    
	    $("tab"+i).style.display="none";
	}
	
	$(liname).className="";
	$(aname).className="";    		
	$(tabname).style.display="inline";	
}

/**
 * Mareste marimea fontului in stire
 */
function increaseSize(){
	var el = $A(document.getElementsByClassName('body'));

	el.each(function(node){
		Element.removeClassName(node, 'body')
		Element.addClassName(node, 'bodyBigger')
	});
}

/**
 * Micsoreaza marimea fontului in stire
 */
function decreaseSize(){
	var el = $A(document.getElementsByClassName('bodyBigger'));
	
	el.each(function(node){
		Element.removeClassName(node, 'bodyBigger')
		Element.addClassName(node, 'body')	    
	});
}

/**
 * Pastreaza activa ultima imagine asupra careia s-a stat cu mouse-ul
 * pemtru galeria din pagina stirii
 * @param id id-ul imaginii asupra careia se sta cu mouse-ul
 */
function rememberLastImage(id){
	var currentImageId = "large"+currentImage;
	var newImageId = "large"+id;
	if ($(currentImageId) != undefined && $(newImageId)!=undefined){
		$(currentImageId).className= "large";
		$(newImageId).className = "staylarge";
		currentImage = id;
	}
}

/**
 * Directioneaza recomandarile
 * @param id id-ul item-ului
 * @param action tipul de item care se printeaza 
 */
function doRecommend(site, id, action){
        window.open(site+'/trimite?id='+id+'&action='+action,'_blank','width=600,height=600, left=578, top=350, scrollbars=yes');
}

/**
 * Directioneaza tiparirea
 * @param id id-ul item-ului
 * @param action tipul de item care se printeaza
 */
function doPrint(site, id, action){
	    window.open(site+'/print?id='+id+'&action='+action,'_blank','width=600,height=600, left=578, top=350, scrollbars=yes');
}

/**
* Elimina spatiul de la sfarsit daca exista
*/
function trim(str){
    s = str.replace(/^(\s)*/, '');
    s = s.replace(/(\s)*$/, '');
    return s;
}

/**
* Verifica formatul adresei de email
* @param str adresa de email care se verifica
* @return true sau false in functie de validatetea adresei
*/
function emailCheck(str) {

    var at = "@";
    var dot = ".";
    var lat = str.indexOf(at);
    var lstr = str.length;
    var ldot = str.indexOf(dot);
    
    if (str.indexOf(at) == -1) {
        alert("Adresa de email nu e valida !");
        return false;
    }
    if (str.indexOf(at) == -1 ||
        str.indexOf(at) == 0 || str.indexOf(at) == lstr) {
        alert("Adresa de email nu e valida !");
        return false;
    }
    if (str.indexOf(dot) == -1 ||
        str.indexOf(dot) == 0 || str.indexOf(dot) == lstr) {
        alert("Adresa de email nu e valida !");
        return false;
    }
    if (str.indexOf(at, (lat + 1)) != -1) {
        alert("Adresa de email nu e valida !");
        return false;
    }
    if (str.substring(lat - 1, lat) == dot ||
        str.substring(lat + 1, lat + 2) == dot) {
        alert("Adresa de email nu e valida !");
        return false;
    }
    if (str.indexOf(dot, (lat + 2)) == -1) {
        alert("Adresa de email nu e valida !");
        return false;
    }
    if (str.indexOf(" ") != -1) {
        alert("Adresa de email nu e valida !");
        return false;
    }
    return true;
}

/**
* Valideaza formularul de trimitere
*/
function validateSend(hasMessage){
	//date expeditor
	var nume = $('nume').value;
	var prenume = $('prenume').value;
	var email = trim($('email').value);
	
	//date destinatar(i)
	var nume1 = $('nume1').value;
	var email1 = trim($('email1').value);
	
	if (nume.length == 0){
		alert('Va rugam sa completati numele dumneavoastra!');
		return false;
	}
	
	/*if (prenume.length == 0){
		alert('Va rugam sa completati prenumele dumneavoastra!');
		return false;
	}	
	*/
	if (!emailCheck(email)){
		return false;
	}
	
	if (nume1.length == 0){
		alert('Va rugam sa completati numele prietenului dumneavoastra!');
		return false;
	}
	
	if (!emailCheck(email1)){
		return false;
	}		
	
	if (currentemlcount > 1){
		for (i=2; i<=currentemlid;i++){
			var numecamp = 'nume'+i;

			if ($(numecamp) != undefined){
				if ($(numecamp).value.length == 0){
					alert('Va rugam sa completati numele prietenului dumneavoastra!');
					return false;
				}
				numecamp = 'email'+i;
				if (!emailCheck($(numecamp).value)){
					alert('Va rugam sa completati adresa de email a prietenului dumneavoastra!');
					return false;
				}
			}
		}
	}	
	
	//mesaj
	if (hasMessage == true){
		var text  = $('textcustom').value;
		if (text.length == 0){
			alert('Va rugam sa completati un mesaj!');
			return false;
		}
	} 
	
	$('maxdest').value = currentemlid;	
	
	return true;
}

/**
* Adauga canpuri de nume si email in formularul de trimite bancuri prietenilor
*/
function anotheremail() {
	currentemlcount++;
	currentemlid++;

	if (currentemlcount > 6) {
		currentemlcount--;
		alert('Puteti face recomandarea la maxim 6 prieteni!');
 		return;
 	}
	
	newemlplace = $('extraemails');
		
	newemlname = 'nume'+currentemlid;
	newemlemail = 'email'+currentemlid;
	
	newemlplace.innerHTML += 
		'<p>'+
			'<label for="'+newemlname+'" id="'+newemlname+'label">Numele prietenului:</label>'+
			'<input type="text" name="'+newemlname+'" id="'+newemlname+'" class="recommend_textinput" />'+
		'</p>'+		
		'<p>'+
			'<label for="'+newemlemail+'">Adresa de email a prietenului:</label>'+
			'<input type="text" name="'+newemlemail+'" id="'+newemlemail+'" class="recommend_textinput" />'+
			'<a href="javascript: void(0);" onclick="removeemail(this,\''+newemlname+'\')" class=\"boldLink\">Sterge</a>'+
		'</p>';
}

/**
* Sterge un grupaj de campuri nume si email adaugate in prealabil
*/
function removeemail(tref, elem) {
	var labelid = elem+"label";
	
	//Sterg label de nume
	$(elem).parentNode.removeChild($(labelid));	
	
	//Sterg campul de nume
	$(elem).parentNode.removeChild($(elem));
	
	//Sterg campul de email
	tref.parentNode.parentNode.removeChild(tref.parentNode);

	currentemlcount--;
}

/**
 * Valideaza formularul de adaugare cronica utilizator in pagina filmului
 */
function validateReview(){
	if ($('name').value == ''){
		alert('Va rugam sa completati numele dumneavoastra!');
		return false;		
	}    
	
	if ($('email')) {
		if (!emailCheck($('email').value)){
			alert('Va rugam sa completati corect adresa de email!');
			return false;		
		}    	
	}	
	
	if ($('cronicabody')) {
		if (trim($('cronicabody').value) == ''){
			alert('Va rugam sa completati textul cronicii!');
			return false;
		}
	}	
	
	return true;
}

/**
 * Actualizeaza prin ajax selectul de cinematografe
 */
function getCinemas(city, site){
    var selectedCity = city[city.selectedIndex].value;

    if (selectedCity == 0)
	alert("Va rugam sa selectati un oras pentru a afisa cinematografele!");
    else{
	new Ajax.Updater('cinematograf',
		        site+'/program_cinema',
			{method: 'get',
			 parameters: 'action=1&orase='+selectedCity}
			);
    }
}

/**
 * Actualizeaza programul la cinema prin ajax 
 */
function getProgram(city, date, site){
    $('day').value = date;

    new Ajax.Updater('program',
		     site+'/program_cinema',
		    {method: 'get',
		     parameters: 'ajax=1&oras='+city+'&day='+date}
		    );
}

/**
 * Valideaza formularul de afisare program cinema, in pagina filmului
 */
function validateProgram(fid, type, site){

    var selectedCity = $('oras').selectedIndex;
    var selectedDay = $('day').selectedIndex;    
    var servletName = "";
    
    if (type == 0)
	    servletName = "film_port";
    else 
	    servletName = "film";	    

    if (selectedCity == 0){
	alert("Va rugam sa selectati un oras pentru a afisa programul!");	
	return false;    
    }
    else{
	if (selectedDay == 0){
	    alert("Va rugam sa selectati o zi pentru a afisa programul!");		
	    return false;
	}
	else
	    new Ajax.Updater('film_port',
		        site+'/'+servletName,
			{
			    method: 'get',
			     parameters: 'ajax=1&orase='+$('oras').value+'&day='+$('day').value+'&fid='+fid
			}
			);
	    return false;		
    }
}
    /**
     * Porneste slide -showul pentru index
     * este apelata automat din masterpage
     * timerID - variabila globala initializata in masterpage
     * @param frame - frameul de afisat
     * @param start_frame - primul slide
     * @param end_frame - ultimul slide
     * @delay delay-ul pentru aparitia noului slide
     */	        

    function start_slideshow(frame, start_frame, end_frame, delay) {
	tStart = 1;
        timerID = setTimeout(switch_slides(frame, start_frame, end_frame, delay), delay);
	
	if(($('play')) != null){
	    $('play').style.display = 'none';
	    $('buttons').style.margin = "125px 0 0 135px;";
	}    
    }
    
    /**
     * Repornesc slideshowul prin apasare buton play
     */
    function play_again(){
	var number = parseInt($('slide_number').value);
	start_slideshow(number, 1, 5, 5000); 
	return false;    
    }
    
    /**
     * Face switch intre slideuri: fade pentru slideul curent, appear pentru urmatorul
     * @param frame - frameul de afisat
     * @param start_frame - primul slide
     * @param end_frame - ultimul slide
     * @delay delay-ul pentru aparitia noului slide
     */
    function switch_slides(frame, start_frame, end_frame, delay) {
        return (
	    function() {
		    var i = 1;
		    var old_frame = frame;
		    //efectul fade
		    while(i < 6){
			if(document.getElementById('text' + i).style.display != "none"){ 
			    Effect.Fade('text'+i, {queue:{position:'front', scope:'titlescope', limit:3}});
			}
			if(document.getElementById('secondtext' + i).style.display != "none"){
			    Effect.Fade('secondtext'+i, {queue:{position:'front', scope:'textscope', limit:3}});
			}
			changeButton(i, 1);
	    	
			i++;
		    }
		    //schimb butonul fara fade
		    changeButton(frame, 1);
		    
		    //trec la priumul slide dc sunt la ultimul
		    //dc nu trec la urmatorul
		    if (frame == end_frame) { 
			frame = start_frame; 
		    } 
		    else { 
			frame = frame + 1; 
		    }
		    
		    new Effect.Parallel(
					[
					    new Effect.Fade('theHeader'+old_frame, {sync:true, duration:1, queue:{position:'front', scope:'imagescope', limit:3}}),
					    new Effect.Appear('theHeader' + frame, {sync:true, duration:1, queue:{position:'end', scope:'imagescope', limit:3}})
					],
					{
					duration:1
					}
				      );
		    //apare urmatorul slide
		    
		    Effect.Appear('text' + frame, {queue:{position:'end', scope:'titlescope', limit:3}});
		    Effect.Appear('secondtext' + frame, {queue:{position:'end', scope:'textscope', limit:3}});
		    //apare si butonul
		    changeButton(frame, 2);
		    //reapelez functia
		    timerID  = setTimeout(switch_slides(frame, start_frame, end_frame, delay), delay);
		}	    
	)
    }
    
    

    /**
     * Functie apelata la click pe buton, opreste slide show-ul
     */
    function stop_slideshow(id){
	clearTimer();
	$('play').style.display = 'inline';
	$('buttons').style.margin = "125px 0 0 18px;";
	show_selected(id);
    }
    
    /**
     * Resetez timer-ul functiei setTimeout pentru a orpi slideshowul
     */
     function clearTimer(){
        if(timerID){
	    clearTimeout(timerID)
	    timerID = 0;
	}
	tStart = null;
     
     }
     
    /**
     * Porneste slide-showul dupa ce a fost oprit de stop_slideshow
     * incepand cu slideul selectat
     * @param id - slideul selectat
     */
    function show_selected(id){	 			
	var i = 1;
	//coada de evenimente scriptaculous
	//dc se apasa de multe ori pe butoane, se umple coada si se strica slide showul
	//anulez evenimentele si ii afisez doar ultimul slide cerut
	var queue;
	
	//scope-ul imagescope - efecte scripatculous pentru poza (id-ul theHeader x )
	queue =  Effect.Queues.get('imagescope');
	cancelQueue(queue);
	
	//scope-ul titlescope - efecte scripatculous pentru titlu slide (id-ul text x )
	queue =  Effect.Queues.get('titlescope');
	cancelQueue(queue);
	
	//scope-ul textscope - efecte scripatculous pentru textul slideului (id-ul secondtext x )
	queue =  Effect.Queues.get('textscope');
	cancelQueue(queue);
	
	//fac fade pe orice era afisat
	while(i < 6){
	    if(document.getElementById('theHeader' + i).style.display != "none"){
		Effect.Fade('theHeader'+i, {queue:{position:'front', scope:'imagescope', limit:3}});
	    }	
	    if((document.getElementById('text' + i).style.display != "none")){ 
		Effect.Fade('text'+i, {queue:{position:'front', scope:'titlescope', limit:3}});
	    }	
	    if((document.getElementById('secondtext' + i).style.display != "none") ){
		Effect.Fade('secondtext'+i, {queue:{position:'front', scope:'textscope', limit:3}});
	    }	
	    changeButton(i, 1);
	    	
	    i++;
	}
	
	//afisez slideul cerut
	switch(id){
	    case 'a1':
		slideEffect(1);
		break;
	    case 'a2':
		slideEffect(2);
		break;	
	    case 'a3':
		slideEffect(3);
		break;	
	    case 'a4':
		slideEffect(4);
		break;
	    default: 
		slideEffect(5);
		break;	
	}
	
    }
    
    /**
     * Anuleaza evenimentele din coada scriptaculous
     * @param queue - cozile zu scope imagescope, titlescope, textscope
     * create la crearea efectelor appear si fade
     */
    function cancelQueue(queue){
	queue.each(	
			function(e) { 
				e.cancel() 
			}
		    );
    }
    
    /**
     * Apare slideul cerut in show_selected
     * @number este numarul slideului
     */
    function slideEffect(number){

	Effect.Appear('theHeader' + number, {queue:{position:'end', scope:'imagescope', limit:3}});   
	Effect.Appear('text' + number, {queue:{position:'end', scope:'titlescope', limit:3}});    
	Effect.Appear('secondtext'+ number, {queue:{position:'end', scope:'textscope', limit:3}});
	changeButton(number, 2);    

	clearTimer();
	
	$('slide_number').value = number;
	//repornesc slide showul
	//start_slideshow(number, 1, 5, 3000);
    }
    		                                
    /**
     * Butoanele se schimba schimband poza de pe fundalul divului
     * adica class-ul divului
     * nu se foloseste scripatculous din motive de css
     */
    function changeButton(frame, type){
	if (type == 1){//fade
	    Element.addClassName('page'+frame, 'poza'+frame); 
	    Element.removeClassName('page'+frame, 'poza'+frame+'_active')	
	}
	else{//appear
	    Element.removeClassName('page'+frame, 'poza'+frame);
	    Element.addClassName('page'+frame, 'poza'+frame+'_active')
	}
    }
    
    /**
     * Paginatie cu Ajax updater pentru series
     */   
    function updateSearchPage(page, type){		
		var servletString = 'search?searchtype='+$('searchtype').value+'&key='+$('searchtext').value+'&film='+$('film').value+'&serial='+$('serial').value+
				    '&actor='+$('actor').value+'&regizor='+$('regizor').value+'&episod='+$('episod').value+'&gen='+$('gen').value+'&an='+$('an').value+'&page='+page+
				    '&ajax='+type;
		new Ajax.Updater('update_' + type,  servletString, { 
							    asynchronous:true, 
							    method:'get'
							    });
		
    }
    
/**
 * Actualizeaza prin ajax selectul de episoade
 */
function getEpisodes(season,flink){
    var selectedSeason = season[season.selectedIndex].value;

    if (selectedSeason == 0)
	alert("Va rugam sa selectati un sezon pentru a afisa episoadele sale!");
    else{
	new Ajax.Updater('episode',
		        'http://filme.acasa.ro/film_serial',
			{method: 'get',
			 parameters: 'link='+flink+'&action=1&sid='+selectedSeason}
			);
    }
}		    		

/**
 * Extinde sau restrange caseta in care sunt listate toate sectiunile portalului
 */
function toggle_all_categs() {
	Effect.toggle('sections_and_ad','blind')
}


