$(document).ready(function() {
	// do stuff when DOM is ready

	//Expand selected textareas (must be done before adding js-class to get correct height)
	$('#userFeedback textarea').resizeTextarea();

	// toggle function
	$("body,form").addClass("js");
	$("html").removeAttr("class");

	// if link is to standard item - do not hide
	var hash = location.hash;
	if (hash != "") {
		var headerHash = "h3" + hash;
		$(headerHash).removeClass("closed");
		$(headerHash).addClass("expanded");
		$(headerHash).next().removeClass("start-hidden");

		$(headerHash).click(function() {
			if ($(this).hasClass("expanded")) {
				$(this).removeClass("expanded");
				$(this).addClass("closed");
			}
			else {
				$(this).removeClass("closed");
				$(this).addClass("expanded");
			}

			$(this).next().toggle();
		});
	}

	// if linked from query result
	if (location.href.indexOf("qr") > -1) {
		$(".start-hidden").removeClass("start-hidden");
	}
	// hide standard items - if not linked from query result
	$(".start-hidden").hide();

	$("h3.closed, h4.closed").click(function() {
		$(this).toggleClass("expanded");
		$(this).next().toggle();
	});

	$("h3.closed a, h4.closed a").each(function () {
		$(this).click(function(event) { event.preventDefault(); });  
	});


	//glossary
	$(".glossary-list .glossary-category:first").addClass("first-item");
	$(".glossary-list .glossary-category:last").addClass("last-item");

	// ie6-fix for addThis script
	if ($.browser.msie) {
		if ($.browser.version === '6.0') {
			$("#addThis").hide();
		}
		else {
			$("#addThisIE6").hide();
		}
	}
	else {
		$("#addThisIE6").hide();
	}

	search.init();
	orgnr.init();
	newsArchive.init();
	portlets.init();
	linkVideos.init();
	if ($("a[rel^='prettyPhoto']").length > 0) {
		$("a[rel^='prettyPhoto']").prettyPhoto();
	}

	userFeedback.init();
	
});

var portlets = {
	init: function() {
		if ($("#BottomPortletZone").length > 0) {
			var $maxHeight = 0;

			$('#BottomPortletZone .x-portlet').each(function(index) {
				if ($(this).height() > $maxHeight) {
					$maxHeight = $(this).height();
				}
			});
			$('#BottomPortletZone .x-portlet').each(function(index) {
				$(this).height($maxHeight);
				if ($(this).hasClass("instant-message-portlet") || $(this).hasClass("tip")) {
					$(this).height($maxHeight + 2);
				}
			});
		}
	}
};


/*** Search UI ***/
var search = {
    init: function() {
        //setup autocomplete
        var language = 'sv';
        var qcUrl = applianceUrl;

        var searchFieldSelector = '#searchInput input, #search-form input:first';
        var searchButtonSelector = '#searchInput button, #search-form input.button input';

        $(searchFieldSelector).autocomplete(qcUrl, { cacheLength: 0, extraParams: { ilang: language }, delay: 200, selectFirst: false, dataType: 'jsonp', highlight: false, scroll: false, parse: function(data) { return $.map(data, function(row) { return { data: row }; }); }, formatItem: function(item) {
            if (item) {
                var nHitString = "<span>" + item.nHits + "</span>";
                return nHitString + item.suggestionHighlighted;
            } return;
        }
        }).result(function(event, item) { $(searchFieldSelector).val(item.suggestion); $(searchButtonSelector).click(); });


        $("#searchInput input").click(function() {
            $("#searchInput input").val("");
        });

        if ((!$("#mainNav ul:first > li.first-item").hasClass("selected")) &&
            (!$("#mainNav ul:first > li.last-item").hasClass("selected-path"))) {

            $("li.log-in").click(function() {
                if (!$("li.log-in a").hasClass("selected")) {
						$("#loginLinks").parent("fieldset").addClass("expanded");
						$("li.log-in a").addClass("selected");
						$("#searchInput").addClass("hidden");
                    	$("#loginLinks").slideDown("300");
                }
                else {
                    $("#loginLinks").slideUp("0", function() {
                        $("li.log-in a").removeClass("selected");
                        $(this).parent("fieldset").removeClass("expanded");
                        $("#searchInput").removeClass("hidden");
                    });
                }

            });
        }

        $("#crnInput").keydown(function() {
            $("#search .captcha").slideDown();
            $("#crnInput .validate").addClass("invalid");
        });
        $("#crnInput").mousedown(function() {
            $("#search .captcha").slideDown();
            $("#crnInput .validate").addClass("invalid");
        });
        $("#crnInput").keyup(search.validate);
    },

    validate: function() {
        var $number = $("#crnInput input").val();
        search.setValidateToInvalid();
        search.clearErrorLabel();

        var $cleanNumber = $number.replace("-", "");
        $cleanNumber = $cleanNumber.replace(" ", "");

        if (!search.isNumeric($cleanNumber)) {
            search.setValidateToError();
            return;
        }

        if ($cleanNumber.length === 10) {
            if (search.isValidCRN($cleanNumber)) {
                search.setValidateToValid();
            }
        }
        else if ($cleanNumber.length === 12) {
            var $shortNumber = $cleanNumber.substr(2, 10);
            if (search.isValidCRN($shortNumber)) {
                search.setValidateToValid();
            }
            else {
                search.setValidateToError();
            }
        }
        else if ($cleanNumber.length > 12) {
            search.setValidateToError();
        }

    },

    isNumeric: function(num) {
        return !isNaN(num);
    },

    isValidDate: function(date) {
        var month = date.substr(2, 2);
        if (month >= 1 && month <= 12) {
            var day = date.substr(4, 2);
            if (day >= 1 && day <= 31) {
                return true;
            }
        }
        return false;
    },

    setValidateToInvalid: function() {
        $("#crnInput span").removeClass("valid");
        $("#crnInput span").removeClass("error");
        $("#crnInput span").addClass("invalid");
    },

    setValidateToValid: function() {
        $("#crnInput span").removeClass("invalid");
        $("#crnInput span").removeClass("error");
        $("#crnInput span").addClass("valid");
    },

    setValidateToError: function() {
        $("#crnInput span").removeClass("invalid");
        $("#crnInput span").removeClass("valid");
        $("#crnInput span").addClass("error");
    },

    clearErrorLabel: function() {
        $("#crnInput label").html("");
    },

    isValidCRN: function(number) {
        if (!search.isValidDate(number)) {
            return false;
        }

        var numberToCheck = number.substr(0, 9);

        var sum = 0;
        for (var i = 0; i < numberToCheck.length; i++) {
            var tempNumber = parseInt(numberToCheck.charAt(i),10) * (1 + ((i + 1) % 2));

            for (var j = 0; j < tempNumber.toString().length; j++) {
                sum += parseInt(tempNumber.toString().charAt(j),10);
            }
        }

        var sumString = sum.toString();
        var lastNumber = parseInt(sumString.charAt(sumString.length - 1),10);

        var controlNumber;
        if (lastNumber != 0)
            controlNumber = 10 - lastNumber;
        else controlNumber = 0;

        if (number.charAt(number.length - 1) == controlNumber) {
            return true;
        }

        return false;
    }
};

jQuery.format = function jQuery_dotnet_string_format(text) {
	//check if there are two arguments in the arguments list
	if (arguments.length <= 1) {
		//if there are not 2 or more arguments there's nothing to replace
		//just return the text
		return text;
	}
	//decrement to move to the second argument in the array
	var tokenCount = arguments.length - 2;
	for (var token = 0; token <= tokenCount; ++token) {
		//iterate through the tokens and replace their placeholders from the text in order
		text = text.replace(new RegExp("\\{" + token + "\\}", "gi"), arguments[token + 1]);
	}
	return text;
};

/*** News lists tab navigation***/
var newsArchive = {
	init: function() {

		var headings = $("#portletArea .news-list h2");
		if (headings.length > 0) {
			var ulElm = $(document.createElement("ul")).addClass("tab-navigation").insertBefore("#portletArea .news-list:first"),
			liTemplate = "<li><a href='{0}' class='{1}'>{2}</a></li>";

			$("#portletArea .news-list:first").addClass("init");

			headings.each(function(i, val) {

				if (!$(this).parent().hasClass("init")) {
					$(this).parent().hide();
				} else {
					$(this).parent().removeClass("init");
				}
				$(this).hide();
				$(this).parent().addClass("tab-" + i).addClass("tab-content");

				ulElm.append($.format(liTemplate, "#tab-" + i, "tab-" + i, $(this).text()));

			});

			ulElm.children("li:first").addClass("active");

			ulElm.bind('click', function(event) {
				var target = $(event.target);

				if (target.is("a") && !target.parent().hasClass("active")) {
					ulElm.find(".active").removeClass("active");
					$("div.tab-content").hide();
					$("div." + target.attr("class")).show();
					target.parent().addClass("active");
				}

			});
		}
	}
};

var linkVideos = {
	init: function() {
		$('.video-link').each(function(index) {
			var linkId = $(this).attr("id");
			var indexOf_ = linkId.indexOf('_');
			var id = linkId.substr(indexOf_);

			$videoPageId = "videoPage" + id;
			$videospan = document.getElementById($videoPageId);
			if ($videospan != null) {
				$(this).attr('href', $videospan.innerHTML);
			}
		});
	}
};

//orgnr
/*** Search UI ***/
var orgnr = {
	init: function() {
		var inputSelector = "#signUpOrgNr input";
		/*$(inputSelector).click(function() {
            $(this).val("");
        });*/

        $(inputSelector).focus(function() {
            orgnr.setValidateToInvalid("#signUpOrgNr .validate");
        });
        /*$(inputSelector).mousedown(function() {
            $("#signUpOrgNr .validate").addClass("invalid");
        });   */ 	
        $(inputSelector).keyup(orgnr.validate);
    },

    validate: function() {
        var $number = $(this).val();
    	var $validateSelector = $(this).parent().find(".validate");
        orgnr.setValidateToInvalid($validateSelector);
        orgnr.clearErrorLabel();

        var $cleanNumber = $number.replace("-", "");
        $cleanNumber = $cleanNumber.replace(" ", "");

        if (!orgnr.isNumeric($cleanNumber)) {
            orgnr.setValidateToError($validateSelector);
            return;
        }

        if ($cleanNumber.length === 10) {
            if (orgnr.isValidCRN($cleanNumber)) {
                orgnr.setValidateToValid($validateSelector);
            }
        }
        else if ($cleanNumber.length === 12) {
            var $shortNumber = $cleanNumber.substr(2, 10);
            if (orgnr.isValidCRN($shortNumber)) {
                orgnr.setValidateToValid($validateSelector);
            }
            else {
                orgnr.setValidateToError($validateSelector);
            }
        }
        else if ($cleanNumber.length > 12) {
            orgnr.setValidateToError($validateSelector);
        }

    },

    isNumeric: function(num) {
        return !isNaN(num);
    },

    setValidateToInvalid: function(selector) {
        $(selector).removeClass("valid");
        $(selector).removeClass("error");
        $(selector).addClass("invalid");
    },

    setValidateToValid: function(selector) {
        $(selector).removeClass("invalid");
        $(selector).removeClass("error");
        $(selector).addClass("valid");
    },

    setValidateToError: function(selector) {
        $(selector).removeClass("invalid");
        $(selector).removeClass("valid");
        $(selector).addClass("error");
    },

    clearErrorLabel: function() {
        //$("#crnInput label").html("");
    	//console.log("clearErrorLabel");
    },

    isValidCRN: function(number) {
        var numberToCheck = number.substr(0, 9);

        var sum = 0;
        for (var i = 0; i < numberToCheck.length; i++) {
            var tempNumber = parseInt(numberToCheck.charAt(i),10) * (1 + ((i + 1) % 2));

            for (var j = 0; j < tempNumber.toString().length; j++) {
                sum += parseInt(tempNumber.toString().charAt(j),10);
            }
        }

        var sumString = sum.toString();
        var lastNumber = parseInt(sumString.charAt(sumString.length - 1),10);

        var controlNumber;
        if (lastNumber != 0)
            controlNumber = 10 - lastNumber;
        else controlNumber = 0;

        if (number.charAt(number.length - 1) == controlNumber) {
            return true;
        }

        return false;
    }
};
//end orgnr

var userFeedback = {
	init: function () {
	    //Like/Dislike

		$("#userFeedbackWrapper .toggleClosed").click(function() {
			$(this).remove();
			$("#userFeedbackCommentWrapper").show();
			return false;
		});
		
	    $("#userFeedbackLike").click(function () {
		    var clickedObj = $(this);
            jQuery.get("/Web/Apps/UserFeedback/UserFeedback.aspx", { loadType: "clickLike" }, function(response) {
        	    if(response != "") {
        		    var data = $(response);
                	var status = data.filter("#status").text();
                	userFeedback.validationMessage(data.filter("#message").text());
                	if(status == "0") {
                	    $("#userFeedbackWrapper .toggleClosed").remove();
                		$("#userFeedbackCommentWrapper").show();
                	}
        	    }
            });
            return false;			
	    });
    	
	    $("#userFeedbackDislike").click(function () {
            var clickedObj = $(this);
		    jQuery.get("/Web/Apps/UserFeedback/UserFeedback.aspx", { loadType: "clickDislike" }, function(response) {
                if(response != "") {
                	var data = $(response);
                	var status = data.filter("#status").text();
                	if(status == "0"){
                	    $("#userFeedbackWrapper .toggleClosed").remove();
                	}
                	userFeedback.validationMessage(data.filter("#message").text());
                	$("#userFeedbackCommentWrapper").show();
                }
		    });
            return false;			
	    });

		$("#userFeedbackSendComment").click(function () {
			
			if(!userFeedback.validate()) { return false; }
			
			var mess = $("#userFeedbackComment").val();
			var name = "";
			var email = "";
			var likeurl = window.location.href;
			if ($("input[name='userFeedbackContactMe']:checked").val() == '1') {
			    
				$("#userFeedbackResponseWrapper").hide();
				
				name = $("#userFeedbackName").val();
		    	email = $("#userFeedbackEmail").val();

			}
		    jQuery.get("/Web/Apps/UserFeedback/UserFeedback.aspx", { loadType: "clickSendComment", mess: mess, name: name, email: email, url: likeurl }, function(response) {
                if(response != "error") {
            	    //$("span", clickedObj).text(response);
                	$("#userFeedbackResponseText").text(response);
                	$("#userFeedbackResponseWrapper").show();
                	$("#userFeedbackCommentWrapper").hide();
                	//empty form
                	$("#userFeedbackContactMeNo").attr("checked", "true");
                	$("#userFeedbackContactMeWrapper").hide();
                	$("#userFeedbackComment").val("");
                	$("#userFeedbackName").val("");
                    $("#userFeedbackEmail").val("");
                }
		    });
			return false;
		});
		

        $("input[name='userFeedbackContactMe']").change(function(){
            if ($("input[name='userFeedbackContactMe']:checked").val() == '1') {
        	    $("#userFeedbackContactMeWrapper").show();
            }
            else{
        	    $("#userFeedbackContactMeWrapper").hide();
            }	
        });	
	},
		
	validate: function () {
		$("#userFeedback .validation").hide();
		var success = true;

		if($("#userFeedbackComment").val().length < 1) {
			userFeedback.validationTextfieldMessage("userFeedbackCommentValidation");
			success = false;
		}
		
		if ($("input[name='userFeedbackContactMe']:checked").val() == '1') {
		    if($("#userFeedbackName").val().length < 1) {
			    userFeedback.validationTextfieldMessage("userFeedbackNameValidation");
			    success = false;
		    }
		    if ($("#userFeedbackEmail").val().length < 1) {
			    userFeedback.validationTextfieldMessage("userFeedbackEmailValidation");
			    success = false;
		    }
		    
		    var emailpattern = new RegExp(/^[+a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i);
	        if(!emailpattern.test($("#userFeedbackEmail").val())) {
	    	    userFeedback.validationTextfieldMessage("userFeedbackEmailValidation");
	    	    success = false;
	        }

		}
		return success;
	},
	
	validationMessage: function(errorMessage) {
    	$("#userFeedbackResponseText").text(errorMessage);
    	$("#userFeedbackResponseWrapper").show();		
	},
	
	validationTextfieldMessage: function(validationObj) {
		$("#" + validationObj).show();	
	}
	
};

/*Resizing textareas - if writing longer messages textareas expands*/
(function($) {
$.fn.resizeTextarea = function (options) {
/*
 * jQuery autoResize (textarea auto-resizer)
 * @copyright James Padolsey http://james.padolsey.com
 * @version 1.04
 */
    // Just some abstracted details,
    // to make plugin users happy:
    var settings = $.extend({
        onResize : function(){},
        animate : true,
        animateDuration : 150,
        animateCallback : function(){},
        extraSpace : 0,
        limit: 2000,
		height: 80
    }, options);
	
    return this.each(function () {

        // Get rid of scrollbars and disable WebKit resizing:
        var textarea = $(this).css({resize:'none','overflow-y':'hidden'}),

            // Cache original height, for use later:
            origHeight = textarea.height() > 0 ? textarea.height() : settings.height,

            // Need clone of textarea, hidden off screen:
            clone = (function(){

                // Properties which may effect space taken up by chracters:
                var props = ['height','width','lineHeight','textDecoration','letterSpacing'],
                    propOb = {};

                // Create object of styles to apply:
                $.each(props, function(i, prop){
                    propOb[prop] = textarea.css(prop);
                });

                // Clone the actual textarea removing unique properties
                // and insert before original textarea:
                return textarea.clone().removeAttr('id').removeAttr('name').css({
                    position: 'absolute',
                    top: 0,
                    left: -9999
                }).css(propOb).attr('tabIndex','-1').insertBefore(textarea);

            })(),
            lastScrollTop = null,
            updateSize = function() {

                // Prepare the clone:
                clone.height(0).val($(this).val()).scrollTop(10000);

                // Find the height of text:
                var scrollTop = Math.max(clone.scrollTop(), origHeight) + settings.extraSpace,
                    toChange = $(this).add(clone);

                // Don't do anything if scrollTip hasen't changed:
                if (lastScrollTop === scrollTop) { return; }
                lastScrollTop = scrollTop;

                // Check for limit:
                if ( scrollTop >= settings.limit ) {
                    $(this).css('overflow-y','');
                    return;
                }
                // Fire off callback:
                settings.onResize.call(this);

                // Either animate or directly apply height:
                settings.animate && textarea.css('display') === 'block' ?
                    toChange.stop().animate({height:scrollTop}, settings.animateDuration, settings.animateCallback)
                    : toChange.height(scrollTop);
            };

        // Bind namespaced handlers to appropriate events:
        textarea
            .unbind('.dynSiz')
            .bind('keyup.dynSiz', updateSize)
            .bind('keydown.dynSiz', updateSize)
            .bind('change.dynSiz', updateSize);

	 });
};
})(jQuery);

/* ------------------------------------------------------------------------
* 	Class: prettyPhoto
* 	Use: Lightbox clone for jQuery
* 	Author: Stephane Caron (http://www.no-margin-for-errors.com)
* 	Version: 2.5.6
------------------------------------------------------------------------- */

(function($) {
	$.prettyPhoto = { version: '2.5.6' }; $.fn.prettyPhoto = function(settings) {
		settings = jQuery.extend({ animationSpeed: 'normal', opacity: 0.80, showTitle: true, allowresize: true, default_width: 500, default_height: 344, counter_separator_label: '/', theme: 'light_rounded', hideflash: false, wmode: 'opaque', autoplay: true, modal: false, changepicturecallback: function() { }, callback: function() { }, markup: '<div class="pp_pic_holder"> \
      <div class="pp_top"> \
       <div class="pp_left"></div> \
       <div class="pp_middle"></div> \
       <div class="pp_right"></div> \
      </div> \
      <div class="pp_content_container"> \
       <div class="pp_left"> \
       <div class="pp_right"> \
        <div class="pp_content"> \
         <div class="pp_loaderIcon"></div> \
         <div class="pp_fade"> \
          <a href="#" class="pp_expand" title="Expand the image">Expand</a> \
          <div class="pp_hoverContainer"> \
           <a class="pp_next" href="#">next</a> \
           <a class="pp_previous" href="#">previous</a> \
          </div> \
          <div id="pp_full_res"></div> \
          <div class="pp_details clearfix"> \
           <a class="pp_close" href="#">Stäng</a> \
           <p class="pp_description"></p> \
           <div class="pp_nav"> \
            <a href="#" class="pp_arrow_previous">Previous</a> \
            <p class="currentTextHolder">0/0</p> \
            <a href="#" class="pp_arrow_next">Next</a> \
           </div> \
          </div> \
         </div> \
        </div> \
       </div> \
       </div> \
      </div> \
      <div class="pp_bottom"> \
       <div class="pp_left"></div> \
       <div class="pp_middle"></div> \
       <div class="pp_right"></div> \
      </div> \
     </div> \
     <div class="pp_overlay"></div> \
     <div class="ppt"></div>', image_markup: '<img id="fullResImage" src="" />', flash_markup: '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="{width}" height="{height}"><param name="wmode" value="{wmode}" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="{path}" /><embed src="{path}" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="{width}" height="{height}" wmode="{wmode}"></embed></object>', quicktime_markup: '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="{height}" width="{width}"><param name="src" value="{path}"><param name="autoplay" value="{autoplay}"><param name="type" value="video/quicktime"><embed src="{path}" height="{height}" width="{width}" autoplay="{autoplay}" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"></embed></object>', iframe_markup: '<iframe src ="{path}" width="{width}" height="{height}" frameborder="no"></iframe>', inline_markup: '<div class="pp_inline clearfix">{content}</div>'
		}, settings); if ($.browser.msie && parseInt($.browser.version) == 6) { settings.theme = "light_square"; }
		if ($('.pp_overlay').size() == 0) _buildOverlay(); var doresize = true, percentBased = false, correctSizes, $pp_pic_holder, $ppt, $pp_overlay, pp_contentHeight, pp_contentWidth, pp_containerHeight, pp_containerWidth, windowHeight = $(window).height(), windowWidth = $(window).width(), setPosition = 0, scrollPos = _getScroll(); $(window).scroll(function() { scrollPos = _getScroll(); _centerOverlay(); _resizeOverlay(); }); $(window).resize(function() { _centerOverlay(); _resizeOverlay(); }); $(document).keydown(function(e) {
			if ($pp_pic_holder.is(':visible'))
				switch (e.keyCode) {
				case 37: $.prettyPhoto.changePage('previous'); break; case 39: $.prettyPhoto.changePage('next'); break; case 27: if (!settings.modal)
						$.prettyPhoto.close(); break;
			};
		}); $(this).each(function() {
			$(this).bind('click', function() {
				_self = this; theRel = $(this).attr('rel'); galleryRegExp = /\[(?:.*)\]/; theGallery = galleryRegExp.exec(theRel); var images = new Array(), titles = new Array(), descriptions = new Array(); if (theGallery) { $('a[rel*=' + theGallery + ']').each(function(i) { if ($(this)[0] === $(_self)[0]) setPosition = i; images.push($(this).attr('href')); titles.push($(this).find('img').attr('alt')); descriptions.push($(this).attr('title')); }); } else { images = $(this).attr('href'); titles = ($(this).find('img').attr('alt')) ? $(this).find('img').attr('alt') : ''; descriptions = ($(this).attr('title')) ? $(this).attr('title') : ''; }
				$.prettyPhoto.open(images, titles, descriptions); return false;
			});
		}); $.prettyPhoto.open = function(gallery_images, gallery_titles, gallery_descriptions) {
			if ($.browser.msie && $.browser.version == 6) { $('select').css('visibility', 'hidden'); }; if (settings.hideflash) $('object,embed').css('visibility', 'hidden'); images = $.makeArray(gallery_images); titles = $.makeArray(gallery_titles); descriptions = $.makeArray(gallery_descriptions); image_set = ($(images).size() > 0) ? true : false; _checkPosition($(images).size()); $('.pp_loaderIcon').show(); $pp_overlay.show().fadeTo(settings.animationSpeed, settings.opacity); $pp_pic_holder.find('.currentTextHolder').text((setPosition + 1) + settings.counter_separator_label + $(images).size()); if (descriptions[setPosition]) { $pp_pic_holder.find('.pp_description').show().html(unescape(descriptions[setPosition])); } else { $pp_pic_holder.find('.pp_description').hide().text(''); }; /*if (titles[setPosition] && settings.showTitle) { hasTitle = true; $ppt.html(unescape(titles[setPosition])); } else {*/hasTitle = false; /*};*/movie_width = (parseFloat(grab_param('width', images[setPosition]))) ? grab_param('width', images[setPosition]) : settings.default_width.toString(); movie_height = (parseFloat(grab_param('height', images[setPosition]))) ? grab_param('height', images[setPosition]) : settings.default_height.toString(); if (movie_width.indexOf('%') != -1 || movie_height.indexOf('%') != -1) { movie_height = parseFloat(($(window).height() * parseFloat(movie_height) / 100) - 100); movie_width = parseFloat(($(window).width() * parseFloat(movie_width) / 100) - 100); percentBased = true; }
			$pp_pic_holder.fadeIn(function() { imgPreloader = ""; switch (_getFileType(images[setPosition])) { case 'image': imgPreloader = new Image(); nextImage = new Image(); if (image_set && setPosition > $(images).size()) nextImage.src = images[setPosition + 1]; prevImage = new Image(); if (image_set && images[setPosition - 1]) prevImage.src = images[setPosition - 1]; $pp_pic_holder.find('#pp_full_res')[0].innerHTML = settings.image_markup; $pp_pic_holder.find('#fullResImage').attr('src', images[setPosition]); imgPreloader.onload = function() { correctSizes = _fitToViewport(imgPreloader.width, imgPreloader.height); _showContent(); }; imgPreloader.onerror = function() { alert('Image cannot be loaded. Make sure the path is correct and image exist.'); $.prettyPhoto.close(); }; imgPreloader.src = images[setPosition]; break; case 'youtube': correctSizes = _fitToViewport(movie_width, movie_height); movie = 'http://www.youtube.com/v/' + grab_param('v', images[setPosition]); if (settings.autoplay) movie += "&autoplay=1"; toInject = settings.flash_markup.replace(/{width}/g, correctSizes['width']).replace(/{height}/g, correctSizes['height']).replace(/{wmode}/g, settings.wmode).replace(/{path}/g, movie); break; case 'vimeo': correctSizes = _fitToViewport(movie_width, movie_height); movie_id = images[setPosition]; movie = 'http://vimeo.com/moogaloop.swf?clip_id=' + movie_id.replace('http://vimeo.com/', ''); if (settings.autoplay) movie += "&autoplay=1"; toInject = settings.flash_markup.replace(/{width}/g, correctSizes['width']).replace(/{height}/g, correctSizes['height']).replace(/{wmode}/g, settings.wmode).replace(/{path}/g, movie); break; case 'quicktime': correctSizes = _fitToViewport(movie_width, movie_height); correctSizes['height'] += 15; correctSizes['contentHeight'] += 15; correctSizes['containerHeight'] += 15; toInject = settings.quicktime_markup.replace(/{width}/g, correctSizes['width']).replace(/{height}/g, correctSizes['height']).replace(/{wmode}/g, settings.wmode).replace(/{path}/g, images[setPosition]).replace(/{autoplay}/g, settings.autoplay); break; case 'flash': correctSizes = _fitToViewport(movie_width, movie_height); flash_vars = images[setPosition]; flash_vars = flash_vars.substring(images[setPosition].indexOf('flashvars') + 10, images[setPosition].length); filename = images[setPosition]; filename = filename.substring(0, filename.indexOf('?')); toInject = settings.flash_markup.replace(/{width}/g, correctSizes['width']).replace(/{height}/g, correctSizes['height']).replace(/{wmode}/g, settings.wmode).replace(/{path}/g, filename + '?' + flash_vars); break; case 'iframe': correctSizes = _fitToViewport(movie_width, movie_height); frame_url = images[setPosition]; frame_url = frame_url.substr(0, frame_url.indexOf('iframe') - 1); toInject = settings.iframe_markup.replace(/{width}/g, correctSizes['width']).replace(/{height}/g, correctSizes['height']).replace(/{path}/g, frame_url); break; case 'inline': myClone = $(images[setPosition]).clone().css({ 'width': settings.default_width }).wrapInner('<div id="pp_full_res"><div class="pp_inline clearfix"></div></div>').appendTo($('body')); correctSizes = _fitToViewport($(myClone).width(), $(myClone).height()); $(myClone).remove(); toInject = settings.inline_markup.replace(/{content}/g, $(images[setPosition]).html()); break; }; if (!imgPreloader) { $pp_pic_holder.find('#pp_full_res')[0].innerHTML = toInject; _showContent(); }; });
		}; $.prettyPhoto.changePage = function(direction) { if (direction == 'previous') { setPosition--; if (setPosition < 0) { setPosition = 0; return; }; } else { if ($('.pp_arrow_next').is('.disabled')) return; setPosition++; }; if (!doresize) doresize = true; _hideContent(function() { $.prettyPhoto.open(images, titles, descriptions) }); $('a.pp_expand,a.pp_contract').fadeOut(settings.animationSpeed); }; $.prettyPhoto.close = function() { $pp_pic_holder.find('object,embed').css('visibility', 'hidden'); $('div.pp_pic_holder,div.ppt,.pp_fade').fadeOut(settings.animationSpeed); $pp_overlay.fadeOut(settings.animationSpeed, function() { $('#pp_full_res').html(''); $pp_pic_holder.attr('style', '').find('div:not(.pp_hoverContainer)').attr('style', ''); _centerOverlay(); if ($.browser.msie && $.browser.version == 6) { $('select').css('visibility', 'visible'); }; if (settings.hideflash) $('object,embed').css('visibility', 'visible'); setPosition = 0; settings.callback(); }); doresize = true; }; _showContent = function() {
			$('.pp_loaderIcon').hide(); projectedTop = scrollPos['scrollTop'] + ((windowHeight / 2) - (correctSizes['containerHeight'] / 2)); if (projectedTop < 0) projectedTop = 0 + $ppt.height(); $pp_pic_holder.find('.pp_content').animate({ 'height': correctSizes['contentHeight'] }, settings.animationSpeed); $pp_pic_holder.animate({ 'top': projectedTop, 'left': (windowWidth / 2) - (correctSizes['containerWidth'] / 2), 'width': correctSizes['containerWidth'] }, settings.animationSpeed, function() {
				$pp_pic_holder.find('.pp_hoverContainer,#fullResImage').height(correctSizes['height']).width(correctSizes['width']); $pp_pic_holder.find('.pp_fade').fadeIn(settings.animationSpeed); if (image_set && _getFileType(images[setPosition]) == "image") { $pp_pic_holder.find('.pp_hoverContainer').show(); } else { $pp_pic_holder.find('.pp_hoverContainer').hide(); }
				if (settings.showTitle && hasTitle) { $ppt.css({ 'top': $pp_pic_holder.offset().top - 25, 'left': $pp_pic_holder.offset().left + 20, 'display': 'none' }); $ppt.fadeIn(settings.animationSpeed); }; if (correctSizes['resized']) $('a.pp_expand,a.pp_contract').fadeIn(settings.animationSpeed); settings.changepicturecallback();
			});
		}; function _hideContent(callback) { $pp_pic_holder.find('#pp_full_res object,#pp_full_res embed').css('visibility', 'hidden'); $pp_pic_holder.find('.pp_fade').fadeOut(settings.animationSpeed, function() { $('.pp_loaderIcon').show(); if (callback) callback(); }); $ppt.fadeOut(settings.animationSpeed); }
		function _checkPosition(setCount) { if (setPosition == setCount - 1) { $pp_pic_holder.find('a.pp_next').css('visibility', 'hidden'); $pp_pic_holder.find('a.pp_arrow_next').addClass('disabled').unbind('click'); } else { $pp_pic_holder.find('a.pp_next').css('visibility', 'visible'); $pp_pic_holder.find('a.pp_arrow_next.disabled').removeClass('disabled').bind('click', function() { $.prettyPhoto.changePage('next'); return false; }); }; if (setPosition == 0) { $pp_pic_holder.find('a.pp_previous').css('visibility', 'hidden'); $pp_pic_holder.find('a.pp_arrow_previous').addClass('disabled').unbind('click'); } else { $pp_pic_holder.find('a.pp_previous').css('visibility', 'visible'); $pp_pic_holder.find('a.pp_arrow_previous.disabled').removeClass('disabled').bind('click', function() { $.prettyPhoto.changePage('previous'); return false; }); }; if (setCount > 1) { $('.pp_nav').show(); } else { $('.pp_nav').hide(); } }; function _fitToViewport(width, height) { hasBeenResized = false; _getDimensions(width, height); imageWidth = width; imageHeight = height; if (((pp_containerWidth > windowWidth) || (pp_containerHeight > windowHeight)) && doresize && settings.allowresize && !percentBased) { hasBeenResized = true; notFitting = true; while (notFitting) { if ((pp_containerWidth > windowWidth)) { imageWidth = (windowWidth - 200); imageHeight = (height / width) * imageWidth; } else if ((pp_containerHeight > windowHeight)) { imageHeight = (windowHeight - 200); imageWidth = (width / height) * imageHeight; } else { notFitting = false; }; pp_containerHeight = imageHeight; pp_containerWidth = imageWidth; }; _getDimensions(imageWidth, imageHeight); }; return { width: Math.floor(imageWidth), height: Math.floor(imageHeight), containerHeight: Math.floor(pp_containerHeight), containerWidth: Math.floor(pp_containerWidth) + 40, contentHeight: Math.floor(pp_contentHeight) + 5, contentWidth: Math.floor(pp_contentWidth), resized: hasBeenResized }; };
		function _getDimensions(width, height) {
			width = parseFloat(width);
			height = parseFloat(height);
			$pp_details = $pp_pic_holder.find('.pp_details');
			$pp_details.width(width);
			detailsHeight = parseFloat($pp_details.css('marginTop')) + parseFloat($pp_details.css('marginBottom'));
			// IE9 fix start
			if (!detailsHeight && $pp_details.get(0).currentStyle) {
				detailsHeight = (parseFloat($pp_details.get(0).currentStyle.marginTop) + parseFloat($pp_details.get(0).currentStyle.marginBottom));
			}
			// IE9 fix end
			$pp_details = $pp_details.clone().appendTo($('body')).css({ 'position': 'absolute', 'top': -10000 });
			detailsHeight += $pp_details.height();
			detailsHeight = (detailsHeight <= 34) ? 36 : detailsHeight;
			if ($.browser.msie && $.browser.version == 7) detailsHeight += 8;
			$pp_details.remove(); pp_contentHeight = height + detailsHeight;
			pp_contentWidth = width;
			pp_containerHeight = pp_contentHeight + $ppt.height() + $pp_pic_holder.find('.pp_top').height() + $pp_pic_holder.find('.pp_bottom').height();
			pp_containerWidth = width;
		}
		function _getFileType(itemSrc) { if (itemSrc.match(/youtube\.com\/watch/i)) { return 'youtube'; } else if (itemSrc.match(/vimeo\.com/i)) { return 'vimeo'; } else if (itemSrc.indexOf('.mov') != -1) { return 'quicktime'; } else if (itemSrc.indexOf('.swf') != -1) { return 'flash'; } else if (itemSrc.indexOf('iframe') != -1) { return 'iframe' } else if (itemSrc.substr(0, 1) == '#') { return 'inline'; } else { return 'image'; }; }; function _centerOverlay() { if (doresize) { titleHeight = $ppt.height(); contentHeight = $pp_pic_holder.height(); contentwidth = $pp_pic_holder.width(); projectedTop = (windowHeight / 2) + scrollPos['scrollTop'] - ((contentHeight + titleHeight) / 2); $pp_pic_holder.css({ 'top': projectedTop, 'left': (windowWidth / 2) + scrollPos['scrollLeft'] - (contentwidth / 2) }); $ppt.css({ 'top': projectedTop - titleHeight, 'left': (windowWidth / 2) + scrollPos['scrollLeft'] - (contentwidth / 2) + 20 }); }; }; function _getScroll() { if (self.pageYOffset) { return { scrollTop: self.pageYOffset, scrollLeft: self.pageXOffset }; } else if (document.documentElement && document.documentElement.scrollTop) { return { scrollTop: document.documentElement.scrollTop, scrollLeft: document.documentElement.scrollLeft }; } else if (document.body) { return { scrollTop: document.body.scrollTop, scrollLeft: document.body.scrollLeft }; }; }; function _resizeOverlay() { windowHeight = $(window).height(); windowWidth = $(window).width(); $pp_overlay.css({ 'height': $(document).height() }); }; function _buildOverlay() {
			$('body').append(settings.markup); $pp_pic_holder = $('.pp_pic_holder'); $ppt = $('.ppt'); $pp_overlay = $('div.pp_overlay'); $pp_pic_holder.attr('class', 'pp_pic_holder ' + settings.theme); $pp_overlay.css({ 'opacity': 0, 'height': $(document).height() }).bind('click', function() {
				if (!settings.modal)
					$.prettyPhoto.close();
			}); $('a.pp_close').bind('click', function() { $.prettyPhoto.close(); return false; }); $('a.pp_expand').bind('click', function() { $this = $(this); if ($this.hasClass('pp_expand')) { $this.removeClass('pp_expand').addClass('pp_contract'); doresize = false; } else { $this.removeClass('pp_contract').addClass('pp_expand'); doresize = true; }; _hideContent(function() { $.prettyPhoto.open(images, titles, descriptions) }); $pp_pic_holder.find('.pp_fade').fadeOut(settings.animationSpeed); return false; }); $pp_pic_holder.find('.pp_previous, .pp_arrow_previous').bind('click', function() { $.prettyPhoto.changePage('previous'); return false; }); $pp_pic_holder.find('.pp_next, .pp_arrow_next').bind('click', function() { $.prettyPhoto.changePage('next'); return false; });
		}; _centerOverlay();
	}; function grab_param(name, url) {
		name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); var regexS = "[\\?&]" + name + "=([^&#]*)"; var regex = new RegExp(regexS); var results = regex.exec(url); if (results == null)
			return ""; else
			return results[1];
	}
})(jQuery);

