function requireJS(libraryName) {
    // inserting via DOM fails in Safari 2.0, so brute force approach
    document.write('<script type="text/javascript" src="'+libraryName+'"></script>');
}


function closeNote(id)
{
    jQuery('#note_'+id).hide();
    jQuery.get('/_ajax/notes/dismiss.php', 
        {
            id: id
        }
    );
}

function updateLicenses(note_id)
{
    closeNote(note_id);
    jQuery.get('/_ajax/notes/update_licenses.php', 
        function(data)
        {
            if(data == 'OK')
            {
                messageBox('Your models have been updated. Thank you!');
            }
            else
            {
                messageBox('There was an error while updating your models.');
            }
        }
    );
}

function messageBox(message)
{
    if(!jQuery('#message').length)
    {
        jQuery('#banner').append('<div id="message"/>');
    }
    jQuery('#message').html(message + '<br/><br/>').show();
    scroll(0,0);
}

function timedMessageBox(message, duration)
{
    messageBox(message);
    setTimeout(closeMessageBox, duration ? duration : 10000);
}

function closeMessageBox()
{
    jQuery('#message').fadeOut();
}

function popUp(URL,winname) {
    day = new Date();
    winname = winname ? winname : day.getTime();
    eval("page" + winname + " = window.open(URL, '" + winname + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=0,width=520,height=500');");
    eval("page" + winname + ".focus();");
}

function emailCheck (emailStr) {
    var emailPat=/^(.+)@(.+)$/
    var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
    var validChars="\[^\\s" + specialChars + "\]"
    var quotedUser="(\"[^\"]*\")"
    var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
    var atom=validChars + '+'
    var word="(" + atom + "|" + quotedUser + ")"
    var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
    var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
    var matchArray=emailStr.match(emailPat)
    if (matchArray==null) {
        // return("Email address seems incorrect (check @ and .'s)")
        return 1
    }
    var user=matchArray[1]
    var domain=matchArray[2]
    if (user.match(userPat)==null) {
        // return("The username doesn't seem to be valid.")
        return 2
    }
    var IPArray=domain.match(ipDomainPat)
    if (IPArray!=null) {
          for (var i=1;i<=4;i++) {
            if (IPArray[i]>255) {
                // return("Destination IP address is invalid!")
                return 3
            }
        }
        return false
    }
    var domainArray=domain.match(domainPat)
    if (domainArray==null) {
        // return("The domain name doesn't seem to be valid.")
        return 4
    }
    var atomPat=new RegExp(atom,"g")
    var domArr=domain.match(atomPat)
    var len=domArr.length
    if (domArr[domArr.length-1].length<2 ||
       domArr[domArr.length-1].length>3) {
       // return("The address must end in a three-letter domain, or two letter
		// country.")
       return 5
    }
    if (len<2) {
       // var errStr="This address is missing a hostname!"
       var errStr = 6
       return(errStr)
    }
    return false;
}

function mailto(user,domain) {
    status="mailto:" + user + "@" + domain;
    locationstring = "mailto:" + user + "@" + domain;
    window.location = locationstring;
}

function rollNav(imgid,status) {
    document.images[imgid].src = '/0-icons/'+imgid+'_'+status+'.gif';
}

function getRadioValue(formElt) {
    if(formElt.length=='undefined'){
        return formElt.checked; /* only one button */
    }
    for (var i=0; i<formElt.length; i++) {
        if (formElt[i].checked) return formElt[i].value;
    }
    return false;
}

function selectRadioOption(item,form) {
    checkRadio = false;
    itemName = item.name;
    for (var i=0; i<form.length; i++) {
        if (form[i].name == itemName) if (form[i].checked) checkRadio = true;
    }
    if (checkRadio) {
        for (var i=0; i<form['private'].length; i++) {
            if (form['private'][i].value == '-1') form['private'][i].checked = true;
        }
    }
}

function checkRestricted(item, form) {
    if (item.checked) {
        for (var i=0; i<form.length; i++) {
            if (form[i].name == 'restricted') if (form[i].checked) form[i].checked = false;
        }
    }
}

function show_div(id)
{
    // try and catch to avoid javascript error
    try{
        document.getElementById(id).style.display = "inline";
    }
    catch(e){

    }
}

function show_div_block(id)
{
    // try and catch to avoid javascript error
    try{
        document.getElementById(id).style.display = "block";
    }
    catch(e){

    }
}

function hide_div(id)
{
    // try and catch to avoid javascript error
    try{
        if(document.getElementById(id))
            document.getElementById(id).style.display = "none";
    }
    catch(e){

    }
}

function trim(s) {
    return s.replace(/^\s+/, '').replace(/\s+$/, '');
}

function ltrim(s) {
    return s.replace(/^\s+/, '');
}

function rtrim(s) {
    return s.replace(/\s+$/, '');
}

// addLoadEvent to enhance the window.onload event

function addLoadEvent(func) {
           var oldonload = window.onload;
           if (typeof window.onload != "function") {
              window.onload = func;
           } else {
              window.onload = function() {
                 if (oldonload) {
                    oldonload();
                 }
                 func();
              };
           }
        }
        
// check all function
function checkAll( pID, flag ) {
  $('#' + pID + ' :checkbox').attr('checked', flag);
}

var Switcher = {
    go: function(switcherId, panelId, callbackOpen, callbackClose) {
        $('#' + switcherId).show();
        $('#' + switcherId).children().removeClass('on');

        // Show the selected panel
        if(typeof(callbackOpen) == 'undefined')
        {
            $('#' + panelId).show();
        }
        else
        {
            callbackOpen($('#' + panelId));
        }
        $('#' + panelId).addClass('on');

        // Loop though and close all other panels
        $('#' + switcherId).children(":not(.on)").each(function(k,v) {
            if(typeof(callbackClose) == 'undefined')
            {
                $(v).hide();
            }
            else
            {
                callbackClose($(v));
            }
        });

        return false;
    },
    
    highlight: function(ele)
    {
        $(ele).parent().addClass('selected').siblings().removeClass('selected');
    }
}

var FormBuilder = {
  post: function(element) {
    var f = document.createElement('form'); 
    f.style.display='none'; 
    $(element).parent().append(f);
    f.method='POST'; 
    f.action=$(element).attr('href'); 
    f.submit();
    return false;
  }
}

// ===========================================
// = Used for select boxes that submit a URL =
// ===========================================
var DropSelector = {

  start: function() {
      $('select.drop_selector').change(DropSelector.onChangeSelection);
  },

  onChangeSelection: function(event) {
    var element = $(this);
    if(element.val())
      window.location = element.val();
  }
}

var Toggler = {
  
  // Toggles visibility of an element and changes the text of the toggle link
  toggleElement: function(element, after) {
    if(!(element = $('#' + element))) return;
    
    
    if(typeof(after) != 'undefined')
    {
        callback = function(){after();};
    }
    else
    {
        callback = function(){};
    }
    
    // Now toggle the chosen div
    var link_id = element.id + "_toggle_link";
    if(element.is(':visible')) 
    {
        element.slideUp('fast', callback);
    }
    else
    {
        element.slideDown('fast', callback);
    }
    return false;
  },
  
  // Close the element if it is open
  closeElement: function(element) {
    if(!(element = $('#' + element))) return;
    if(element.is(':visible')) {
      Toggler.toggleElement(element);
    }
  }
}

var Minimizer = {
    toggleElement: function(content, minimizer) {
        Toggler.toggleElement(content, function() {
            if($('#' + content).is(':visible')) {
                $(minimizer).find("img:first").attr('src', '/0-icons/arrow-down-grey.png');
            } else {
                $(minimizer).find("img:first").attr('src', '/0-icons/arrow-left-grey.png');
            }
        });
        return false;
    }

}

var SubMenu = {
    create: function(li) {
        if(!$(li)) return;
        this.item = $(li);
        this.id = this.item.attr('id');
        this.trigger = this.item.find('.drop-down-trigger:first');
        if(!this.trigger) return;
        this.box = this.item.find('.drop-down-box:first');
        var a = this;
        this.trigger.click(function(e){SubMenu.click(a.id, e);});
    },
    click: function(id, event) {
        $(document['drop-down']).each(function(s, i){
	        if(i.id == id && !i.box.is(':visible'))
	        {
                SubMenu.show(i.id);
	        }
	        else
	        {
                SubMenu.hide(i.id);
	        }
        });
        event.preventDefault();
    },
    show: function(id) {
        var a = $(document['drop-down']).filter(function(){return this.id == id;})[0];
        a.box.show();
        a.trigger.addClass('menu-open');
        if(!a.box.attr('oldLeft')) a.box.attr('oldLeft' , a.trigger.offset().left+'px');
        a.box.css('left', a.box.attr('oldLeft'));
        var o = a.box.offset().left;
        var extra = o + a.box.width() - $('.page-container').width();
        if(extra > 0)
        {
            a.box.css('left', (o - a.box.width() + a.trigger.width()) - 12 + 'px'); // shift
																					// left
        }
    },
    close: function(event) {
        var t = event.target != null ? event.target : event.srcElement;
        $(document['drop-down']).each(function(k,v){
	        if(!$(t).closest('.drop-down-box').length && !v.box.hasPosition(event.pageX, event.pageY) && !v.item.hasPosition(event.pageX, event.pageY)){ // $.contains(v.box,
																																							// $(t))
																																							// ||
	            SubMenu.hide(v.id);
	        }
        });        
    },
    hide: function(id) {
        dd = $(document['drop-down']).filter(function(){return this.id == id;})[0];
        dd.box.hide();
        dd.trigger.removeClass('menu-open');
    },
    init: function() {
        if($('.drop-down').size())
        {
	        var utilityMethods = {
	            hasPosition : function(x, y){
	                element = $(this);
	                var display = element.is(':visible');
	                if(!display) 
	                    element.css('visibility', 'hidden').show();
	                this.topleft = element.offset();
	                this.bottomright = { 
	                    left: this.topleft.left + element[0].offsetWidth,
	                    top: this.topleft.top + element[0].offsetHeight
	                };
	                if(!display)
	                    element.css('visibility', 'visible').hide();
	                return (y >= this.topleft.top &&
	                    y <  this.bottomright.top &&
	                    x >= this.topleft.left &&
	                    x <  this.bottomright.left);
	            }
	        };
	        $.fn.extend(utilityMethods);
	        document['drop-down'] = [];
	        $('.drop-down').each(function(s, i){document['drop-down'][s] = new SubMenu.create(i);});
	        $(document).click(function(e){SubMenu.close(e);});
	   }
    }
    
}

var InPlaceEdit = {
    edit: function(e)
    {
       $(this).removeClass('editableMouseOver');
       if($(this).attr('commentid'))
       {
           $(this).closest('.comment').find('.editcomment, .removecomment').hide();
       }
       e.current = e.current.replace(/\<BR\>/gi, '\n');
       $('#' + $(this).attr('id') + ' textarea').val(e.current);
    },
    cancel: function(e)
    {
       var a = $(this);
       if(a.attr('_editable_trigger_id'))
       {
           var x = e.current.replace(/(\r\n|\r|\n)/g, "<BR>");
           a.html(x);
       }
       InPlaceEdit.hide(a);
    },
    hide: function(obj)
    {
       if($(obj).attr('_editable_trigger_id'))
       {
           $(obj).hide();
           $('#' + $(obj).attr('_editable_trigger_id')).show();
       }
    },
    submit: function(e)
    {
       var a = $(this);
       var id = "editable_loading_" + a.attr('id');
       InPlaceEdit.hide(a);
       $('#' + id).remove();
       a.after($("<div id='" + id + "' class='editable_loading'><img src='/0-img/loading.gif'/></div>").fadeIn());
       $.get(a.attr('_ajax') + escape(e.current), function(data)
       {
           $('#' + id).hide();
           if(a.attr('_editable_trigger_id'))
           {
               $('#' + a.attr('_editable_trigger_id')).html(data);
               var x = e.current.replace(/(\r\n|\r|\n)/g, "<BR>");
               a.html(x);
           }
           else
           {
               a.html(data);
           }
       });
    },
    init: function()
    {
       $('.editable, .editable_trigger').unbind('hover').hover(function(){if(!$(this).find(":input").length){$(this).addClass('editableMouseOver').attr('title', 'Click to edit')}}, function(){$(this).removeClass('editableMouseOver')});
       $('.editable:not([edifisized])').attr('edifisized', 'booyah').editable({
           submit: 'Save',
           cancel: 'Cancel',
           onEdit: InPlaceEdit.edit,
           onSubmit: InPlaceEdit.submit
       });
       $('.editable_textarea:not([edifisized])').attr('edifisized', 'booyah').editable({
           submit: 'Save',
           cancel: 'Cancel',
           type: 'textarea',
           onEdit: InPlaceEdit.edit,
           onSubmit: InPlaceEdit.submit,
           onCancel: InPlaceEdit.cancel
       });
       $('.editable_trigger').unbind('click').click(function()
       {
           var id = $(this).hide().attr('_editable_id');
           $('#' + id).show().trigger('click');
       });
    }
}


var CustomScrollBar = {
    slider: [],
    create: function(element, options)
    {
        var elementObj = $('#' + element);
        elementObj.show = function(){
            $(this).css('display', 'block');
            setTimeout(function(){CustomScrollBar.refresh(element)},1);
        };
        elementObj.css('overflow', 'hidden');
        elementObj.css('position', 'relative');
        if(options.axis == 'vertical')
        {
            CustomScrollBar.slider[element] = {options: options};
            if (elementObj.scrollHeight > elementObj.offsetHeight) {
                elementObj.css('paddingRight', '15px');
                if($('#' + element + '_scrollY').length) $('#' + element + '_scrollY').remove();
                $('#' + element).append('<div id="' + element + '_scrollY" class="scrollbar_scrollY" _element="' + element + '" style="height:' + elementObj.height() + 'px;position:absolute;left:' + (elementObj.offset().left + elementObj.width() - 10) + 'px;top:' + elementObj.offset().top + 'px"><div class="scrollbar_up"></div><div id="' + element + '_track" class="scrollbar_track" style="height:' + (elementObj.height() - 30) + 'px;"><div id="' + element + '_handle" class="scrollbar_handle" style="height:' + Math.round((elementObj.offsetHeight - 30) / elementObj.scrollHeight * (elementObj.offsetHeight - 30)) + 'px"></div></div><div class="scrollbar_down"></div></div>');
                CustomScrollBar.slider[element].slider = new Control.Slider(element + '_handle', element + '_track', {
                    axis: 'vertical',
                    onSlide: function(v){ 
                        CustomScrollBar.scrollVertical(v, elementObj, CustomScrollBar.slider[element].slider);  
                    },
                    onChange: function(v){ 
                        CustomScrollBar.scrollVertical(v, elementObj, CustomScrollBar.slider[element].slider); 
                    }
                });
                if(options.fade)
                {
                    if(options.fade == 'bottom')
                    {
                        elementObj.append('<div id="' + element + '_fadeBottom" class="scrollbar_fadeBottom" style="width:' + (elementObj.width() - 10) + 'px;left:' + elementObj.offset().left + 'px;top:' + (elementObj.offset().top + elementObj.height() - 20) + 'px;"></div>');
                    }
                }
                $('.scrollbar_up').mousedown(CustomScrollBar.scrollBackStart);
                $('.scrollbar_up').mouseup(CustomScrollBar.scrollStop);
                $('.scrollbar_down').mousedown(CustomScrollBar.scrollForwardStart);
                $('.scrollbar_down').mouseup(CustomScrollBar.scrollStop);
            }
            else
            {
                if($('#' + element + '_scrollY').length) 
                {
                    $('#' + element + '_scrollY').remove();
                    $('#' + element).css('paddingRight', '0px');
                }
            }
        }
        else if(options.axis == 'horizontal')
        {
            // TODO
        }
    },
    refresh: function(element) {
        if($('#' + element).is(':visible'))
        {
            CustomScrollBar.create(element, CustomScrollBar.slider[element].options);
        }
    },
    hide: function(element) {
        if($('#' + element + '_scrollY').length) $('#' + element + '_scrollY').hide();
        if($('#' + element + '_fadeBottom').length) $('#' + element + '_fadeBottom').hide();
    },
    show: function(element) {
        if(CustomScrollBar.slider[element].slider)
        {
            CustomScrollBar.slider[element].slider.setValue(0);
        }
        if($('#' + element + '_scrollY').length) $('#' + element + '_scrollY').show();
        if($('#' + element + '_fadeBottom').length) $('#' + element + '_fadeBottom').show();
    },
    scrollVertical: function(value, element, slider) {
        element.scrollTop = Math.round(value/slider.maximum*(element.scrollHeight-element.offsetHeight));
    },
    scrollHorizontal: function(value, element, slider) {
        element.scrollLeft = Math.round(value/slider.maximum*(element.scrollWidth-element.offsetWidth));
    },
    scrollBackStart: function() {
        var element = $(this).parent('.scrollbar_scrollY').attr('_element');
        CustomScrollBar.slider[element].mousedown = true;
        CustomScrollBar.scrollBackOnce(element);
        setTimeout(function(){
        if(CustomScrollBar.isMouseDown(element)){
            CustomScrollBar.slider[element].timer = setInterval(function(){if(CustomScrollBar.isMouseDown(element)) CustomScrollBar.scrollBackOnce(element)}, 45);
        }
        }, 250);
    },
    scrollBackOnce: function(element) {
        CustomScrollBar.slider[element].slider.setValue(CustomScrollBar.slider[element].slider.value - 0.05);
        if(CustomScrollBar.slider[element].slider.value == 0 || CustomScrollBar.slider[element].slider.value == 1)
        {
            CustomScrollBar.scrollStop.bind($('#' + element + '_track'))();
        }
    },
    scrollForwardStart: function() {
        var element = $(this).parent('.scrollbar_scrollY').attr('_element');
        CustomScrollBar.slider[element].mousedown = true;
        CustomScrollBar.scrollForwardOnce(element);
        setTimeout(function(){
        if(CustomScrollBar.isMouseDown(element)){
            CustomScrollBar.slider[element].timer = setInterval(function(){if(CustomScrollBar.isMouseDown(element)) CustomScrollBar.scrollForwardOnce(element);}, 45);
        }
        }, 250);
    },
    scrollForwardOnce: function(element) {
        CustomScrollBar.slider[element].slider.setValue(CustomScrollBar.slider[element].slider.value + 0.05);
        if(CustomScrollBar.slider[element].slider.value == 0 || CustomScrollBar.slider[element].slider.value == 1)
        {
            CustomScrollBar.scrollStop.bind($('#' + element + '_track'))();
        }
    },
    scrollStop: function() {
        var element = $(this).parent('.scrollbar_scrollY').attr('_element');
        CustomScrollBar.slider[element].mousedown = false;
        clearInterval(CustomScrollBar.slider[element].timer);
    },
    isMouseDown: function(element) {
        return CustomScrollBar.slider[element].mousedown;
    }
}

function runOrInstallShape(pars){
    if(isShapeInstalled) {
        return getPassString(pars);
    } else {
        window.location = "/software/3dvia-shape/";
    }
}

var isShapeInstalled = true;
var IEDetect = false;

if (navigator.mimeTypes && navigator.mimeTypes.length)
{
  x = navigator.mimeTypes['application/x-3dviashapeplugin'];
  if ((!x) || (!x.enabledPlugin))
  {
    isShapeInstalled = false;
  }
}
else
{
  IEDetect = true;
}

function getPassString(pars){

    $.post(
        '/_ajax/shape/launch.php',
        { 
            pars: pars
        },
        function(data)
        {
            window.location = data;
        }
    );

    return false;
}

function insertPlayer(model, id, width, height)
{
    document.write("<object type='application/x-3dxmlplugin' data='" + model + "' id='" + id + "' width='" + width + "' height='" + height + "' style='MARGIN: 0px' border='0'><param name='DocumentFile' value='" + model + "'>");
    document.write("<div style='margin:" + height/3 + "px 0 0 0' class='noticeContainer'><div class='noticeSubContainer'><div class='left icon'><img border='0' src='/0-icons/ico_information.png' width='24' height='24' alt='notice' /></div><div class='left notice'><span class='noticeTitle'>The 3D XML player doesn't seem to be installed. <a href='http://www.3ds.com/products/3dvia/3d-xml/1/' class='blue' title='Download 3D XML Player' target='_blank'>Download the player here.</a></span></div><br clear='all'/></div></div>");
    document.write("</object>");
}

var player3dviaFunctions = {
    num: 0,
    hide: function()
    {
        player3dviaFunctions.num++;
        var p = jQuery('#player').length ? jQuery('#player') : jQuery('#Virtools');
        if(p.is(":visible") && !parseInt(p.css('margin-left')))
        {
            p.css('margin-left', -1000);
            jQuery('#player-grey').show();
        }
    },
    
    show: function()
    {
        if(--player3dviaFunctions.num <= 0)
        {
            var p = jQuery('#player').length ? jQuery('#player') : jQuery('#Virtools');
	        jQuery('#player-grey').hide();
            p.css('margin-left', 0);
            player3dviaFunctions.num = 0;
	    }
    }
}

/* ADMIN JS TOOLS */

<!--

  function admin_confirmDeleteCache() {
      if (confirm('Are you sure you want to delete the entire cache?')) {
          location = '/admin/admin_cache_delete.php';
          return false;
      }
  }

  function admin_confirmDeleteCacheDir(dir) {
      if (confirm('Are you sure you want to delete all the cache files in this directory?')) {
          location = '/admin/admin_cache_delete.php?dir='+dir;
          return false;
      }
  }

  function admin_confirmDeleteCacheFile(dir, file) {
      if (confirm('Are you sure you want to delete this cache file?')) {
          location = '/admin/admin_cache_delete.php?dir='+dir+'&file='+file;
          return false;
      }
  }

    function admin_confirmDeleteMedia(media_id, user_id, referer,msg) {
        if (confirm('Warning! You are about to permanently delete this media.\nDo you want to continue?')) {
            location = '/admin/admin_delete.php?type=media&media_id='+media_id+'&user_id='+user_id+'&referer='+referer+'&msg='+msg;
            return false;
        }
    }
    
    function admin_confirmDeleteGallery(gallery_id, user_id, referer) {
        if (confirm('Warning! You are about to permanently delete this gallery.\nDo you want to continue?')) {
            location = '/admin/admin_delete.php?type=gallery&gallery_id='+media_id+'&user_id='+user_id+'&referer='+referer;
        }
    }
    
    function admin_confirmFlagMedia(fieldname, fieldvalue, media_id) {
        if (confirm('You are about to set '+fieldname+'='+fieldvalue+' for this model.\nDo you want to continue?')) {
            location = '/admin/admin_update.php?type=media&fieldname='+fieldname+'&fieldvalue='+fieldvalue+'&media_id='+media_id;
        }
    }

    function admin_confirmFlagGallery(fieldname, fieldvalue, gallery_id) {
        if (confirm('You are about to set '+fieldname+'='+fieldvalue+' for this gallery.\nDo you want to continue?')) {
            location = '/admin/admin_update.php?type=gallery&fieldname='+fieldname+'&fieldvalue='+fieldvalue+'&media_id='+media_id;
        }
    }
    
    function admin_confirmFlagUser(fieldname, fieldvalue, user_id) {
        if (confirm('You are about to set '+fieldname+'='+fieldvalue+' for this user.\nDo you want to continue?')) {
            location = '/admin/admin_update.php?type=user&fieldname='+fieldname+'&fieldvalue='+fieldvalue+'&user_id='+user_id;
        }
    }
    
    function admin_confirmSu(user_id) {
        if (confirm('You are about to use '+user_id+'\'s identity.\nDo you want to continue?')) {
            location = '/admin/admin_su.php?user_id='+user_id;
        }
    }
    
    function admin_confirmFavoriteMedia(action, media_id) {
        var action_array=action.split(":");
        var fieldname=action_array[0];
        var fieldvalue = action_array[1];
        if (confirm('You are about to set '+fieldname+' favorite ='+fieldvalue+' for this model.\nDo you want to continue?')) {
            location = '/admin/admin_update.php?type=favorite&favtype='+fieldname+'&fieldvalue='+fieldvalue+'&media_id='+media_id;
        }
    }
    function admin_confirmFavoriteUser(action, user_id) {
        var action_array=action.split(":");
        var fieldname=action_array[0];
        var fieldvalue = action_array[1];
        if (confirm('You are about to set '+fieldname+' favorite ='+fieldvalue+' for this user.\nDo you want to continue?')) {
            location = '/admin/admin_update.php?type=favorite&favtype='+fieldname+'&fieldvalue='+fieldvalue+'&user_id='+user_id;
        }
    }
    
  function admin_setUserPublisher(user_id, publisher_type, publisher_text) {
    if(confirm('Are you sure you want to set ' + user_id + ' as account type ' + publisher_text + '?'))
    {
      location = '/admin/admin_users.php?action=publisher&username=' + user_id + '&publishertype=' + publisher_type;
    }
  }

  function admin_setUserSeller(user_id, val, text) {
    if(confirm('Are you sure you want to ' + (parseInt(val) == 1 ? 'set' : 'unset') + ' ' + user_id + ' as a seller?'))
    {
      location = '/admin/admin_users.php?action=seller&username=' + user_id + '&sellertype=' + val;
    }
  }
  
  function admin_deleteAccountType(account_type) {
	    if(confirm('Are you sure you want to delete the ' + account_type + ' account type?'))
	    {
	      location = '/admin/admin_account_types/index.php';
	    }
  }
  
  function admin_deleteAdGroup(ad_group) {
	    if(confirm('Are you sure you want to delete the ' + ad_group + ' ad group?'))
	    {
	      location = '/admin/admin_ad_service/index.php';
	    }
}
  function admin_deleteAd(ad, adGroupId) {
	    if(confirm('Are you sure you want to delete the ' + ad + ' ad?'))
	    {
	      location = '/admin/admin_ad_service/ads/?id=' + adGroupId;
	    }
}

  if(typeof jQuery == 'function')
  {
	  jQuery(document).ready(function() {
	    // enable tooltip for "download" element. use the "slide" effect
	    if (jQuery('.tooltip').length > 0) { 
	      jQuery(".thumbnail-photo").tooltip({offset:[52,30], 
	                                 lazy:false,
	                                 predelay:1000}).dynamic({bottom: {offset:[0, 30]}});
	    }
	  });
  }
// -->

/* END ADMIN JS TOOLS */

function readAnnouncement()
{
    var omNomNomNom = C00k13m0n573r.readCookie("announcement");
    if(!omNomNomNom) C00k13m0n573r.createCookie("announcement", "on", 0);
    return C00k13m0n573r.readCookie("announcement") == "on" ? true : false;
}
function closeAnnouncement()
{
    jQuery('#announcement').hide();
    C00k13m0n573r.createCookie("announcement", "off", 0);
}

var C00k13m0n573r = {
    createCookie: function(name,value,days) 
    {
        // Me want cookie!
	    if (days) {
	        var date = new Date();
	        date.setTime(date.getTime()+(days*24*60*60*1000));
	        var expires = "; expires="+date.toGMTString();
	    }
	    else var expires = "";
	    document.cookie = name+"="+value+expires+"; path=/";
	},
    readCookie: function(name) 
    {
        // Me eat cookie!
	    var nameEQ = name + "=";
	    var ca = document.cookie.split(';');
	    for(var i=0;i < ca.length;i++) {
	        var c = ca[i];
	        while (c.charAt(0)==' ') c = c.substring(1,c.length);
	        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	    }
	    return null;
	},
    eraseCookie: function(name) 
    {
        // Om nom nom nom
        createCookie(name,"",-1);
    }
}
  if(typeof jQuery == 'function')
  {
	jQuery(document).ready(function(){
		jQuery('input.defaultTextValue').each(function(){
			var defaultText = $(this).val();
			jQuery(this).focus(function(){
				if(jQuery(this).hasClass('defaultTextValue')) {
					jQuery(this).val('').removeClass('defaultTextValue');
				}
			});
			jQuery(this).blur(function(){
				if(jQuery(this).val() == '') {
					jQuery(this).val(defaultText).addClass('defaultTextValue');
				}
			});
	
			jQuery(this).parent().submit(function(){
					jQuery(this).children('input.defaultTextValue').val('');
			});
		});
		
	    jQuery(".signin").click(function(e) {
			e.preventDefault();
	        jQuery("fieldset#signin_menu").toggle();
	        jQuery("#username").focus();
			jQuery(".signin").toggleClass("menu-open");
			if(typeof(player3dviaFunctions) != 'undefined') {
				if(player3dviaFunctions) {
	    			if(jQuery("fieldset#signin_menu").is(":visible"))
	    			{
	    			     player3dviaFunctions.hide();
	    			}
	    			else
	    			{
	    			     player3dviaFunctions.show();
	    			}
				}
			}
	    });
	
		jQuery("fieldset#signin_menu").mouseup(function() {
			return false;
		});
	
		jQuery(document).mouseup(function(e) {
			if(jQuery(e.target).parent("a.signin").length==0 && jQuery('.simple_overlay').find(e.target).length != 0) {
				jQuery(".signin").removeClass("menu-open");
				jQuery("fieldset#signin_menu").hide();
				if(typeof(player3dviaFunctions) != 'undefined') {
					player3dviaFunctions.show();
				}
			}
		});
	})
}



var Survey = {
    id: 0,
    slug: '',
    init: function(survey_id, survey_slug, test_id, test_slug)
    {
        Survey.id = survey_id;
        Survey.slug = survey_slug;
        if(typeof(test_id) != 'undefined')
        {
            Survey.Test.id = test_id;
        }
        if(typeof(test_slug) != 'undefined')
        {
            Survey.Test.slug = test_slug;
        }
    },
    disableButton: function(obj, complete)
    {
        $(obj).attr('disabled', 'disabled').removeClass('button-blue').addClass('button-inactive');
        if(typeof(complete) != 'undefined' && complete == true)
        {
            $(obj).after('<div class="testComplete">Test Complete</div>');
        }
    },
    getQuerystring: function(key) 
    {
        var hu = window.location.search.substring(1);
        var gy = hu.split("&");
        for (i=0;i<gy.length;i++) 
        {
            ft = gy[i].split("=");
            if (ft[0] == key) 
            {
                return ft[1];
            }
        }
        return '';
    },
    Test: {
        id: 0,
        slug: '',
        start: function()
        {
            Survey.Event.log('StartTest', '');
        },
        end: function(url)
        {
            if($('#surveyFeedback :input[name="feedback"]').length && $('#surveyFeedback :input[name="feedback"]').val())
            {
                Survey.Event.log('SendFeedback', $('#surveyFeedback :input[name="feedback"]').val(), function(){
		            Survey.Event.log('EndTest', '', function(){
		                window.location = url;
		            });
                });
            }
            else
            {
	            Survey.Event.log('EndTest', '', function(){
	                window.location = url;
	            });
            }
        }
    },
    Event: {
	    log: function(type, value, callback)
	    {
	        var survey = Survey.id;
	        var test = Survey.Test.id;
            var timestamp = Survey.Event.getTimestamp();
            if(typeof(value) == 'undefined') value = ''; 
	        if(typeof(callback) == 'undefined') callback = function(){}; 
	        $.post(
	            '/_ajax/survey/log.php', 
		        {
		            survey: survey,
		            test: test,
		            type: type,
		            value: value,
		            timestamp: timestamp
		        },
		        callback
	        );
	    },
	    getTimestamp: function()
	    {
			var currentDate = new Date();
			var day = currentDate.getDate();
			var month = currentDate.getMonth() + 1;
	        var year = currentDate.getFullYear();
	        var hour = currentDate.getHours();
	        var minute = currentDate.getMinutes();
	        var second = currentDate.getSeconds();
			//2010-07-30 01:34:49
			return (year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second);
	    }
    }
}