/* 
 *     SYSTEM CONFIG VARS
 */
var jsonAds = null;
//var adsImagePrefix = "http://localhost:4000/media/";
//var adsImagePrefix = "http://devcenterstage.koldcast.tv:8081/media/";
var adsImagePrefix = "http://centerstage.koldcast.tv/media/";
//var adsClickPrefix = "http://localhost:4000/ads/click/";
//var adsClickPrefix = "http://devcenterstage.koldcast.tv:8081/ads/click/";
var adsClickPrefix = "http://centerstage.koldcast.tv/ads/click/";

/* TIMER VARIABLES */
var playerAppear = new Array(null, null);
var playerFade = new Array(null, null);
var recycle = new Array();
var globalContainer = null;
var globalDisplayType = '';

function playerAdReset() {
    // this is ran on the top level guide, or when they visit the homepage
    new Ajax.Request('/ads/homepage', {
        method: 'get',
        onSuccess: playerAdReplace,
        onFailure: adFailure,
        onException: adDoesNotExist,
        on404: adDoesNotExist
    });
    
    clearAllTimers();
    adRecycleRequest('videoLargeAd', 'homepage', 'HV1');
}

function playerAdRequest(category_id) {
    // pull in new ads based on category_id, and display_type is set to S(ide)
    //alert('playerAdRequest');
    new Ajax.Request('/ads/'+category_id+'/S', {
        method: 'get',
        //requestHeaders: {Accept: 'application/json'},
        onSuccess: playerAdReplace,
        onFailure: adFailure,
        onException: adDoesNotExist,
        on404: adDoesNotExist
    });
    
    clearAllTimers();
    adRecycleRequest('videoLargeAd', 'default', 'HV1', category_id);
}

function playerAdReplace(transport) {
    jsonAds = transport.responseText.evalJSON();
    
    for (i=0;i<playerAppear.size();i++) {
        clearTimeout(playerAppear[i]);
        clearTimeout(playerFade[i]);
    }

    for (i=0;i<jsonAds.size();i++) {
        var adlist = new Element("ul", {'class':"ads"+jsonAds[i].size()});
        for (j=0;j<jsonAds[i].size();j++) {
            var image = new Element("img", {src: adsImagePrefix+jsonAds[i][j].fields['image'], border: '0'});
            var link = null;
            if (jsonAds[i][j].fields['loads_popup'] == 1) link = new Element("a", { href: adsClickPrefix+jsonAds[i][j].pk+'/', target: "_blank"}).update(image);
            else link = new Element("a", { href: adsClickPrefix+jsonAds[i][j].pk+'/' }).update(image);
            
            var item = new Element("li").update(link);
            // $('adRegion'+(i+1)).innerHTML += "<li><a href=\""+jsonAds[i][j].fields['click_url']+"\"";
            //             //if (jsonAds[i][j].fields['loads_popup'] == 1) { $('adRegion'+(i+1)).innerHTML += " target=\"_blank\""; }
            //             $('adRegion'+(i+1)).innerHTML += "><img src=\""+adsImagePrefix+jsonAds[i][j].fields['image']+"\"></a></li>";
            adlist.insert(item);
        }
        $('adRegion'+(i+1)).innerHTML = "";
        $('adRegion'+(i+1)).insert(adlist);
                
        // Let's go through and check for delays for transitions
        
        if (jsonAds[i][0]["display_time_start"] != 'None') {
            $('adRegion'+(i+1)).childElements()[0].hide();
            playerAppear[i] = Effect.Appear.delay(parseInt(jsonAds[i][0]["display_time_start"]), $('adRegion'+(i+1)).childElements()[0]);
        }
        
        if (jsonAds[i][0]["display_time_finish"] != 'None') {
            var totalTime = parseInt(jsonAds[i][0]["display_time_finish"]);
            if (jsonAds[i][0]["display_time_start"] != 'None') totalTime += parseInt(jsonAds[i][0]["display_time_start"]);
            playerFade[i] = Effect.Fade.delay(totalTime, $('adRegion'+(i+1)).childElements()[0]);
        }
        
        if (i==1) i=jsonAds.size();
    }
}

function videoAdRequest(video_id) {
    new Ajax.Request('/ads/video/'+video_id+'/S', {
        method: 'get',
        //requestHeaders: {Accept: 'application/json'},
        onSuccess: playerAdReplace,
        onFailure: adFailure,
        onException: adDoesNotExist,
        on404: adDoesNotExist
    });
    
    //creating a chain function for browsing & landing on a video page
    clearAllTimers();
    adRecycleRequest('videoLargeAd', 'video', 'HV1', video_id);
}

function affiliateRequest(video_id) {
    //alert('affiliateRequest: '+video_id);
    new Ajax.Request('/ads/video/'+video_id+'/A', {
        method: 'get',
        //requestHeaders: {Accept: 'application/json'},
        onSuccess: affiliateReplace,
        onFailure: adFailure,
        onException: affiliateAdDoesNotExist,
        on404: affiliateAdDoesNotExist
    });
    
    //creating a chain function for browsing & landing on a video page
    clearAllTimers();
    adRecycleRequest('videoLargeAd', 'HV1', video_id);
}

function affiliateReplace(transport) {
    jsonAds = transport.responseText.evalJSON();
    //$('adRegion'+(i+1)).innerHTML = "<ul class=\"ads"+jsonAds[i].size()+"\">";
    var adlist = new Element("ul", { 'class': "affiliateads"+jsonAds[0].size() });
    for (j=0;j<jsonAds[0].size();j++) {
        var image = new Element("img", {src: adsImagePrefix+jsonAds[0][j].fields['image'], border: '0'});
        var link = null;
        if (jsonAds[0][j].fields['loads_popup'] == 1) link = new Element("a", { href: adsClickPrefix+jsonAds[0][j].pk+'/', target: "_blank"}).update(image);
        else link = new Element("a", { href: adsClickPrefix+jsonAds[0][j].pk+'/' }).update(image);
        
        var item = new Element("li").update(link);
        // $('adRegion'+(i+1)).innerHTML += "<li><a href=\""+jsonAds[i][j].fields['click_url']+"\"";
        //             //if (jsonAds[i][j].fields['loads_popup'] == 1) { $('adRegion'+(i+1)).innerHTML += " target=\"_blank\""; }
        //             $('adRegion'+(i+1)).innerHTML += "><img src=\""+adsImagePrefix+jsonAds[i][j].fields['image']+"\"></a></li>";
        adlist.insert(item);
    }
    $('affiliateAd').innerHTML = "";
    $('affiliateAd').insert(adlist);
}

function typeRequest(container, display_type) {
    globalContainer = container;
    globalDisplayType = display_type;
    new Ajax.Request('/ads/type/'+display_type, {
        method: 'get',
        onSuccess: function(transport) {
			typeReplace(transport, container, display_type);
		},
        onFailure: adFailure,
        onException: adDoesNotExist,
        on404: adDoesNotExist
    });
}

function typeReplace(transport, container, display_type) {
    jsonAds = transport.responseText.evalJSON();
    var adlist = new Element("ul", { 'class': display_type+"_"+jsonAds[0].size() });
    for (j=0;j<jsonAds[0].size();j++) {
        var image = new Element("img", {src: adsImagePrefix+jsonAds[0][j].fields['image'], border: '0'});
        var link = null;
        if (jsonAds[0][j].fields['loads_popup'] == 1) link = new Element("a", { href: adsClickPrefix+jsonAds[0][j].pk+'/', target: "_blank"}).update(image);
        else link = new Element("a", { href: adsClickPrefix+jsonAds[0][j].pk+'/' }).update(image);
        
        var item = new Element("li").update(link);

        adlist.insert(item);

		if (jsonAds[j][0]["display_time_finish"] != 'None') {
            var totalTime = parseInt(jsonAds[j][0]["display_time_finish"]);
            if (jsonAds[j][0]["display_time_start"] != 'None') totalTime += parseInt(jsonAds[j][0]["display_time_start"]);
			var spot = recycle.size();
			recycle[spot] = new Array();
			recycle[spot][0] = container;
			recycle[spot][1] = display_type;
            recycle[spot][2] = setTimeout('typeRequest("'+recycle[spot][0]+'","'+recycle[spot][1]+'")', (totalTime*1000));
        }
    }
    $(container).innerHTML = "";
    $(container).insert(adlist);
}

function sectionRequest(container, display_type, code_name) {
    new Ajax.Request('/ads/section/'+display_type+'/'+code_name, {
        method: 'get',
        onSuccess: function(transport) {
			sectionReplace(transport, container, display_type, code_name);
		},
        onFailure: adFailure,
        onException: adDoesNotExist,
        on404: adDoesNotExist
    });
}

function sectionReplace(transport, container, display_type, code_name) {
    jsonAds = transport.responseText.evalJSON();
    var adlist = new Element("ul", { 'class': display_type+"_"+jsonAds[0].size() });
    for (j=0;j<jsonAds[0].size();j++) {
        var image = new Element("img", {src: adsImagePrefix+jsonAds[0][j].fields['image'], border: '0'});
        var link = null;
        if (jsonAds[0][j].fields['loads_popup'] == 1) link = new Element("a", { href: adsClickPrefix+jsonAds[0][j].pk+'/', target: "_blank"}).update(image);
        else link = new Element("a", { href: adsClickPrefix+jsonAds[0][j].pk+'/' }).update(image);
        
        var item = new Element("li").update(link);

        adlist.insert(item);

		if (jsonAds[j][0]["display_time_finish"] != 'None') {
            var totalTime = parseInt(jsonAds[j][0]["display_time_finish"]);
            if (jsonAds[j][0]["display_time_start"] != 'None') totalTime += parseInt(jsonAds[j][0]["display_time_start"]);
			var spot = recycle.size();
			recycle[spot] = new Array();
			recycle[spot][0] = container;
			recycle[spot][1] = display_type;
			recycle[spot][2] = code_name;
            recycle[spot][3] = setTimeout('sectionRequest("'+recycle[spot][0]+'","'+recycle[spot][1]+'","'+recycle[spot][2]+'")', (totalTime*1000));
        }
    }
    $(container).innerHTML = "";
    $(container).insert(adlist);
}

function adRecycleRequest(container, requestPrefix, display_type, code_name) {
    // code_name can be a specific video or also a section
    if (typeof(code_name) == "undefined" || code_name == "undefined") {
        new Ajax.Request('/ads/'+requestPrefix+'/'+display_type, {
            method: 'get',
            onSuccess: function(transport) {
    			recycleReplace(transport, container, requestPrefix, display_type, "undefined", 'adRecycleRequest');
    		},
            onFailure: largeAdDoesNotExist,
            onException: largeAdDoesNotExist,
            on404: largeAdDoesNotExist
        });
    }
    else if (requestPrefix == 'default') {
        new Ajax.Request('/ads/'+code_name+'/'+display_type, {
            method: 'get',
            onSuccess: function(transport) {
    			recycleReplace(transport, container, requestPrefix, display_type, code_name, 'adRecycleRequest');
    		},
            onFailure: largeAdDoesNotExist,
            onException: largeAdDoesNotExist,
            on404: largeAdDoesNotExist
        });
    }
    else {
        new Ajax.Request('/ads/'+requestPrefix+'/'+code_name+'/'+display_type, {
            method: 'get',
            onSuccess: function(transport) {
    			recycleReplace(transport, container, requestPrefix, display_type, code_name, 'adRecycleRequest');
    		},
            onFailure: adFailure,
            onException: adDoesNotExist,
            on404: adDoesNotExist
        });
    }
}

function recycleReplace(transport, container, prefix, display_type, code_name, returnFunction) {
    jsonAds = transport.responseText.evalJSON();
    var adlist = new Element("ul", { 'class': display_type+"_"+jsonAds[0].size() });
    for (j=0;j<jsonAds[0].size();j++) {
        var image = new Element("img", {src: adsImagePrefix+jsonAds[0][j].fields['image'], border: '0'});
        var link = null;
        if (jsonAds[0][j].fields['loads_popup'] == 1) link = new Element("a", { href: adsClickPrefix+jsonAds[0][j].pk+'/', target: "_blank"}).update(image);
        else link = new Element("a", { href: adsClickPrefix+jsonAds[0][j].pk+'/' }).update(image);
        
        var item = new Element("li").update(link);

        adlist.insert(item);

		if (jsonAds[j][0]["display_time_finish"] != 'None') {
            var totalTime = parseInt(jsonAds[j][0]["display_time_finish"]);
            if (jsonAds[j][0]["display_time_start"] != 'None') totalTime += parseInt(jsonAds[j][0]["display_time_start"]);
			var spot = recycle.size();
			recycle[spot] = new Array();
			recycle[spot][0] = container;
			recycle[spot][1] = display_type;
			recycle[spot][2] = code_name;
			recycle[spot][4] = prefix;
            recycle[spot][3] = setTimeout(returnFunction+'("'+recycle[spot][0]+'","'+recycle[spot][4]+'","'+recycle[spot][1]+'","'+recycle[spot][2]+'")', (totalTime*1000));
        }
    }
    $(container).innerHTML = "";
    $(container).insert(adlist);
}

function headerAdRequest() {
    new Ajax.Request('/ads/top', {
        method: 'get',
        //requestHeaders: {Accept: 'application/json'},
        onSuccess: headerAdReplace,
        onFailure: adFailure,
        onException: adDoesNotExist,
        on404: adDoesNotExist
    });
}

function headerAdReplace(transport) {
    jsonAds = transport.responseText.evalJSON();
    var adlist = new Element("ul", { 'class': "headerads"+jsonAds[0].size() });
    for (j=0;j<jsonAds[0].size();j++) {
        var image = new Element("img", {src: adsImagePrefix+jsonAds[0][j].fields['image'], border: '0'});
        var link = null;
        if (jsonAds[0][j].fields['loads_popup'] == 1) link = new Element("a", { href: adsClickPrefix+jsonAds[0][j].pk+'/', target: "_blank"}).update(image);
        else link = new Element("a", { href: adsClickPrefix+jsonAds[0][j].pk+'/' }).update(image);
        
        var item = new Element("li", {'class': "item"+j}).update(link);
        adlist.insert(item);
    }
    $('topAds').innerHTML = "";
    $('topAds').insert(adlist);
}

function adFailure(transport, e) {
    if (e) {
        alert("Exception: " + e.message);
    }
    else {
        alert('('+transport.status+') ' + transport.statusText);
    }
}

function adDoesNotExist(transport, e) {
    // do nothing and leave current ad in the place
}

function largeAdDoesNotExist(transport, e) {
    // remove the current ad and clear out the timers
    clearAllTimers();
    $('videoLargeAd').innerHTML = '';
}

function clearAllTimers() {
    if (recycle.length > 0) {
        for (i=0; i < recycle.length; i++) {
            clearTimeout(recycle[i][3]);
        }
    }
    recycle = new Array();
}

function affiliateAdDoesNotExist(transport, e) {
    $('affiliateAd').innerHTML = "";
}
