var timeout = 500;
var closetimer = 0;
var ddmenuitem = 0;

function trim(stringToTrim) {
  if (stringToTrim) {
  	return stringToTrim.replace(/^\s+|\s+$/g,"");
  }
  return '';
}

function ltrim(stringToTrim) {
  if (stringToTrim) {
	  return stringToTrim.replace(/^\s+/,"");
  }
  return '';
}

function rtrim(stringToTrim) {
  if (stringToTrim) {
	  return stringToTrim.replace(/\s+$/,"");
  }
  return '';
}

function padl(n, totalDigits) { 
  n = n.toString(); 
  var pd = ''; 
  if (totalDigits > n.length) { 
    for (i=0; i < (totalDigits-n.length); i++) { 
      pd += '0'; 
    } 
  } 
  return pd + n.toString(); 
} 

function jsddm_open() {
  jsddm_canceltimer();
  jsddm_close();
  ddmenuitem = $(this).find('ul').css('visibility', 'visible');
}

function jsddm_close() {
  if (ddmenuitem) {
    ddmenuitem.css('visibility', 'hidden');
  }
}

function jsddm_timer() {
  closetimer = window.setTimeout(jsddm_close, timeout);
}

function jsddm_canceltimer() { 
  if (closetimer) {
    window.clearTimeout(closetimer);
    closetimer = null;
  }
}

$.extend({
submenu_grid: function(url) {
var url = url + '?size=&index=&expression=&ascending=&filter='; 
  $.postAction(url, 'submenus');
  }
});

$.extend({
sort_refresh: function(url) {
  $.postAction(url, 'sequenceForm');
  }
});

$.extend({
link_sort_refresh: function(url) {
  $.postAction(url, 'linkSequenceForm');
  }
});

//Doc Sub Group Add File
$.extend({
AddFile: function(url) {
  $.postAction(url, 'linkSequenceForm');
  }
});

//$.extend({
//  addRecord: function(name, deleteImage, upImage, downImage) { 
//    var element = $('#newRecord');
//    var value = $('<div/>').text(element.val()).html();
//    value = trim(value);

//    if (!value) {
//      return;
//    }
//    
//    $('#records').append($('<tr><th></th><td><input name="' + name + '" type="text" maxlength="255" style="width: 350px; vertical-align: middle;" value="' + value + '" /> <img src="' + upImage + '" style="vertical-align: middle; cursor: pointer;" onclick="$.swapUp(this);" /> <img src="' + downImage + '" style="vertical-align: middle; cursor: pointer;" onclick="$.swapDown(this);" /> <img src="' + deleteImage + '" style="vertical-align: middle; cursor: pointer;" onclick="$.removeRecord(this);" /></td></tr>'));
//    element.val('');       
//  }
//  });

$.extend({
  loadMenu: function(callback) {        
    $('#jsddm > li').bind('mouseover', jsddm_open);
    $('#jsddm > li').bind('mouseout',  jsddm_timer);

    document.onclick = jsddm_close;
  },

  initialize: function(callback) {  
    $('input:button,input:submit,button').button();
    $('input:checkbox,input:radio,input:file').uniform();  		
    $('.tabs').tabs();
    $('.overlay-horizontal,.image-overlay-horizontal').draggable();

    $.uniformDataGrid();  
    
    try {      
      $('#sortedList').sortable({
        //placeholder: 'sorted-list-highlight',
        //revert: 200,
        //distance: 15,
        update: function (event, ui) {
          var url = $('#sortUrl').val() + '?item=' + ui.item.attr('id') + '&sequence=' + ui.item.index();
          $.ajax({url: url, type: 'POST'});
        }
      });
      $("#sortedList").disableSelection();        
    }
    catch (err) {
      /*this.options is undefined*/
    }
  
    try {
   	  $('#sortable').sortable({
		      update: function (event, ui) {        
		        var parms = $.getParmsFromArray('menus', $(this).sortable('toArray'));
		        var url = '../SortMenus' + parms;	        
            $.postAction(url, 'results');
		      }
		    })
		  $("#sortable").disableSelection();
    }
    catch (err) {
      /*this.options is undefined*/
    }

    try {
   	  $('#subsortable').sortable({
		      update: function (event, ui) {        
		        var parms = $.getParmsFromArray('submenus', $(this).sortable('toArray'));
		        var url = '../SortSubMenus' + parms;    
            $.postAction(url, 'results');
		      }
		    })
		  $("#subsortable").disableSelection();
    }
    catch (err) {
      /*this.options is undefined*/
    }

    try {
   	  $('#subgroupsortable').sortable({
		      update: function (event, ui) {        
		        var parms = $.getParmsFromArray('docsubgroups', $(this).sortable('toArray'));
		        var url = '../SortDocSubGroups' + parms;    
            $.postAction(url, 'results');
		      }
		    })
		  $("#subgroupsortable").disableSelection();
    }
    catch (err) {
      /*this.options is undefined*/
    }

    try {
   	  $('#linksortable').sortable({
		      update: function (event, ui) {        
		        var parms = $.getParmsFromArray('links', $(this).sortable('toArray'));
		        var url = '../SortLinks' + parms;    
            $.postAction(url, 'results');
		      }
		    })
		  $("#linksortable").disableSelection();
    }
    catch (err) {
      /*this.options is undefined*/
    }

    try {
   	  $('#newssortable').sortable({
		      update: function (event, ui) {        
		        var parms = $.getParmsFromArray('newss', $(this).sortable('toArray'));
		        var url = '../SortNews' + parms;    
            $.postAction(url, 'results');
		      }
		    })
		  $("#newssortable").disableSelection();
    }
    catch (err) {
      /*this.options is undefined*/
    }
      
    if (callback) {
      callback();
    }
  }
});

// datagrid
$.extend({
  uniformDataGrid: function() {  
    $('table.datagrid td.checkbox div.checker').each(function() {      
      $(this).bind('click', function() {
        $(this).parentsUntil('div').find('tr.header th.checkbox input[type="checkbox"]').each(function() {            
          $.uniform.update($(this));
        });
      });
    });

    $('table.datagrid tr.header th.checkbox div.checker').each(function() {      
      $(this).bind('click', function() {
        $(this).parentsUntil('div').find('td.checkbox input[type="checkbox"]').each(function() {            
          $.uniform.update($(this));          
        });        
      });
    });    
  }
});

// details view toggle
$.extend({
  toggleView: function(element, id, expand, collapse) {
    var anchor = $(element);
    var image = $('img', anchor);
    var match = /\/expand.png$/.exec(image.attr('src')); 
    if (match == '/expand.png') {
      image.attr('src', collapse);
      $('#' + id + ' .collapsible').fadeIn('fast');
    }
    else {
      image.attr('src', expand);
      $('#' + id + ' .collapsible').hide();
    }    
    return false; 
  }
});

// upload files
$.extend({
  removeFile: function(element, index) {    
    $(element).parent().parent().find('.uploader').remove();
    $(element).parent().parent().children().first().append('<input id="file' + index + '" type="file" name="files" />');
    $(element).parent().parent().children().first().children().first().uniform();  
    //$(element).parent().parent().children().first().children().first().uniform();    
  }
});

// Menus
$.extend({
  getParmsFromArray: function(name, array) {
    var parms = '';
    var start = true;
    var exp = /\d+/;
    $.each(array, function(index, value) {      
      var id = exp.exec(value);      
      if (id) {
        if (start) {
          parms += ('?' + name + '=' + id);
          start = false;
        }
        else {
          parms += ('&' + name + '=' + id);
        }		     
      }   
    });
    return parms;		      
  }
});

// async posts
$.extend({
  postAction: function(url, updateTargetId, callback) {
    Sys.Mvc.MvcHelpers._asyncRequest(url, 'post', '', null, {insertionMode: Sys.Mvc.InsertionMode.replace, loadingElementId: 'loader', updateTargetId: updateTargetId, onSuccess: function() {$.initialize(callback);}});
  }, 

  postActionWithFade: function(url, updateTargetId, callback) {
    $('#' + updateTargetId).fadeOut('fast', function() {Sys.Mvc.MvcHelpers._asyncRequest(url, 'post', '', null, {insertionMode: Sys.Mvc.InsertionMode.replace, loadingElementId: 'loader', updateTargetId: updateTargetId, onSuccess: function() {$.initialize(callback); $('#' + updateTargetId).fadeIn('fast');}});});
  }, 

  postActionWithFadeIn: function(url, updateTargetId, callback) {
    $('#' + updateTargetId).hide(); Sys.Mvc.MvcHelpers._asyncRequest(url, 'post', '', null, {insertionMode: Sys.Mvc.InsertionMode.replace, loadingElementId: 'loader', updateTargetId: updateTargetId, onSuccess: function() {$.initialize(callback); $('#' + updateTargetId).fadeIn('fast');}});
  },

  postActionWithEditor: function(url, imageListUrl, updateTargetId, property, callback) {  
    Sys.Mvc.MvcHelpers._asyncRequest(url, 'post', '', null, {insertionMode: Sys.Mvc.InsertionMode.replace, loadingElementId: 'loader', updateTargetId: updateTargetId, onSuccess: function() {$.initialize(callback); $.loadEditor(property, imageListUrl);}});
  }
});

function refreshSubmenuSection(url) {
  $.postAction(url, 'submenus'); 
}

function loadSubmenuSection(element, url, dataGridUrl) {
  var menuId = $(element).val();  
  if (menuId) {
    url += ('?menuId=' + menuId);    
    dataGridUrl += ('/' + menuId);    
    var callback = function() {      
      refreshSubmenuSection(dataGridUrl);
    };
    $.postAction(url, 'submenuSection', callback);
  }
  else {
    $.postAction(url, 'submenuSection');
  }
}

function refreshDocSubGroupSection(url) {
  $.postAction(url, 'docSubGroups'); 
}

function loadDocSubGroupSection(element, url, dataGridUrl) {
  var docGroupId = $(element).val();  
  if (docGroupId) {
    url += ('?docGroupId=' + docGroupId);    
    dataGridUrl += ('/' + docGroupId);    
    var callback = function() {      
      refreshDocSubGroupSection(dataGridUrl);
    };
    $.postAction(url, 'docSubGroupSection', callback);
  }
  else {
    $.postAction(url, 'docSubGroupSection');
  }
}

// menu resources
$.extend({
  loadMenuResources: function(id) {
    var url = '../ResourceDataGrid/' + id;
    $.postAction(url, 'resources');
    
  }
});

$.extend({
menuResources_grid: function(url) {
var url = url + '?size=&index=&expression=&ascending=&filter='; 
  $.postAction(url, 'resources');
  }
});

// submenu resources
$.extend({
  loadSubMenuResources: function(id) {
    var url = '../ResourceDataGrid/' + id;
    $.postAction(url, 'resources');    
  }
});

// groups 
$.extend({
  loadGroupResources: function(id) {
    var url = '../GroupDataGrid/' + id;
    $.postAction(url, 'groups');    
  }
});

//Doc Group Documents

$.extend({
  loadDocGroupDocuments: function(id) {
    var url = '../DocumentDataGrid/' + id;
    $.postAction(url, 'documents');
    
  }
});

$.extend({
docGroupDocuments_grid: function(url) {
  $.postAction(url, 'documents');
  }
});

// slideshow files
$.extend({
  loadSlideShowFiles: function(url) {    
    $.postAction(url, 'slideshow');    
  }
});

// links
$.extend({
links_grid: function(url) {
//var url = url + '?size=&index=&expression=&ascending=&filter='; 
  $.postAction(url, 'links');
  }
});

// editor
$.extend({
  loadEditor: function(id, imageListUrl) {   
    $('#' + id).tinymce({
      // General options
      theme: "advanced",
      plugins: "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
 
      // Theme options
      theme_advanced_buttons1: "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
      theme_advanced_buttons2: "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
      theme_advanced_buttons3: "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
      theme_advanced_buttons4: "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak",
      theme_advanced_toolbar_location: "top",
      theme_advanced_toolbar_align: "left",    
      theme_advanced_statusbar_location: "bottom",
      theme_advanced_resizing: false,
      
      // Example content CSS (should be your site CSS)
      //content_css: "/wgxmvc/resources/styles/main.css",
 
      // Drop lists for link/image/media/template dialogs
      //template_external_list_url: "lists/template_list.js",
      //external_link_list_url: "lists/link_list.js",
      external_image_list_url: imageListUrl,
      relative_urls: false

      //media_external_list_url: "lists/media_list.js",
 
      // Replace values for the template plugin
      //template_replace_values : {
      //  username: "Some User",
      //  staffid: "991234"
      //}
    });    
  }
});
