﻿var selectedItems = new Array();
var currentListIndex = 0;
var dreamBeforeAfterFilter = '';

$(document).ready(function(){
    if (/chrome/.test(navigator.userAgent.toLowerCase())){
        $.browser.safari = false;
    }
    
	bindCarousel();
    bindThumbs();	
    bindLargeView();
	$.history.init(loadFromHistory);
});

// Binds scrolling.
function bindCarousel()
{
	$('.jcarousel-skin-tango').jcarousel();
}

jQuery.easing['BounceEaseOut'] = function(p, t, b, c, d) {
	if ((t/=d) < (1/2.75)) {
		return c*(7.5625*t*t) + b;
	} else if (t < (2/2.75)) {
		return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
	} else if (t < (2.5/2.75)) {
		return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
	} else {
		return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
	}
};

//Loads data from history for dream before after web part.
function loadFromHistoryBeforeAfter(hash)
{
	if (hash == "")
	{
		if (dreamBeforeAfterFilter != "")
		{
			dreamBeforeAfterFilter = getResult(-1, dreamIsBeforeAfter, dreamList, dreamView, dreamValuesList, dreamXslt, dreamSPSite, dreamSPWeb, dreamLocaleId);
			dreamBeforeAfterFilter = "";
		}
		
		return;
	}
	var caseIndex = hash.split('-')[1];
	if (caseIndex != dreamBeforeAfterFilter){
		getResult(caseIndex, dreamIsBeforeAfter, dreamList, dreamView, dreamValuesList, dreamXslt, dreamSPSite, dreamSPWeb, dreamLocaleId);
		dreamBeforeAfterFilter = caseIndex;
	}
}

//Loads data from history for dream gallery web part.
function loadFromHistory(hash)
{
	if (dreamIsBeforeAfter)
	{
		loadFromHistoryBeforeAfter(hash);
		return;
	}
		
	var hashIndex;
	var caseIndex;
	var filters = new Array();

	if (hash == "")
	{		
		hashIndex = 0;
	}
	
	var hashSplitted = hash.split('-');
	hashIndex = hashSplitted[0] - 0;
	//set filter
	for (var i = 0; i < hashIndex; i++)
	{
		selectedItems[i] = hashSplitted[i + 1] - 1;
	}		
	
	if (hashIndex == dreamListCount) //load case or cases
	{			
		caseIndex = hashSplitted[hashIndex + 1];
		if (caseIndex == 0 || currentListIndex == 0)
		{
			getResultWithItems(caseIndex, getFilter(), dreamList,dreamView, dreamValuesList, dreamXslt, dreamSPSite, dreamSPWeb, dreamLocaleId);
		}
		else
		{
			getResult(caseIndex, dreamIsBeforeAfter, dreamList, dreamView, dreamValuesList, dreamXslt, dreamSPSite, dreamSPWeb, dreamLocaleId);
		}
		currentListIndex = dreamListCount;
	}		
			
	if (hashIndex < currentListIndex) //back
	{
		currentListIndex--;
		getItems(currentListIndex, getFilter(),dreamList,dreamView, dreamValuesList, dreamXslt, dreamSPSite, dreamSPWeb, dreamLocaleId);
	}				
	else if (hashIndex>currentListIndex) //forward
	{			
		{
			currentListIndex++;
			if (currentListIndex == dreamListCount)
			{
				getResultWithItems(0, getFilter(), dreamList,dreamView, dreamValuesList, dreamXslt, dreamSPSite, dreamSPWeb, dreamLocaleId);
			}
			else
			{
				getItems(currentListIndex, getFilter(), dreamList,dreamView, dreamValuesList, dreamXslt, dreamSPSite, dreamSPWeb, dreamLocaleId);
			}
		}
	}	
}

//Calculates history hash for selected item.
function getHistoryHash(id){
	var hash = currentListIndex + '-';
	for (var i=0; i < currentListIndex; i++)
	{
		hash += (selectedItems[i] + 1)+'';
		hash += '-';
	}
	
	if (id != null)
	{
		hash += id;
	}
	return hash;
}

//Gets filter (used server-side).
function getFilter()
{
	var filter = '';
	for (var i=0; i < dreamListCount; i++)
	{
		filter += (selectedItems[i] + 1)+'';
		filter += ':::';
	}
	return filter;
}

//Binds bottom thumbnailes.
function bindThumbs(){	
	
	//define height of opacity background 
	if(document.getElementById('dwCarouselWrapper') && document.getElementById('dwBgCarousel'))
	{
		document.getElementById('dwBgCarousel').style.height = document.getElementById('dwCarouselWrapper').clientHeight + 'px';
	}
	
	if(document.getElementById('loadingLayer') && document.getElementById('dwCarouselContainer'))
	{
		document.getElementById('loadingLayer').style.height = document.getElementById('dwCarouselContainer').clientHeight + 'px';
	}
	
	tb_init('a.thickbox');//pass where to apply thickbox
	
	//set visible of carouset
	$('#dwCarouselWrapper').css('visibility', 'visible');

	$('.jcarousel-skin-tango .jcarousel-item .dwImage img').click(function() {
	    var obj = $(this);
	    var imageIndex = obj.attr('sequence') - 1;
	    selectedItems[currentListIndex] = imageIndex;

	    if (currentListIndex == dreamListCount) { //case item clicked
	        var filter = obj.attr('filter');
			dreamBeforeAfterFilter = filter;
			$.history.load(getHistoryHash(filter));
	        getResult(filter, dreamIsBeforeAfter, dreamList, dreamView, dreamValuesList, dreamXslt, dreamSPSite, dreamSPWeb, dreamLocaleId);
	        return;
	    }

	    currentListIndex++;	    
		var filter = getFilter();
	    if (currentListIndex == dreamListCount) { //last step list -> cases list
			$.history.load(getHistoryHash(0));
	        getResultWithItems(0, filter, dreamList, dreamView, dreamValuesList, dreamXslt, dreamSPSite, dreamSPWeb, dreamLocaleId);
	    }
	    else { //next step list
			$.history.load(getHistoryHash(null));
	        getItems(currentListIndex, filter, dreamList, dreamView, dreamValuesList, dreamXslt, dreamSPSite, dreamSPWeb, dreamLocaleId);
	    }

	    return false;
	});
}

//Populates jquery request to send it via AJAX.
function populateAjaxData(params) {
    var dataToSend = "{";
    for (var i = 0; i < params.length; i += 2) {
        var name = params[i];
        var value = params[i + 1];
        dataToSend += '"' + name + '":"' + value + '"';
        if (i != params.length - 2) {
            dataToSend += ',';
        }
    }
    
    dataToSend += "}";
    return dataToSend;
}

//Executes ajax request.
function doAjaxRequest(dataToSend, methodName, callback) {
    $.ajax({
    type: "POST",
        url: "/_vti_bin/velux/dreamwebitems.asmx/" + methodName,
        data: dataToSend,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            callback(msg);
        },
        error: function(req, status, error) {
            alert(error);
        }
    });
}

//Retreives next step items.
function getItems(step, filter, list, view, valuesList, xslt, currentSiteId, currentWebId, localeId) {
	$('#loadingLayer').css('display', 'block');
    var dataToSend = populateAjaxData(new Array("step", step, "filter", filter, "list", list, "view", view,
        "valuesList", valuesList, "xslt", xslt, "currentSiteId", currentSiteId,
        "currentWebId", currentWebId, "localeId", localeId));
	
    doAjaxRequest(dataToSend, "GetItems", complete);
    return;
}

//Retreives cases items.
function getResultWithItems(sequence, filter, list, view, valuesList, xslt,
    currentSiteId, currentWebId, localeId) {
	$('#loadingLayer').css('display', 'block');
    var dataToSend = populateAjaxData(new Array("sequence", sequence, "filter", filter, "list", list,
        "view", view, "valuesList", valuesList, "xslt", xslt, "currentSiteId", currentSiteId,
        "currentWebId", currentWebId, "localeId", localeId));
	
    doAjaxRequest(dataToSend, "GetResultWithItems", complete);
}

//Retreives selected case item.
function getResult(id, isBeforeAfter, list, view, valuesList, xslt, currentSiteId, currentWebId, localeId) {	
    var dataToSend = populateAjaxData(new Array("id", id, "isBeforeAfter", isBeforeAfter, "list", list,
        "view", view, "valuesList", valuesList, "xslt", xslt, "currentSiteId", currentSiteId,
        "currentWebId", currentWebId, "localeId", localeId));

    doAjaxRequest(dataToSend, "GetResult", completeResult);
}

function bindSelected()
{    
	if (selectedItems.length <= currentListIndex)
	{
		selectedItems[currentListIndex] = 0;
	}		
	var expr = ".dreamwebthumb:eq("+selectedItems[currentListIndex]+") img";
	var imgUrl = $(expr).attr('longDesc');
	$('.dwView').attr('src', imgUrl);
}

//Handles when case information is loaded.
function completeResult(result)
{
	$("#dwDescription").html(result);    	
	
	bindLargeView();
	tb_init('a.thickbox');//pass where to apply thickbox
}

//Binds events of description html.
function bindLargeView()
{
	$(".dwPointer").click(function(){
        var src = $(this).attr('largeImage');
		if (src)
		{
			$.modal('<div><img src="'+src+'" /></div>');
		}
		return false;
    });
    
    $(".dwImageView").click(function(){
        var medium = $(this).attr('mediumImage');
        var large = $(this).attr('largeImage');
        
        $('#TB_FullSize img').attr('src', medium);
        $('#TB_FullSize').attr('href', large);
        
        return false;
    });
	
	$(window).bind('resize', thickboxResize );
}

//Handles items / cases html loaded.
function complete(result){	
    $(dreamWebPartId).html(result);
	bindCarousel();
    bindThumbs();	
    bindSelected();	
	bindLargeView();
}

function thickboxResize() {
			imgPreloader = getImageSize('TB_Image');
			
			
			var pagesize = tb_getPageSize();
			var x = pagesize[0] - 50;
			var y = pagesize[1] - 50;
			var imageWidth = imgPreloader.width;
			var imageHeight = imgPreloader.height;
			if (imageWidth > x) {
				imageHeight = imageHeight * (x / imageWidth); 
				imageWidth = x; 
				if (imageHeight > y) { 
					imageWidth = imageWidth * (y / imageHeight); 
					imageHeight = y; 
				}
			} else if (imageHeight > y) { 
				imageWidth = imageWidth * (y / imageHeight); 
				imageHeight = y; 
				if (imageWidth > x) { 
					imageHeight = imageHeight * (x / imageWidth); 
					imageWidth = x;
				}
			}
			// End Resizing


			TB_WIDTH = imageWidth + 30;
			TB_HEIGHT = imageHeight + 60;
		 
			$('img#TB_Image').height(imageHeight);
			$('img#TB_Image').width(imageWidth);
			tb_position();
}  

function getImageSize(id) {
    var oHlpr = document.createElement('img');
    var oPic = document.getElementById(id);
    oHlpr.style.visibility = 'hidden';
    oHlpr.style.position = 'absolute';
    oHlpr.top = 0;
    oHlpr.left = 0;
    //oHlpr.src = oPic.src;
	oHlpr.src = $('#' + id).attr('src');
    document.body.appendChild( oHlpr);
    var imSize = { 'width':oHlpr.offsetWidth,'height':oHlpr.offsetHeight }
    document.body.removeChild( oHlpr);
    return imSize;
}