
// IE Check
var ie6 = false;
if (navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer") {
    var arVersion = navigator.appVersion.split("MSIE")
    var version = parseFloat(arVersion[1])
    if( version < 7.0 ) 
        ie6 = true;
}

// Util functions //////////////////
function hex2rgb(color) {
    var rgb;
    color = color.replace(/^#/,'');
    if( color.length == 6 ) {
        rgb = [
            parseInt(color.substring(0,2), 16),
            parseInt(color.substring(2,4), 16), 
            parseInt(color.substring(4,6), 16)
        ];
    }
    else if( color.length == 3 ) {
        rgb = [
            parseInt(color.substring(0,1), 16),
            parseInt(color.substring(1,2), 16), 
            parseInt(color.substring(2,3), 16)
        ];
    } else {
        rgb = [0,0,0];
    }
    return rgb;
}
function rgb2html(R,G,B) {return toHex(R)+toHex(G)+toHex(B)}
function toHex(N) {
 if (N==null) return "00";
 N=parseInt(N); if (N==0 || isNaN(N)) return "00";
 N=Math.max(0,N); N=Math.min(N,255); N=Math.round(N);
 return "0123456789ABCDEF".charAt((N-N%16)/16)
      + "0123456789ABCDEF".charAt(N%16);
}
function color_format(color) {
    var returnColour = "#ffffff";
    if(color != "" && color != "transparent") {
        if(color.substr(0, 3) == "rgb") {
            var a = color.replace(/[^0-9|,]/g,'').split(',');
            returnColour = rgb2html(a[0],a[1],a[2]);            
        }        
        else if(color.length == 4) {
            returnColour = "#" + color.substring(1, 2) + 
                    color.substring(1, 2) + 
                    color.substring(2, 3) + 
                    color.substring(2, 3) + 
                    color.substring(3, 4) + 
                    color.substring(3, 4);            
        }        
        else {
            returnColour = color;            
        }        
    }
    else if( color == "transparent" ) {
        return 'transparent';
    }    
    return returnColour;    
}

// jQuery Plugins //////////////////////////////////////////////////////////////////////////

// Aligns the object vertically using either top margin to top property
jQuery.fn.vcenter = function() {
    return this.each( function() {
        var $ = jQuery;
        var $obj = $(this);
        var $p = $obj.parent();
        
        var t = parseInt( ($p.height() - $obj.height()) / 2 );
        if( $obj.css('position').toLowerCase() == 'absolute' ) {
            $obj.css('top', t+'px');
        }
        else {
            $obj.css('margin-top', t+'px');
        }
        
    });
}

// Rollover Plugin //////////////////////////////////////////////////////////////////////////
jQuery.rollover = {
    settings : {overcolor: 'FF0000'},
    getObj : function(obj) { // handle ie6 filter
        if( obj.runtimeStyle && obj.runtimeStyle.filter )  return obj.filters(0);
        else return obj;
    },
    overEvent: function(e) {
        var obj = e.target;
        if( !obj.src ) obj = jQuery('>img',obj)[0];        
        var c = color_format( obj.style.color  || jQuery.rollover.settings.overcolor ).replace('#','');
        if( obj.saved_src ) return;
        obj.saved_src = jQuery.rollover.getObj(obj).src; 
        obj = jQuery.rollover.getObj(obj);
        if( obj.src.search('image.php') == -1 ) {
            obj.src = obj.src.replace(/\.(\w+)$/, "_over.$1");    
        }        
        else {
            if(obj.src.indexOf('color=') > 0)
                obj.src = obj.src.replace(/color=[0-9a-fA-F]*/, 'color='+c);
            else
                obj.src += '&color=' + c;
        }        
    },
    outEvent : function(e) {
        var obj = e.target;
        if( !obj.src ) obj = jQuery(obj).children()[0];
        if( obj.tagName.toLowerCase() != 'img' ) obj = jQuery('img',obj)[0];        
        if( obj.saved_src ) jQuery.rollover.getObj(obj).src = obj.saved_src;
        obj.saved_src = null;
    }    
};
jQuery.fn.rollover = function (settings) {
    jQuery.rollover.settings = jQuery.extend(jQuery.rollover.settings, settings);

    return this.each( function(i,obj) {
        jQuery(obj).unbind('mouseover', jQuery.rollover.overEvent).unbind('mouseout', jQuery.rollover.outEvent).
            mouseover(jQuery.rollover.overEvent).mouseout(jQuery.rollover.outEvent);        
    });
};
jQuery.fn.rolloverUnbind = function () {
    return this.each( function(i,obj) {
        jQuery(obj).unbind('mouseover', jQuery.rollover.overEvent);
        jQuery(obj).unbind('mouseout', jQuery.rollover.outEvent);
        obj.saved_src = null;
    });
};

// Preloads rollover images according to rollover replacement rules
jQuery.fn.preloadImg = function () {
    return this.each( function(i,obj) {
        if( !obj.src ) obj = jQuery('>img',obj)[0];
        var obj = jQuery.rollover.getObj(obj);
        var preload = new Image();
        if( obj.src.search('image.php') == -1 ) {
            preload.src = obj.src.replace(/\.(\w+)$/, "_over.$1");
        }else{
            var src = obj.src.replace(/&color=[0-9a-fA-F]*/, '');
            src += '&color=' ;
            preload.src = src;
        }    
    });
};

// Uses php image generator to replace the element's text with an image
jQuery.fn.imageReplace = function (settings) {
    var settings = jQuery.extend({},  settings);
    return this.each( function() {
        $obj = jQuery(this);
        if( $obj.children().length > 0 ) return;
        var text = $obj.text();
        if( text.length < 1 ) return;
        
        var options = '';
        jQuery.each(settings, function(key,val) {
            options += '&'+encodeURIComponent(key)+'='+encodeURIComponent(val);
        });
        $obj.empty().append('<img src="/img/image.php?text='+encodeURIComponent(text)+ options + '" alt="'+text+'" />');
    });
}

// Init Events

$(document).ready( function () {
    // Image replacements and rollovers
    $('#main-menu a').imageReplace().rollover().preloadImg();
    $('.secondary-menu a, .tertiary-menu a').each(function(){
            var t = $(this).text().replace(/& /,"&\n").replace(/\/ /,"/\n");
            $(this).text(t);
        }).imageReplace({wrap : '20',align: 'left'}).rollover().preloadImg();
    $('#info-request h2').imageReplace({size: '9'});
    $('#search-results h2').imageReplace({size: '10'});
    $('#contact-info td').imageReplace({size : '8', align : 'left'});
    $('a.play-video').imageReplace({size : '8'});
    $('#press .date, .year-list .date').imageReplace({font:'FreeSans.ttf',size:'11'});
    $('#press a.date, .year-list a.date').rollover().preloadImg();

    // Highlight menu items
    var p = here.split('-');
    if( p.length > 0 ) {
        var name = p[0].toUpperCase().replace(/^ABOUT$/,'GALLERY').replace(/^$/,'EXHIBITIONS').replace(/^POSTS/,'NEWS');
        $('#main-menu img[@alt='+name+']').parent().trigger('mouseover').rolloverUnbind();
    }
    
    // Search form
    $('#search-form input').focus( function() {
        if( this.value == 'Search' ) this.value = '';
        else $(this).select();
    });
    $('#search-form input').blur( function() {if( !this.value ) this.value = 'Search'; });

    // Safari won't let us style the form elements
    if( $.browser.safari ) {
        $('#search-form').css({
            background: 'transparent',
            width: '220px',
            right: '0px'
        });
        $('#search-form input').css({background: 'none',width: '210px'});
    }
});
