if(!window.SMS) SMS = {};
SMS.GetDomNode = function(src) {
    if(!src) return null;
    if(src.get) return src.get('element');
    else return YAHOO.util.Dom.get(src);
}
SMS.AppendTimestamp = function(url) {
	var newUrl = url;
	newUrl = url.replace(/ts=[^&]*/, '');
	newUrl += (newUrl.indexOf('?') < 0)?'?':'&';
	newUrl += 'ts=' + new Date().getTime();
	return newUrl;
}
SMS.Image = {};
SMS.Image.ForceUpdate = function(node) {
    var images;
    if(node.nodeName.toLowerCase() == 'img') {
        images = [node];
    } else {
        images = node.getElementsByTagName('img');
    }
    for(var i = 0; i < images.length; i ++) {
        images[i].src = SMS.AppendTimestamp(images[i].src);
    }
}
SMS.Image.Format = /(.*\/)(.*?)_(\d+)x(\d+)(\..*)/;
SMS.Image.Panels = [];
SMS.Image.GetSize = function(elOrSrc) {
    var el = SMS.GetDomNode(elOrSrc);
    var src = (el != null)?el.src:elOrSrc;
    return {
        width: src.replace(SMS.Image.Format, '$3') * 1,
        height: src.replace(SMS.Image.Format, '$4') * 1
    };
}
SMS.Image.GetScaledSize = function(elOrSrc) {
    var el = SMS.GetDomNode(elOrSrc);
    var src = (el != null)?el.src:elOrSrc;
    var maxw = YAHOO.util.Dom.getClientWidth() - 100;
    var maxh = YAHOO.util.Dom.getClientHeight() - 100;
    var size = SMS.Image.GetSize(src);
    currw = size.width;
    currh = size.height;
    var neww = currw;
    var newh = currh;
    if(maxw > currw || maxh > currh) {
        var rw = currw/maxw;
        var rh = currh/maxh;
        var r = (rw > rh)?rw:rh;
        neww = Math.ceil(neww / r);
        newh = Math.ceil(newh / r);
    }
    return { width: neww, height: newh };
}
SMS.Image.BindHover = function(el) {
    el = new YAHOO.util.Element(el);
    el.addClass('clickable');
    domel = el.get('element');
    if(domel.parentNode.nodeName != 'a') {
        var a = document.createElement('a');
        a.title = "Click to see an enlarged version of this image";
        domel.parentNode.insertBefore(a, domel);
        a.appendChild(domel);
    }
    var img = new Image();
    img.src = domel.src;
    el.on('click', function() {
        var size = SMS.Image.GetScaledSize(el);
        var w = YAHOO.util.Dom.getClientWidth() + 'px';
        var h = YAHOO.util.Dom.getClientHeight() + 'px';
        var panel = new YAHOO.widget.Panel("imagePanel", {
            width: w,
            height: h,
            x: 0,
            visible:true,
            draggable:false,
            close:true,
            modal:true,
            effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.25}
        });
        if(el.alt) panel.setHeader(el.alt);
        var newUrl = domel.src.replace(SMS.Image.Format, '$1$2$5');
        var topMargin = ((YAHOO.util.Dom.getClientHeight() - size.height) / 2) + document.documentElement.scrollTop;
        panel.setBody(
            '<div style="text-align:center;margin-top:' + topMargin + 'px;"><div style="margin:0px auto;">' +
                '<div class="imageContainer">' +
                    '<a href="#"><img src="' + newUrl + '" alt="' + el.alt + '" width="' + size.width + '" height="' + size.height + '"/>' +
                '</div>' +
            '</div></div>');
        panel.setFooter('<button onclick="SMS.Image.FullsizeTop(this)">Full</button><button onclick="SMS.Image.ClosePanels()">Close</button>');
        panel.render(document.body);
        SMS.Image.Panels.push(panel);
    });
}
SMS.Image.FullsizeTop = function(button) {
    if(SMS.Image.Panels.length > 0) {
        var panel = SMS.Image.Panels[SMS.Image.Panels.length - 1]
        var el = panel.element.getElementsByTagName('img')[0];
        if(button.innerHTML == 'Full') {
            var img = new Image();
            img.src = el.src;
            button.oldWidth = el.width;
            button.oldHeight = el.height;
            button.oldTop = el.parentNode.parentNode.parentNode.parentNode.style.marginTop;
            el.width = img.width;
            el.height = img.height;
            el.parentNode.parentNode.parentNode.parentNode.style.marginTop = document.documentElement.scrollTop + 'px';
            button.innerHTML = 'Fit';
        } else {
            el.width = button.oldWidth;
            el.height = button.oldHeight;
            el.parentNode.parentNode.parentNode.parentNode.style.marginTop = button.oldTop;
            button.innerHTML = 'Full';
        }
    }
}
SMS.Image.ClosePanels = function() {
    for(var i = SMS.Image.Panels.length - 1; i >= 0; i --) {
        SMS.Image.Panels[i].hide();
    }
    SMS.Image.Panels = [];
}