// JavaScript Document
// Filename: /global/globalscript.js
// =============================================================
// This file has 2 sections: JQuery and NO JQuery functions - both are included INSIDE the $(document).ready... to delay reading until after entire HTML page is loaded.
// =============================================================
// (1) The following require JQuery to be linked to BEFORE this file
// =============================================================
$(document).ready(function(){

//By default, #jsEnabled is set to not display. When JavaScript is enabled and jQuery is loaded, display that element.*/
$(".jsEnabled").css("display","block");

// Add nolinkicon class to all anchors inside any tag with class nolinkicon
$('.nolinkicon a').each(function(){
  $(this).addClass("nolinkicon");
});
$('.noexternallinkicon a').each(function(){
  $(this).addClass("noexternallinkicon ");
});
// Add nolinkicon class to each anchor to these hostnames which contain an image
$('a').has('img').each(function() {
  return this.hostname
    && (this.hostname == "facebook.com"
    ||  this.hostname == "flickr.com"
    ||  this.hostname == "twitter.com"
    ||  this.hostname == "youtube.com"
    )
    ;
}).addClass('nolinkicon');

// Add icon to external links but not links around images or where class of anchor or container is nolinkicon.
// NOTE: Handling external links using JavaScript instead of CSS means that links to PDF files that are external will be marked with PDF icon by CSS and marked with external icon by JQuery.
$('a').not(":has('img')").not(".nolinkicon").not(".noexternallinkicon ").not(".qzgfbmxpdfiigyjavxds").filter(function() {
  return this.hostname //must use exact subdomain with hostname
    && this.hostname !== "www.ohlone.edu"
    && this.hostname !== "www2.ohlone.edu"
    && this.hostname !== "ohlone.edu"//no subdomain just in case
    && this.hostname !== "dev.ohlone.edu"
    && this.hostname !== "dev2.ohlone.edu"
    && this.hostname !== "accounts.ohlone.edu"
    && this.hostname !== "appointments.ohlone.edu"
    && this.hostname !== "bond.ohlone.edu"
    && this.hostname !== "commed.ohlone.edu"
    && this.hostname !== "email.ohlone.edu"
    && this.hostname !== "fleamarket.ohlone.edu"
    && this.hostname !== "foundation.ohlone.edu"
    && this.hostname !== "help.ohlone.edu"
    && this.hostname !== "itunes.ohlone.edu"
    && this.hostname !== "mail.ohlone.edu"
    && this.hostname !== "monitor.ohlone.edu"
    && this.hostname !== "online.ohlone.edu"
    && this.hostname !== "perl.cs.ohlone.edu"
    && this.hostname !== "purchasing.ohlone.edu"
    && this.hostname !== "scboxoffice.ohlone.edu"
    && this.hostname !== "scholarships.ohlone.edu"
    && this.hostname !== "smithcenter.ohlone.edu"
    && this.hostname !== "speech.ohlone.edu"
    && this.hostname !== "tech.ohlone.edu"
    && this.hostname !== "webadvisor.ohlone.edu"
    && this.hostname !== "www.ohlonebaseball.com"
    && this.hostname !== "www.ohlonebasketball.com"
    && this.hostname !== "www.ohlonesoccer.com"
    && this.hostname !== "www.ohlonewomensbasketball.com"
    && this.hostname !== "www.ohloneforkids.com"
    && this.hostname !== "www.ohlonejobs.com"
    && this.hostname !== "www.ohlonetv.com"
    && this.hostname !== "www.smithcenter.com"
    && this.hostname !== "www.smithcenterpresents.com"
    && this.hostname !== "ohlone.augusoft.net"
    ;
}).append('<img src="/images/icons/externallink.png" alt="" style="padding-left:2px;" />');

//Add file type icons (unlike CSS solution, this works for IE too BUT with BUG!!)
if(!$.browser.msie555){//Skip IE

  var fileTypes = {
    asx:  '/images/icons/wmv.png',
    avi:  '/images/icons/wmv.png',
    bmp:  '/images/icons/image.png',
    css:  '/images/icons/css.gif',
    doc:  '/images/icons/doc.png',
    docx: '/images/icons/doc.png',
    eps:  '/images/icons/eps.gif',
    exe:  '/images/icons/exe.gif',
    fla:  '/images/icons/swf.png',
    gif:  '/images/icons/image.gif',
    gzip: '/images/icons/archive.gif',
    ind:  '/images/icons/ind.png',
    jpeg: '/images/icons/image.png',
    jpg:  '/images/icons/image.png',
    mid:  '/images/icons/mid.png',
    mov:  '/images/icons/mov.png',
    m4a:  '/images/icons/wmv.png',
    mp3:  '/images/icons/mp3.png',
    mp4:  '/images/icons/wmv.png',
    mpg:  '/images/icons/wmv.png',
    pdf:  '/images/icons/pdf.png',
    png:  '/images/icons/image.png',
    pps:  '/images/icons/pps.png',
    ppt:  '/images/icons/ppt.png',
    pptx: '/images/icons/ppt.png',
    psd:  '/images/icons/psd.png',
    pub:  '/images/icons/pub.png',
    rss:  '/images/icons/rss.png',
    rtf:  '/images/icons/rtf.png',
    svg:  '/images/icons/image.png',
    swf:  '/images/icons/swf.png',
    tif:  '/images/icons/image.png',
    tiff: '/images/icons/image.png',
//    -transcript.html:  '/images/icons/transcript.png',
    ttf:  '/images/icons/ttf.gif',
    txt:  '/images/icons/txt.png',
    wav:  '/images/icons/wav.png',
    wma:  '/images/icons/wmv.png',
    wmv:  '/images/icons/wmv.png',
    xls:  '/images/icons/xls.png',
    xlsm: '/images/icons/xls.png',
    xlsx: '/images/icons/xls.png',
    xml:  '/images/icons/feed16.png',
    zip:  '/images/icons/archive.gif'
    //last item should NOT have comma at end!!!
  };

};

// Highlight Table Rows on Mouseover - When mouse is over a row, change class to highlight the row (because :hover doesn't work in some browsers).
// To use, table must have class="stripeMe" (yes, "stripeMe" since it uses the same code as Stripe Table Rows).
//  $(document).ready(function(){
  $("table.stripeMe tr").mouseover(function() {
    $(this).addClass("over");
  });
  $("table.stripeMe tr").mouseout(function() {
    $(this).removeClass("over");
  });
//  });

// Stripe Table Rows - put background-color on alternate table rows.
// To use, table must have class="stripeMe"
//  $(document).ready(function(){
//  $("table.stripeMe>tr:even").addClass("alt");
// NOTE!! JQuery's "sortable" also alternate table row colors using classes "odd", "even". So, no need to use stripeMe on those tables.
// 20091007 CHANGED to this below because it gets even rows for EACH table not all EVENT rows for tables on the page:
//$("table.striped").each(function(){
//    $(this).find("tbody tr:odd").addClass("odd");
//    $(this).find("tbody tr:even").addClass("even");
//  });
// 20100521 comment out and use the function below that skips over tr.subheading rows
//$("table.stripeMe").each(function(){
//    $(this).find("tr:odd").addClass("odd");
//    $(this).find("tr:even").addClass("even");
//  });
var $oddoreven = "white";
$("table.stripeMe").each(function(){
       $(this).find("thead").each(function(){
         $oddoreven = "white";
       });
    $(this).find("tbody tr").not(".subheading").each(function(){
        $(this).addClass($oddoreven);
        if ($oddoreven == "white") $oddoreven = "alt";
        else $oddoreven = "white";
    });

  });
//});

/* jQuery corner plugin
 * version 1.92 (12/18/2007)
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 * The corner() method provides a simple way of styling DOM elements.
 * corner() takes a single string argument:  $().corner("effect corners width")
 *   effect:  The name of the effect to apply, such as round or bevel.
 *            If you don't specify an effect, rounding is used.
 *   corners: The corners can be one or more of top, bottom, tr, tl, br, or bl.
 *            By default, all four corners are adorned.
 *   width:   The width specifies the width of the effect; in the case of rounded corners this
 *            will be the radius of the width.
 *            Specify this value using the px suffix such as 10px, and yes it must be pixels.
 * For more details see: http://methvin.com/jquery/jq-corner.html
 * For a full demo see:  http://malsup.com/jquery/corner/
 * @example $('.adorn').corner();
 * @desc Create round, 10px corners
 * @example $('.adorn').corner("25px");
 * @desc Create round, 25px corners
 * @example $('.adorn').corner("notch bottom");
 * @desc Create notched, 10px corners on bottom only
 * @example $('.adorn').corner("tr dog 25px");
 * @desc Create dogeared, 25px corner on the top-right corner only
 * @example $('.adorn').corner("round 8px").parent().css('padding', '4px').corner("round 10px");
 * @desc Create a rounded border effect by styling both the element and its parent
 * @name corner
 * @type jQuery
 * @param String options Options which control the corner style
 * @cat Plugins/Corner
 * @return jQuery
 * @author Dave Methvin (dave.methvin@gmail.com)
 * @author Mike Alsup (malsup@gmail.com)
 */
//  (function($) {
$.fn.corner = function(o) {
    var ie6 = $.browser.msie && /MSIE 6.0/.test(navigator.userAgent);
    function sz(el, p) { return parseInt($.css(el,p))||0; };
    function hex2(s) {
        var s = parseInt(s).toString(16);
        return ( s.length < 2 ) ? '0'+s : s;
    };
    function gpc(node) {
        for ( ; node && node.nodeName.toLowerCase() != 'html'; node = node.parentNode ) {
            var v = $.css(node,'backgroundColor');
            if ( v.indexOf('rgb') >= 0 ) {
                if ($.browser.safari && v == 'rgba(0, 0, 0, 0)')
                    continue;
                var rgb = v.match(/\d+/g);
                return '#'+ hex2(rgb[0]) + hex2(rgb[1]) + hex2(rgb[2]);
            }
            if ( v && v != 'transparent' )
                return v;
        }
        return '#ffffff';
    };
    function getW(i) {
        switch(fx) {
        case 'round':  return Math.round(width*(1-Math.cos(Math.asin(i/width))));
        case 'cool':   return Math.round(width*(1+Math.cos(Math.asin(i/width))));
        case 'sharp':  return Math.round(width*(1-Math.cos(Math.acos(i/width))));
        case 'bite':   return Math.round(width*(Math.cos(Math.asin((width-i-1)/width))));
        case 'slide':  return Math.round(width*(Math.atan2(i,width/i)));
        case 'jut':    return Math.round(width*(Math.atan2(width,(width-i-1))));
        case 'curl':   return Math.round(width*(Math.atan(i)));
        case 'tear':   return Math.round(width*(Math.cos(i)));
        case 'wicked': return Math.round(width*(Math.tan(i)));
        case 'long':   return Math.round(width*(Math.sqrt(i)));
        case 'sculpt': return Math.round(width*(Math.log((width-i-1),width)));
        case 'dog':    return (i&1) ? (i+1) : width;
        case 'dog2':   return (i&2) ? (i+1) : width;
        case 'dog3':   return (i&3) ? (i+1) : width;
        case 'fray':   return (i%2)*width;
        case 'notch':  return width;
        case 'bevel':  return i+1;
        }
    };
    o = (o||"").toLowerCase();
    var keep = /keep/.test(o);                       // keep borders?
    var cc = ((o.match(/cc:(#[0-9a-f]+)/)||[])[1]);  // corner color
    var sc = ((o.match(/sc:(#[0-9a-f]+)/)||[])[1]);  // strip color
    var width = parseInt((o.match(/(\d+)px/)||[])[1]) || 10; // corner width
    var re = /round|bevel|notch|bite|cool|sharp|slide|jut|curl|tear|fray|wicked|sculpt|long|dog3|dog2|dog/;
    var fx = ((o.match(re)||['round'])[0]);
    var edges = { T:0, B:1 };
    var opts = {
        TL:  /top|tl/.test(o),       TR:  /top|tr/.test(o),
        BL:  /bottom|bl/.test(o),    BR:  /bottom|br/.test(o)
    };
    if ( !opts.TL && !opts.TR && !opts.BL && !opts.BR )
        opts = { TL:1, TR:1, BL:1, BR:1 };
    var strip = document.createElement('div');
    strip.style.overflow = 'hidden';
    strip.style.height = '1px';
    strip.style.backgroundColor = sc || 'transparent';
    strip.style.borderStyle = 'solid';
    return this.each(function(index){
        var pad = {
            T: parseInt($.css(this,'paddingTop'))||0,     R: parseInt($.css(this,'paddingRight'))||0,
            B: parseInt($.css(this,'paddingBottom'))||0,  L: parseInt($.css(this,'paddingLeft'))||0
        };

        if ($.browser.msie) this.style.zoom = 1; // force 'hasLayout' in IE
        if (!keep) this.style.border = 'none';
        strip.style.borderColor = cc || gpc(this.parentNode);
        var cssHeight = $.curCSS(this, 'height');

        for (var j in edges) {
            var bot = edges[j];
            // only add stips if needed
            if ((bot && (opts.BL || opts.BR)) || (!bot && (opts.TL || opts.TR))) {
                strip.style.borderStyle = 'none '+(opts[j+'R']?'solid':'none')+' none '+(opts[j+'L']?'solid':'none');
                var d = document.createElement('div');
                $(d).addClass('jquery-corner');
                var ds = d.style;

                bot ? this.appendChild(d) : this.insertBefore(d, this.firstChild);

                if (bot && cssHeight != 'auto') {
                    if ($.css(this,'position') == 'static')
                        this.style.position = 'relative';
                    ds.position = 'absolute';
                    ds.bottom = ds.left = ds.padding = ds.margin = '0';
                    if ($.browser.msie)
                        ds.setExpression('width', 'this.parentNode.offsetWidth');
                    else
                        ds.width = '100%';
                }
                else if (!bot && $.browser.msie) {
                    if ($.css(this,'position') == 'static')
                        this.style.position = 'relative';
                    ds.position = 'absolute';
                    ds.top = ds.left = ds.right = ds.padding = ds.margin = '0';

                    // fix ie6 problem when blocked element has a border width
                    var bw = 0;
                    if (ie6 || !$.boxModel)
                        bw = sz(this,'borderLeftWidth') + sz(this,'borderRightWidth');
                    ie6 ? ds.setExpression('width', 'this.parentNode.offsetWidth - '+bw+'+ "px"') : ds.width = '100%';
                }
                else {
                    ds.margin = !bot ? '-'+pad.T+'px -'+pad.R+'px '+(pad.T-width)+'px -'+pad.L+'px' :
                                        (pad.B-width)+'px -'+pad.R+'px -'+pad.B+'px -'+pad.L+'px';
                }

                for (var i=0; i < width; i++) {
                    var w = Math.max(0,getW(i));
                    var e = strip.cloneNode(false);
                    e.style.borderWidth = '0 '+(opts[j+'R']?w:0)+'px 0 '+(opts[j+'L']?w:0)+'px';
                    bot ? d.appendChild(e) : d.insertBefore(e, d.firstChild);
                }
            }
        }
    });
};
$.fn.uncorner = function(o) { return $('.jquery-corner', this).remove(); };
//  })(jQuery);

// NEXT: Below goes AFTER above!
// To use: assign "xxxxxxcorners" class to div to make corners of that div not square
// Corner examples: http://www.malsup.com/jquery/corner/
// Corner specs: top, bottom, tl, tr, bl, br; example: $(this).corner("bite tl");
// Corner with border example: $(this).corner("round 8px").parent().css('padding', '4px').corner("round 10px")
// Top and bottom stripes: $(this).corner("sc:#000099");
//  $(function(){
        $(".roundcorners").corner();
        $(".roundcorners25").corner("25px");
        $(".bevelcorners").corner("bevel");
        $(".bevelcornerstop").corner("bevel top");
        $(".notchcorners").corner("notch");
        $(".bitecorners").corner("bite");
        $(".coolcorners").corner("cool");
        $(".sharpcorners").corner("sharp");
        $(".slidecorners").corner("slide");
        $(".jutcorners").corner("jut");
        $(".curlcorners").corner("curl");
        $(".tearcorners").corner("tear");
        $(".fraycorners").corner("fray");
        $(".wickedcorners").corner("wicked");
        $(".sculptcorners").corner("sculpt");
        $(".longcorners").corner("long");
        $(".dogcorners").corner("dog");
        $(".dog2corners").corner("dog2");
        $(".dog3corners").corner("dog3");
        //borders and stripes need TESTING BEFORE implementation!!
        $(".roundcornersborder").corner("round 8px").parent().css('padding', '4px').corner("round 10px")
//  });

}); // End JQuery functions




// =============================================================
// (2) The following do not use JQuery.
// =============================================================
// Break out of frames!
if (window != top) { top.location.href = location.href; }

// Opera Resize Window Fix for css after browser window resized by user.
// REALLY OLD - comment out 20110422
/*
function P7_OpResizeFix(a) { //v1.1 by PVII
if(!window.opera){return;}if(!document.p7oprX){
 document.p7oprY=window.innerWidth;document.p7oprX=window.innerHeight;
 document.onmousemove=P7_OpResizeFix;
 }else{if(document.p7oprX){
  var k=document.p7oprX-window.innerHeight;
  var j=document.p7oprY - window.innerWidth;
  if(k>1 || j>1 || k<-1 || j<-1){
  document.p7oprY=window.innerWidth;document.p7oprX=window.innerHeight;
  location.reload();}}}
}
P7_OpResizeFix();
*/

// Popup Window.
/* To Use:
<a href="/path/filename.html" onclick="openwindow('/path/filename.html','win1', 'width=400, height=300,
toolbar=no, location=yes, menubar=yes, resizable=yes, status=yes, left=5, top=5');return false;"
title="New window opens using JavaScript">Descriptive Link Text</a>
*/
/*
function openwindow(url,window_name,options) {
  var newwin=window.open(url,window_name,options);
  newwin.focus();
}
*/

// Redirect to URL after selection from pull-down menu.
//NOTE: Not accessibility friendly; not recommended.
function redirect(pulldown) {
  var newLocation = pulldown[pulldown.selectedIndex].value;
  if ( newLocation != "" )
  {
    self.location = newLocation;
  }
}

