        var defaultHomePage = "adminHome_1.html";
        var defaultHistoryCallbackID = "div#content";
        var defaultTitle = "Home";
        var titlePrefix = "Global Solar Center";
        var dictionaryDeleteURL = "json.php?action=delete";
        var dictionaryAddURL = "json.php?action=add";
        var dictionaryEditURL = "json.php?action=edit";
/* Common functions */
        function contentLoad(url) {
            if(url!='#') $("div#content").load(url+" div#content > *", null,
            function(){}
            );
            return false;
        }
        function subMenu(list, id)
        {
            var subMenuContainer = typeof(id)=="undefined" ? $("#subnav ul") : $(id);
            subMenuContainer.empty();
            $.each(list, function(text, href){
            subMenuContainer.append("<li><a href=\"#"+href+"\">"+text+"</a></li>");
        });
        }
        function setTitle(title)
        {
            document.title = title;
        }
        function pageLoad(hash) {
            if(hash)
                {
                  if(hash=="home")hash=defaultHomePage;
                  submenu = false; title = false;
                   if(typeof(historyCallbackID) == "undefined") historyCallbackID = defaultHistoryCallbackID;
                  $(historyCallbackID).load(hash, null,
                  function(){
                     subMenu(submenu);
                     title = titlePrefix + " - " + (title ? title : defaultTitle);
                     document.title = title;
                     if($("div").is("#reference-data"))liSelect();
                     $("form.validate").validate({
                      errorPlacement: function(error, element) {
                           if(element.closest("tr").next("tr").children("td:first-child").text())
                               element.closest("tr").after("<tr><td></td><td></td></tr>");
                           error.appendTo( element.closest("tr").next("tr").children("td:last-child") );
                         }
                     });
                  });
                }
            return false;
        }
        function historyLoad(url, id)
        {
            var hash = url.replace(/^.*#/, '');
            historyCallbackID = typeof(id) == "undefined" ? defaultHistoryCallbackID : id;
            $.history.load(hash);
        }
        function noHistoryLoad(url, id)
        {
            var hash = url.replace(/^.*#/, '');
            historyCallbackID = typeof(id) == "undefined" ? defaultHistoryCallbackID : id;
            $.history._callback(hash);
        }
        function ajaxPostResponse(data)
        {
            $("div#content").html(data);
        }
/*  Select functions */
        function selectAppend(text)
        {
           var dataGroup = $("#data-group").val();
           if(text &&  $.inArray(text, dictionary[dataGroup])==-1)
               {
                $.getJSON(dictionaryAddURL, {group:dataGroup, value:text}, selectCallback);
               }
        }
        function selectRemove($li)
        {
            var id = $li.attr("id").match(/li-(\d+)/)[1];
            $.getJSON(dictionaryDeleteURL, {id:id}, selectCallback);
        }
        function liReload()
        {
            var newUL = '<ul class="select" id="data-values">';
            var dataValues = dictionary[$("#data-group").val()]
            $.each(dataValues, function(){
               newUL += '<li id="li-'+this.id+'" class="'+this.active+'"><span class="ui-icon ui-icon-trash"/><span class="ui-icon ui-icon-pencil"/><span class="option">'+this.value+'</span></li>';
            });
            newUL += '</ul>';
            $("ul#data-values").replaceWith(newUL);
        }
        function liSelect()
        {
          $("div#reference-data").html('<label for="fn">Data Group</label>\
              <select id="data-group" onchange="liReload();">\
              </select>\
              <div class="new-value">\
                <span>\
                  <label for="new-value">New value</label>\
                  <input type="text" name="new-value" id="newValueText">\
                </span>\
                <span class="ui-icon ui-icon-plus" id="appendValue" />\
              </div>\
              <ul class="select" id="data-values">\
              </ul>');
            $.each(dictionary, function(dataGroup){
              $("#data-group").append("<option>"+dataGroup+"</option>");
            });
            liReload();
        }
        function startEdit(li)
        {
            var text = li.text();
            li.html(
              "<div><input type='checkbox' name='active' chacked='false'>active"+
              "<input type='text' value='"+
                  text+
                  "' /></div><span class='ui-icon ui-icon-check'/>"
              +'<span class="ui-icon ui-icon-closethick"/>'
            );
            li.addClass("edit");
            li.find(":checkbox")[0].checked=li.hasClass("true");
        }
        function finishEdit()
        {
            var liInput = $("ul#data-values li :text");
            if (liInput.length) {
              var text = liInput.val();
              var li = liInput.closest("li");
              var id = li.attr("id").match(/li-(\d+)/)[1];
              var active = li.find(":checkbox")[0].checked;
              $.getJSON(dictionaryEditURL, {id:id, value:text, active:active}, selectCallback);
            }
        }
        function selectCallback(data)
        {
            $.each(data, function(index, values){
                dictionary[index]=values;
            });
            liReload();
        }
/*  Initialization         */
        $(document).ready(function () {
            $.history.init(pageLoad);
            $("a.ajax").live("click", function(){
                contentLoad($(this).attr("href"));
                return false;
            });
            $("div#subnav a").live("click", function(){
                historyLoad(this.href);
                return false;
            });
            $("a.admin-links").live("click", function(){
                noHistoryLoad(this.href);
                return false;
            });
            $("a.main-menu").live("click", function(){
                historyLoad(this.href);
                $("div#nav a").removeClass("current");
                $(this).addClass("current");
                return false;
            });
            /* Select implementation start */
            $("ul.select>li").live("mouseover", function(){$(this).addClass("hover")});
            $("ul.select>li").live("mouseout", function(){$(this).removeClass("hover")});
            $("ul.select>li .ui-icon-trash").live("click", function(){ selectRemove($(this).parent());});
            $("ul.select>li .ui-icon-pencil").live("click", function(){ startEdit($(this).parent());});
            $("ul.select>li .ui-icon-check").live("click", function(){ finishEdit();});
            $("ul.select>li .ui-icon-closethick").live("click", function(){ liReload();});
            $("div.new-value #appendValue").live("click", function(){ selectAppend($("#newValueText").val());});
            /* Select implementation end */
            $("form.ajax .submit").live("click", function(){
                var form = $("form.ajax");
                var response = null;
                if (form.attr("target"))
                    response = function(data){$(form.attr("target")).html(data);}
                else if (form.attr("onsubmit"))
                    response = function(){ eval(form.attr("onsubmit"));}
                else response = ajaxPostResponse;
                if(!form.hasClass("validate") || form.valid())
                $.post(form.attr("action"), form.serialize(), response);
                return false;
            });
        });



