/*
* Copyright 2010, Allan Naranjo (allan.naranjo@gmail.com)
* Under the MIT license.
*/
jQuery.fn.featureContent = function () {
    var element = this;
    var featureContents = new Array();
    /*
    Configuration options:
    url where the xml is located:
    autoplay: true if want to autoplay the pages content
    durationBetweenContents: time in seconds before displaying the next content
    */
    var dataURL = "xml/featureContent.xml";
    var autoplay = true;
    var autoplayStatus = autoplay;
    var durationBetweenFeatureContents = 6; // seconds
	var animationEnabled = false;

    //End configuration.
    var currentContentNumber = 0;
    //End local variables
    var intervalController;
	var contentFeaturesData;
	var contentLoaded = false;
	
    getData(loadFeatureContent);

    liveEvents();

	//Image preloading:
	
	var enableImagePreloading = true;
	var imagesToPreload = new Array('/media/1_4.jpg', '/media/2_4.jpg', '/media/3_4.jpg', '/media/4_4.jpg', '/media/5_4.jpg','/media/menu2_over.png','/media/menu3_over.png','/media/menu4_over.png','/media/menu5_over.png')
//var imagesToPreload = new Array();
    //Show a loading content element

	function createStructure(){
		$(element).empty();
		var structure = '<div class="mainFeatureContent" id="mainFeatureContent"></div><div id="featureContentList" class="featureContentList">';
		for(var i = 0; i < contentFeaturesData.length; i++){
			structure += '<div class="featureContentItem ' + $(contentFeaturesData[i]).attr("name") + '" index="' + (i + 1) + '" target="' + $(contentFeaturesData[i]).attr("urlToOpen") + '"></div>';
		}
		structure += '</div>';
		$(structure).appendTo($(element));
	}

    function pausePlayAutoPlay() {
        if (autoplayStatus) {
            autoplayStatus = false;
            clearInterval(intervalController);
        } else {
            autoplayStatus = autoplay;
            autoPlay();
        }
    }
    //Get images method
    function getData(callback) {
	/*
        var dataToBeSent = {}, page = dataURL,requestType = "GET",contentTypeUsed = 'text/xml';
        $.ajax({
            mode: 'queue', type: requestType,
            data: dataToBeSent,
            contentType: contentTypeUsed,
            url: page,
            dataType: "xml",
            processingData: false,
            success: function (xml) {callback(xml);},
            error: function (XMLHttpRequest, textStatus, errorThrown) { }
        });*/
		callback('');
    }
    //Load data method
    function loadFeatureContent(data) {
		//contentFeaturesData = $(data).find("content");
		//name="first" title="" page="contenido1.html" urlToOpen="
		//alert(data.find("content"));
		contentFeaturesData=[{'name':'first','page':'/homeheader/contenido1.html','urlToOpen':'http://www.twinengines.com/our-solutions.aspx'},
		{'name':'second','page':'/homeheader/contenido2.html','urlToOpen':'http://www.twinengines.com/our-solutions/manufacturing-operations.aspx'},
		{'name':'third','page':'/homeheader/contenido3.html','urlToOpen':'http://www.twinengines.com/our-solutions/customer-and-partner-portals.aspx'},
		{'name':'fourth','page':'/homeheader/contenido4.html','urlToOpen':'http://www.twinengines.com/our-solutions/web-and-ecommerce.aspx'},
		{'name':'fifth','page':'/homeheader/contenido5.html','urlToOpen':'http://www.twinengines.com/our-solutions/custom-software.aspx'}
		];
		var delayInAnimation = animationEnabled ? 300 : 0;
		var internalcallback = function(){
			createStructure();
			$("#mainFeatureContent").slideDown(delayInAnimation, function(){
				$("#featureContentList").slideDown(delayInAnimation, function(){
					var allFeatureContentItems = $(".featureContentItem");
					var featureContentItems = allFeatureContentItems.length;
					var currentFeatureData;
					var internalCallback = function(index){
						currentFeatureData = contentFeaturesData[index];
						$(allFeatureContentItems[index]).data("page", $(currentFeatureData).attr("page") )//.html($(currentFeatureData).attr("title"))
							//.show('drop', {direction: "left"},delayInAnimation,function() {
								.show(delayInAnimation,function() {
								if((index + 1) < featureContentItems){
									internalCallback(index + 1)	
								} else {
									//All feature contents are displayed...
									if (autoplay) {
										setNextFeatureContent();
							            autoPlay();
							        }
								}
						});
					}
					if(featureContentItems > 0 ){
						internalCallback(0);
					}
				});
			})
		}
		preLoadImages(internalcallback);
    }

    function autoPlay() {
        if (autoplayStatus) {
			var internalCallback = function () {
				setNextFeatureContent();
            }
            intervalController = setInterval(internalCallback, durationBetweenFeatureContents * 1000);
        }
    }

	function setNextFeatureContent(){
		$(".featureContentItem").removeClass("selected");
		currentContentNumber = currentContentNumber + 1 > $(".featureContentItem").length ? 1 : currentContentNumber + 1;
		var nextFeatureContent = $(".featureContentItem")[currentContentNumber - 1];
		$(nextFeatureContent).addClass("selected");
		loadContent();
	}

	function loadContent(){
		var featureContentElement = $(".featureContentItem")[currentContentNumber - 1];
		var page = $(featureContentElement).data("page");
		//alert("BROWSER:\n" + $.browser.name+"\nVERSION:\n" + $.browser.version);
		if($.browser.name == "msie" && $.browser.version < 8 ){
			$("#mainFeatureContent").load(page);
		} else {
			$("#mainFeatureContent").fadeOut('slow', function(){
				var self = this;
				$(self).load(page, function(){
					$("#mainFeatureContent").fadeIn(300);
				});	
			})
		}
		

	}
    
    function liveEvents() {
		$(".featureContentItem").live("mouseover", function(){
			clearInterval(intervalController);
			$(".featureContentItem").removeClass("selected");
			currentContentNumber = Number($(this).attr("index")) -1;
			setNextFeatureContent();
		})
		$(".featureContentItem").live("click", function(){
			clearInterval(intervalController);
			var url = $(this).attr("target");
			window.location = url;
		})
		
		$(".featureContentItem").live("mouseleave", function(){
			clearInterval(intervalController);
			autoPlay();
		})
    }
    function preLoadImages(callback) {	
		if(enableImagePreloading == true){
	        var cacheImage, currentImage, imagesToLoadQuantity = imagesToPreload.length;
	
			var internalCallback = function(index){
				currentImage = imagesToPreload[index];
				cacheImage = new Image();
	            cacheImage.src = currentImage;
				cacheImage.onload = function(){
					if((index + 1) < imagesToLoadQuantity){
						internalCallback(index + 1)
					} else {
						callback();
					}
				}
			}
			internalCallback(0);
		} else {
			callback();
		}
    }
}
