/*
 * Shout outs: David Hellsing, Dean Edwards, Matthias Miller, John Resig, Technorati.com
 */

if (typeof Healia == "undefined") {
    Healia = {
        widgetBaseUri: 'http://static.healia.com/widget/',
        xhtmlNS: "http://www.w3.org/1999/xhtml",
        loadFunctions: [],
        domBound: false,
        moz: !window.opera && !/KHTML|WebKit/i.test(navigator.userAgent),
        init: function() {
            for (var i = 0; i < Healia.loadFunctions.length; i++) {
                Healia.loadFunctions[i]();
            }
            Healia.domBound = true;
        },        
        loadData: function (url,id) {
            id = id+"-data-src";
            if(document.getElementById(id)) { return; }
            var s = this.createElement("script");
            s.setAttribute("charset", "UTF-8");
            s.setAttribute("type", "text/javascript");
            s.setAttribute("src", url);
            s.setAttribute("id",id);
            var head = document.getElementsByTagName("head")[0] || document.documentElement;
            head.appendChild(s);
        },
        loadCSS: function (url,id) {
            id = id+"-style-src";
            if(document.getElementById(id)) { return; }
            var s = this.createElement("link");
            s.setAttribute("charset", "UTF-8");
            s.setAttribute("type", "text/css");
            s.setAttribute("rel", "stylesheet");
            s.setAttribute("href", url);
            s.setAttribute("id",id);
            var head = document.getElementsByTagName("head")[0] || document.documentElement;
            head.appendChild(s);
        },
        createElement: function (type) {
            if (document.createElementNS) {
                return document.createElementNS(this.xhtmlNS, type);
            } else if (document.createElement) {
                return document.createElement(type);
            }
        },
        addLoadFunction: function(f) {     
            if (this.loadFunctions.length === 0) {

                /* WebKit */
                if (/KHTML|WebKit/i.test(navigator.userAgent)) {
                    var _trTimer = setInterval(function() {
                        if (/loaded|complete/.test(document.readyState)) {
                            clearInterval(_trTimer);
                            Healia.init();
                        }
                    }, 10);               
                }

                /* Gecko/Presto (Opera 9+) */
                if (document.addEventListener) {                   
                    document.addEventListener("DOMContentLoaded", Healia.init, false);
                }

				/* for Internet Explorer */
                /*@cc_on @*/
                /*@if (@_win32)
                  document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
                  var s = document.getElementById("__ie_onload");
                  s.onreadystatechange = function() {
                  if (this.readyState == "complete") { Healia.init(); }
                  };
                /*@end @*/

            }
            this.loadFunctions.push(f);
        },
        parseWidgetUrl: function(href) {          
            var _l = window.location;                        
            var _href = Healia.cleanHrefPath(this.absUrl(href)); // parse href                       
            if (_href === this.noSlash((_l.protocol + '//' + _l.hostname).replace(/www\./,''))) {
                return false; // return if href is root
            }
    
            // split href into path & query
            var _s = _href.split("?");
            var _a = this.noSlash(_s[0]).split('/');
            var _q = _s.length > 1 ? _s[1].split('&') : [];            
            _q.sort();
            
            var affiliateId = null;
            for (var i in _q)
            {
                if(_q[i])
                {
                	if (typeof _q[i] == "string") {
	                    var _qArray = _q[i].split('=');
    	                if (_qArray[0] == 'affiliateId')
        	            {
            	            affiliateId = _qArray[1];
                	        break;                        
                    	}
                    }
                }
            }
            
            return {"path":_s[0],"affiliateId":affiliateId};
        },
        noSlash: function(href) {
            return href.lastIndexOf('/') === href.length-1 ? href.substr(0,href.length-1) : href.toString();
        },
        cleanHrefPath: function(href,ignore) {
            return Healia.noSlash(href.replace(/www\./i,'').replace(ignore,'').replace(/\.\//,'').toString());
        },
        absUrl: function(url) {
            var l = window.location, h, p, f, i;
            if (/^\w+:/.test(url)) {
                return url.toString();
            }
            h = l.protocol + '//' + l.host;
            if (this.indexOf('/') === 0) {
                return h + url.toString();
            }
            p = l.pathname.replace(/\/[^\/]*$/, '');
            f = url.match(/\.\.\//g);
            if (f) {
                var n = url.substring(f.length * 3);
                for (i = f.length; i--;) {
                    p = p.substring(0, p.lastIndexOf('/'));
                }
            } else {
                n = url.toString();
            }
            return h + p + '/' + n;
        }
    };
}

if (typeof Healia.baseWidget == "undefined") {
    Healia.baseWidget = {
        initialized : false,        
        elementURLs: {},
        elementTargets: [],
        urlsToLoad: [],        
        init: function() {
            if (Healia.baseWidget.initialized === false) {
                Healia.baseWidget.initialized = true;
                Healia.addLoadFunction(this.loadFunction);
            }
        },        
        loadFunction: function () {
            Healia.baseWidget.runWidgets();
        },        
        runWidgets: function () {
            if(this.elementURLs.length <= 0) {
                return;
            }
            var anchors = document.getElementsByTagName("a");
            for (var i = 0; i < anchors.length; i++) {
                var anchor = anchors[i];
                if(this.elementURLs[anchor.className] && this.elementURLs[anchor.className]['dataUrl']) {
                    var dataUrl = this.elementURLs[anchor.className]['dataUrl'];
                    if(dataUrl) {
                        this.elementTargets.push(anchor); }
                }
            }

            for (var i = 0; i < this.elementTargets.length; i++) {
                var target = this.elementTargets[i];
                var targetDataUrl = this.elementURLs[target.className]["dataUrl"];
                var targetCssUrl = this.elementURLs[target.className]["cssUrl"];                
                var type = this.elementURLs[target.className]["type"];
                if(targetDataUrl && target) {                     
                    if(type == "js") {
                        Healia.loadData(targetDataUrl,target.className);
                        if(targetCssUrl) { Healia.loadCSS(targetCssUrl,target.className); }
                    } else if(type == "iframe") {
                        var width = this.elementURLs[target.className]["width"];
                        var height = this.elementURLs[target.className]["height"];
                        var frameborder = this.elementURLs[target.className]["frameborder"];
                        var scrolling = this.elementURLs[target.className]["scrolling"];
                        var frame = Healia.createElement("iframe"); // Compatible with HTML & XHTML
                        frame.setAttribute("width", width);
                        frame.setAttribute("height", height);
                        frame.setAttribute("scrolling", scrolling);
                        frame.setAttribute("frameborder", frameborder);
                        frame.setAttribute("src", dataUrl);
                        target.parentNode.insertBefore(frame, target);
                        target.parentNode.removeChild(target);
                    }
                }
            }
        },
        callback: function(klass, data) {
            var anchors = document.getElementsByTagName("a");
            var todo = [];
            var todoForms = [];
            var widgetUrl;
            for (var i = 0; i < anchors.length; i++) {
                  var anchor = anchors[i];                  
                  if(anchor.className == klass && this.elementURLs[anchor.className] && this.elementURLs[anchor.className]['dataUrl']) {
                      todo.push(anchor);
                  }
            }
            for (var i = 0; i < todo.length; i++) {
                var target = todo[i];
                widgetUrl = Healia.parseWidgetUrl(target.getAttribute('href',1));
                var div = Healia.createElement("div");
                div.className = "healia-widget-box " + klass;
                
                //xhtml check
                if (document.createElementNS) {
                    /*
                     * Trident doesn't know anything at all about XHTMl.                    
                     * Gecko assumes elements in innerHTML data to be part of an XHTML document.
                     * Presto/Kestrel and WebKit, assume a generic XML document.
                     * Safari 2's WebKit doesn't like innerHTML on XHTML served as application/xhtml+xml documents
                     * Safari 3+ WebKit seems quite happy though
                     */
                    if (!Healia.moz) {
                        data = data.replace(/(<[a-z]+)/g, "$1 xmlns='http://www.w3.org/1999/xhtml'");
                    }
                }
        
                div.innerHTML = data;
                var forms = div.getElementsByTagName("form"); 
                todoForms.push(forms[0]);
                if(target.parentNode)
                {
                    target.parentNode.insertBefore(div, target);                
                    target.parentNode.removeChild(target);
                }
            }

            // :(
            if(todoForms)
            {
                for (var i = 0; i < todoForms.length; i++) {
                    if(widgetUrl.affiliateId)
                    {
                        for(var i = 0; i < todoForms.length; i++) {
                            var formIdInput = Healia.createElement("input");
                            formIdInput.setAttribute("type","hidden");
                            formIdInput.setAttribute("name","formid");
                            formIdInput.setAttribute("value",klass);
                            todoForms[i].appendChild(formIdInput);
                        
                            var affiliateIdInput = Healia.createElement("input");
                            affiliateIdInput.setAttribute("type","hidden");
                            affiliateIdInput.setAttribute("name","affiliateId");
                            affiliateIdInput.setAttribute("value",widgetUrl.affiliateId);
                            todoForms[i].appendChild(affiliateIdInput);                           
                        }
                    }  
                }
            }
        },        
        addWidget: function (id, dataUrl, cssUrl, type) {
               this.elementURLs[id] = { 'dataUrl': dataUrl, 'cssUrl': cssUrl, 'type': type };
        }
    }; // /baseWidget
}

Healia.baseWidget.addWidget('com-healia-service-widget-search_js',Healia.widgetBaseUri+'search/n.js',Healia.widgetBaseUri+'search/n.css','js');
Healia.baseWidget.init();
