/************************* AJAX WRAPPER MECHANISM *****************************/
function sn_getAjax(formName, customParams, resultElementName, userData) {
		params = new Hash({
        f: formName,
        ajax: 1
    });
    params = params.merge(customParams);
    new Ajax.Request(SITE_BASE  + 'index.php',
    {
        method: 'POST',
        parameters: params,
        onSuccess: function (transport) {
            result = transport.responseText;

            if(result.length > 0) {
                result = result.evalJSON(true);
            } else {
                result = '';
            }

            sn_gotAjax(formName, result, resultElementName, userData);

        },
        onComplete: function(transport) {
            sn_completedAjax(formName, resultElementName, userData);

        },
        onFailure: function(transport) {
            sn_failedAjax(formName, resultElementName, userData);

        }
    });
}

function sn_updateByAjax(formName, customParams, resultElementName, updaterParams) {
    params = new Hash({
        f: formName,
        ajax: 1
    });

    params = params.merge(customParams);

    options = new Hash(
    {
        method: 'POST',
        parameters: params
    });

    options = options.merge(updaterParams).toObject();
    new Ajax.Updater(resultElementName, SITE_BASE + 'index.php', options);
}

function sn_getAjaxByQuery(formName, query, resultElementName, userData) {
    params = new Hash({
        f: formName,
        ajax: 1
    });

    params = params.toQueryString() + '&' + query;

    new Ajax.Request(SITE_BASE + 'index.php',
    {
        method: 'POST',
        parameters: params,
        onSuccess: function (transport) {
            result = transport.responseText;
            if(result.length > 0) {
                result = result.evalJSON(true);
            } else {
                result = '';
            }
            sn_gotAjax(formName, result, resultElementName, userData);
        },
        onFailure: function(transport) {
            sn_failedAjax(formName, resultElementName, userData);
        }
    });
}

function sn_gotAjax(formName, result, resultElementName, userData) {
	funcName = "sn_" + formName.dasherize().camelize() + "Handler";
	if(typeof window[funcName] == 'function') window[funcName](result, resultElementName, userData);
}

function sn_failedAjax(formName, resultElementName, userData) {
    funcName = "sn_" + formName.dasherize().camelize() + "ErrorHandler";
    if(typeof window[funcName] == 'function') window[funcName](result, resultElementName, userData);
}

function sn_completedAjax(formName, resultElementName, userData) {
    funcName = "sn_" + formName.dasherize().camelize() + "CompleteHandler";
    if(typeof window[funcName] == 'function') window[funcName](result, resultElementName, userData);
}
/******************************************************************************/



function ax_submit_form( id )
{
    form = document.getElementById( id );
    customParams = { formId : id }
    for ( i=0; i < form.elements.length; i++ )
    {
        elem = form.elements[i];
        if ( elem.type == "checkbox" )
        {
            customParams[ elem.name ] = elem.checked;
        }else if ( elem.type == "select-one" )
        {
            customParams[ elem.name ] = elem.options[ elem.selectedIndex ].value;
        }else{
            customParams[ elem.name ] = elem.value;
        }
    }

    sn_getAjax( "generic_form_handler", customParams, "", {form_id:id} );
}

function sn_genericFormHandlerHandler( result, resultElementName, userData )
{
    if ( result.code == 0 )
    {
        innerRes = result.text.evalJSON(true);
        if ( innerRes.js )
        {
            eval( innerRes.js );
        }
    }else{
        alert( result.text );
    }
}

function load_children( id )
{
    // get value

    elem = document.getElementById( id );
    formId = elem.form.id;
    if ( elem.type == "select-one" )
    {
        value = elem.options[ elem.selectedIndex ].value;
    }else if ( elem.type == "checkbox" )
    {
        value = elem.checked;
    }else{
        value = elem.value;
    }

    customParams = {id:id}
    customParams[ id ] = value;
    customParams[ "formId" ] = formId;
    sn_getAjax( "load_children", customParams, "", customParams );
}

function sn_loadChildrenHandler( result, resultElementName, userData )
{
    if ( result.code == 0 )
    {
        innerRes = result.text.evalJSON(true);
        elem = document.getElementById( innerRes.id );
        elem.options.length = 0;
        if ( innerRes.children )
        {
            children = innerRes.children;
            for ( i=0; i<children.length; i++ )
            {
                o = new Option( children[i].innerHTML, children[i].value );
                elem.options.add(o);
            }
        }
        elem.style.display = "";
    }
}

function voteaza_film(content_id, nota) {
    customParams = {content_id: content_id, nota: nota};
    sn_getAjax('voteaza_film', customParams);
}

function sn_voteazaFilmHandler(result, resultElementName, userData)
{
    if (result.code == 0) {
        // we're ok
        val = result.text.evalJSON(true);
        $('voted').update('').setStyle({width: val.medie + "%"});
        $('nr_voturi').update(val.nr_voturi);
    } else {
        $('raspuns_vot').update(result.text);
    }
}

function s_add_favorite(content_id)
{
    customParams = {content_id: content_id};
    sn_getAjax('s_add_favorite', customParams);
}

function sn_sAddFavoriteHandler(result, resultElementName, userData)
{
    var code = result.code;
    result = result.text.evalJSON();
    $('add_favorites').update(result.text);
    if (code == 0) $('delete_favorites').update('<br/><input type="submit" onclick="javascript:s_delete_favorite(\'' + result.id + '\');" value="Scoate din favorite">');
}

function s_delete_favorite(content_id)
{
    customParams = {content_id: content_id};
    sn_getAjax('s_delete_favorite', customParams);
}

function sn_sDeleteFavoriteHandler(result, resultElementName, userData)
{
    $('add_favorites').update('');
    $('delete_favorites').update(result.text);
}

function add_to_playlist(instance){
    //Event.stop(event);
    my_form = $('add_to_playlist_form_' + instance);
    userData = my_form.serialize(true);
    userData['form_id'] = my_form.id;
    userData['instance'] = instance;
    if(userData['playlist'] == 0) {
        var l = SITE_BASE + 'index.php?module=playlist&action=new&save_from=' + userData['save_from'] + '&content_id=' + userData['content_id'];
        if(window.name.length > 0 && (typeof(window.opener) == 'undefined' || window.opener == null || window.opener.closed)) {
            var nw = window.open(l, '_blank');
            nw.focus();
        }
        else if (typeof(window.opener) != 'undefined' && window.opener != null &&  !window.opener.closed && window.opener.name.length == 0) {
            window.opener.document.location.href = l;
            window.opener.focus();
        }
        else {
             document.location.href = l;
        }
    }
    else {
        customParams=my_form.serialize().parseQuery();
        sn_getAjax('add_to_playlist', customParams, null, userData);
    }
    return;
}

function sn_addToPlaylistHandler(result, resultElementName, userData)
{
    var id_msg = 'add_playlist_msg_' + userData['instance'];
    /*
    if(typeof userData['save_from'] != 'undefined') {
            if (result.code == 0 || result.code == 1) {
                if ($('rez_quicklist') != null) setTimeout("$('rez_quicklist').update('')", 1000);
                if ($('rez_quicklist_2') != null) setTimeout("$('rez_quicklist_2').update('')", 1000);
                if ($('ql_music2') != null) setTimeout("$('ql_music2').update('')", 1000);
            }
            if (userData['save_from'] == 'ql' && $('num_quicklist') != null) $('num_quicklist').update('0');
    }
    */
    Effect.Appear(id_msg, { duration: 0.0 });
    $(id_msg).innerHTML = result.text;
    Effect.Fade(id_msg, {transition: Effect.Transitions.linear, duration: 1.0});
}

function report_motiv(event){
    Event.stop(event);
    my_form=Event.element(event);
    customParams=my_form.serialize().parseQuery();
    sn_getAjax('report_motiv', customParams);
}

document.observe("dom:loaded",function(){
    if($('report_form')!=undefined){
        Event.observe('report_form','submit',report_motiv)
    }
})

function sn_reportMotivHandler(result, resultElementName, userData)
{
    Effect.Appear($('raporteaza'), { duration: 0.0 });
    $('raporteaza').innerHTML = result.text;
    Effect.Fade( $('raporteaza'), {transition: Effect.Transitions.linear, duration: 2.0});
    try {
        Effect.Fade( $('video_options_container'), {transition: Effect.Transitions.linear, duration: 2.0});
    }
    catch(e) {
        Effect.Fade( $('det_optiune_5'), {transition: Effect.Transitions.linear, duration: 2.0});
    }
}


/* [+] Music search */
function music_searchContent() {
     return searchMusic();
    //searchVideoClips();
}




function searchMusic() {
	var query;

	query = $('cautareMuzica').value.strip();
	if (query.length >= 3) {
		window.ajaxPagination.start(query);

	} else {
		// make this a nicer error (without alert)
		alert('Cautarea trebuie sa contina minim 3 caractere!');
		return false;
	}

	return true;
}
function fetchmusicIDs(limit, offset, query) {
	if (query) {
		div = $('searchMusicResults');
		while (div.childNodes.length > 0) {
			div.removeChild(div.childNodes[0]);
		}
		$('music_pag_top').update('');
		$('music_pag_bottom').update('');

		params = {limit: limit, offset: offset, query: query};

		sn_getAjax('fetch_musicIDs', params, 'searchMusicResults');
	}
}
function sn_fetchMusicIDsHandler(result, resultElementName, userData) {
    if (result.code == 0) {
        result = result.text.evalJSON();
        element = $(resultElementName);
        if (typeof element != 'undefined') {
            Element.update(element, result.audio_list);
        }

        $('mess_music_search').setStyle({display:'none'});
       	$('mess_music_search').update();

    } else {

    	$('mess_music_search').setStyle({display:'block'});
    	$('mess_music_search').update(result.text);
    	result.total = 0;
    }
    try{
     window.ajaxPagination.returnCall(result.total);
    }catch(e){ }
}
/* [-] Music search */

/* [+] VideoClips search */
function searchVideoClips() {
	var query;

	query = $('cautareMuzica').value.strip();

	if (query.length >= 3) {
	    fetchVideoByQuery(query);
	} else {
		//alert('Cuvantul cautat e cam scurt, manca-ti-as!');
		return false;
	}

	return true;
}
function fetchVideoByQuery(query) {
	if (query) {
		params = {query: query};
		sn_getAjax('fetch_VideoByQuery', params);
	}
}
function sn_fetchVideoByQueryHandler(result, resultElementName, userData) {
    if (result.code == 0) {
        result = result.text.evalJSON();
        element = $(resultElementName);
        if (typeof element != 'undefined') {
            Element.update(element, result.video_list);
        }

//       	$('searchVideoResults').update(result.video_list);
    }
}
/* [-] VideoClips search */


/* [+] de acelasi user  */
function fetchRelated(mode) {
    var cid = window.contentId;
    var arrDivs = ['similare', 'sameuser', 'hotlist'];
    var doSwitch = function(id) {
        for (i = 0; i < arrDivs.length; i++) {
            if (id == arrDivs[i]) {
                //$('tabc_' + arrDivs[i]).show();
                if($('tabc_' + arrDivs[i])){
                    $('tabc_' + arrDivs[i]).style.display = 'block';
                    $('tab_' + arrDivs[i]).addClassName('s_m_sel');
                }
            } else {
                 if($('tabc_' + arrDivs[i])){
                    //$('tabc_' + arrDivs[i]).hide();
                    $('tabc_' + arrDivs[i]).style.display = 'none';
                    $('tab_' + arrDivs[i]).removeClassName('s_m_sel');
                 }
            }
        }
    };

    if($('similare_menux')){
        if(mode == 'similare'){
            $('similare_menux').setStyle({backgroundPosition: "left bottom"});
        }else{
            $('similare_menux').setStyle({backgroundPosition: "left top"});
        }
    }


    params = {cid: cid, relatedSource: mode};
    if (typeof(eval('window.fetched.' + mode)) == "undefined") {
        sn_getAjax('fetchRelated', params, "", mode);
            }
    doSwitch(mode);
}

function sn_fetchRelatedHandler(result, resultElementName, userData) {
    if ( result.code == 0 ) {
        $('tabc_' + userData).update(result.text);
        eval('window.fetched.' + userData + ' = true');
        Cookies.create('relatedSource', userData, 1);
    }
}


document.observe("dom:loaded",function(){
    if($('muta_in_show_form')!=undefined){
        Event.observe('muta_in_show_form','submit',muta_in_show)
    }
});

function muta_in_show(event)
{
    Event.stop(event);
    my_form = Event.element(event);
    customParams = my_form.serialize().parseQuery();
    sn_getAjax('muta_in_show', customParams);
}

function sn_mutaInShowHandler(result, resultElementName, userData)
{
    $('muta_in_show').update(result.text.userContent);
    $('muta_din_show').update(result.text.showContent);
    Sortable.create('muta_din_show',{
        tag:'div',
        overlap:'horizontal',
        constraint:false,
        ghosting:false
    });
}

document.observe("dom:loaded",function(){
    if($('muta_din_show_form')!=undefined){
        Event.observe('muta_din_show_form','submit',muta_din_show)
    }
})

function muta_din_show(event)
{
    Event.stop(event);
    my_form = Event.element(event);
    customParams = my_form.serialize().parseQuery();
    sn_getAjax('muta_din_show', customParams);
}

function sn_mutaDinShowHandler(result, resultElementName, userData)
{
    $('muta_din_show').update(result.text.showContent);
    $('muta_in_show').update(result.text.userContent);
    Sortable.create('muta_din_show',{
        tag:'div',
        overlap:'horizontal',
        constraint:false,
        ghosting:false
    });
}

function initContentNotInShow() {
    loadContentNotInShow(16, 0);
}

function loadContentNotInShow(countPerPage, offset) {
    divEpisoade = $('containerEpisoade');
    divEpisoade.update('<div class="loading"></div>');
    sn_getAjax('content_get_not_in_show', {show_id: showId, limit: countPerPage, offset: offset}, 'containerEpisoade');
}

function sn_contentGetNotInShowHandler(result, resultElementName) {
    var myResult = result.text.evalJSON(true);
    $(resultElementName).update(myResult.content);
    $$('div.container_film_d').each(function(element){Element.extend(element)});
    window.episoadePagination.returnCall(myResult.total);
}

function showAddContent(contentId) {
    sn_getAjax('show_add_content', {content_id: contentId});
}

function sn_showAddContentHandler(result) {
    if (result.code == 0) {
        document.location = SITE_BASE + 'my-show/episoade';
    }
}

function showRemoveContent(contentId, title) {
    if (confirm('Esti sigur ca vrei sa stergi "' + title + '" din show-ul tau?')) {
        sn_getAjax('show_remove_content', {content_id: contentId});
        return true;
    }
    return false;
}

function sn_showRemoveContentHandler(result) {
    if (result.code == 0) {
        document.location.reload();
    }
}

function onShowReorderEpisoade() {
    var re = new RegExp("^c_(.+)$");
    var matches;
    var episoade = $('lista_episoade').getElementsByClassName('container_film_h');
    var len = episoade.length;
    for (var i = 0; i < len - 1; ++i) {
        episoade[i].getElementsByClassName('clearAll')[0].addClassName('punctata');
    }
    episoade[i].getElementsByClassName('clearAll')[0].removeClassName('punctata');


    var orderList = new Array(len);
    for (var i = 0; i < len; i++) {
        matches = re.exec(episoade[i].id);
        if (matches) {
            orderList[i] = matches[1];
        }
    }

    var saver = $('saverPop');
    saver.innerHTML = 'Salvez ordinea';
    saver.style.top = document.viewport.getScrollOffsets()[1] + 'px';
    saver.show();
    Event.observe(window, 'scroll', scrollSaver);

    sn_getAjax('show_save_order', {json_order_list: orderList.toJSON()});
}

function scrollSaver(event) {
    var saver = $('saverPop');
    saver.style.top = document.viewport.getScrollOffsets()[1] + 'px';
}

function fadeSaver() {
    var saver = $('saverPop');

    Effect.Pulsate('saverPop', { duration: 1.0 });
    setTimeout("Effect.Fade('saverPop', { duration: 0.2 })", 1000);
    setTimeout('Event.stopObserving(window, \'scroll\', scrollSaver); $("saverPop").hide();$("saverPop").className="";', 1200);
}

function sn_showSaveOrderHandler(result) {
    var saver = $('saverPop');
    if (result.code != 0) {
        saver.innerHTML = 'Eroare';
    } else {
        saver.innerHTML = 'OK';
        saver.className = 'ok'
    }

    fadeSaver();
}




function modifica_bkg(event){
    Event.stop(event);
    my_form = Event.element(event);
    customParams = my_form.serialize().parseQuery();
    sn_getAjax('modifica_bkg', customParams);
}




function preview_imagine()
{
    customParams = $('bkg_imagine').value;
    sn_getAjax('preview_imagine', customParams);
}

function Updater(element,url,form_id){
    var element = $(element);
    try{
      params = Form.serialize(form_id);
    }catch(e){ params = ''}
    new Ajax.Updater(element,
        url,
          {
            asynchronous: true,
            evalScripts: true,
            parameters: params ,
            onComplete: function(request) {}
          }
    );
}
