var pageParameters   = null;
var pageName         = null;
var carouselImages   = null;
var carouselCanvas   = null;
var carouselStepping = 0.00;
var carouselTimer    = null;
var carouselOffset   = 1; 

$(document).ready(function() {
    var tmp = window.location.toString();

    // Set Global Parameter State
    pageParameters = parseQueryString(tmp);
	
	if (tmp.indexOf('.php') > 0) {
		pageName = tmp.substring(0, tmp.indexOf('.php') + 4);
	} else if (tmp.indexOf('?') > 0) {
		pageName = tmp.substring(0, tmp.indexOf('?') - 1);
	} else {
		pageName = '';
	}

    // Apply Ajaxification to Controls
	ajaxifyPagination('#pagination');
	ajaxifySorting('#sorting');

	setRatings();
});

function logView(videoId)
{
    //alert("a");
    //alert($.ajax);
    $.ajax({
        url: "/base/cgi/logView.php",
        dataType: 'json',
        contentType: "application/json; charset=utf-8",
        data: { "id": videoId },
        success: function(data) {}
    });
    //alert("b");
    return true;

    alert($.getJSON);
    $.getJSON();
    return true;
    $.getJSON(
        "/base/cgi/logView.php",
        {
            "id":videoId
        },
        function(data) {}
	);
}

function rateVideo(rating)
{
    console.log('rateVideo:' + videoId);
    $.getJSON(
        "/base/cgi/logRating.php",
        {
            "id":videoId,
            "rating":rating
        },
        function(data) {}
	);
}

function setRatings() 
{
	$('.stars ').each(function() {
		var id = $(this).attr('id').split('_');
		if (id.length = 3) {
			var rating = id[2];

			$(this).css('width', (rating * 18) + 'px');
		}

	});
}

function parseQueryString(href) 
{
    var out = {};
    var regex = /([^&?=]+)=([^&]+)/g;

    while((m = regex.exec(href)) != null) {
        out[m[1]] = unescape(m[2]);
    }

    return out;
}

function generateQueryString(obj) 
{
    var out = '';
    var sep = '?';

    for (var id in obj) {
        out += sep + id + '=' + escape(obj[id]).replace(/\+/g, '%2b');
        sep = '&amp;';
    }

    return out;
}

function ajaxifyPagination(id)
{
    $(id + " a").each(function (id) {
        var args = parseQueryString($(this).attr('href'));

        $(this).click(function () {
            pageParameters['page'] = args['page'];
            populateVideoResults('#videoresults', args);
            return false;
        });
    });
}

function ajaxifySorting(sortBoxId) 
{
    $(sortBoxId + " a").each(function (linkId) {
        var args  = parseQueryString($(this).attr('href'));
        var label = $(this).text();

        $(this).click(function () {
            pageParameters['sort'] = args['sort'];
			
			$(sortBoxId + " > .Dropdown > .Active").each(function () {
				$(this).text(label);
			}); 
			
            populateVideoResults('#videoresults', args);
            return false;
        });
    });
}

function populateVideoResults(id)
{
    var args     = jQuery.extend(true, {}, pageParameters);
    var sort     = (args['sort'])?args['sort']:'SDD';
    var pageNr   = (args['page'])?args['page']:1;
    var pageSize = 12;
    var tags     = (args['filter'])?args['filter']:'';
    tags += (args['search'])?' ' + args['search']:'';
    tags += (args['menu'])?' ' + args['menu']:'';
	tags = $.trim(tags);

    // Check result meta tags, user
    var method = 'getByTags';
    var param1 = tags;
    var meta   = $(id).attr('title'); // Name tag contains meta information
    if (meta) {
        if (meta.indexOf('video_id:') == 0) {
            method = 'getSimilar';
            param1 = meta.substring(9);
        } else if (meta.indexOf('tags:') == 0) {
            param1 = meta.substring(5);
        }
    }

    $.getJSON(
        "/base/cgi/service.php",
        {
            "cc":(args['cc'])?args['cc']:'',
            "service":"video",
            "method":method,
            "args": {
                /* First param either tags or videoid, */
                "param1" : param1, 
                "limit"  : pageSize,
                "offset" : pageSize * (pageNr - 1),
                "sort"   : sort
            }
        },
        function(data)
        {
            var tmp = '';

            $.each(data.result.result, function(i,item) {
                item.SELECTED = 'other';
                item.LINK = generateQueryString(args);
                args['id'] = item.ID;
                tmp += "<a href=\"" +
                    item.LINK       + "\" class=\"VideoBox\">\n\t<img src=\"" + 
                    item.THUMB_PATH + "\" class=\"Preview\" />\n\t<div class=\"Info\">\n\t\t<div class=\"title\">" +
                    item.NAME       + "</div>\n\t\t<div class=\"date\">" +
                    item.DATE       + "</div>\n\t\t<div class=\"starsInactive\"></div>\n\t\t<div class=\"stars\" id=\"rating_" + 
                    item.ID         + "_" +
                    item.RATING     + "\" style=\"width:" + 
                    (item.RATING * 18) + "px\" >\n\t</div>\t\n</div>\n</a>\n";

            });
            $('#videoresults').html(tmp);
            $('#videocount').html(data.result.count);
            populatePagination('#pagination', data.result.count, pageNr, pageSize);
        }
    );
}

function populatePagination(id, count, nr, size)
{
    var args  = jQuery.extend(true, {}, pageParameters);
    // how many pages does the result need?
    var total = Math.ceil(count / size);
    // how many pages are displayed left to the current one?
    var left  = (nr < 3)?nr:2;
    // how many pages are displayed right to the current one?
    var right = (nr < 3)?5 - nr:2;
    if (right > total - 1) {
        right = total - 1;
    }
    var tmp   = '';
    nr = parseInt(nr);

    if ((total - nr) < 2) {
        right = 1;
    }

    if (nr > 1) {
        args['page'] = nr - 1;
        url = generateQueryString(args);
       
        tmp += '<li class="Previous"><a href="' + url + '">&nbsp;</a></li>';
    } else {
        tmp += '<li class="Previous Empty">&nbsp;</li>';
    }
    while ((nr - left) < nr) {
        pn = nr - left;
        if (pn) {
            args['page'] = pn;
            url = generateQueryString(args);
           
            tmp += '<li><a href="' + url + '">' + pn + '</a></li>';
        }
        left--;
    }
    tmp += '<li class="PaginationActive">' + nr + '</li>';
    if (nr < total) {
        for (var i=1;i <= right;i++) {
            pn = nr + i;
            args['page'] = pn;
            url = generateQueryString(args);
           
            tmp += '<li><a href="' + url + '">' + pn + '</a></li>';
        }
        pn = nr + 1;
        args['page'] = pn;
        url = generateQueryString(args);
       
        tmp += '<li class="Next"><a href="' + url + '">&nbsp;</a></li>';
    } else {
        tmp += '<li class="Next Empty">&nbsp;</li>';
    }
    $(id).html(tmp);
    
    ajaxifyPagination(id);
}

/* VIDEO PLAYER HELPER FUNCTIONS */
/**
 * Dummy function for tracking.
 */
function trackVideo()
{
}

/**
 * This function is called, when the user clicks the recommend button.
 * It opens a popup with the recommendation form.
 */
function sendMail()
{
    lightboxShow('lightboxRecommend');
}


/**
* Open Window
*/
function openWindow(hrf, wdt, hgt)
{
    var opt = 'left=' + ((window.screen.width - wdt) / 2)   + ','
      + 'top=' + ((window.screen.height - hgt) / 2) + ','
      + 'width=' + wdt + ',' 
      + 'height=' + hgt + ','
      + 'menubar=no,status=no,toolbar=no,location=no,scrollbars=no,resizable=yes'

    window.open(hrf, '_new', opt);
}



