﻿/// <reference path="jquery-1.3.2-vsdoc2.js" />

// Simple JavaScript Templating
// John Resig - http://ejohn.org/ - MIT Licensed
(function(){
  var cache = {};
 
  this.tmpl = function tmpl(str, data){
    // Figure out if we're getting a template, or if we need to
    // load the template - and be sure to cache the result.
    var fn = !/\W/.test(str) ?
      cache[str] = cache[str] ||
        tmpl(document.getElementById(str).innerHTML) :
     
      // Generate a reusable function that will serve as a template
      // generator (and which will be cached).
      new Function("obj",
        "var p=[],print=function(){p.push.apply(p,arguments);};" +
       
        // Introduce the data as local variables using with(){}
        "with(obj){p.push('" +
       
        // Convert the template into pure JavaScript
        str
          .replace(/[\r\t\n]/g, " ")
          .split("<~").join("\t")
          .replace(/((^|~>)[^\t]*)'/g, "$1\r")
          .replace(/\t=(.*?)~>/g, "',$1,'")
          .split("\t").join("');")
          .split("~>").join("p.push('")
          .split("\r").join("\\'")
      + "');}return p.join('');");
   
    // Provide some basic currying to the user
    return data ? fn( data ) : fn;
  };
})();

/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 5/25/2009
 * @author Ariel Flesler
 * @version 1.4.2
 *
 * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
 */
;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);

(function($){

var waitingFor = 0,
    waitInterval,
    $waitElement,
    dot = "&#9646;",
    nodot = "&#9647;",
    dots = 3;
    
    var i = 0;
    var animate = function(){
        if (waitingFor <= 0) 
        {
            $waitElement.fadeOut();
        } else {
            $waitElement.fadeIn();
            var string = "";
            for (var j = 0; j < dots; j++){
                if (i == j) string += dot;
                else string += nodot;
            }
            $waitElement.html(string);
            i = (i + 1) % (dots * 2);
        }
    };

$.loadingWait = function(){
    waitingFor++;
    
    if (!$waitElement) $waitElement = $("#wait");
    if (!waitInterval) { waitInterval = window.setInterval(animate, 250); }
    
    return function(){
        waitingFor--;
    } 
}
})(jQuery)

$( function(){
    
    var pageDone = $.loadingWait()
    $(window).load(pageDone);

    $("#messages .message .remove").click(function(){
        var $self = $(this).parent();
        var loadingDone = $.loadingWait();
        $.ajax({
                url:"/SiteMessagesService.asmx/RemoveMessage",
                data:$.jsonSerialize({Id:$self.attr("id")}),
                success: function(r){
                    $self.slideUp();
                    loadingDone();
                }
            });
    });
   

    $("#sideNav.dynamic")
        .accordion({
            active:$("#sideNav li.current :first-child"),
            header:"> li:not(.parent):has(ul) > :first-child",
            event:"click",
            autoHeight:false,
            collapsible:true})
        .find("> li:not(.parent):not(:has(ul))")
            .addClass("empty")
            .end()
        .find("> li:not(.parent):not(.empty) > :first-child a")
            .bind("click", function(){ window.location = this.href; })
            .end();
    
    var baseline = 15;
    $.fn.baseline = function(baseline){
        return $(this).each( function(){ 
            var $this = $(this);
            $this.css("marginBottom", baseline - ($this.height() % baseline));
        });
    }
    
    
//    $("#content img").bind("load", function(e){
//        $(this).baseline(baseline);
//    });
//    $(window).bind("load", function(){
//        $("#content img").baseline(baseline);
//    });
});

(function($){
$.fn.starRating = function(starCount){
    var _self = this;

    if (typeof starCount == "undefined") {
        return {
            get : function(){
                if (_self.length < 1) return 0;
                
                var total = 0;
                _self.each(function(){ total += this.rating });
                return total / _self.length;
            }, set : function(starRating){
                _self.each(function(){ this.setStars(starRating) });
            }
        }
    }
    
    return _self.each( function(){ 
        var self = this,
            $self = $(self),
            $stars;
            self.rating = 0;
        
        var makeStars = function(){
            for (var i = 0; i < starCount; i++){
                $self.append("<span class='star'>&nbsp;</span>");
            }
            
            $stars = $self.find(".star");
        }
        self.setStars = function(starRating){
            self.rating = starRating;
            showStars(self.rating);
        }
        var showStars = function(starRating){
            $stars.removeClass("starred");
            for (var i = 0; i < starRating; i++){
                $stars.eq(i).addClass("starred");
            }
        }
        
        makeStars();
        showStars(self.rating);
        
        $stars
            .bind("mousedown", function(){ return false; })
            .bind("mouseover", function(){
                showStars($stars.index(this) + 1);
            })
            .bind("mouseout", function(){
                showStars(self.rating);
            })
            .bind("click", function(){
                self.setStars($stars.index(this) + 1);
            });
    });
}
$.ajaxSetup({
  type: "POST",
  contentType: "application/json; charset=utf-8",
  data: "{}",
  dataFilter: function(data) {
    var msg;
 
    if (typeof (JSON) !== 'undefined' && 
        typeof (JSON.parse) === 'function')
      msg = JSON.parse(data);
    else
      msg = eval('(' + data + ')');
 
    return msg;
  }
});
$.fn.ajaxLoadControl = function(virtualPath, refreshDelay, suppressError){
    
    var $self = this,
        doLoad = function(){
            var loadingDone = $.loadingWait();
            $.ajax({
                url:"/LoadControl.asmx/Load",
                data:$.jsonSerialize({virtualPath:virtualPath}),
                success: function(r){
                    $self.empty().append(r.d);
                    loadingDone();
                },
                error: function(r){
                    if (suppressError) return;
                    $self.empty().append("<strong>Error!</strong>");
                    loadingDone();
                }
            });
        }
        
        
        doLoad();
        
        if (refreshDelay && refreshDelay > 0) setInterval(doLoad, refreshDelay);
}
$.formatString = function(string, object) {
    var tokens = object;
    if (tokens.constructor != Object) {
        var temp = [];
        for (var i = 1; i < length; i++) {
            temp[i - 1] = arguments[i];
        }
        tokens = temp;
    }

    $.each(tokens, function(key, value) {
        string = string.replace(new RegExp("\{" + key + "\}", "g"), value);
    });

    return string;
}

$.jsonSerialize = function(object) {
    var arr = [];
    $.each(object, function(i, o) {
        arr[arr.length] = $.formatString("{k}:'{v}'", { k: i, v: o.toString().replace(/[\']/g, "\\'") });
    });
    return "{ " + arr.join(',') + " }";
}

})(jQuery)
