 var ua=navigator.userAgent.toLowerCase(),
		is=function(t){ return ua.indexOf(t) != -1; },
		h=document.getElementsByTagName('html')[0],
		b=(!(/opera|webtv/i.test(ua))&&/msie (\d)/.test(ua))?('ie ie'+RegExp.$1):is('gecko/')? 'gecko':is('opera/9')?'opera opera9':/opera (\d)/.test(ua)?'opera opera'+RegExp.$1:is('konqueror')?'konqueror':is('applewebkit/')?'webkit safari':is('mozilla/')?'gecko':'',
		os=(is('x11')||is('linux'))?' linux':is('mac')?' mac':is('win')?' win':'';
	var c=b+os+' js';
	h.className += h.className?' '+c:c;
	
function submitOnReturn(evt) {
	var evt  = (evt) ? evt : ((event) ? event : null);
	var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
	if ((evt.keyCode == 13) && (node.type=="text")) { $('submit').click(); return false;}	
}
function checkUncheckAll(theElement) {
  var theForm = theElement.form, z = 0;
  for(z=0; z<theForm.length;z++) {
    if(theForm[z].type == 'checkbox' && theForm[z].name != 'checkall') {
      theForm[z].checked = theElement.checked;
    }
  }
}
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

function ons_bind(obj, method) {
   var args = [];
   for(var ii = 2; ii < arguments.length; ii++) {
      args.push(arguments[ii]);
      }
   return function() {
      var _obj = obj || this;
      var _args = args.slice();
      for(var jj = 0; jj < arguments.length; jj++) {
         _args.push(arguments[jj]);
         }
      if(typeof(method) == "string") {
         if(_obj[method]) {
            return _obj[method].apply(_obj, _args);
            }
         }
      else {
         return method.apply(_obj, _args);
         }
      }
   }
Function.prototype.ons_bind = function(context) {
   var argv = [arguments[0], this];
   var argc = arguments.length;
   for(var ii = 1; ii < argc; ii++) {
      argv.push(arguments[ii]);
      }
   return ons_bind.apply(null, argv);
   }
function dd_menu(arrow, link, menu, event, arrow_class, arrow_old_class, on_click_callback, off_click_callback) {
   if(menu.style.display == 'none') {
      menu.style.display = 'block';
      var old_arrow_classname = arrow_old_class ? arrow_old_class : arrow.className;
      if(link) {
         link.className = 'active';
         }
      arrow.className = arrow_class ? arrow_class : 'sugar_menu_arrow_active';
      var justChanged = true;
      var shim = get_element(menu.id + '_iframe');
      if(shim) {
         shim.style.top = menu.style.top;
         shim.style.right = menu.style.right;
         shim.style.display = 'block';
         shim.style.width = (menu.offsetWidth + 2) + 'px';
         shim.style.height = (menu.offsetHeight + 2) + 'px';
         }
      menu.offclick = function(e) {
         if(!justChanged) {
            ons_hide(this);
            if(link) {
               link.className = '';
               }
            arrow.className = old_arrow_classname;
            var shim = get_element(menu.id + '_iframe');
            if(shim) {
               shim.style.display = 'none';
               shim.style.width = menu.offsetWidth + 'px';
               shim.style.height = menu.offsetHeight + 'px';
               }
            if(off_click_callback) {
               off_click_callback(e);
               }
            removeEventBase(document, 'click', this.offclick, menu.id);
            }
         else {
            justChanged = false;
            }
         }.ons_bind(menu);
      if(on_click_callback) {
         on_click_callback();
         }
      addEventBase(document, 'click', menu.offclick, menu.id);
      }
   return false;
   }
function get_element(id) {
   if(typeof(id) == 'undefined') {
      Util.error('Tried to get an undefined element!');
      return null;
      }
   var obj;
   if(typeof(id) == 'string') {
      obj = document.getElementById(id);
      if(!(spi_ua.ie() >= 7)) {
         return obj;
         }
      if(!obj) {
         return null;
         }
      else if(typeof(obj.id) == 'string' && obj.id == id) {
         return obj;
         }
      else {
         var candidates = document.getElementsByName(id);
         if(!candidates ||!candidates.length) {
            return null;
            }
         var maybe = [];
         for(var ii = 0; ii < candidates.length; ii++) {
            var c = candidates[ii];
            if(!c.id && id) {
               continue;
               }
            if(typeof(c.id) == 'string' && c.id != id) {
               continue;
               }
            maybe.push(candidates[ii]);
            }
         if(maybe.length != 1) {
            return null;
            }
         return maybe[0];
         }
      }
   else {
      return id;
      }
   return null;
   }
function addEventBase(obj, type, fn, name_hash) {
   if(obj.addEventListener)obj.addEventListener(type, fn, false);
   else if(obj.attachEvent) {
      obj["e" + type + fn + name_hash] = fn;
      obj[type + fn + name_hash] = function() {
         obj["e" + type + fn + name_hash](window.event);
         }
      obj.attachEvent("on" + type, obj[type + fn + name_hash]);
      }
   }
function ons_hide() {
   for(var i = 0; i < arguments.length; i++) {
      var element = get_element(arguments[i]);
      if(element && element.style)element.style.display = 'none';
      }
   return false;
   }
function removeEventBase(obj, type, fn, name_hash) {
   if(obj.removeEventListener)obj.removeEventListener(type, fn, false);
   else if(obj.detachEvent) {
      obj.detachEvent("on" + type, obj[type + fn + name_hash]);
      obj[type + fn + name_hash] = null;
      obj["e" + type + fn + name_hash] = null;
      }
   }
var spi_ua={ie:function(){return this._ie;},firefox:function(){return this._firefox;},opera:function(){return this._opera;},safari:function(){return this._safari;},windows:function(){return this._windows;},osx:function(){return this._osx;},populate:function(){var agent=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso).(\d+\.\d+))|(?:Opera.(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))/.exec(navigator.userAgent);var os=/(Mac OS X;)|(Windows;)/.exec(navigator.userAgent);if(agent){spi_ua._ie=agent[1]?parseFloat(agent[1]):NaN;spi_ua._firefox=agent[2]?parseFloat(agent[2]):NaN;spi_ua._opera=agent[3]?parseFloat(agent[3]):NaN;spi_ua._safari=agent[4]?parseFloat(agent[4]):NaN;}else{spi_ua._ie=spi_ua._firefox=spi_ua._opera=spi_ua._safari=NaN;}}}

function onsugarAjax(url, ajaxFunction, params) {
    var xmlHttpReq;
    
    // IE
    if (window.ActiveXObject) {
        xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");    
    }
    // Mozilla/Safari
    else {
        xmlHttpReq = new XMLHttpRequest();
        xmlHttpReq.overrideMimeType('text/xml');
    }

    xmlHttpReq.open('POST', url, true);
    xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xmlHttpReq.onreadystatechange = function() {
        if (xmlHttpReq.readyState == 4) {
            ajaxFunction.call(null, xmlHttpReq.responseText);      
        }
    }
    xmlHttpReq.send(params);
}

//The expected return from the PHP is a JSON object with two fields - a "container" to place the output into, and the "output" HTML blob.
function triggerAjaxReplace(url, container) {
    var params = 'container='+container;
    onsugarAjax(url, function(response) {
        var containerEl = document.getElementById(container);
        if(containerEl) {
            containerEl.innerHTML = response;
        }
    }, params);
}

function onsugarInitSlideKeys() {
    var event = 'keydown';
    var handler = onsugarSlideHandleKeyPress;
    if (document.addEventListener) {
        document.addEventListener(event, handler, false);
    } else {
        document.attachEvent('on' + event, handler);
        // Internet Explorer needs to remove event handlers on page unload
        // in order to avoid memory leaks.
        if (window.attachEvent) {
            window.attachEvent("onunload", function() {
                document.detachEvent('on' + event, handler);            
            });
        }
    }
}

function onsugarSlideHandleKeyPress(e) {
    var target;
	if (!e) {
	    var e = window.event;
	}
	if (e.target) {
	    target = e.target;
	}
	else if (e.srcElement) {
	    target = e.srcElement;
	}
	if (target.nodeType == 3) { // defeat Safari bug
		target = target.parentNode;
    }
    if(!(target.tagName == 'INPUT' || target.tagName == 'TEXTAREA')) {
        KEY_RIGHT = 39;
        KEY_LEFT = 37;
        var slide_next = document.getElementById('slide_next');
        var slide_previous = document.getElementById('slide_previous');
    
        var key = e.which || e.keyCode;
        switch (key) {
            case KEY_RIGHT:
                 if(slide_next) {
                     window.location = slide_next.href;
                 }
                 break;
            case KEY_LEFT:
                 if(slide_previous) {
                     window.location = slide_previous.href;
                 }
                 break;
        }
    }
}

function onsugarAddImage(textareaId) {
    var editor = document.getElementById('image_assist_link');
    if (editor) {
        document.mediaAssistTextAreaId = textareaId;
        $(editor).fire('modal:overlay');
    }
}

function onsugarTextEditorInsertHtml(html) {
    if (tinyMCE.activeEditor && tinyMCE.activeEditor.selection) {
        tinyMCE.activeEditor.selection.moveToBookmark(tinyMCE.activeEditor.windowManager.bookmark);
        tinyMCE.execCommand('mceInsertContent', false, html);
    }
    else if (document.mediaAssistTextAreaId) {
        var textarea = document.getElementById(document.mediaAssistTextAreaId);
        doInsertToEditor(html, document, textarea, false);
    }
}

function getFormAuth(type, jsonValues) {    
    var params = 'values='+encodeURIComponent(jsonValues);    
    onsugarAjax('/form/auth', function(response) {
        var form = document.getElementById(type);
        form['edit-auth_key_h'].value = response;
    }, params);
}

function ajaxSubmit(form) {    
    var params = new Array();
    for(var i=0; i<form.elements.length; i++) {
         if (form.elements[i].tagName == "INPUT") {
            if (form.elements[i].type == "checkbox") {
               if (form.elements[i].checked) {
                  params.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
               }
               else {
                  params.push(form.elements[i].name + "=");
               }
            }
            else if (form.elements[i].type == "radio") {
               if (form.elements[i].checked) {
                  params.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
               }
            }
            else {
               params.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
            }
         }
         else if (form.elements[i].tagName == "SELECT") {
            var sel = form.elements[i];
            params.push(sel.name + "=" + encodeURIComponent(sel.options[sel.selectedIndex].value));
         }
         else if (form.elements[i].tagName == "TEXTAREA") {
            params.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
         }
    }

    params = params.join("&");

    onsugarAjax(form.action, function(response) {
        var msgs = eval( "(" + response + ")" );
        
        var formParent = form.parentNode;
        if(formParent.className != 'form_container') {
            var formContainer = document.createElement('div');
            formContainer.className='form_container';
            formParent.insertBefore(formContainer, form);
            formContainer.appendChild(form);
        }
        //remove the status message from the form.  
        //This is a bit hackish, but as of now we have two different templates for status messages and they don't share any consistent property except the classname having "message".
        for(var i=0; i<formContainer.children.length; i++) {
            if(formContainer.children[i].className.match(/message/)) {
                formContainer.removeChild(formContainer.children[i]);
            }
        }
                
        for(var key in msgs) {
            if(key.indexOf('#')!==0) {
                var el = document.getElementById('edit-'+key);
                if(el) {
                    el.className += ' error';
                }
            }
        }
        var status = msgs['#status_message'] ? msgs['#status_message'] : ''; 
        var innerHTML = (msgs['#submit_ok'] && msgs['#html']) ? msgs['#html'] : formContainer.innerHTML;        
        formContainer.innerHTML = status + innerHTML;
    }, params);
}