// wisiwig functions


function updateField(field, action, params) {
    //add field top params
    params[field.name] = field.value;
    var fieldEl = Ext.get(field);
    //request
     Ext.Ajax.request({
      url: action,
      success: function(res, opts) {
          if (!handleRedirectResponse(res)) {
              //update field value with result
              fieldEl.dom.value = Ext.decode(res.responseText).result;
          }
          //handle response messages
          handleMessages(res);
      },
      failure: function(res, opts) {
          handleMessages(res);
      },
      callback: function(opts, success, res) {
          if (success) {
              Ext.get(field).highlight('#F8EBF4', {
                  endColor: "#63001D",
                  duration: 1
              });
          }
      },
      params: params
    });

}

function addFavourite(userId, successCallback) {
  Ext.Ajax.request({
      url: "favourite-add.do",
      params: {'userId':userId},
      success: function(res, opts) {
          handleRedirectResponse(res);
          successCallback(res);
          handleMessages(res);
      },
      callback: function(opts, success, res) {
          handleMessages(res);
      }
  });
}

function selectImage(container) {
    //find first child image
    var i = container.child('img');
    //add '-sel' to image name
    i.dom.src = i.dom.src.replace(/(.*)\.(jpg|gif|png)$/i, "$1-sel.$2");
    //update container
    container.first().replaceWith(i);
}

function actionResponder() {
  Ext.Ajax.on('beforerequest', function(conn, opts) {Ext.get('updater').enableDisplayMode().show()}, this);
  Ext.Ajax.on('requestcomplete', function(conn, res, opts) {Ext.get('updater').enableDisplayMode().hide();}, this);
  Ext.Ajax.on('requestexception', function(conn, res, opts) {Ext.get('updater').enableDisplayMode().hide();}, this);
}


function handleRedirectResponse(transport) {
    var wisiwigUrl = getHeader(transport, 'wisiwig.url');
    if (wisiwigUrl) {
        window.location = wisiwigUrl;
        return true;
    }
    return false;
}

function addMessage(message) {
    var msges = Ext.get('actionMessages');
    if (msges) {
        msges.remove();
    }
    Ext.get('message').insertHtml('afterBegin', '<div id="actionMessages" style="display:none;"><p>' + message + "</p></div>");
    showMessages();
}

function showMessages() {
    Ext.get('actionMessages').fadeIn({duration:1.5}).pause(3).fadeOut({duration:1.5, remove:true});

}

function handleMessages(transport) {
    var hasErrors = false;
    /* reset possible errors */
    try {
        var fieldId = Ext.decode(transport.responseText).fieldId;
        if (fieldId) {
            field = Ext.get('msg'+fieldId);
            field.hide();
            field = Ext.get(fieldId);
            field.removeClass('error');
        }
    } catch(ignore){}
    var msg = getHeader(transport, "wisiwig.message");
    if (msg) {
        addMessage(msg);
    }
    err = getHeader(transport, 'wisiwig.error');
    if (err) {
        hasErrors = true;
        alert('Es ist ein Systemfehler aufgetreten. \n'+err);
    }
    fielderr = getHeader(transport, 'wisiwig.fielderror');
    if (fielderr) {
        hasErrors = true;
        Ext.each(Ext.decode(fielderr), function(err, index, allErr) {
            field = getField(err.field);
            field.addClass('error');
            field = getField('msg'+err.field);
            field.update(err.messages[0]);
            field.show();
        });
    }
    return hasErrors;
}

function getField(field) {
    var f = Ext.get(field);
    if (!f) {
        f = Ext.query("name=" + field);
    }
    return f;
}

function getHeader(transport, name) {
    var msg = transport.getResponseHeader[name];
    if (!msg) {
        msg = transport.getResponseHeader[Ext.util.Format.capitalize(name)];
    }
    return msg;
}

function calendar(field, button) {
    Calendar.setup(
    {
        inputField : field, // ID of the input field
        ifFormat : "%d.%m.%Y",
        dateFormat: "%d.%m.%Y",// the date format
        button : button // ID of the button
    }
    );
}

function inputFocus(field) {
    field.style.backgroundColor='#F8EBF4';
    field.style.color='#63001D';
}

function inputFocus(field, clear) {
  if (clear == field.value) field.value ='';
    field.style.backgroundColor='#F8EBF4';
    field.style.color='#63001D';
}

function inputBlur(field) {
    field.style.backgroundColor='#63001D';
    field.style.color='#F8EBF4';
}

function inputBlur(field, clear) {
    if (clear && !field.value) field.value = clear;
    field.style.backgroundColor='#63001D';
    field.style.color='#F8EBF4';
}

function fileUploadButton(renderTo, formId, url, params, completeFunction, buttonText) {
  if (!buttonText) buttonText = 'bild w&auml;hlen';
  var fbutton = new Ext.form.FileUploadField({
    name: 'Filedata',
    renderTo: renderTo,
    buttonOnly: true,
    buttonText: buttonText,
    listeners: {
      'fileselected': function(fb, v) {
        Ext.Msg.wait('das bild wird zum schl&ouml;ssl gesendet ...');
        Ext.Ajax.request({
          form: formId,
          url: url,
          isUpload: true,
          params: params,
          success: function(res, opts) {
            if (completeFunction) {
              completeFunction(res.responseText);
            }
            Ext.Msg.hide();
          }
        });

      }
    }
  });
  return fbutton;
}

function updateOneColumnList(server_data) {
	try {
        //change row classes
        var tab = Ext.get("ocl-table");
        tab.select('td.topbottom').each(function(s, thiz, idx) {s.removeClass('topbottom'); s.addClass('top');});
        tab.select('td.bottom').each(function(s, thiz, idx) {s.removeClass('bottom')});
        //add resulting image at the end
        var bdy = tab.select('tbody').first();
        var cls = 'bottom';
        if (!bdy) {bdy = tab; cls='topbottom';}
        bdy.insertHtml("beforeEnd", "<tr><td class='"+cls+"'>" + server_data + "</td></tr>");

    } catch (ex) { alert('ex1'+ex); this.debugMessage(ex); }
}



if (typeof Ext != 'undefined') {
    /* ext stuff */
    Ext.BLANK_IMAGE_URL = 'ext/resources/images/default/s.gif';

    Ext.MessageBox.buttonText.yes = "ja";
    Ext.MessageBox.buttonText.no = "nein";
    
    function accessDeniedMsg(elementId) {
        Ext.Msg.show({
           title: 'ups...',
           msg: 'diese aktion ist f&uuml;r reinschauer leider nicht verf&uuml;gbar.<br>' +
                'm&ouml;chtest du dich jetzt kostenlos registrieren?',
           width: 325,
           buttons: Ext.MessageBox.YESNO,
           animEl: elementId,
           fn: function(btn) {
               if (btn == 'yes') {
                   window.location = 'logout.do?success=subscription.do';
               }
           }
        });
    }

    /* Bugfix for IE6
       See http://extjs.com/forum/showthread.php?t=22037
    */
    Ext.EventManagerFix = function(){
        var docReadyEvent, docReadyProcId, docReadyState = false;
        var E = Ext.lib.Event;
        var D = Ext.lib.Dom;


        var fireDocReady = function(){
            if(!docReadyState){
                docReadyState = true;
                Ext.isReady = true;
                if(docReadyProcId){
                    clearInterval(docReadyProcId);
                }
                if(Ext.isGecko || Ext.isOpera) {
                    document.removeEventListener("DOMContentLoaded", fireDocReady, false);
                }
                if(Ext.isIE){
                    var defer = document.getElementById("ie-deferred-loader");
                    if(defer){
                        defer.onreadystatechange = null;
                        defer.parentNode.removeChild(defer);
                    }
                }
                if(docReadyEvent){
                    docReadyEvent.fire();
                    docReadyEvent.clearListeners();
                }
            }
        };

        var initDocReady = function(){
            docReadyEvent = new Ext.util.Event();
            if(Ext.isGecko || Ext.isOpera) {
                document.addEventListener("DOMContentLoaded", fireDocReady, false);
            }else if(Ext.isIE){
                document.write("<s"+'cript id="ie-deferred-loader" defer="defer" src="/'+'/:"></s'+"cript>");
                var defer = document.getElementById("ie-deferred-loader");
                var f = function() {
                    if(defer.readyState == "complete"){
                        fireDocReady();
                    }
                }
                defer.onreadystatechange = function(){
                    f.defer(1000);
                };
            }else if(Ext.isSafari){
                docReadyProcId = setInterval(function(){
                    var rs = document.readyState;
                    if(rs == "complete") {
                        fireDocReady();
                     }
                }, 10);
            }
            // no matter what, make sure it fires on load
            E.on(window, "load", fireDocReady);
        };


        var pub = {
            onDocumentReady : function(fn, scope, options){
                if(docReadyState){ // if it already fired
                    docReadyEvent.addListener(fn, scope, options);
                    docReadyEvent.fire();
                    docReadyEvent.clearListeners();
                    return;
                }
                if(!docReadyEvent){
                    initDocReady();
                }
                docReadyEvent.addListener(fn, scope, options);
            }
        };
        return pub;
    }();


    Ext.onReady = Ext.EventManagerFix.onDocumentReady;
}

