﻿var offsetx = 12;
var offsety =  4;
var dhtmlgoodies_tooltip = false;
var dhtmlgoodies_tooltipShadow = false;
 var dhtmlgoodies_shadowSize = 4;
var dhtmlgoodies_tooltipMaxWidth = 200;
var dhtmlgoodies_tooltipMinWidth = 100;
var dhtmlgoodies_iframe = false;
var tooltip_is_msie = (navigator.userAgent.indexOf('MSIE')>=0 && navigator.userAgent.indexOf('opera')==-1 && document.all)?true:false;
var isMozilla=(typeof document.implementation!='undefined')&&(typeof document.implementation.createDocument!='undefined')&&(typeof HTMLDocument!='undefined');
var ie5 = (document.getElementById && document.all); 
var ns6 = (document.getElementById && !document.all); 
var ua = navigator.userAgent.toLowerCase();
var isapple = (ua.indexOf('applewebkit') != -1 ? 1 : 0);

if (typeof sitePump == "undefined") var sitePump = {};
var _nativeExtensions = false;


var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		//this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	]
};
BrowserDetect.init();

/*--------------------------------------------------------------------------*/


var Sitepump = {};
Sitepump.Interface ={};
Sitepump.Interface.increment = 0;

Sitepump.Interface.editBox = function(object)
{
    this.gadget = object.gadget;
    this.displayButton = object.displayButton;
}
Sitepump.Interface.editBox.prototype= {
                                            controls: {

                                            'text': function(pref,isSetValue) {
                                              var prefValue = this.gadget.getPrefValue(pref.name);
                                              if(!prefValue || prefValue == 'null') prefValue = ''; // why string null ?
                                              var textBox; 
                                              if(typeof(isSetValue) == "undefined" || !isSetValue)
                                              {
                                                textBox = this.gadget.createElement('input');
                                                textBox.id = 'sp'+pref.name;
                                              }
                                              else
                                               textBox = sitePump.$element(document.getElementById('sp'+pref.name));
                                              
                                              textBox.type = "text";
                                              textBox.value = prefValue;
                                              textBox.name = pref.name;
                                              return textBox;
                                            },
                                            'checkbox': function(pref,isSetValue) {
                                              
                                              var checkbox;
                                              if(typeof(isSetValue) == "undefined" || !isSetValue)
                                              {
                                                textBox = this.gadget.createElement('input');
                                                textBox.id = 'sp'+pref.name;
                                                
                                                checkbox = this.gadget.createElement('input');
                                                checkbox.type = "checkbox";
                                                checkbox.id = 'sp' + pref.name;
                                                checkbox.name = pref.name;
                                                  
                                                if(this.gadget.getPrefValue(pref.name) == true || 
                                                   this.gadget.getPrefValue(pref.name) == 'true' ||
                                                   this.gadget.getBool(pref.defaultValue))
                                                {
                                                  checkbox.setAttribute('checked', 'checked');
                                                  checkbox.defaultChecked = true; // for IE
                                                }
                                                  
                                                if(pref.onchange) {
                                                  checkbox.onclick = ( function(e) {
                                                    var sender = (e.target || e.srcElement);
                                                    if(sender.checked == true) this.gadget.setPrefValue(pref.name, 'true');
                                                    else this.gadget.setPrefValue(pref.name, 'false');
                                                    this.gadget.registerMethodCall(pref.onchange);
                                                  } ).bindAsEventListener(this);
                                                }                                                
                                              }
                                              else
                                              {
                                                checkbox = sitePump.$element(document.getElementById('sp'+pref.name));
                                                if(this.gadget.getPrefValue(pref.name) == true || 
                                                   this.gadget.getPrefValue(pref.name) == 'true')
                                                {
                                                  checkbox.checked = true;
                                                  checkbox.defaultChecked = true; // for IE
                                                }
                                              }
                                              return checkbox;
                                            },
                                            'password': function(pref) {
                                              var pwdinput = '<input type="password" value="" id="sppass" name="pass" /> ';
                                              return pwdinput;
                                            },
                                            'combo': function(pref,isSetValue) {
                                              var combobox;   
                                              if(typeof(isSetValue) == "undefined" || !isSetValue)
                                              {
                                                combobox = this.gadget.createElement('select');
                                                combobox.id = 'sp' + pref.name;  
                                                
                                                combobox.name = pref.name;
                                                if (parseInt(pref.increment) > 0) {
	                                                for(var i=parseInt(pref.lowerlimit); i<=parseInt(pref.upperlimit); i+=parseInt(pref.increment)) {
	                                                  var option = this.gadget.createElement('option');
	                                                  if(this.gadget.getPrefValue(pref.name) == i) option.setAttribute('selected', 'selected');
	                                                  option.value = i; 
	                                                  option.setText(i);
	                                                  combobox.appendChild(option);
	                                                }
                                                }
                                                if(pref.onchange) {
                                                   combobox.onchange = ( function(e) {
                                                   var sender = (e.target || e.srcElement);
                                                   this.gadget.setPrefValue(pref.name, sender.value)
                                                   this.gadget.registerMethodCall(pref.onchange);
                                                  } ).bindAsEventListener(this);
                                                }
                                              }
                                              else
                                              {
                                                combobox = sitePump.$element(document.getElementById('sp'+pref.name));
                                                for(var i=0; i<combobox.options.length; i++) {
                                                  if(this.gadget.getPrefValue(pref.name) == combobox.options[i].value){
                                                    combobox.selectedIndex = i;
                                                    break;
                                                  }  
                                                }                                                
                                              }
                                              
                                              return combobox;
                                            },
                                            'listbox': function(pref,isSetValue) {
                                              var str ="";
                                              var listBox; 
                                              if(typeof(isSetValue) == "undefined" || !isSetValue)
                                              {
                                                listBox = this.gadget.createElement('select');
                                                listBox.id = 'sp' + pref.name;
                                                listBox.name = pref.name;
                                                for(var i=0; i<pref.options.length; i++) {
                                                  var option = this.gadget.createElement('option');
                                                  if(this.gadget.getPrefValue(pref.name) == pref.options[i].value) option.setAttribute('selected', 'selected');
                                                  option.value = pref.options[i].value;
                                                  option.setText( (pref.options[i].label ? pref.options[i].label : pref.options[i].value ) );
                                                  listBox.appendChild(option);
                                                }
                                                if(pref.onchange) {
                                                  select.onchange = ( function(e) {
                                                    var sender = (e.target || e.srcElement);
                                                    this.gadget.setPrefValue(pref.name, sender.value)
                                                    this.gadget.registerMethodCall(pref.onchange);
                                                  } ).bindAsEventListener(this);
                                                }
                                              }
                                              else
                                              {
                                                listBox = sitePump.$element(document.getElementById('sp'+pref.name));
                                                for(var i=0; i<listBox.options.length; i++) {
                                                  if(this.gadget.getPrefValue(pref.name) == listBox.options[i].value) 
                                                  {
                                                    listBox.selectedIndex = i;
                                                    break;
                                                  }  
                                                }
                                              }
                                              return listBox;
                                            } 
                                          },
                                          updateValues : function(p_name,value){
                                             for(var i = 0; i < this.gadget.preferences.length; i++){
                                              var pref = this.gadget.preferences[i];
                                              if(pref.type != 'hidden'){
                                                  if(pref.name == p_name){
                                                    if(!this.controls[pref.type]) 
                                                        pref.type = 'text';
                                                    this.controls[pref.type].bind(this)(pref,true);
                                                    break;
                                                  }
                                              }
                                            }
                                          },
                                          getEditForm: function() {
                                            
                                            var editForm = this.gadget.createElement("form");
                                            editForm.id = 'frm'; 
                                            var table = this.gadget.createElement("table");
                                            table.width = '100%';
                                            var tbody = this.gadget.createElement("tbody");
                                            
                                            for(var i = 0; i < this.gadget.preferences.length; i++) {
                                              
                                              var tr = this.gadget.createElement("tr");
                                              var pref = this.gadget.preferences[i];
                                              if(pref.type != 'hidden')
                                              {
                                                  if(!pref.label) pref.label = pref.name;
                                                  var label = this.gadget.createElement("label");
                                                  label.setAttribute('for',pref.name);
                                                  label.setHTML(pref.label+':');
                                                  var labeltd = this.gadget.createElement("td");
                                                  labeltd.appendChild(label);
                                                  tr.appendChild(labeltd);
                                                  
                                                  if(!this.controls[pref.type]) 
                                                    pref.type = 'text';
                                                  var ctl = this.controls[pref.type].bind(this)(pref);
                                                  var controltd = this.gadget.createElement("td");
                                                  
                                                  controltd.setContent(ctl);
                                                  tr.appendChild(controltd);
                                                  
                                                  tbody.appendChild(tr);
                                              }
                                            }
                                            
                                            var submit = this.gadget.createElement('input');
                                            submit.type = 'submit';
                                            submit.value = "Ok";
                                            submit.addClassName('buttonClean');
                                            var tr = this.gadget.createElement("tr");
                                            var tds = this.gadget.createElement("td");
                                            tds.colSpan = '2';
                                            tds.appendChild(submit);
                                            tr.appendChild(tds);
                                            tbody.appendChild(tr);
                                                                                        
                                            table.appendChild(tbody);
                                            
                                            this.form = editForm;
                                            
                                            this.form.appendChild(table);
                                            
                                            editForm.onsubmit = ( function() {
                                              this.gadget.html['edit'].hide();  
                                              this.saveValues();
                                              this.gadget.registerMethodCall('onLoad');
                                              return false;
                                            } ).bindAsEventListener(this);
                                            
                                            return this.form;
                                            
                                          },
                                          
                                          /* to document */
                                          saveValues: function(form) {
                                            //debugger; 
                                            //if(typeof form == 'undefined') var form = this.form;
                                            form = document.getElementById('frm');
                                            var controls = Form.getElements(form);
                                            
                                            for (var i = 0; i < controls.length; i++) {
                                              var element = controls[i];
                                              if(element.type == "submit") continue;
                                              switch(element.type) {
                                                case 'password':
                                                  if(element.value != '' && element.value != 'XXNVXX' )
                                                    this.gadget.setPrefValue(element.name, element.value)
                                                  break;
                                                case 'checkbox':
                                                  if(element.checked) this.gadget.setPrefValue(element.name, 'true');
                                                  else this.gadget.setPrefValue(element.name, 'false');
                                                  break;  
                                                case 'radio':
                                                  if(el.checked)
                                                    this.gadget.setPrefValue(element.name, element.value);
                                                  break;
                                                default :
                                                  this.gadget.setPrefValue(element.name, element.value);
                                                break;
                                              }
                                            }
                                            
                                          }

                                        }
                                        


Sitepump.Interface.TabControl = Class.create();
Sitepump.Interface.TabControl .prototype = {
                                              initialize: function() { //done
                                                  //this.setOptions(options);
                                                  this.options = {
                                                      //autohideDropdowns: true,
                                                      tabDivClass: "sp-tabSet",
                                                      tabULClass: "sp-tabList",
                                                      tabContentClass: "sp-tabContent",
                                                      //softPadding: false,
                                                      orientation: 'top',
                                                      dataKey: 'text',
                                                      extendedAction: false
                                                  }
                                                  this.datas = {}; 
                                                  this.selectedTab = null; 
                                                  this.selectedIndex = this.options.selectedIndex || 0;
                                              },
                                              createTabDiv: function() { //done
                                                  this.tabDiv = document.createElement("div");
                                                  this.tabDiv.className = this.options.tabDivClass;

                                                  this.tabUL = document.createElement("ul");
                                                  this.tabUL.className = this.options.tabULClass;
                                                  this.tabUL.style.cssText= 'padding:0pt;margin:0pt;'; 
                                                  Element.addClassName(this.tabUL, this.options.orientation);
                                                  
                                                  this.tabDiv.appendChild(this.tabUL);
                                              },
                                              appendTo: function(element) { //Done
                                                  if (!this.tabDiv) 
                                                    this.createTabUL();
                                                  if (!this.selectedTab && this.tabUL.hasChildNodes()) 
                                                    this.selectTab(0, false);
                                                  $(element).appendChild(this.tabDiv);

                                                  if (window.gadget && typeof window.gadget.callback == 'function') {
                                                      window.gadget.callback('onUpdateBody');
                                                  }
                                              },
                                              addTab: function(name  ,data,content,options) {
                                                  if (!this.tabDiv) 
                                                    this.createTabDiv();
                                                  if (typeof options == 'undefined') options = {}

                                                  var li = document.createElement("li");
                                                  li.className = "tab";
                                                  li.setAttribute("name", name);
                                                  li.onclick = this.onTabClicked.bindAsEventListener(this);
                                                  
                                                  var a = document.createElement("a");
                                                  a.href = "#";
                                                  a.target = "_blank";
                                                  a.style.whiteSpace = "nowrap";
                                                  a.onclick = function() { 
                                                    return false; 
                                                  }
                                                  if(data.length)
                                                  {
                                                    if(data[0].text)
                                                    {
                                                        if(data[0].icon)   
                                                        {
                                                            var ico = document.createElement("img");
                                                            ico.src = data[0].icon;
                                                            ico.style.marginRight = "3px";
                                                            ico.style.marginBottom = "-2px";
                                                            a.appendChild(ico);
                                                        }
                                                        
                                                        var span = document.createElement("span");
                                                        span.appendChild(document.createTextNode(data[0].text));
                                                        a.appendChild(span);
                                                        
                                                    }
                                                    else if(data[0].image)
                                                    {
                                                         var imgEl =  document.createElement("img");
                                                         imgEl.src = data[0].image;
                                                         a.appendChild(imgEl);
                                                    }
                                                   
                                                    li.setAttribute("key", data[0][this.options.dataKey]);

                                                    var ddl = document.createElement("span");
                                                    ddl.className = "dropdown";
                                                     do {
                                                        var Id = "ddl-" + (++Sitepump.Interface.increment);
                                                    } while($(Id))
                                                    
                                                    ddl.setAttribute("id", Id);
                                                    
                                                    var ddlContainer = document.createElement("img");
                                                    ddlContainer.src = "http://www.netvibes.com/img/s.gif";
                                                    ddlContainer.width = 14;
                                                    ddlContainer.height = 14;
                                                    ddlContainer.style.verticalAlign = "middle";
                                                    ddlContainer.className = "placeHolder";
                                                    ddl.appendChild(ddlContainer);
                                                    a.appendChild(ddl);
                                                    ddl.onmousedown = this.onDropdownClick.bindAsEventListener(this);
                                                    
                                                  }
                                                  else
                                                  {
                                                    if(data.text)
                                                    {
                                                        if(data.icon)   
                                                        {
                                                            var ico = document.createElement("img");
                                                            ico.src = data.icon;
                                                            ico.style.marginRight = "3px";
                                                            ico.style.marginBottom = "-2px";
                                                            a.appendChild(ico);
                                                        }
                                                        
                                                        var span = document.createElement("span");
                                                        span.appendChild(document.createTextNode(options.staticText || data.text));
                                                        a.appendChild(span);
                                                    }
                                                    else if(data.image)
                                                    {
                                                       var imgEl =  document.createElement("img");
                                                       imgEl.src = data[0].image;
                                                       a.appendChild(imgEl); 
                                                    } 
                                                    
                                                    li.setAttribute("key", data[this.options.dataKey]); 
                                                  }
                                                  
                                                  li.appendChild(a);
                                                  
                                                  this.tabUL.appendChild(li);
                                                  this.createTabContent(name);
                                                  this.datas[name] = data;
                                                  if(typeof(content) != 'undefined')
                                                    this.setContent(name,content);
                                                  return li;
                                              },
                                              removeTab: function(name) { //Done
                                                  var tb = this.getTab(name);
                                                  Element.remove(tb);
                                              },
                                              onTabClicked: function(e) { //done
                                                  var li = Event.findElement(e, "LI");
                                                  if(li)
                                                    this.selectTab(li);
                                                  return false;
                                              },
                                              onDropdownClick:function(e){
                                                    var clickedLi = Event.findElement(e, "LI");

                                                    this.menuControl = $('minitabsOptions');
                                                    if (!this.menuControl) {
                                                        this.menuControl = this.createMenuControl();
                                                        Element.hide(this.menuControl);
                                                        Event.observe(document, 'mousedown', this.hideMenuControl.bindAsEventListener(this)); // free on window.unload
                                                    }
                                                    var ddl = $(clickedLi).getElementsByClassName('dropdown')[0];
                                                    if (Element.visible(this.menuControl) && this.menuControl.getAttribute("dropdownId") == ddl.id) {
                                                        this.hideMenuControl();
                                                        return;
                                                    }

                                                    this.showMenuControl(clickedLi);
                                                    this.menuControl.setAttribute("dropdownId", ddl.id);

                                                    Event.stop(e);
                                                    return false;
                                             
                                              },
                                              createMenuControl: function(){
                                                this.menuControl = document.createElement('ul');
                                                this.menuControl.setAttribute('id', 'minitabsOptions');
                                                this.menuControl.className = 'popupMenu';
                                                this.menuControl.style.position = 'absolute';
                                                document.getElementsByTagName('body').item(0).appendChild(this.menuControl);
                                                return this.menuControl;
                                              },
                                              hideMenuControl : function(e){
                                                //debugger;
                                                if (!this.menuControl)
                                                    return false;

                                                  if (e && Position.within(this.menuControl, Event.pointerX(e), Event.pointerY(e))) {
                                                      Event.stop(e);
                                                      return false;
                                                  }
                                                  Element.hide(this.menuControl);
                                                  var drops = $(this.tabUL).getElementsByClassName("dropped");
                                                  $A(drops).each(function(el) {
                                                      Element.removeClassName(el, "dropped");
                                                  });
                                                  if (window.gadget && typeof window.gadget.callback == 'function') {
		                                            gadget.body.style.height = '';
	                                                window.gadget.callback("onUpdateBody");
	                                              }
                                              },
                                              showMenuControl : function(seltab){
                                                    //debugger;    
                                                    var offset = Position.cumulativeOffset(seltab);

                                                    this.menuControl.innerHTML = '';
                                                    try {
                                                      var name = seltab.getAttribute('name');
                                                      var datas = this.datas[name];
                                                      var key = seltab.getAttribute('key');
                                                      var secTab;
                                                      for (var i=0; secTab=datas[i]; i++) {

                                                          //do not display the current selected item
                                                          if (secTab['text'] == key) continue;

                                                          var li = document.createElement("li");
                                                          var a = document.createElement("a");
                                                          if (secTab.icon)
                                                          {
                                                              var ico = document.createElement("img");
                                                              ico.src = secTab.icon;
                                                              ico.style.marginRight = "3px";
                                                              ico.style.marginBottom = "-2px";
                                                              a.appendChild(ico);
                                                          }
                                                          a.href = (secTab.url || "javascript:void(0)");
                                                          a.setAttribute('menuitemId', name);
                                                          a.appendChild(document.createTextNode(secTab.text));
                                                          a.setAttribute("key", secTab['text']);
                                                          if (!this.options.extendedAction && (datas.length -1) == i) {
                                                              Element.addClassName(a, 'last');
                                                          }
                                                          a.onclick = this.onMenuItemClick.bindAsEventListener(this);
                                                          li.appendChild(a);
                                                          this.menuControl.appendChild(li);
                                                      }
                                                      
                                                      if (this.options.extendedAction) {
                                                          var li = document.createElement("li");
                                                          var a = document.createElement("a");
                                                          a.href = "javascript:void(0)";
                                                          Element.addClassName(a, 'action');
                                                          a.setAttribute('menuitemId', tabName);
                                                          a.appendChild(document.createTextNode(this.options.extendedAction));
                                                          a.onclick = this.eventExtendedActionClicked.bindAsEventListener(this);
                                                          li.appendChild(a);
                                                          this.menuControl.appendChild(li);
                                                      }
                                                      
                                                    } catch(e) {}
                                                    
                                                    
                                                    var d = Element.getDimensions(seltab);

                                                    this.menuControl.style.left = (offset[0] + 0)+'px';
                                                    this.menuControl.style.top  = (offset[1] + 0 + d.height)+'px'; 

                                                    // Ensures popup's min-width is the width of the tab
                                                    this.menuControl.style.width = "auto";
                                                    var menuWidth = Element.getDimensions(this.menuControl).width;
                                                    var menuWidth = Element.getDimensions(this.menuControl).width;
                                                    if (menuWidth < d.width) {
                                                        var c = 6;
                                                        if (BrowserDetect.browser == "Explorer") c = 5;
                                                        this.menuControl.style.width = d.width-c + "px";
                                                    }
                                                    
                                                    Element.show(this.menuControl);
                                                    
                                                    var drops = $(this.tabUL).getElementsByClassName("dropped");
                                                    $A(drops).each(function(el) {
                                                      Element.removeClassName(el, "dropped");
                                                    });
                                                    Element.addClassName(seltab, 'dropped'); 
                                              
                                              },
                                              onMenuItemClick : function(e) {
                                                var a = Event.findElement(e, "A");
                                                var menuname = a.getAttribute('menuitemId');
                                                var subMenuItem = this.getTab(menuname);
                                                var key = 'text';
                                                var data = this.datas[menuname].find(function(el) { return el[key] == a.getAttribute('key')});
                                                var swapped = false;
                                                if(data.swapTabs == true)
                                                {                                                    
                                                    var lis = this.tabUL.getElementsByTagName('li');
                                                    for (var i=0,li; li=lis[i]; i++) {
                                                      
                                                        if(li.getAttribute('key') == data.text)
                                                        {
                                                            var mnu_name = subMenuItem.getAttribute('name');
                                                            subMenuItem.setAttribute('name',li.getAttribute('name'));
                                                            li.setAttribute('name',mnu_name);
                                                            
                                                            var mnu_key = subMenuItem.getAttribute('key');
                                                            subMenuItem.setAttribute('key',li.getAttribute('key'));
                                                            li.setAttribute('key',mnu_key);
                                                            
                                                            var litext = subMenuItem.getElementsByTagName("span")[0].innerHTML;
                                                            subMenuItem.getElementsByTagName("span")[0].innerHTML = li.getElementsByTagName("span")[0].innerHTML;
                                                            li.getElementsByTagName("span")[0].innerHTML = litext;  
                                                            swapped = true;
                                                            break;
                                                        }
                                                    }
                                                }
                                                
                                                if(!swapped)
                                                {
                                                    subMenuItem.getElementsByTagName("span")[0].innerHTML = data.text;
                                                      
                                                    if (data.icon) {
                                                        subMenuItem.getElementsByTagName("img")[0].src = subMenuItem.icon;
                                                    }
                                                    subMenuItem.setAttribute("key", a.getAttribute('key'));
                                                    this.fireTabChanged('activeTabChange');                                                    
                                                }
                                                this.selectTab(subMenuItem,true,swapped);
                                                this.hideMenuControl();
                                                Event.stop(e);
                                                return false;
                                              },
                                              selectTab : function(tabItem,fire,swapTabs) {
                                              
                                                  tabItem = this.getTab(tabItem);
                                                  
                                                  var name = tabItem.getAttribute('name');
                                                  if (this.selectedTab && 
                                                      (this.selectedTab.getAttribute('name') == name) &&
                                                      !swapTabs) {
                                                      return; 
                                                  }

                                                  var lis = this.tabUL.getElementsByTagName('li');
                                                  for (var i=0, li; li=lis[i]; i++) {
                                                      Element.removeClassName(li, 'selected');                                                      
                                                  }
      
                                                  Element.addClassName(tabItem, 'selected');
                                                  
                                                  var s = $(tabItem);
                                                  var dropdowns = s.getElementsByClassName('dropdown'); 
                                                      $A(dropdowns).each( function(el) {Element.show(el)} );
                                                  
                                                  var content;
                                                  
                                                  for (var i=0; content=this.contents[i]; i++) {
                                                        // For Safari with iframe content, prevents iframe to be reloaded
                                                        if (BrowserDetect.browser=="Safari" && content.getElementsByTagName("iframe").length) {
                                                            if (name==content.getAttribute('name')) {
                                                                content.style.visibility = "visible";
                                                                content.style.position = "static";
                                                            } else {
                                                                var frame = content.getElementsByTagName("iframe")[0];
                                                                content.style.width = frame.contentWindow.innerWidth+"px";
                                                                content.style.visibility = "hidden";
                                                                content.style.position = "absolute";
                                                                content.style.left = "0px";
                                                                content.style.top = "0px";
                                                            }
                                                        } else {
                                                            if (name==content.getAttribute('name'))  Element.show(content); else  Element.hide(content);
                                                        }
                                                  }

                                                  this.selectedTab = tabItem;
                                                  this.selectedIndex = tabItem.getAttribute('index');
                                                  if(!fire) return;
                                                  this.fireTabChanged('activeTabChange');
                                              },
                                              hide: function() { //done
                                                  Element.hide(this.tabDiv);
                                              },
                                              show: function() { //done
                                                  Element.show(this.tabDiv);
                                              },
                                              hideTabUL: function() { //done
                                                  Element.hide(this.tabUL);
                                              },
                                              showTabUL: function() { //done
                                                  Element.show(this.tabUL);
                                              },
                                              reload: function() { //done
                                                  this.fireTabChanged('activeTabChange');
                                              },
                                              getTabContent: function(name) {
                                                  if (typeof name == 'number') {
                                                      return this.contents.find( function(element) 
                                                                                 {
                                                                                    return element.getAttribute("index") == name;} 
                                                                                 );
                                                  }
                                                  return this.contents.find( function(element) 
                                                                            {
                                                                                return element.getAttribute("name") == name;
                                                                            } );
                                              },
                                              appendContent: function(name, content) {
                                                  
                                                  var tabContentArea = this.getTabContent(name);
                                                  if (tabContentArea) {
                                                      if (typeof content == 'string') {
                                                            
                                                          var div = document.createElement('div');  
                                                          div.innerHTML = content;
                                                          tabContentArea.appendChild(div);
                                                      } 
                                                  }
                                                  if (window.gadget && typeof window.gadget.callback == 'function') {
                                                      window.gadget.callback('onUpdateBody');
                                                  }
                                                                                                 
                                              },
                                              setContent: function(name, content) {
                                                  var tabContentArea = this.getTabContent(name);
                                                  if (tabContentArea) {
                                                      if (typeof content == 'string') {
                                                          tabContentArea.innerHTML = content;
                                                      } else {
                                                          tabContentArea.innerHTML = '';
                                                          tabContentArea.appendChild(content);
                                                      }
                                                  }
                                                  if (window.gadget && typeof window.gadget.callback == 'function') {
                                                      window.gadget.callback('onUpdateBody');
                                                  }
                                              },
                                              getTab: function(name) { //done
                                                  if (typeof name == 'string' || typeof name == 'number') {
                                                      var lis = this.tabUL.getElementsByTagName('li');
                                                      for (var i=0, li; li=lis[i]; i++) {
                                                          if (typeof name == 'number' && name == i) return li;
                                                          if (name == li.getAttribute('name')) return li;
                                                      }
                                                  }
                                                  return name; 
                                              },
                                              listen: function(name, listener) { 
                                                  if (!this.listeners) this.listeners = [];
                                                  this.listeners.push([name, listener]);
                                              },
                                              fireTabChanged: function(event) { //done
                                                  if (!this.listeners) return;

                                                  var selTab = this.selectedTab;
                                                  var selTabName = this.datas[selTab.getAttribute('name')];
                                                  if (selTabName.length) {
                                                      var dataKey = this.options.dataKey;
                                                      selTabName = selTabName.find(function(el) { return el[dataKey] == selTab.getAttribute('key')});
                                                  }
                                                  this.listeners.each(function(listener) {
                                                      if (listener[0] == event && typeof(listener[1]) == 'function')
                                                          listener[1](selTab.getAttribute('name'), selTabName);
                                                  });
                                              },
                                              createTabContent: function(name, index) {
                                                var content = document.createElement("div");
                                                content.className = this.options.tabContentClass;
                                                content.setAttribute("name", name);
                                                content.innerHTML = "Loading ...";
                                                this.tabDiv.appendChild(content);

                                                if (!this.contents) this.contents = [];
                                                this.contents.push(content);
                                                content.setAttribute("tabIndex", this.contents.length-1);
                                            },
                                            destroy: function() {
                                                Event.stopObserving(document, 'mousedown', this.hideMenuControl);
                                            } 
                                        }


Sitepump.Interface.Pager = Class.create();
Sitepump.Interface.Pager.prototype = {

  initialize : function(options)
  {
      this.gadget = options.gadget;
      this.pageSize = parseInt(options.pageSize);
      this.startIndex = parseInt(options.startIndex);
      this.callback = options.callback;
      this.pageData = options.pageData;
      this.pagerContaier = options.pagerContaier;
      this.createPager();
  },
  createPager: function() {
    
    var pager = document.createElement("div");
    pager.className = 'sp-pager';
		
		if (this.startIndex > 0) {
		  var prev = document.createElement("a");
		  prev.className = 'previous';
		  prev.style.cssText = 'float: none; margin: 15px; cursor: hand';
		  prev.href = '#';//'Javascript:void(0);';
		  prev.innerHTML = "Prev";
		  prev.onclick = ( function() {
		    this.onChange(this.startIndex - this.pageSize);
		    return false;
		  } ).bind(this);
          pager.appendChild(prev);
		}
		
		if (this.startIndex < this.pageData.length - this.pageSize) {
		  var next = document.createElement("a");
		  next.className = 'next';
		  next.style.cssText = 'float: none; margin: 15px; cursor: hand';
		  next.href = '#';//'Javascript:void(0);';
		  next.innerHTML = "Next";
		  next.onclick = ( function() {
		    this.onChange(this.startIndex + this.pageSize);
		    return false;
		  } ).bind(this);
          pager.appendChild(next);	
		}
		
		// fix a problem with float on the bottom of the module 
		//when calculating innerHeight
		//var fix = document.createElement("div");
		//fix.innerHTML = '<p style="padding:0;margin:0;line-height:0;height:0;clear:both"></p>';
		//pager.appendChild(fix);

    if(this.pagerContaier)
        this.pagerContaier.appendChild(pager);
    return pager;
  }
}

sitePump.Gadget = Class.create();
sitePump.Gadget.prototype = {
                            initialize : function()
                            {
                                this.id = '';
                                this.environment = null;
                                this.data = {};
                                this.preferences = [];
                                this.intervals = {};
                                this.editBox = null;
                                this.html = {};
                                this.title = '';
                                this.metas = {};
                                this.inline = false;
                                this.methodCalls = {};
                                this.debugMode = false;
                            },
                            appendContent : function(content)
                            {
                                 if (typeof content == 'string') {
                                  var node = document.createElement("div");
                                  node.innerHTML = content;
                                  this.body.appendChild(node);
                                 }
                                 else
                                 {
                                    this.body.appendChild(content);
                                 }   
                                 
                                 this.registerMethodCall('onUpdateBody');       
                            },
                            createElement : function(eleName)
                            {
                                if (eleName == 'script' ) return false; 
                                var el = document.createElement(eleName);
                                return sitePump.$element(el); 
                                
                            },
                            setTitle : function(title)
                            {
                                this.title = title;
                                if (this.html['title'])
                                  this.html['title'].setHTML(title);
                                
                            },
                            openURL : function(url)
                            {
                                window.open(url);
                            },
                            appendText: function(element,text) {
                                var textnode = document.createTextNode(text);
                                return element.appendChild(textnode);
                            },
                            setContent: function(content) {
                                this.body.setContent(content);
                                this.registerMethodCall('onUpdateBody');
                            },
                            registerMethodCall: function(fnname) {
                                try {
                                  if (this[fnname]) this[fnname].apply(this);
                                  if (this.methodCalls[fnname]) this.methodCalls[fnname].apply(this);
                                } catch(e) {
                                  sitePump.log(e);
                                }
                                if(this.environment.registerMethodCall) 
                                    this.environment.registerMethodCall(fnname); 
                            },
                            getGadgetMeta: function() {
                                if(this.metas['author']) {
                                  var metaContent = this.createElement('p');
                                  
                                  if(this.metas['website']) {
                                    var content = 'Gadget by <strong><a href="' + this.metas['website'] + '" rel="author">' + this.metas['author'] + '</a></strong>';
                                  } else {
                                    var content = 'Gadget by <strong>' + this.metas['author'] + '</strong>';
                                  }
                                  if(this.metas['version']) {
                                    content += ' - version <strong>' + this.metas['version'] + '</strong>';
                                  }
                                  metaContent.setStyle('padding', '10px');
                                  metaContent.setStyle('text-align', 'right');
                                  metaContent.setHTML(content);
                                
                                  return metaContent;
                                }
                                return false;
                            },  
                            fireOnLoad: function()
                            {
                                this.initPrefs();
                                if(gadget.data.feedUrl) this.setPrefValue('url1',this.data.feedUrl);
                                this.createEditBox();
                                this.html['editForm'].updateValues('url1',this.getPrefValue('url1'));
                                this.registerMethodCall('onLoad');
                            },
                            createEditBox : function()
                            {
                                if (this.editBox)
                                {
                                  var editForm = this.editBox;
                                } else
                                {
                                  var newEditBox = new sitePump.Controls.editBox( { gadget: this } );
                                  var editform = newEditBox.getEditForm();
                                  var editBox = $('gadgetEdit');
                                  this.editBox = editform;
                                  editBox.appendChild(editform); 
                                  this.html['editForm'] = newEditBox;
                                  var gadgetMetadata = this.getGadgetMeta();
                                  if(gadgetMetadata) editBox.appendChild(gadgetMetadata);
                                  
                                }
                            },
                            initPrefs: function()
                            {
                                for(var i = 0; i < this.preferences.length; i++)
                                {
                                  var pref = this.preferences[i];
                                  
                                  if (typeof pref.name == "undefined") 
                                    continue; 
                                  
                                  if (pref.defaultvalue) 
                                    pref.defaultValue = pref.defaultvalue; 
                                   
                                  if (typeof pref.defaultValue != "undefined") 
                                      this.data[pref.name] = pref.defaultValue;
                                  else 
                                      this.data[pref.name] = null;
                                }
                            },
                            getPref: function(name) {
                                for(var i = 0; i < this.preferences.length; i++) {
                                  if(this.preferences[i].name == name) return this.preferences[i];
                                }
                                return null;
                            },
                            setPrefs: function(schema) {
                                this.preferences = schema;
                            },
                            addPrefs: function(pref) {
                                this.preferences.push(pref);
                            },
                            setPrefsArray: function(prefs) {
                                 this.setPrefs( [] ); // empty preferences array
                                for(var i = 0; i < prefs.length; i++) {
                                  var preference = {};
                                  for(var j = 0; j < prefs[i].attributes.length; j++) {
                                    var name = prefs[i].attributes[j]['nodeName'];
                                    var value = prefs[i].attributes[j]['nodeValue'];
                                    preference[name] = value;
                                  }
                                  if (preference.type == 'listbox') {
                                    var options = prefs[i].getElementsByTagName("option");
                                    preference.options = [];
                                    for(var j = 0; j < options.length; j++) {
                                      var option = {};
                                      if ( options[j].attributes[0]['value'] ) option[options[j].attributes[0]['name']] = options[j].attributes[0]['value'];
                                      if ( options[j].attributes[1]['value'] ) option[options[j].attributes[1]['name']] = options[j].attributes[1]['value'];
                                      preference.options.push(option)
                                    }
                                  }
                                  this.addPrefs(preference);
                                }
                            },
                            setMetasArray: function(metas) {
                                var metasArray = [];
                                for(var i = 0; i < metas.length; i++)
                                {
                                  if(metas[i].name) 
                                    var name = metas[i].name;
                                  else 
                                    var name = metas[i].attributes[0]['nodeValue'];
                                  if(metas[i].content) 
                                    var value = metas[i].content;
                                  else 
                                    var value = metas[i].attributes[1]['nodeValue'];
                                  if(value == 'false') 
                                    value = false; 
                                  else if(value == 'true') 
                                    value = true; // booleanise
                                  metasArray[name] = value;
                                }
                                this.setMetas(metasArray);
                            },
                            
                            setMetas: function(metas) {
                                this.metas = metas;
                                if(this.metas.debugMode) this.setDebugMode(this.metas.debugMode,true);
                                //if(this.metas.autoRefresh) this.setAutoRefresh(this.metas.autoRefresh);
                            },
                            setDebugMode: function(debugMode)
                            {
                                this.debugMode = debugMode;
                            },
                            getPrefValue: function(name) {
                                if (this.data[name] != undefined) return this.data[name];
                                return null;
                            },
                            setPrefValue: function(name, value) {
                                this.data[name] = value;
                                var pref = this.getPref(name);
                                if (this.environment && this.environment.saveData) 
                                    this.environment.saveData('setPrefValue',name,value);
                                return value;
                            },
                            saveValues: function(callback) {
                                if (this.environment && this.environment.saveDatas) {
                                  this.environment.saveDatas(callback);
                                } else {
                                  callback();
                                }
                            },
                            
                            setGadgetData : function(xd)
                            {
                                var preferences = this.preferences;
                                for(var i = 0; i < preferences.length; i++) 
                                {
                                    this.data[preferences[i].name] = preferences[i].defaultValue;
                                }                                                                
                            },
                            setFavIcon: function(url) {
                               var uri = SP_FAVICON + encodeURIComponent(url);
                               if(this.html['icon']) this.html['icon'].setHTML('<img width="16" height="16" src="' + uri + '");"/>');
                            },
//                            setFavIcon: function(url) {
//                                var uri = SP_FAVICON + encodeURIComponent(url);
//                                if(this.html['header']){
//                                  //this.html['icon'].setHTML('<img width="16" height="16" src="http://www.google.com/favicon.ico"/>');  
//                                new Ajax.Request(uri, {method : 'GET',
//                                                       onComplete: this.onFavIconLoaded.bind(this)}
//                                                 );
//                                }                   
//                            },
                            onFavIconLoaded: function(transport){
                               if($('gadgetExpand')){
                                $('gadgetExpand').src = transport.responseText;
                                return; 
                               } 
                               var backimg = document.createElement('img');
                               backimg.id ='gadgetExpand';
                               $('gadgetHeader').insertBefore(backimg,$('gadgetTitle'));
                               //$('gadgetExpand').style.cssText="float:left;margin-left:3px;margin-top:2px;width:16px;height:16px;visibility:visible;background-image:url("+transport.responseText+");background-repeat:no-repeat;";
                               $('gadgetExpand').style.cssText="float:left;margin-left:3px;margin-top:2px;width:16px;height:16px;visibility:visible;";
                               $('gadgetExpand').src = transport.responseText;
                               $('gadgetExpand').style.display='block';
                            },
                            getBool: function(val){
                              if(val == 'true' || val == true) val = 1;
                              val = parseInt(val);
                              val = isNaN(val) ? 0 : val;
                              return (val == 0) ? false : true;
                            },
                            log : function(value,debugMode)
                            {
                                if(this.debugMode || debugMode)
                                    sitePump.log(value);
                                else
                                    sitePump.log('please set the debug mode tp true');
                            }
                        }
sitePump.Controls = {};
sitePump.Controls = Sitepump.Interface;
sitePump.Gadget.Element = new Object();
//sitePump.Gadget.Element.Methods = Class.create();
sitePump.Gadget.Element.Methods={
                                    appendContent : function(element,content)
                                    {
                                        if (typeof content == 'string')
                                        {
                                          //create div to append the string content to element   
                                          var node = document.createElement("div");
                                          node.innerHTML = content;
                                          return element.appendChild(node);
                                        }
                                        return element.appendChild(content);
                                    },
                                    appendText : function(element,text)
                                    {
                                        var node = document.createTextNode(text);
                                        return element.appendChild(node);
                                    },
                                    getElemenetsByTagName : function(element,tagName)
                                    {
                                        return false;
                                    },
                                    setText : function(element,text)
                                    {
                                         element[(typeof element.innerText != 'undefined') ? 'innerText' : 'textContent'] = text;
                                         return element;
                                    },
                                    setHTML : function(element,html)
                                    {
                                        element.innerHTML = html;
                                        return element;
                                    },
                                    setContent : function(element,content)
                                    {
                                        if (typeof content == 'string') {
                                          element.setHTML(content);
                                        } else if (typeof content == 'object') {
                                          element.empty();
                                          element.appendChild(content);
                                        }
                                        return element;
                                    },
                                    empty: function(element)
                                    {
                                        element.innerHTML = "";
                                        return element;
                                    },
                                    clearStyle: function(element)
                                    {
                                        element.style.cssText ="";
                                    },
                                    appendTab : function(element,tab)
                                    {
                                        tab.appendTo(element);
                                    },
                                    /// v1trstart
                                    getParent : function(element)
                                    {
                                        return element.parentNode;
                                    },
                                    getChildren : function(element)
                                    {
                                        return element.childNodes;
                                    },
                                     setStyle: function(element,property,value)
                                    {
                                         var elementStyle = element.style;
                                         elementStyle[(property == 'float' || property == 'cssFloat') ?
                                        (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :
                                        property] = value;
                                       // element.style = elementStyle;
                                        return element;
                                    },
                                    toggle: function(element) {
                                        element = $(element);
                                        Element[Element.visible(element) ? 'hide' : 'show'](element);
                                        return element;
                                      },

                                      hide: function(element) {
                                        $(element).style.display = 'none';
                                        return element;
                                      },

                                      show: function(element) {
                                        $(element).style.display = '';
                                        return element;
                                      },

                                      remove: function(element) {
                                        element = $(element);
                                        element.parentNode.removeChild(element);
                                        return element;
                                      },
                                      hasClassName: function(element, className) {
                                        if (!(element = $(element))) return;
                                        var elementClassName = element.className;
                                        return (elementClassName.length > 0 && (elementClassName == className ||
                                          new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
                                      },

                                      addClassName: function(element, className) {
                                        if (!(element = $(element))) return;
                                        if (!element.hasClassName(className))
                                          element.className += (element.className ? ' ' : '') + className;
                                        return element;
                                      },

                                      removeClassName: function(element, className) {
                                        if (!(element = $(element))) return;
                                        element.className = element.className.replace(
                                          new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
                                        return element;
                                      },
                                      toggleClassName: function(element, className) {
                                        if (!(element = $(element))) return;
                                        return element[element.hasClassName(className) ?
                                          'removeClassName' : 'addClassName'](className);
                                      },
                                      getElementsByClassName :function(element, className) {
    
                                    className = className.toString().strip();
                                    var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
                                    if (!classNames && !className) return elements;

                                    var nodes = $(element).getElementsByTagName('*');
                                    className = ' ' + className + ' ';

                                    for (var i = 0, child, cn; child = nodes[i]; i++) {
                                      if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
                                          (classNames && classNames.all(function(name) {
                                            return !name.toString().blank() && cn.include(' ' + name + ' ');
                                          }))))
                                        elements.push(Element.extend(child));
                                    }
                                    return elements;
                                  },
                                   setTooltip : function (element,tooltip)
                                   {
                                        element.onmouseover = element.showTooltip.bindAsEventListener(this,tooltip);
                                        element.onmouseout = element.hideTooltip.bindAsEventListener(element);
                                         return element;
                                   },
                                   showTooltip: function(a,e,tooltip)
	                                {
	                                //debugger;
                        		    if(tooltip!="")
                        		    {
		                            var bodyWidth = Math.max(document.body.clientWidth,document.documentElement.clientWidth) - 20;
                            	    
		                            if(!dhtmlgoodies_tooltip){
		                               
			                           dhtmlgoodies_tooltip = document.createElement('DIV');
			                            dhtmlgoodies_tooltip.id = 'dhtmlgoodies_tooltip';
			                          dhtmlgoodies_tooltipShadow = document.createElement('DIV');
			                            dhtmlgoodies_tooltipShadow.id = 'dhtmlgoodies_tooltipShadow';
                            			
			                            document.body.appendChild(dhtmlgoodies_tooltip);
			                            document.body.appendChild(dhtmlgoodies_tooltipShadow);	
		                            }
    		                        
                            		
		                            dhtmlgoodies_tooltip.style.display='block';
		                            dhtmlgoodies_tooltipShadow.style.display='block';
                            		
		                            var st = Math.max(document.body.scrollTop,document.documentElement.scrollTop);
		                          //  if(navigator.userAgent.toLowerCase().indexOf('safari')>=0)st=0; 
		                            var leftPos = e.clientX ;
		                            var topPos = e.clientY + 10 + st;
		                            dhtmlgoodies_tooltip.style.width = null;	// Reset style width if it's set 
		                            dhtmlgoodies_tooltip.innerHTML =tooltip;
		                            dhtmlgoodies_tooltip.style.cssText+= ";left:" + leftPos + "px;top:" + topPos + "px;";
                        		    dhtmlgoodies_tooltipShadow.style.cssText+= ";left:" + (leftPos+dhtmlgoodies_shadowSize) + "px;top:" + (topPos + dhtmlgoodies_shadowSize) + "px;";
                            		
		                            if(dhtmlgoodies_tooltip.offsetWidth>dhtmlgoodies_tooltipMaxWidth){	/* Exceeding max width of tooltip ? */
			                            dhtmlgoodies_tooltip.style.width = dhtmlgoodies_tooltipMaxWidth + 'px';
		                            }
                            		
		                            var tooltipWidth = dhtmlgoodies_tooltip.offsetWidth;		
		                            if(tooltipWidth<dhtmlgoodies_tooltipMinWidth)tooltipWidth = dhtmlgoodies_tooltipMinWidth;
                            		
		                            dhtmlgoodies_tooltip.style.width = tooltipWidth + 'px';
		                            dhtmlgoodies_tooltipShadow.style.width = dhtmlgoodies_tooltip.offsetWidth + 'px';
		                            dhtmlgoodies_tooltipShadow.style.height = dhtmlgoodies_tooltip.offsetHeight + 'px';		
                            		
		                            if((leftPos + tooltipWidth)>bodyWidth){
			                            dhtmlgoodies_tooltip.style.left = (dhtmlgoodies_tooltipShadow.style.left.replace('px','') - ((leftPos + tooltipWidth)-bodyWidth))-10 + 'px';
			                            dhtmlgoodies_tooltipShadow.style.left = (dhtmlgoodies_tooltipShadow.style.left.replace('px','') - ((leftPos + tooltipWidth)-bodyWidth) + dhtmlgoodies_shadowSize)-10 + 'px';
		                            }
		                            }
	                                },
                                   hideTooltip : function()
                                    {
                                        
                                        if(dhtmlgoodies_tooltip)
                                        {
                                            dhtmlgoodies_tooltip.style.display='none';
                                            dhtmlgoodies_tooltipShadow.style.display="none";
                                        }
                                    },
                                    getmouseposition : function(e)
                                    {
                                        if(document.getElementById)
                                        {
                                            var iebody=(document.compatMode && 
        	                                    document.compatMode != 'BackCompat') ? 
        		                                    document.documentElement : document.body;
                                            
                                            pagex = (isapple == 1 ? 0:(ie5)?iebody.scrollLeft:window.pageXOffset);
                                            pagey = (isapple == 1 ? 0:(ie5)?iebody.scrollTop:window.pageYOffset);
                                            mousex = (ie5)?event.x:(ns6)?clientX = e.clientX:false;
                                            mousey = (ie5)?event.y:(ns6)?clientY = e.clientY:false;

                                            var lixlpixel_tooltip = document.getElementById('dhtmlgoodies_tooltip');
                                            lixlpixel_tooltip.style.left = (mousex+pagex+offsetx) + 'px';
                                            lixlpixel_tooltip.style.top = (mousey+pagey+offsety) + 'px';
                                        }
                                    }
                                    /// v1trend
                                }

Object.extend(sitePump.Gadget.Element, sitePump.Gadget.Element.Methods);
sitePump.Gadget.Element.extend = function(element) {
  if (!element) return;
  if (_nativeExtensions) return element;

    if (!element || element._extendedByPrototype ||
        element.nodeType != 1 || element == window) return element;
    
  if (!element._extended && element.tagName && element != window) {
    var methods = sitePump.Gadget.Element.Methods, cache = sitePump.Gadget.Element.extend.cache;
    for (property in methods) {
      var value = methods[property];
      if (typeof value == 'function')
      {
        try{
        element[property] = cache.findOrStore(value);}catch(e){}
       }
    }
  }

  element._extended = true;
  return element;
}

sitePump.Gadget.Element.extend.cache = {
  findOrStore: function(value) {
  //[this].concat($A(arguments))
    return this[value] = this[value] || function() {
      return value.apply(null,[this].concat($A(arguments)) );
    }
  }
}

sitePump.$element = function(el){
  if (el) {
    if (!el.isUwaExtended) {
        sitePump.Gadget.Element.extend(el)
      el.isUwaExtended = true;
    }
    return $(el);
    //return el;
  }
}

Element.addMethods(sitePump.$element);

if (typeof sitePump.proxies == "undefined") {
  
  sitePump.proxies = {
    'content' : SP_PATH + '/api/contentProxy.aspx',
    'feed' : SP_PATH + '/API/feedReader.aspx'
  }
  
}

if (typeof sitePump.Standalone == "undefined") sitePump.Standalone = {};

sitePump.Standalone.Proxy = function(url, request) {

  var v = 'res';
  v += Math.round(1000*1000*Math.random());
  eval(v + '= false');
  url += '&variable=' + v ;

  var script = document.createElement('script');
  script.setAttribute('type', 'text/javascript');
  script.src = url;
  var head = document.getElementsByTagName('head')[0];
  var scriptTag = head.appendChild(script);

  if (typeof request.onComplete == "undefined") sitePump.log('no callback');

  var fn = request.onComplete;

  var closure = function(){return function(re){fn(re); } }();
    
  var waitForResponse = setInterval( ( function() {
    eval('var res = ' + v);
    if (res){
      try{closure(res);} catch(e) {sitePump.log(e);}
      scriptTag.parentNode.removeChild(scriptTag);
      clearInterval(waitForResponse);
    }
  } ).bind(this), 100);

}

sitePump.Data ={
            
            getFeed:function(url, callback)
            {
                return this.request(url, { method : 'GET', 
                                           proxy: 'feed', 
                                           type: 'feed', 
                                           onComplete: callback } );
            },
            getXml:function(url, callback)
            {
                 return this.request(url, { method : 'GET', 
                                            proxy: 'content', 
                                            type: 'xml', 
                                            onComplete: callback } );
            },
            getJson:function(url, callback)
            {
                return this.request(url, { method : 'GET', 
                                           proxy: 'content', 
                                           type: 'json', 
                                           onComplete: callback } );
            },
            getText:function(url, callback)
            {
                return this.request(url, { method : 'GET', 
                                           proxy: 'content', 
                                           type: 'text', 
                                           onComplete: callback } );
            },
            request:function(url, request)
            {
                //debugger;
                if (typeof request == 'undefined') request = {};
                if (typeof request.method == 'undefined') request.method = 'GET';
                if (typeof request.type == 'undefined') request.type = 'text';
                
                if (sitePump.proxies[request.proxy])
                {
                  url = sitePump.proxies[request.proxy] + '?url=' + encodeURIComponent(url);
                  if (request.proxy == "feed" && request.shortFeed != false) url += "&rss=1";
                }
                
                if (request.type && request.proxy) {
                  url += '&type=' + request.type;
                }
                
                if (request.cache)
                {
                  url += '&cache=' + request.cache;
                }
                switch(request.type) {
                  
                  case 'json': 
                  case 'feed':
                    
                      if (this.Standalone) 
                        return sitePump.Standalone.Proxy(url, request);  
                      else  
                      {  
                          var callback = request.onComplete;
                          var context = request.context;
                          request.onComplete =  function(args)
                          {
                            try {
                              eval("var res = " + args.responseText);
                              if(typeof callback == "function") callback(res);
                            } catch(e) {
                              sitePump.log(e);
                            }
                            
                          };
                          
                          return new Ajax.Request(url, request);
                      }  
                  case 'xml':
                    var callback = request.onComplete;
                    request.onComplete = function(args)
                    {
                      if(typeof callback == "function") callback(args.responseXML)  
                    }
                    return new Ajax.Request(url, request);
                  
                  default:
                  case 'text':
                  case 'html':
                    var callback = request.onComplete;
                    var context = request.context;
                    request.onComplete = function(args) {
                      if(typeof callback == "function") callback(args.responseText);
                    }
                    return new Ajax.Request(url, request);
                }
            }
        };
sitePump.Environment = Class.create(); 
sitePump.Environment.prototype = {
                                
                              start: function() {
                                if (document.body) {
                                  this.registerMethodCall('createGadgetBody');
                                  this.clearExecInterval('start');
                                  this.isLoaded = true;
                                  return true;
                                }
                                return false;
                              },
                              getGadget: function()
                              {
                                //debugger;
                                if (this.gadget) {
                                  var gadget = this.gadget;
                                } else {
                                  var gadget = new sitePump.Gadget();
                                  this.gadget = gadget;
                                  gadget.environment = this;
                                  
                                  if(this.spBox)
                                  {
                                    gadget.spBox = this.spBox;
                                    gadget.body = sitePump.$element(document.getElementById('gadgetContent' + this.spBox.bi));
                                    gadget.setGadgetData(this.spBox.box.xd);
                                  }
                                  gadget.setGadgetData();
                                  this.setExecInterval('pump',this.environmentPumped, 100, true);
                                }
                                //alert(gadget);
                                return gadget;
                              },
                              environmentPumped : function(){
                                    if (this.isLoaded) {
                                        
                                        this.registerMethodCall('onEnvironmentPumped');
                                        this.pumped = true;
                                        this.clearExecInterval('pump');
                                    }    
                              },
                                  
                              pumpGadget: function() {
                                this.setExecInterval('launch', function() {
                                  if (this.isLoaded && this.gadget && this.pumped) {
                                      this.gadget.fireOnLoad();
                                      this.clearExecInterval('launch');
                                      if (this.query && this.query != '' && this.gadget.onSearch) {
                                          this.gadget.onSearch(this.query); // to move in a callback ? seems used in frame env ...
                                      } 
                                  }
                                }, 100, true);
                              },
                              registerMethodCall: function(fnname) {
                                try {
                                  if (this[fnname]) return this[fnname].apply(this);
                                  if (this.methodCalls[fnname]) return this.methodCalls[fnname].apply(this);
                                } catch(e) {
                                  this.log(e);
                                }
                                return false;
                              },
                            setExecInterval: function(fnname, fn, interval, makeCall) {
                                this.clearExecInterval(fnname);
                                fn = fn.bind(this);
                                this.intervals[fnname] = setInterval(fn, interval);
                                if (makeCall) fn();
                            },
                            clearExecInterval: function(name) {
                                if (this.intervals[name]) { clearInterval(this.intervals[name]) }
                            },
                            setTimeouts: function(name, fn, delay, bind) {
                            this.clearTimeouts(name);
                            if(typeof bind == "undefined" || bind === true) fn = fn.bind(this);
                            this.timeouts[name] = setTimeout(fn, delay);
                          },
                          clearTimeouts: function(name) {
                            if (this.timeouts[name]) { clearTimeout(this.timeouts[name]) }                            
                          },
                          setFavIcon: function(url) {
                               var uri = SP_FAVICON + encodeURIComponent(url);
                               if(this.gadget.html['icon']) this.gadget.html['icon'].setHTML('<img width="16" height="16" src="' + uri + '");"/>');
                            },
//                          setFavIcon: function(url) {
//                              var uri = SP_FAVICON + encodeURIComponent(url);
//                              if(this.gadget.html['icon']){
//                              new Ajax.Request(uri, {method : 'GET',
//                                                       onComplete: this.onFavIconLoaded.bind(this)}
//                                               );
//                              }                   
//                            },                            
                          onFavIconLoaded: function(transport){
                              if($('gadgetExpand')){
                               $('gadgetExpand').src = transport.responseText;
                               return; 
                              } 
                              var backimg = document.createElement('img');
                              backimg.id ='gadgetExpand';
                              this.gadget.html['icon'].appendChild(backimg);
                              //$('gadgetExpand').style.cssText="width:16px;height:16px;visiblity:visible;background-position:0px 0px;background-image:url("+transport.responseText+");";
                              $('gadgetExpand').style.cssText="float:left;margin-left:3px;margin-top:2px;width:16px;height:16px;visibility:visible;";
                              $('gadgetExpand').src = transport.responseText;
                              $('gadgetExpand').style.display='block';
                          },
                          log: function(string) {
                            //alert(string);
                            if (this.debugMode) sitePump.log(string);
                        }
                    }
Object.extend(sitePump.Environment.prototype, {
  
initialize: function() {

this.gadget = false;
this.isLoaded = false;
this.pumped = false;
this.methodCalls = {};
this.query = ''; // where is it used ?
this.data = {};
this.debugMode = false;
this.intervals = {};
this.timeouts = {};
this.height = 200;
this.html = {};
this.setExecInterval('start', this.start, 100, true);
  
},

createGadgetBody: function() {
  // creating module header
  var gadgetHeader = document.createElement('div');
  gadgetHeader.setAttribute('id','gadgetHeader');
  gadgetHeader.className = 'headerGadget';
  gadgetHeader.innerHTML = 
      '<div class="edit"><a href="#">Edit</a></div>' +
      '<div class="ico" id="gadgetIcon" style="padding-left:3px">&nbsp;</div>' +
      '<div id="gadgetTitle" class="title">' + this.gadget.title + '</div>';
  
  // creating module content
  var gadgetContent = document.createElement('div');
  gadgetContent.setAttribute('id','gadgetContent');
  gadgetContent.className = 'gadgetContent';
  gadgetContent.innerHTML = document.body.innerHTML ;
  
  // creating edit content
  var editContent = document.createElement('div');
  editContent.setAttribute('id','gadgetEdit');
  editContent.style.display = 'none';
  editContent.className = 'gadgetEdit editContent';
  
  document.body.innerHTML = '';
  
  var gadgetInner = document.createElement('div');
  gadgetInner.setAttribute('id','gadgetInner');
  gadgetInner.className = 'gadgetInner';

  this.html['header'] = gadgetInner.appendChild(gadgetHeader);
  this.html['edit'] = gadgetInner.appendChild(editContent);
  this.html['body'] = gadgetInner.appendChild(gadgetContent);

  /*var gadgetContainer = document.createElement('div');
  gadgetContainer.setAttribute('id','gadgerContainer');  
  gadgetContainer.className = 'gadgetContainer';
  
  this.html['container'] = gadgetContainer.appendChild(gadgetInner);

  document.body.appendChild(gadgetContainer);*/
    
  	var fr=document.createElement("iframe");
	fr.setAttribute("id","thtm");
	fr.style.position="absolute";
	fr.width="0";
	fr.height="0";
	fr.scrolling="no";
	fr.frameBorder="0";
	fr.style.top="-5px";
	fr.style.left="-5px";
	this.thtmUrl = SP_PATH + '/ecoSystem/thtm.html';
	this.html["thtm"]= gadgetInner.appendChild(fr);
    document.body.appendChild(gadgetInner);
    
    this.html['title'] = document.getElementById('gadgetTitle'); // to refactor
    this.html['icon'] = document.getElementById('gadgetIcon'); // to refactor
       
    
},
  resizeGadget:function(){
    
    if(this.thtmUrl && this.gadget.id){
        var h=parseInt(document.body.offsetHeight);
        if(h>0&&h!=this.height){
            if(h>100||h>this.height){
                var B=0;
            }else{
                var B=1500;
            }
            this.height=h;
            this.setTimeouts("resizeFrame",
            function(){
                $("thtm").src=this.thtmUrl+"?action=resize&id="+this.gadget.id+"&height="+h;
                
            },B);
        }
    }
},
setLinkTarget: function() {
    //debugger;
    var links = this.gadget.body.getElementsByTagName('a');
    i = 0;
    while(links[i])
    {
        links[i].target = '_blank';
        i++;
    }
    
},
onUpdateBody: function() {
    this.setTimeouts('setLinkTarget', this.setLinkTarget, 100);
},
onEnvironmentPumped: function() {
  
  for (var el in this.html) {
    this.gadget.html[el] = sitePump.$element(this.html[el]);
  }
  //alert(this.gadget.html['header']);
  this.gadget.body = this.gadget.html['body'];
 // alert(this.gadget.html['header']._extendedByPrototype);
  var editLink = this.gadget.html['header'].getElementsByClassName('edit')[0];
 
  editLink.onclick = ( function(){
    if (this.html['edit'].style.display == 'none') 
      this.html['edit'].show();        
     else 
      this.html['edit'].hide();
    return false;} ).bindAsEventListener(this.gadget);
 
  var Infos = document.getElementsByTagName("meta");
  if(Infos && Infos.length) this.gadget.setMetasArray(Infos);
  
  var prefXml = document.getElementsByTagName("preference");
  if (prefXml && prefXml.length) this.gadget.setPrefsArray(prefXml);
  
  var favicon = this.gadget.data.favIcon;
  if(favicon)
    this.setFavIcon(favicon); 
  /*var links = document.getElementsByTagName('link');
  for(var i = 0; i < links.length; i++) {
    if(links[i].getAttribute('rel') == 'icon') {
      var favicon = links[i].getAttribute('href');
    }
  }
  if(favicon) {
    this.setFavIcon(favicon);
  }*/
  
  var doPumping = setTimeout(this.pumpGadget.bind(this), 100);
  this.resizeGadget();
  this.setExecInterval('resizingGadget', this.resizeGadget, 250);
}
});

sitePump.log = function(string) {
    //alert(string);
    if (window.console) console.log(string); // firebug, safari
    //else if (window.opera) opera.postError(string);
    //else if (window.widget) window.alert(string); // dashboard
    //else window.alert(string); // IE
}

// JScript File
sitePump.flash = Class.create ();
sitePump.flash.prototype =   {
                            initialize : function(id,G,isEmbed)
                            {
                                this.bi = id;
                                this.gadget = G;
                                this.isEmbed = isEmbed;
                                this.main();
                            },
                            main : function(e)
                            {
                                this.gadgetContent = $('gadgetContent');
                                if(this.isEmbed == 1){
                                    this.gadgetContent.innerHTML = this.gadget.data['code'];
                                    this.resize();
                                    return;
                                }
                            
                                this.url = this.gadget.getPrefValue('url');
                                this.height = this.gadget.getPrefValue('height');
                                this.width = this.gadget.getPrefValue('width');
                                this.params = '';
                                
                                var params =' '
                                if(this.url=="http://") return;
                                if(this.url!="")
                                {
                                    if(typeof(this.params)!="undefined" && this.params!="0") params = this.params ;
                                    var str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" id="flash' + this.bi +
                                            '" VIEWASTEXT height=' + this.height + ' width='+ this.width + '>' +
                                            '<param name=movie value="' + this.url+ '">'+
                                            '<param name=quality value=high>'+
                                            '<param name=wmode value=opaque>'+
                                            '<param name="swliveconnect" value="true">$#!$'+ 
                                            '<embed src="'+this.url+'" quality=high width=' + this.width + ' height='+ this.height + ' type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" wmode="opaque" name="flash' + this.bi +'" swliveconnect="true"'+
                                            '$!#$></embed>  </object>'
                                    
                                    if(params!=" ")
                                    {
                                        var arr = params.split('<param');
                                        params=" ";
                                        var paramObj="";
                                        for(var i=0; i < arr.length;i++)
                                        {
                                            if(arr[i]!="")
                                            {
                                             
                                                var reg = 'name="\\w*"';
                                                reg = new RegExp(reg);
                                                var temp = reg.exec(arr[i]);
                                                
                                                if(temp!=null)
                                                {
                                                    //params+=temp[0];
                                                    var ind = temp[0].indexOf('"');
                                                    var tmp1 = temp[0].substr(ind +1);
                                                    ind = tmp1.indexOf('"');
                                                    tmp1 = tmp1.substr(0,ind);
                                                    params+=" " +tmp1 + "=";
                                                    paramObj+="<param name=" + tmp1;
                                                }
                                                else
                                                {
                                                     var reg = "name='\\w*'";
                                                    reg = new RegExp(reg);
                                                    var temp = reg.exec(arr[i]);
                                                     if(temp!=null)
                                                     {
                                                        var ind = temp[0].indexOf("'");
                                                        var tmp1 = temp[0].substr(ind +1);
                                                        ind = tmp1.indexOf("'");
                                                        tmp1 = tmp1.substr(0,ind);
                                                        params+=" " + tmp1 + "=";
                                                        paramObj+=" <param name=" + tmp1;
                                                     }
                                                }
                                                
                                                var reg = 'value="\\S*"';
                                                reg = new RegExp(reg);
                                                var temp = reg.exec(arr[i]);
                                                
                                                if(temp!=null)
                                                {
                                                  //  params+=temp[0];
                                                    var ind = temp[0].indexOf('"');
                                                    var tmp1 = temp[0].substr(ind +1);
                                                    ind = tmp1.indexOf('"');
                                                    tmp1 = tmp1.substr(0,ind);
                                                    params+=tmp1
                                                    paramObj+=" value=" + tmp1 + " >";
                                                    
                                                }
                                                else
                                                {
                                                     var reg = "value='\\S*'";
                                                    reg = new RegExp(reg);
                                                    var temp = reg.exec(arr[i]);
                                                     if(temp!=null)
                                                     {
                                                     //   params+=temp[0];
                                                         var ind = temp[0].indexOf("'");
                                                        var tmp1 = temp[0].substr(ind +1);
                                                        ind = tmp1.indexOf("'");
                                                        tmp1 = tmp1.substr(0,ind);
                                                        params+= tmp1
                                                        paramObj+=" value=" + tmp1 + " >";
                                                    }
                                                }
                                            }
                                        }
                                        //debugger;
                                        str = str.replace("$!#$",params);
                                        str = str.replace("$#!$",paramObj);
                                    }
                                    else
                                    {
                                        str = str.replace("$!#$","");
                                        str = str.replace("$#!$","");
                                    }
                                    this.gadgetContent.innerHTML = str;
                                    this.obj = this.gadgetContent.getElementsByTagName("object")[0];
                                    this.resize();
                                    if($('transGadgetDiv'+this.obj.bi))
                                        document.body.removeChild($('transGadgetDiv'+this.obj.bi));
                                }
                            },
                            resize : function()
	                        {
	                            if(this.url=="http://") return;
	                            if(this.url!="" && typeof(this.url)!="undefined")
	                            {
	                            
	                             $('gadgetContent').firstChild.style.padding="0px"
	                             $('gadgetContent').style.padding="0px"
                                this.obj.style.width = "1px";
                                var dim = Element.getDimensions($('gadgetContent'));
                                
                                if(BrowserDetect.browser!="Explorer")
	                            {
                                var params=$('gadgetContent');
                                if(params.getElementsByTagName('embed')[0] )//&& params.innerHTML.indexOf('<object') != -1)
                                {
		                            params = params.getElementsByTagName('embed')[0];
		                             
		                            params.style.width = dim.width+"px";
                                    params.style.height = Math.round(dim.width * (parseInt(this.height) /parseInt(this.width)))+"px";
		                        }
		                        }
		                        this.obj.style.width = dim.width+"px";
                                this.obj.style.height = Math.round(dim.width * (parseInt(this.height) /parseInt(this.width)))+"px";
                                }
                            }
                    }
sitePump.iApiAgent = Class.create();
sitePump.iApiAgent.prototype = {
    initialize:function(){
        this.data={'v1':'v1 data','v2':'v2 data','v3':'v3 data','v4':'v4 data','v5':'v5 data','v6':'v6 data','v7':'v7 data','v8':'v8 data','v9':'v9 data','v10':'v10 data','v11':'v11 data','v12':'v12 data','v13':'v13 data','v14':'v14 data','v15':'v15 data'};
    },
    getData:function(key){
        return (typeof(this.data[key]) == 'undefined')?null:this.data[key];
    }
}


var Environment = new sitePump.Environment();

var gadget = Environment.getGadget();
sitePump.Data.Standalone = false;
var iApi=new sitePump.iApiAgent();
/* prevent memory leaks in IE */
if (navigator.appVersion.match(/\bMSIE\b/))
  Event.stopObserving(window, 'unload', Event.unloadCache, false);
